Skip to content

Week 30 / 2026

20 – 26 Jul 2026 · 316 commits · release cut

Prefix histogram — 115 feat: · 36 fix: · 66 docs: · 5 refactor: · 30 chore: · 5 test: · 59 note:.

Last week a person got the hands to operate the system. This week the system turned to face the stranger — and, in the same breath, dug its foundations deeper so it could stand always-on behind that face. If W29’s word was selection, W30’s is the house: a front of house went up — a public wall of showcases, a guide who walks you through them, an honesty check so the guide can never lie — and underneath it a foundation was poured, an operational store that remembers what a living tenant does between builds. Three new tenants stepped onto a public gallery, each with a tour grounded in its own real findings; a build learned the grammar of its own generations; and the way data enters the system grew a row of gates that verify rather than trust. The team even gave itself faster mail. A lot of house got built.


The platform learned to receive a guest. The Gallery (Phases 1–4) is an autonomous showcase wall — a bundled definition, published to R2 with jin gallery publish, R2-first on read, refreshing live the moment it’s published, with badges and link-less “coming soon” entries for tenants not yet ready. Onto that wall stepped three tenants, each earning its card: aeros.aether (air-quality over the North China Plain), gridland.sollun (the European electricity grid), and millesime.domaine_zufferey (a Valais wine estate) — each with a welcome card, a wordmark, and a one-line claim that says what it is before a table loads.

Behind the wall, The Beacon made publishing honest by construction: Phase A turned the two showcase-publish traps into loud fallbacks instead of silent blanks; Phase B let a KLS self-declare that it’s a showcase, so the cloud auto-discovers it rather than waiting to be told. A showcase can no longer half-appear.

A tour is now a declared artifact: Sense 64, The Docent. It ships in layers. Phase 1 declares and compiles a tour (tour/*.yaml → registry + stops) and renders it as a readable /tour path. Phase 2 is the guided overlay proper — a self-contained rail that navigates the Explorer for you, stop by stop, narrating in place, URL-stable so a visitor can leave mid-tour and keep exploring from exactly where they stood. A launcher sits on the welcome splash; tours ride the pack→tenant copy paths so a pack seeds a starter and a tenant owns its own.

Two ideas gave the Docent depth. Selection stops (specced with the bus’s owner — the selection carries no origin, s7↔s5) let a stop arrive with the evidence already lit: the tour doesn’t only walk you to the parcels, it lands with the heritage vines already selected. And The Warrant — the week’s quietly favourite idea — makes a tour self-verifying: a stop carries a checkable expect claim, and jin make verifies it against the live KLS, flagging any stop whose story the data has moved past. P1 landed engine and UI: a post-dbt bake writes stop-health, a loud build warning fires on drift, and /tour shows a quiet curator marker. A showcase can narrate live data without silently rotting into a confident lie.

The biggest back-of-house arc: Sense 61, The Reservoir — an operational store (the OPS) that stands beside the AFS and the KLS. Its shape got settled and then poured. The engine was ratified as SQLite (WAL) for rows + JSONL for ledgers, no DuckDB; the OPS is created at init; a merge principle and a distributed section were specced (ship overwrites the KLS, merges the OPS). Then the citizens moved in, one clean cut at a time: notes (with a read-fall-back safety net to the frozen SIS, made multi-tenant-safe), the roster (the identity tree now bakes to the OPS not the KLS; principals read the OPS; Clerk records reconcile into OPS assignments; invite/revoke write through), bookmarks (the sixth citizen, via whatsNew), and the desk. A Private OPS — a per-user, Clerk-bound store for private notes — grew its own substrate and read-overlay. And Strata Part 7 opened the fourth-stratum question (Delivered data), from Mig. The system is learning to remember what happens between builds, not just what a build produced.

The Courses — the build learns its own generations

Section titled “The Courses — the build learns its own generations”

The generational model got its ontology and its name: The Courses (renamed from The Generation) — generation · course · variation · phase — with a boundary criterion (incrementality; O(0); two nested loops) and the signal contract reframed as a build seam. And the way data enters grew a row of ingestion gates, each verifying rather than trusting: streamcheck (the 4a storage-floor legality gate), streamconform (4b value-conformance byte-check, reading generational deliveries), streamreconcile (4c-i passthrough reconciliation — verified, not trusted), streamlineage (4c-iii the honest-limit lineage audit), and streamscaffold (proposes gate blocks from Gold types). Two of them are already wired into make as ramp gates. A pipelinecheck with a LinkML-lite schema grammar landed for Course 0.

The Typology’s Phase 4 — verification, not trust

Section titled “The Typology’s Phase 4 — verification, not trust”

The Typology closed a long arc: Phase 4, the two gates and their reconciliation, turned the type system from a drift-guard into a bug-finder. Source-cite grammar arrived (derived_from cites source_system / op / agg), aggregation legality made rollup load-bearing, recode legality requires a cited mapping, and a Bronze-SQL scaffolder proposes source-cites via sqlglot. The Column Passport — per-column semantics at the point of use — got specced and then wired everywhere: the Spend Studio and Price Lab drilldowns and lists now render through one DataTable that carries typed passports, colour rules, and cell extras. The words got passports; now the columns wear them in the UI.

The map gained expressive range. The Magnitude — data-driven marker size and line width. The Label — HTML text labels on point layers and at edge midpoints. The Clock — time as a Selection dimension, scrubbing a map’s severity by period. The Selector — a per-pollutant paint switch (?pollutant) that made the aether air-quality map legible. And cited popups attach the active signal’s actual reading to a map point, so a dot can say why it’s the colour it is. Endpoint-geometry edges now render and colour by signal severity.

Two quality-of-life arcs. Mouse-Free — operating the whole Explorer by keyboard — shipped Phases 1–4 with a user-facing Keyboard guide, sticky mode chosen, later phases (scatter brush, touch idioms, leader-as-a-system) specced or deferred. And the team gave itself a faster nervous system: the salon — per-sister mailbox comms (just mail / just salon), so a letter no longer waits a full code-sync cycle to be read. We started using it the day it landed.

The standards registry grew beyond hospitals: EIC (Energy Identification Code) for the grid, and WHO AQG 2021 + China GB 3095-2012 for air quality — the standards sollun and aether cite. EIC was reclassified de_facto → trade_body and the Codex regenerated. The typed contract now spans three very different worlds.

A dense week of fixes, several load-bearing. The make self-heal closed the tour-bake trap — an incremental build now rebuilds an analytics tag whose table never materialised, instead of skipping it forever. Box charts that rendered empty (array data points corrupted on a config clone) were fixed with a regression guard; ‘Fit all’ now frames the whole map; watershed legend clicks zoom again. The gallery stopped 500-ing the landing page (an __dirname-in-ESM bug) and its publish-refresh now authenticates. jin ship learned to re-invoke make correctly under the frozen bundle. Thesis finding_count became a distinct entity count, not count(*). Map markers now resolve their id from the declared business_id rather than a guess-list. And the public-docs scrub began — Sense 62 unpublished, Riverkin removed from Sense 52 — the first pass at keeping real organisations off the public surface.

Two movements, one week. Outward: a front of house — a wall to stand on (The Gallery), a guide to walk you through it (The Docent), an honesty check so the guide stays true (The Warrant), and loud beacons so nothing publishes half-formed. Downward: a foundation — an operational store that remembers a living tenant (The Reservoir), a build that knows its own generations (The Courses), and an ingestion path that verifies every byte it lets in (the gates). The same instinct runs through both faces: be honest with whoever is on the other side — the visitor at the front door, and the operator who has to trust what the store remembers.

Last week description became operation. This week operation opened a door — and poured the floor to stand always-on behind it.

Next week: finish the public-docs scrub and give the docs a front door of their own; carry the Reservoir’s remaining citizens across; and let the Docent’s selection stops and Warrant meet a real showcase make, so the tours light their evidence and check their own truth in production.

A selection of the week’s commits, for the record:

  • 08125687 — how the OPS works in the cloud (the roster’s cloud story)
  • 45d93c33 — jin topo —dynamic — staleness overlay from the course_lineage OPS citizen
  • 9bdca058 — roster write-through — invite/revoke write OPS assignments (Wave 2 slice 4)
  • 6bec3e4c — The Warrant P1 UI — /tour shows each stop’s staleness marker
  • dd4d95af — The Membrane — AFS-in-cloud read+write channel + Courses→git axis mapping
  • 8e8f398f — pin the hash slicing in the make-write spec (A takes output_kls_hash only)
  • e31e19f8 — The Warrant P1 engine — tours verify their claims against the KLS
  • 9e874575 — roster read cutover — principals.ts reads the OPS (Wave 2 slice 3)
  • 0c5a5994 — bucket-sync — run_registry OPS citizen + write_terminal_run, with the (gen, course, variation) coordinate
  • be3454f6 — spec the reservoir make-write pass (build-finish OPS appends)
  • 3e1b2863 — bake the identity tree into the OPS during make (Wave 2 slice 3 prereq)
  • 0955677c — assign jin roster to a clidocs section
jazzisnow jinflow is a jazzisnow product
v0.64.7 · built 2026-09-20 19:48 UTC