Zum Inhalt springen

Week 29 / 2026

Dieser Inhalt ist noch nicht in deiner Sprache verfügbar.

13 – 19 Jul 2026 · 475 commits · release cut

Prefix histogram — 156 feat: · 70 fix: · 156 docs: · 11 refactor: · 32 chore: · 10 test: · 40 note:.

Last week the system learned to describe itself. This week it learned to be operated — and to connect what the operator was looking at. If W28’s word was truth, W29’s is selection: the small act of pointing at something. Because once you can point at a thing, everything downstream gets to ask “the thing you pointed at?” and answer in kind. A brush made on a map now ripples to a chart, to a table, to another browser window, to another machine. Around that one verb, a whole surface grew hands: rooms to work in, a keyboard plane to move by, a cockpit to stand in, an AI to talk to, and a command line’s children living in the sidebar. The floor poured last week got built on — hard.


The EDA thread was the spine of the week, and it grew from a single conviction: a selection is a filter, and a filter is data. The DataDesk vocabulary landed first — Brush (the gesture), Selection (the result), Selector (a saved, reapplicable one) — so the whole area could be discussed in one language before a line of it was built.

Then it was built, piece by piece, each piece proving the last. The first brush: click a site on the map, the chart follows. The reverse brush: the map reflects the selection back. A property toggle on the brushed chart. An area brush drawn straight onto the URL layer, so a selection is shareable and refresh-survivable by construction. Grammar predicates that compose with the area brush (Selection P2), so “these sites AND turbidity

5” is one cohort. The Selector (P3a) — save a named filter, reapply it later, SIS-backed so it persists. And selection algebra (Operations #2): a cohort is sculpted — added to, subtracted from, intersected — not just replaced. Pointing became a language.

The engine underneath is the part to carry forward: the selection bus (Scope P4b-B) — a live, ambient channel that panels publish to and subscribe from with no reload. Scope P4b then walked the whole family across it: panels scoped via the entity graph with no bridge SQL (A), datastream charts on the bus (C), a multi-series overlay where a chart itself becomes the selection (D). By week’s end a selection made anywhere was heard everywhere on the page, ambiently. The selection summary card turned a brush into evidence — “here is what you have pointed at, and here is the Clear button to let it go” — reset from exactly where you look.

The lesson, stated plainly: model the pointing, not the panels. Every panel became a citizen of one bus instead of a bespoke wire to every other; the wiring stopped being N², and new panels joined for free.


The Satellites — the selection leaves the page, then the machine

Section titled “The Satellites — the selection leaves the page, then the machine”

If the bus carried a selection across a page, Sense 63 — The Satellites (promoted from “The Link,” named by Mig) carried it across windows and then across machines. It shipped in four honest levels.

L1 — the Link: two browser windows share a brush over a BroadcastChannel. L2 — the Satellite: a page channel plus detachable Satellite windows; any panel can be popped out as its own linked window (per-panel detach). A Satellite has no sidebar — it is a view, not a console — and asks for its topline only on demand; chrome is not authority. L3 — the SatelliteChannel: the server leg, so the constellation crosses machines, not just tabs — with Mig’s identity rule holding the seam, and a jin satellite CLI verb (The Launch) so joining is self-service. L4 — the Desk: save and reopen an entire constellation of linked windows as a working set.

Two principles got sharpened in the arguing. First, Mig’s correction that stuck: a Satellite can be a sender — the modal verb is the principle. Not “is a sender,” not “is a receiver by default” — a satellite is a sender if we tell it to be. Second, the net has many senders and no cockpit-master role: there is no hub, no privileged window. And the unlink verb arrived as the quiet counterpart to “Link all” — a way to let a satellite go quiet. The whole feature honours one boundary from the DDD book: the SatelliteChannel’s foreign names stay behind the wrapper; the domain never learns the transport’s vocabulary.


The Diagram — one chart system, bus-native

Section titled “The Diagram — one chart system, bus-native”

The charts themselves got a spine too. EDA — The Diagram is one composable chart system rather than a drawer of one-off components, and the keystone reframe is Sense 13 all the way down: a chart is a panel. The declarative chart-panel landed, panelcheck learned to accept {kind: scatter}, and Diagram #1 — the scatter — shipped compliant, brushable, and bus-native from birth. Then P4b-F folded the point family together under one contract: strip, timeline, and heatmap all joined the Diagram, and the island was fully mirrored. Alongside it, Canvas tile kinds grew breakdown and trend tiles (spec before code, then two slices), with panel-level kind dispatch — so a page’s overview row is declared, not hand-assembled. Form follows data, and the data now picks its own chart.


The Explorer’s navigation got two new dimensions in one week.

Sense 57 — The Rooms reorganized the sidebar into named rooms (Overview and Tools as bookends) with kept per-room state, subject colour, and i18n room names — shipped in four staged slices. River split from Heartbeat so the medallion stream reads as its own thing (Sense 59). And a shared nav-destination registry meant the jumpbar could reach every section, not a curated few.

Then the keyboard maneuver plane — a genuinely novel interaction. Hold ⌥ and the interface reveals a maneuvering layer: ribbon digit badges, vertical nav, room cycling on ⌥←→, letter chips on a visible focus cursor, release-to-open. A ? overlay teaches the whole vocabulary. The design went through a three-plane model and a satisfying run of fixes (stale Admin, stolen ⌥-arrows, a far-flung passport) before it felt right. The lesson that recurs: a power feature that is invisible is a power feature nobody has — so the maneuver cursor was made visible, and the shortcut grew a teaching layer around it.


The Typology grows its second gate — and a face

Section titled “The Typology grows its second gate — and a face”

Sense 54 spent last week deciding what a type is; this week it grew the apparatus to enforce it everywhere and show it to a human.

The Codex got grounded in bulk — four batches took it from a handful of standards to full coverage across the packs: regulatory/vendor/global code systems, numetrix grounded end to end (MiGeL, SwissDRG, plus the OPALE/Navision/SAP-MM code systems), interlogic/millesime/hrcentral cores, and a closing sweep (SNSF for hrcentral funding, GTIN for numetrix). A lint now flags a pack term that shadows a Codex standard, and a real binding bug was caught in passing (gschv binds [identifier, category], not [quantity]). Typology legality became a hard error, pre-dbt in make — a lie about a type stops the build before dbt ever runs.

The Column Passport (sister-1) gave all of this a front door: shift-click a column header and a floating card shows everything the platform knows about that column — kind, unit, standard, how it rolls up, where it came from — and, its quiet superpower, explains the platform’s refusals: “why can’t I group this?” gets a two-second answer instead of a code dig. It shipped in slices — table headers, the group-by explainer, entity-detail related tables.

And Phase 4 opened the second gate. The insight (Sense 54 §Evolution, already on record) is that a type is a stream invariant declared at two gates — ingestion and Gold — with the river between them, so a value is typed at the earliest stage instead of surfacing three layers down as a suspicious number. This week: the two-gates spec, streamscaffold (propose ingestion stream: blocks from the Gold types, human-reviewed), streamcheck (the 4a floor validator — a quantity may not rest on a string), the ramp wiring into make, and the 4c reconciliation spec (the checksum that proves the two gates agree, and localizes the drift when they don’t). Underneath it, riverflow/delta went from 34% typed to 100% — every column, both gates. The lesson holds from last week and hardened this one: when a value can say what it is at the door, a bad value is caught at the door.


The Marked Language — the words get passports too

Section titled “The Marked Language — the words get passports too”

Parallel to the Column Passport, the Marked Language (DDD chapter 02) did for words what the Typology does for columns. A marked term in prose carries a hover passport: what it means, which vocabulary owns it, and a three-state provenance (engine / pack / tenant). It shipped across five phases — term marks and hover passports (1), semantic bindings over string-matching (1.5), nav marks and a four-colours legend (2), prose marking in running text via @html (2b), and a vocabulary lint (3) that turns a shadowing term into a real Term. Non-platform terms got their passports too, and Mig’s six observations were folded in. The DDD Book itself grew — the Verb/Run chapter, chapter 02 as a normative table, chapter 03 acquitting the Compare exception — and both books, DDD and EDA, were published to docs.jinflow.io. The principle, stated in the chapter and worth keeping: semantic match over string match; a name is a binding, not a spelling.


Last week built the Refinement Rail (how made is this number); this week it became fully declared and grew its sibling axis. Drill Floor #4 retired the riverflow-specific reader — the Rail is now driven entirely by a declared refinement_axis, cross-pack, and a Refinement chip auto-surfaces on any entity that declares one. The interactive Rail got property/sensor selectors and a URL-backed master-detail reading picker.

Then Axis A — the Level Ladder: the dimensional hierarchy (basin → site → sensor) that classic BI tools walk, built on the same level-stepper protocol as the refinement axis so it dropped in as a skin, not a rewrite. The Ladder hands off cleanly to the dimension table, and — the satisfying convergence — the Ladder joined the Selection bus, so drilling and selection algebra compose: drill into a level, and that becomes a cohort. A real bug was caught and fixed at the seam: the Level Ladder must read rollup off the drilled entity, not the fact model. The Level Stepper now stands as jinflow’s unified depth-navigation model, with the Typology as its keystone.


The operator arrives — identity, and a cockpit to stand in

Section titled “The operator arrives — identity, and a cockpit to stand in”

For the surface to be operated, someone has to be the operator, with exactly the right authority and no more. The identity lane (sister-3) did the careful work.

The clerk_user_id pin was retired: prod publicMetadata is now the single authoritative binder for online auth (Phases 2 and 2b flipped both the owner-gate and the intermediary gate). The engineer identity stopped carrying tenant-admin — engineering access is not operational access. A viewer role was promoted (explore everything, write notes, never Vera or builds). And a fleet tier arrived — requestCanFleet, jin grant-fleet-admin, the exec gate wired to it — cleanly distinct from per-tenant ownership (requestCanForTenant), which now resolves the caller even on tenant-less routes.

On top of that authority model, a system-admin health cockpit (/admin/system) grew from a shell into a real instrument: cross-tenant listing grouped by pack, live host probes, pack↔tenant relation health, a cockpit version-drift indicator (the served version is the witness), and forms over jin init / jin invite for tenant creation and pack-admin assignment. It split into Fleet and Standards tabs; tenant-admins got their own read-first home (Data & Build, Visibility, Configuration). Professional 403/404 boundaries replaced dead ends, and the gate learned to distinguish “signed in but unbound” from “unauthorized” — a small honesty that saves a support email.

The week’s sharpest ops lesson came from a scare: the playworks invitation canary was a production Clerk MAU faucet — every canary run was quietly minting billable monthly-active users. It was turned off by default and made opt-in (--invitation), the backfill learned to send a User-Agent so Cloudflare stops 403-ing the Clerk API, and the earlier invite-canary failure was correctly re-diagnosed as a Cloudflare bot-challenge, not an allowlist bug. A synthetic check that touches a metered production service is a cost, not just a test — read the artifact before enumerating tenants.


Sense 55/56 turned from substrate into surface. A /runs route gave run history plus Broadcast replay; a runs store kept a live run persistent across navigation; the ambient run feed put a running build in the corner of your eye (console Slice 3). Run detail deepened — failed-at phase, event timeline, a Bench nav entry. make now broadcasts the whyrun.error / run.warning on failure, not a silent red. State-changing verbs now leave a Run at dispatch level, each stamped with trigger.actor (who fired it). The SIS run registry became the queryable index of runs — reds included — and run archival reached R2 (Sense 56 Phase 4). The framing held throughout: a run is a Verb observed, not a workflow prescribed — a data-first, emergent DAG.


The evolve lane (sister-5, with sister-1) taught the Explorer to author, safely. The cloud authoring loop shipped end to end: a stage buffer (Phase 1), Atelier editors that save stage-first with a Staged tab for publish + rebuild (Phase 2), worker-owned publish via /publish and make --apply-artifacts (Phase 3), and Vera proposing AFS artifacts into the stage buffer (Phase 4). Nothing mutates the AFS directly from a browser; a draft is staged, then a worker publishes and rebuilds — the write stays on the trusted side.

Vera herself grew up: create_note (propose, operator approves, it saves), propose_artifact, a structure-only mode (reason about the framework, never read the data), voice (browser-native dictation and spoken replies), and discoverability polish. She is gated on the evolve:repl capability — no anonymous AI — and her action tools follow a propose-then-act gate, not a mid-turn pause. The clean reduction of the week: evolve is two rails — Vera conversational, the CLI deterministic — and naming that split made both simpler.


The make-in-cloud work kept tightening. An always-on materialization benchmark gave the runner honest numbers. Taring the AFS replaced 739 round-trips with one (a measured 6.4×). Phase 3 groundwork put .git into the AFS tarball and stood up cloud-publish availability. “The River travels” made the baked stats and dbt-manifest survive the cloud purge. And a cluster of container-only gremlins fell: heap bumps for the runner-side Explorer build (exit 134 OOM), a --publication-aware cloud sync (a dest mismatch had been starving the dev bucket), and the silent-deploy failure — fixed three ways at once (heap for the build, a fail-loud shell, digest-true deploys). The recurring lesson, again: a deploy that can fail silently will — so make it prove the served version.


Not everything was a Sense, and some of the most useful work was small. standards/ got bundled into the deploy binary (the Codex was empty in frozen mode — the same class of freeze that means Phase 4’s streamcheck won’t run in the bundle until the next ship). CRLF↔LF differences stopped tripping afs update. The UI defaults to English. Page-size preference restores on every navigation, not just first mount. Recents record every visit. Mobile got two rounds of care — the header stopped overflowing, all seven rooms fit one row, the hamburger became a bottom FAB, the findings viewport leak was sealed. The hospital_zeta fossils were purged from the docs (live tenants are szo / inspire / rmc). And the release drumbeat was loud and boring on purpose: roughly twenty patch releases (0.57.2 → 0.60.4) carried all of the above out the door.

Meanwhile the Sense catalogue kept thinking ahead: 57 The Rooms, 58 The Broker (licensing via a jinflow.io intermediary), 59 The Double Circle, 61 The Strata (persistence by character, with the Reservoir spec co-authored into buildable shape), 62 The Fleet (operator-scoped population × facets), and 64 The Docent (the guided tour as a declaration). A first energy tenant, gridland.sollun, got its grain spec — a new domain knocking. And the top-ten deck plus the DDD and EDA Books were published, so the ideas have somewhere to live besides our heads.


Step back and the week rhymes with itself. A Selection that travels — across panels on a bus, across windows and machines as Satellites. A Diagram that is just a panel, so any chart joins the same current. A Passport for columns and a Marked Language for words, so a thing you point at can tell you what it is. A Drill Floor whose two axes now compose with selection. A cockpit and an identity model so an operator can stand somewhere with the right authority. A Vera who proposes and a loop that stages before it writes. Different surfaces, one intent: the person on the other side can now grab the data, connect what they grabbed, and act on it — and the system stays honest about what they are holding.

Last week the system learned to say what it is. This week a person got the hands to work with it. Description became operation.

Next week: rule the Phase 4c reconciliation fork and turn the two gates from a drift-guard into a bug-finder; drive the Rail’s two axes against live KLSes through the Selection bus; and keep letting the Satellites carry a pointed-at thing wherever the analyst’s attention goes. The hands are on. Time to build with them.

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

  • bfbcf1c3 — Showcase — From Reading to Verdict (Delta Basin)
  • dc741a93 — Sense 64 — The Docent (the tour as a declaration)
  • 016c37b3 — Showcase — From Reading to Verdict (Delta Basin)
  • 55a8ae26 — spec Drill Floor Axis A over an entity-FK chain (entity_chain drill kind)
  • 1091d504 — click a legend entry to zoom the map to its matching sites
  • acee51d4 — Clear button on the selection summary card — reset from where you look
  • 4c8b7c3c — click a legend entry to zoom the map to its matching sites
  • c02b0bac — Clear button on the selection summary card — reset from where you look
  • 359be68a — calibration brief — record the decision (removed, not piloted)
  • 4e34c98a — click a legend entry to zoom the map to its matching sites
  • 589a8d4a — Clear button on the selection summary card — reset from where you look
  • 64484d78 — public principals pages merge the SIS overlay — invited = visible
jazzisnow jinflow is a jazzisnow product
v0.64.7 · built 2026-09-20 19:48 UTC