PROCITY/docs/RETRO_V5.md
2026-07-17 17:04:41 +10:00

8.1 KiB
Raw Permalink Blame History

PROCITY v5 — THE REAL SHOP: the epoch retro

Fable (m3, integrator), 2026-07-17, written after the v5.0 tag (b2d29ba) per ROUND27 §7. Epoch span: R23 → R27. Tags: v5.0-alphav5.0-betav5.0. The first two-studio epoch: Lane G (ultra) went from merged guest to the lane that shipped the epoch's server.

What shipped, in one breath

The tier ladder, whole: 344 real-or-minted items across 15 keyed crates in two godverse towns, every crate distinct (105 pairs, 0 shared titles), sourcing-honest (real/mint as law, prefixes as namespace fences); Monster Robot Party's actual crate 550 riffled and bought in-game off its actual POS; tier 2 live — read-only endpoints over the real till, fences enforced at the DB credential, /reserve+/buy absent by John's A-then-B ruling; and the epoch's defining proof: a real HTTP server killed mid-session costs the game Δ+2 ms and exactly one refused connection — the offline law as an executable, not a sentence. Plus the finale nobody ordered: every shopfront in every town finally faces its street.

The five holds — the epoch's spine

Every hold was correct; every hold traced to the same species (a rule or contract meeting a case written before the case existed); every hold was released by its owner, never by the beneficiary:

  1. R23 — the crate was real but had no street, no identity, no compatible contract; the gate built to catch it was blind-green, and #7a as briefed would have passed vacuously.
  2. R24→25 — E's rebuild sat uncommitted; tagging would have produced a tag whose tree lacked the code that produced its green.
  3. R26 — the mint-id rule demanded a POS sku from crates that never saw a till; G refused the easy green because colliding id spaces in the economy layer eventually sells the wrong record.
  4. R27 (reader) — "zero console errors on server death" was physically impossible; the replacement (exactly one refusal) is strictly stronger because it proves the breaker.
  5. R27 (facade) — the fifth hold found the oldest bug in the project.

The finale: the facade, and the covenant amendment

B's frontage helper — a micro-task — exposed that plan_osm aimed lots' Z at the street while buildings.js draws facades on +Z. The wave-5 ruling named it "every real town since R18" and ordered A to measure the marched path rather than assume it clean. A's measurement caught the ruling's own premise: it was EVERY town, EVERY path, since v1 — all four seating sites wrote atan2(outward) under comments that said -outward; 637 of 681 synthetic lots faced no street at all; the classic covenant town was a row of back walls, and A proved it the only way left — standing in the street, looking at NUMBAT PLAYTHINGS facing the dirt.

John ruled the covenant amendment, and his ruling is the epoch's best line: the covenant is anti-drift machinery, not a defect preservative. 0x3fa36874 did its job for five epochs — it never drifted. It was never right, and no hash can catch what was wrong in the first commit. A golden proves nothing changed; it cannot prove anything is correct. 51 goldens re-pinned in one commit; F re-pinned its own files per A's handoff (lane boundaries held to the last); and A caught, in passing, a bare-string OR-clause in F's classic gate that would have gone green off a sentence about the old covenant. The cross-convention gate is now in the selfcheck so the two conventions are compared against each other forever.

The epoch's signature species: the vacuous gate

Named as law in R24, then found NINE times — including three inside the law's own applications: the empty-glob validator, the covers-render #7a, my id-equality gate spec (positional ids collide), F's selector entering the wrong shop, the silent licence line, the impossible zero-errors assert, F's 72/72 self-agreement (testing a spec line's data against the same line), F's attempt-4 error-check (the call succeeded; the pose was never applied), and the stdout OR-clause. The case law that came out of it is the epoch's real export:

  • A gate proves it touched its subject (fetch log, matched-file count, id equality — something falsifiable) or it is not a gate.
  • The collateral assertion: when correct and broken implementations both hide the obvious evidence, assert on what discriminates (the other 119 records unchanged).
  • Cross-convention checks: two subsystems implementing "the same" convention are compared against each other, never each against its own spec line.
  • Control-deltas for performance: an absolute threshold measures the wrong thing politely.
  • A named exception starts protecting new bugs the moment the real fix exists (F's 404 tolerance — deleted, and the deletion caught a ninth invisible probe).
  • Id prefixes are namespace fences; plan ids, godverse ids, POS skus and listing ids are four spaces, and no bare number crosses them.

What worked — keep doing

  1. Restraint under benefit. F declined to touch A's sweep, E's validator, and E's uncommitted file across three separate holds where one edit would have unblocked its own tag; B proved the facade one-liner and reverted it; A handed F's re-pins to F instead of editing F's files. The party that benefits never releases its own hold.
  2. Ownership sentences. "The red was mine" (E) · "my rule was the stale thing" (C) · "it fired 54/72 on a good town" (A) · "four of the five attempts were F's fault" (F). Nobody defended; everybody measured.
  3. The contract's author is the authority for the contract's shape — and when contract and runtime disagree, the runtime is the authority (R24's root-cause ruling).
  4. Machine-enforced fences beat reviewed promises: the read-only credential (measured permission-denied), 501s for absent verbs, metadata-only responses.
  5. The two-studio pattern matured: G went from branch-merged guest (R23) to full lane on main (R25) to shipping the epoch's server (R27), with John's rulings recorded as mechanism.

What cost us — fixed or fenced

  1. Comments and specs are not measurements. All four facade sites' comments described the correct behaviour above code doing the opposite, for 27 rounds. The cross-convention gate is the fix; the lesson is older: nothing is true because a document says it.
  2. Consistency masquerades as correctness. Every subsystem agreed with itself, so every gate was green over a wrong world; only a human in the street saw it. Money shots and walk-arounds are QA, not decoration — John's browser stroll started the v6 charter, and A's street-level eyeball confirmed the covenant bug.
  3. My briefs carried five corrected errors this epoch (the tier field, the id-equality gate, the zero-errors assert, the "wire on entry" default that F correctly made opt-in, and the wave-5 premise). All five were caught by the contract-first channel or by measurement before they became bugs. Briefs state acceptance; lanes own method; the integrator is not exempt from measurement-over-brief.

Carried forward

  • v5.x: Option B reservation (chartered, behind John's hold budget) · tier-2 auto-discovery (needs a reachability contract) · more POS shops if monsterrobot gains siblings · a shop-ops note for John, not a code item: the POS has recorded no sale since 2026-07-01 — G proved the dump is fresh but the data is stale; worth checking the till's sync before the next live demo.
  • v4.x tail (unchanged): thin-tail clustering floor · seating overflow tail · instrument LOD · tram-stop tri diet · awning ripple · audioEmitter · flag retirement.
  • v6 — THE LIVING STREET: charter drafted (docs/V6_LIVING_STREET.md), spikes gated on John's mocap vids (the MOCAPGOD queue is still empty) and the MOCAPGOD-C/MIRPAMO integration call on ultra.

— Fable. Twenty-seven rounds, eleven tags, five correct holds, one amended covenant. The game now sells a record that is really in the crate, in a shop that is really on the street, in a town that is really in Australia — and for the first time since v1, the shops are facing you when you walk up the road.