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 Selection, and the bus it rides
Section titled “The Selection, and the bus it rides”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 Rooms, and a plane to move by
Section titled “The Rooms, and a plane to move by”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.
The Drill Floor gets its second axis
Section titled “The Drill Floor gets its second axis”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.
Runs, the Broadcast, and the ambient feed
Section titled “Runs, the Broadcast, and the ambient feed”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 why —
run.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.
Vera and the cloud authoring loop
Section titled “Vera and the cloud authoring loop”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 cloud runner closes more of its shape
Section titled “The cloud runner closes more of its shape”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.
The housekeeping that mattered
Section titled “The housekeeping that mattered”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.
The through-line
Section titled “The through-line”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.
The trail
Section titled “The trail”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 sitesacee51d4— Clear button on the selection summary card — reset from where you look4c8b7c3c— click a legend entry to zoom the map to its matching sitesc02b0bac— Clear button on the selection summary card — reset from where you look359be68a— calibration brief — record the decision (removed, not piloted)4e34c98a— click a legend entry to zoom the map to its matching sites589a8d4a— Clear button on the selection summary card — reset from where you look64484d78— public principals pages merge the SIS overlay — invited = visible