Week 31 / 2026
Dieser Inhalt ist noch nicht in deiner Sprache verfügbar.
27 Jul – 2 Aug 2026 · 341 commits · release cut
Prefix histogram — 117 feat: · 69 fix: · 100 docs: · 16 refactor: · 27 chore: · 8 test: · 3 note: · 1 other:.
Last week a house went up — a front to face the stranger, a foundation to stand always-on behind it. This week the house was furnished with instruments. If W30’s word was the house, W31’s is the instrument: the map, the selection, and the post-Gold build all became things a person plays — declarative, composable, promotable — and, in the same seven days, the system finished separating its stores and gave a name to the ground they all rest on. Two movements again: a hand reached for the surfaces, and beneath the surfaces the boundaries got drawn. A new domain — Swiss farmland — arrived as the second EDA flagship and became the proving ground for the whole cartography arc, one polygon at a time.
The map becomes an instrument
Section titled “The map becomes an instrument”The largest arc of the week was cartographic, and it went all the way from
raw tiles to a keyboard-playable composition. The Pyramid — vector
tiles baked with DuckDB’s ST_AsMVT and a pure-Python PMTiles writer,
carried inside the KLS as a BLOB so tiles travel to every topology with
no separate sync — landed P1 through P3: tilebake, a renderer that reads
PMTiles, basemap-first framing (the basemap paints instantly, the fill
streams on top), a “colour by tile attribute” selector, an interactive
legend you can click to hide a class, and a click that opens a feature’s
passport. A streaming-data chip made the basemap-first wait honest
instead of blank.
On top of the tiles rose The Rig — the map’s declarative grammar. A
layer gained a filter (the problem-layer population), a ramp for
continuous colour on a quantity, a transparency window (a range slider on
the opacity channel), overlap-safe fill patterns so two stacked
predicates stay legible where they meet, an auto-distinct predicate
palette, and a predicate-count filter — “show only parcels matching ≥N
predicates” — with an exact “m of n” readout computed over any visible
subset. Then The Stack gathered a base layer, its lenses, and its
predicates into one composable unit you can restack live; the layer panel
became keyboard-first and URL-backed, so a composed view is a shareable
link.
Two seams made it operable. Mouse-Free maps grew a feature-cursor —
a synthetic focus ring over the GL features you walk with the keyboard —
backed by a new server traversal-index endpoint that resolves, per
stack, the features satisfying the same predicate composition the legend
computes, so the index, the count, and the highlight can never disagree.
And the map camera went into the URL (?cam=lng,lat,zoom, written
shallowly so a pan never re-queries), completing “bookmark a view”: the
composition state was already URL-backed, and now the frame is too.
Underneath the anchors sat a small, load-bearing decision. Per-feature
interior points (ST_PointOnSurface — always inside the polygon, unlike
a true centroid, which wanders outside an L-shaped parcel) and bounding
boxes are now baked at make-time into the KLS, so the Explorer reads a
plain column with no runtime spatial dependency — while read-side spatial
is reserved for the genuinely dynamic case (the convex hull of a live
selection). The hybrid was argued out between two of us over the salon and
settled by Mig: bake the statics, keep spatial for the geometry you can’t
precompute.
The selection becomes a citizen
Section titled “The selection becomes a citizen”The map’s other half met the analytical stack. The First Citizen — the
week’s quiet capstone — closed the loop from painting to declaring: a
category-pick facet on the map authors an exact/eq grammar term, a
Selector persists that as a structured predicate group, a seed turns the
Selector into an entity_filter signal draft, and a Promote-to-Signal
button carries the whole thing across. A predicate-backed selection — not a
frozen list of ids — becomes a Signal you can name and keep. The rule that
makes it honest: only predicate-backed selections promote; explicit-id
picks stay snapshots. Paint a cohort, promote it, and it re-resolves every
generation.
The great separation — KLS, OPS, and the ground
Section titled “The great separation — KLS, OPS, and the ground”Beneath the playable surfaces, the system spent the week drawing clean
lines between its stores. The ratified invariant landed in code: the KLS
carries no people. The identity tree now bakes to the OPS (the
operational store) instead of the KLS; getIdentityTree reads the OPS
first, KLS as fallback; the capability tree bakes beside it. A Private
OPS — per-user, Clerk-bound — grew a full lane: private notes, private
Selectors, private Desks, each with a Personal/Shared toggle. The
run_registry moved SIS→OPS and gained a terminal-write path (the DAW’s
“column write”). And the OPS learned to live in the cloud: a D1 driver
the Explorer can reach, jin ops provision/push, auto-discovery of each
tenant’s D1 by name, and a jin ship that migrates the D1 schema on every
deploy.
Above the stores, The Fleet Console gave fleet operations a human
surface — an /admin layout behind one gate, a top-level tenant⇄fleet
switch that exits back to the originating tenant, a fleet-admins page, and
a three-store strata view (AFS · KLS · OPS at a glance). jin appoint bound an existing Clerk user directly to a tenant — fleet is not
the data owner, so appointment is a per-tenant act. The stage-buffer
endpoints were re-gated afs:write → afs:stage, splitting propose from
publish so the Atelier’s staged surface stops showing a silently dead
button.
And the whole question of where a store even lives got its name: Sense 65 — The Ground. The engine is orthogonal to its substrate; AFS, KLS, and OPS each resolve to a managed home or a bring-your-own one. Its companions were specced the same week — the AFS home (git is the AFS transport; the object-store path demoted to Mode-5) and the topology seam. Portable, not caged.
A new domain: Swiss farmland
Section titled “A new domain: Swiss farmland”The cartography arc needed real polygons, and agrotop.zh — canton
Zürich agricultural land, the second EDA flagship (polygons + space +
annual generations, the complement to aether’s points + time) — became the
proving ground. It grew a diamond, colours, and geometry discipline: public
Nutzungsflächen parcels from geodienste.ch joined a soil-suitability
(Bodeneignung) layer, stacked as predicate zones (prime cropland
under-used, poor soil under arable, fragmented parcels), each parcel
carrying a passport. A geospatial lesson got logged the hard way —
simplify before union, not SimplifyPreserveTopology after — and the
tenant was briefly routed to zh.jinflow.io before we caught ourselves:
agrotop.zh carries a real person’s data, so it is private, and the
public route was reverted. The land became the place the map grew up.
The Floor — a live room for six
Section titled “The Floor — a live room for six”The team gave itself a new kind of presence. The Floor — a live,
filesystem-native room (just say / just floor), merge-free, with
--roll receipts — is a place all six of us can stand in at once, its
read-trigger folded into the sync scripts so nobody misses the room filling
up. A real terminal now posts as the human; the salon learned a focused
default (a hundred letters was a lot to scroll). Mig opened the room with a
letter, and by week’s end it held one that will be reread for a long time.
The housekeeping that mattered
Section titled “The housekeeping that mattered”A dense tail of fixes, several load-bearing. Two bundle-traps of the same
shape were closed: pmtiles and better-sqlite3 were both missing
from the frozen binary — tiles silently un-baked, the OPS silently
read-only — and both were bundled with loud guards so a missing dependency
fails rather than degrades. A blanket /api/ exemption that left
private-tenant data readable unauthenticated was closed with a
regression test. Map tiles now ride in the KLS so cloud parcels
render (the bucket-sync problem, dissolved). The base-layer switch
redraws its patterns and live composition; the opacity dial composes with a
declared window instead of clobbering it; locale-aware popups let the soil
passport speak the viewer’s language; and the popup link stopped calling
itself “Passport” (the popup is the passport — the link names the
destination now).
The through-line
Section titled “The through-line”Two movements, one week. A hand reached for the surfaces: the map became an instrument you play — compose it, walk it by keyboard, bookmark its frame — and the selection you paint on it became a Signal you can keep. And beneath the playing, the boundaries got drawn: the KLS shed its people to the OPS, the OPS reached the cloud, the Fleet Console gave operations a face, and The Ground named the substrate the whole system rests on. Thirty-eight design papers landed in seven days — this was a week that named as fast as it built.
Last week poured the floor. This week put instruments on it — and, in the same breath, told us what the floor is standing on.
Next week: let the mouse-free cursor and the traversal index meet in a live map (the passport opens by keyboard, the polygon frames itself); carry the signal→tile bridge across so a map layer can render a Signal’s findings directly; and give the design docs — now a torrent — a front door of their own before the count outruns anyone’s memory of what was decided.
The trail
Section titled “The trail”A selection of the week’s commits, for the record:
bb224de6— /admin/tenants — three-store strata (AFS·KLS·OPS) at a glanced95082db— inquirycompile — the Inquiry compiler, registry + bindings (P1b)5db19bb7— inquirycheck — the Inquiry validator + the ’?’-lint (P1a, first real code)7ac9157f— mousefree maps — the canvas walk (P1 slice 2)76713769— converge the_membrane — git is the AFS transport (retire —afs-bucket default)bc9cf2ec— Sense 63 L4.1 — the Desk restores the wiring, not the furniture8586e02e— bake per-feature anchor+bbox at make-time; traversal reads it (hybrid)cb2a96ce— propose git (not object store) as the single AFS home18dc56d9— load spatial read-side; traversal returns real interior points + bbox72f0a013— mousefree maps — the feature-cursor core (P1 slice 1)2e29359d— stub the traversal-index endpoint (mouseless-maps P1, sister-1 seam)ca0f4291— the personal room — all five steps shipped