Skip to content

Columna 0.11.0 — RELATE faces: the many-to-many crossing executes

Choose a tag to compare

@datumwise datumwise released this 20 Jul 01:15
0e79d84

body chars: 5633
�� release notes (RATIFIED, Huayin, 2026-07-19).*

Columna 0.11.0

The many-to-many crossing executes — the overlap counted, and stated.

0.11.0 is the release where the RELATE — the anti-edge, the relationship that declares "connected,
and no lawful rollup exists" — stops merely refusing a category rollup and starts answering one,
lawfully. A relationship may now declare faces: named crossing dispositions. The first,
touch, executes. columna-core reaches 0.11.0; columna-server reaches 0.6.0.

The crossing executes (columna-core 0.11.0)

  • RELATE declares FACES. RELATE a <-> b VIA t(fcol, tcol) FACES { touch = TOUCH -- "folklore" }.
    A face names the value's disposition on the trip across a non-functional (M:N) edge — the
    self-teaching verb triad touch (the value reaches every match), assign (it goes to exactly
    one), alloc (it splits across) — never the selection criterion, which lives in the declaration.
    The bare VIA <table> form is unchanged, so existing manifolds parse byte-identically.
  • touch executes; assign/alloc are declared-but-deferred. SELECT revenue AT {category.touch}
    join-multiplies the measure through the relationship's bridge to the crossed grain: the value reaches
    every category a product sits in, deliberately multi-counted, served in disclose with the
    over-count as a material caveat. assign/alloc parse to an honest, fail-closed refusal — v1 executes
    touch only. The bare {category} stays barred and now clarifies with the face menu.
  • The two skews of a crossing, both disclosed. Over-count (per-bucket totals overlap; the sum
    exceeds the grand total) and its mirror, coverage/shortfall (a fine entity in no bucket is excluded
    from every cell, so the total can fall short). The crossing reports its coverage either way.
  • Crossed-grain absence is a lawful zero — events basis only. On an events population the expansion
    is honest arithmetic; on a spine/grid, replication would corrupt the grid's own completeness claim, so
    the crossing is refused there until that thinking lands.
  • Adjudicated at publish, under the polarity law. A face is closed by default; its license opens
    the crossing, minted only by the adjudicator (never on parse). touch = VERIFIED — membership
    expansion is exact arithmetic, no partition-of-unity to reconcile.
  • The VIA bridge is map-layer. Engine-visible (the join-multiply needs it), describe-invisible — it
    never rides relates[] or any wire; the insulation test asserts it. contract_version stays "1".

The crossing goes visible (columna-server 0.6.0)

  • describe_manifold's relates[] gains faces[] — each declared disposition rides describe as
    data ({name, scheme, description}), so a consulting agent and the clarify-menu see it from the source
    of truth. Additive; contract_version stays "1".
  • Cascadia declares FACE touch. The demo shows the crossing: SELECT revenue AT {category}
    clarifies with the face menu; SELECT revenue AT {category.touch} executes — 12 categories, touch
    total $3,182,555.97 against the single-count grand total of $2,212,391.86 — about 1.44×
    . That ratio
    is not noise: it is the bridge's own fan-out, 870 memberships over 600 products, made arithmetic. The
    over-count is the fan-out, and the answer says so — plus the coverage line, 600/600, no shortfall.
  • The recapture corpus grows to ten (E1–E10). E6 records the face menu (the ask, with its reason and
    the way forward); E10 mints the executed crossing (the answer — disclose, over_count, coverage). Zero
    drift flags.

The site, re-sequenced (reader-discipline applied to assembly)

The reader-discipline law — narrative order is epistemic order — now governs page assembly, not just
chapter prose. One role per surface, one introduction total, every exhibit seated where the reader has
earned it: the homepage reduces to a single line and a route (the recording is the case); /case
becomes the case study literally, its three chapters the page in order with every generated exhibit
moved into its story position (the fourteen tables where the data is met; the two artifacts where the
design is derived; and in the live chapter, build → inspect → use — the trials, then the Explorer
seated between the claims tried and the claims used, then the questions and the four moods as the
payoff); /explorer keeps its role as structure, never a second intro. The exhibits are re-seated by a
render-time split — the chapters stay byte-identical to the ratified charter across all three surfaces.

The honest ledger

The next faces are on the record, not promised: assign (the canonical pick) and alloc — the crown,
the partition-of-unity that makes per-bucket totals reconcile, with the shipped WITH allocation
grammar as its parameter. The spine-basis crossing (replication on a grid) waits on the spine-grid
domain source (OF-5). And the primary post-launch language road, carried forward from 0.10.0,
remains OF-13 — native coordinate-value predicates in WHERE (region = 'west'), the universal SQL
reflex the interim anchor-and-read prompt law stands in for and retires when the native filter lands.
Language-first: OF-13 fixes it for every consumer, not just our own agent (OF-15 is its secondary, agent-only, sibling).

The whole crossing — the declaration, the menu, the executed answer with its overlap stated — ships in
the Cascadia demo. pip install columna, and ask for revenue by category yourself.