Skip to content

Week 20 / 2026 — the Explorer learns to write back

11 May – 17 May 2026 · 315 commits · 0.50.3 → 0.50.11

For a year the Explorer has been a reading instrument: it shows you the analysis, drills you down to the row, and stops. This was the week it became bidirectional. Two arcs ran the full length of the week and met in the middle. The Atelier (Sense 29) turned the browser into the place you author the entire analytical stack — Subject Matter, signals, theses, verdicts, dossiers, perspectives — where every save is a git commit. The Bell (Sense 33) turned the pipeline’s thousand silent noticings into something a person actually hears — an Inbox, a header bell, per-page banners, a CLI, durable across the AFS↔KLS round-trip. Authoring on one side, noticing on the other; the system stopped being a mirror and became a workbench.

Three hundred and fifteen commits. The week the product learned to take dictation and to raise its hand.

The Atelier — author the whole stack from the browser

Section titled “The Atelier — author the whole stack from the browser”

Built in disciplined daily phases, Monday to Sunday, one analytical tier at a time. The throughline: save = git commit, with live validation before you can.

  • e923f5ec“Atelier Phase 1 day 3 — save = git commit”
  • 38b00b7f“Phase 1 day 4 — new SMEbit wizard”
  • ea2f59676e121fef“Phase 2 — Signals: list, edit-with-live-validation, save=commit, wizard, polish”
  • f2a0db87527ff5f2“Phase 3 — Theses, ending in the new-thesis wizard”
  • 639758b8“Phase 4 — Verdicts authoring end-to-end”
  • 3400096e“Phase 5 — Dossiers authoring end-to-end”
  • f397071d“Phase 6 — Perspectives authoring (final analyst tier)”

By the weekend the Atelier had grown the connective tissue that makes a multi-artifact editor trustworthy: b8c743b4 cross-tier datalists with jump links, d514e87b a “Used by” reverse-reference panel on every editor, and c3c89d0c live cross-ref validation that warns the moment a referenced id doesn’t exist. The Signal Builder and the Atelier — two surfaces that had grown up separately — were cross-linked then unified into one writer (352436e4, f3530a54). A long tail of honest UX fixes followed: Cancel buttons that actually cancel, locale tabs that follow the tenant’s declared locales, and a real explainer when you’re on a read-only cloud host instead of a silent failure.

Sense 33 went from design to a shipped, durable feature in a week.

  • 6ca36068“Phase 3c — pass-aware Inbox + anchor handoff”
  • fe7cbebe“Phase 4 — Explorer header bell”
  • e0a9efc8“Phase 5 — Atelier projection”
  • 5804f6b8“Phase 7 — CLI / jin bell
  • 9ab635cb“formal ID stability contract via shared stable_id helper”
  • b821d788“split SIS into durable bell_resolutions + operational bell_snoozes”
  • 881fefd6“Phase 1d publisher + AFS→KLS hydration (round-trip durability)”
  • 420b0527“jin bell flush — close the Bell durability round-trip”

Comment threads, suggested-action CTAs, per-page banners, and full config-engine configurability (no hardcodes) landed alongside. The hard part was never the bell icon — it was making a ring survive: a stable id that doesn’t churn between builds, a resolution that persists through the AFS→KLS bake, a clean split between what’s durable (resolutions) and what’s operational (snoozes). By Sunday the loop was closed end-to-end.

Sense 25 (The Pass) advanced several phases — Phase 1d/1e hydration and type-widening with full i18n and a /passes browser (4a515aec), then Phase 2 server-side enforcement that reads the KLS bake (c763a4e1), plus the Principals Registry foundation (6619b9c2) with a format-preserving migrate_principals.py --apply (89a5efe2) and compilers that resolve principal_id → display_name (82626b97).

The directional senses kept filling in: Sense 31 (The Inlet) went strict — the engine now consumes source/<channel>/<ts>/<file>/ end-to-end (505f0218) — with jin channels (07f3020a) and a jin regen that invokes a channel’s script (0e2abd46). Sense 35 (The Drift) got its implementation — a DbWatcher that reacts to per-tenant drift (bd9ce3af). Sense 36 (The Lineage) landed Phase 1, the tenant birth certificate (e1676232), and Phase 2a, jinflow afs lineage ancestry (27bc57c0).

The CLI starts documenting itself — and learns Italian

Section titled “The CLI starts documenting itself — and learns Italian”

Two engine-wide moves closed the week. Italian became a first-class content locale: registries now emit the it column (12a9ab0c), the registry locale set was centralized so a new language is a one-constant change (efad8a08), and the query layer was made schema-resilient so older de/en/fr-only KLSes don’t break (1f12145e).

And the CLI became self-describing. build_parser() was extracted from main() (6b52151b), then jinflow clidocs walked that very tree (f20d027d) to feed a CLI tab in the What’s This? page (f5a959d4) and a generated Command Index spliced into cli.md with the prose kept (080f8d7c) — the docs can no longer drift from the binary, and release.sh regenerates the artifact on every bump. Perspectives finally got their own home and Signals stopped pretending to be them (085153dd), the Domain tab became a real pack-named briefing (e5a68ca8), and a quietly nasty regression — every release note vanishing from the What’s This page because the parser skipped ### sections after the “For users” flatten — was traced and fixed (c03e2e65).

Two big days bracketed it — 88 commits on Monday, 55 on Sunday — with a steady 30–40 in between. The prefix histogram tells the story plainly: 118 feat: against 59 fix:. This was a building week, not a patching one. The Explorer used to answer questions. After Week 20 it also takes the questions down, files them, and tells you which ones are still waiting for you.

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