Skip to content

Week 17 / 2026 — Search grammar v3, Sense 20, the extraction discipline

20 April – 26 April 2026 · 70 commits · 0.45.2 → 0.46.2

Seventy commits is the smallest week count of any in this report. It’s also the week that produced three of the most-quoted architectural choices in the project. Search grammar v3 landed clean, retired the == operator, gained smart date tokens (last-week-N, MTD, YTD, WTD, tomorrow, ranges with open ends). Sense 20 — The Seam got designed and partially implemented as the pre-make vocabulary retired and jin extract got renamed to jin inspect. Three Generations (gen00_raw → gen01_canonical → gen02_enriched) replaced the older raw/build/source nomenclature. And the monolith drain kept going — SIS publish, extraction write path, KLS baking, step runner, all extracted into focused modules.

Quality over quantity, the engineer’s version.

The grammar that was v2 in W15 became v3 this week, with the deliberate decision to drop backwards compatibility and reshape the surface.

  • ef417902“search grammar v3 — word-start default, drop ==, configurable separators”
  • f5ff171b“rewrite search-grammar docs for v3, drop all backwards-compat framing”
  • 1fe5e5d8“price lab reuses the shared search grammar, mini-parser gone”

The new defaults: bare word means word-start match. = means exact. ~ means regex/contains. Six progressive levels, no operator overlap. Documentation rewritten without any “if you used the old syntax…” framing — the design ships as if v3 had been there from the start.

Then came the date tokens, in five careful additions:

  • 6553e00d“full week/month/year smart date tokens — last-, this-, next-”
  • 4062845e — smart date tokens compose inside range literals
  • 07b6afdd“open ranges — X.. and ..Y for unbounded comparisons”
  • 241e96ed“tomorrow + next-Nd smart date tokens”
  • 8a450bdd“stepped period offsets — last-week-N, last-month-N, last-year-N
  • bb5a11fd“ranges are order-agnostic — 500..100 now means the same as 100..500”
  • 183ecb3f“period..day ranges truncate (MTD/YTD/WTD), reversed still unions”

Plus a UX move worth naming: 11433d45“commit search on enter/blur, no more mid-typing character loss.” Search inputs stopped fighting with their own debounce.

Sunday: the week opens with the conviction that pre-make and make had been the wrong words.

  • faf8470e“retire pre-make; rename jin extract → jin inspect (read-only)”
  • 13740fe2 — sweep remaining Pre-Make/Make entries in cheatsheet
  • bc6f3543“rename pipeline extract: slot → canonicalise:”

jin inspect is read-only — it inspects the declared contract and verifies SHA-256 hashes without running extraction. Extraction happens inside jin make as Phase 0. The new vocabulary names what each command does, not what phase it belongs to.

By midweek, the Three Generations model arrived:

  • e405b281“gen00/gen01/gen02 naming + relaxed member filename”
  • ecb408a8“authoritative reference for DLZ layout + three generations”
  • b2197060“Stage 2 extraction schema + Three Generations on the site”

gen00_raw (what the source system delivers) → gen01_canonical (zero-transform shape) → gen02_enriched (Bronze inputs). Each generation is a folder with dated members. Each generation is one extractor’s responsibility. This is the moment extractor discipline stops being a paper and becomes file system convention.

A few hours later: 45356294“zero-transform extractor walks folder members per entry.” The discipline got teeth.

8981c449“Sense 20” — finalizes the paper.

  • Prices as observations, not intervals (b22ea278) — Stage 3 design paper. The temporal-pricing model changes vocabulary: a price is a point with a date, not an interval with a from/to. Compaction is a downstream concern, not a source-shape concern.
  • Pricing conceptual model (a8e17cd3) — “the conceptual model — nouns, relations, test questions.” The Sense-style design treatment for what until now was just price code.
  • Identity §12 — Artifact Ownership and Assignment (956a7584) — extends the W15 identity paper with the data-rich ownership model.

The Atelier section grows on the design board

Section titled “The Atelier section grows on the design board”

The monolith drain accelerates with surgical commits:

  • cf488697 — extract SIS-publish helpers → commands/sis_publish.py
  • 71da0732 — extraction write path → commands/extraction.py
  • 4add4655 — step runner + CLI output → commands/steps.py
  • ebc6167f — KLS baking → commands/baking.py

The pattern is the same as W16 Phase 5: extract one concern, leave a re-export shim, verify tests. By Sunday, the monolith was approaching ~1,000 LOC — about 92% drained from 12,062.

Sunday: 8fe7f7bb“/actions page — cross-note action board (Stage A).” A new top-level Explorer surface that aggregates every action declared in every note across the tenant. 1d1d88ac“inline status edit on action cells (notebook viewer + /actions).” 371d734a“action cells — inline result editing, decoupled from status.”

What’s load-bearing: actions stop being a notebook concept and become a tenant-wide concept. The note declares them; the Explorer aggregates them; the operator marks them done. The composition is closer to “task tracker built from notes” than “notes that happen to have tasks.”

2552a07b“signal significance — metadata-driven thresholds and rounding.” This closed a long-running irritation: a single signal’s float-sum results would vary by ~200 rows between builds because DuckDB’s parallel sort+sum was non-deterministic at scale. The fix: signals declare their own significance (decimal places + rounding rule) in YAML. The compiler emits SQL that rounds at the source. Inter-rebuild drift cut to ~1 row.

A small move with outsize peace-of-mind effect.

cb189c80“perf: Studio caches tabs, keeps chart mounted, drops the flash to blank.” Studio panels stopped flashing white between tab switches. The Lab and the Salon learned the same trick the next day.

Scrubbing customer specifics from public materials

Section titled “Scrubbing customer specifics from public materials”

Three commits worth naming, all on Sunday: 3599dec2, 6097f669, and 4c7582a5. The hospital customer whose data shaped the nuMetrix pack gets gracefully removed from public-facing materials — canonical layout examples, the docs site, the presentations index. The pack stays. The reference tenant pattern stays. The customer’s name doesn’t.

  • jin inspect renders source.type (d6774190) — allowlist of 7 source types
  • jin inspect treats source.path as a folder of dated members (5d187ba2)
  • Stage 3 reserves supplier_id / currency / unit_of_measure (cc956267)
  • jin make validator on Gen 01 (17aac9a6) — extractor checks output presence before skipping
  • Append build logbook on every jin make (d9c241ac) — not just when tree changes
  • DataWindow extraction (815304fd) — shared slider+sort+fit cluster for Lab and Salon
  • Combobox primitive (f53cda73) — width-capped selects with full-text tooltips
  • Explorer release notes — version cards + category chips (613a23e0)
  • Tenant seeds land in Gen 02 (6f0337ca) when generational flow is active
  • Open-with-current-filter handoffs use v3 grammar (2a0733ed) — = not ==
  • Recents Timeline merge by id end-to-end (a70a71e4) — every visit shown
  • Windows Ctrl+C (b07efec8) stops Node promptly
  • Treat missing DLZ csv/ folder as sync skip (f4b68f54) — not a build failure
  • 70 commits, 7 days. Lowest commit count since W09.
  • 1 search grammar v3 (with 5 date-token additions + 3 range improvements)
  • 1 paradigm vocabulary retired (Pre-Make → Phase 0 inside make)
  • 3 generations of source data formally named (gen00_raw / gen01_canonical / gen02_enriched)
  • 4 monolith-drain extractions, ~92% of cli/init.py drained
  • 3 new concept papers (Sense 20, Prices-as-observations, Identity §12)
  • 1 cross-note action board
  • 1 customer name scrub from public surfaces
  • Release line: 0.45.2 → 0.46.2

The Sense 20 vocabulary (extraction, canonicalization, enrichment, pre-make retired) cleared the way for the pipeline.yml as the trust boundary contract that W18 would formalize. The search grammar v3 was the version that survived intact into May. The Three Generations file system convention made pluggable extractors (Sense 26 of W19) viable — each source system becomes a script that produces a gen01_canonical artifact.

Seventy commits, three big ideas implemented, and a customer scrub. Quality, not volume. The week that the project’s pace stopped being a metric of work and started being a metric of restraint.

jazzisnow jinflow is a jazzisnow product
v0.64.7 · built 2026-09-20 19:48 UTC