PROCITY/docs/LANES/ROUND37_INSTRUCTIONS.md

7.6 KiB
Raw Blame History

PROCITY — Round 37 instructions (from Fable, integrator)

Date: 2026-07-26 · v8 opens. Charter: V8_SOMEONE_LIVES_HERE.md · evidence: REVIEW_CITY_PATTERNS.md (16-agent audit) · ANIMALS_ANSWER.md (5-agent spike). Read the charter first.

Round 37 is WAVE 0 — THE FLOOR. No content. Five micro items that every v8 content idea stands on. John's rulings are made: the kerb is FOOTPATH, real towns get the content, animals are generated not downloaded. Nothing here is a design question; it is execution plus honest measurement. No tag this round — wave 0 closes when the floor is level.

The ledger

0.3 — SETTLE THE BUDGET OF RECORD (Lane F, and it goes FIRST)

Two independent measurements disagree and no proposal may spend against a number nobody can reproduce: the city-patterns audit measured a walked worst frame of 280/300 draws (8 m steps down the main spine, carrying the R+1 dispose window at up to 31 live chunks); the animal spike re-measured and got 191 default / 167 classic by teleport-walk and could not reproduce 280. Both were headless (SwiftShader). Settle it:

  • Walk it properly — real continuous motion, not bookmark teleports, sampling every frame through the chunk dispose window, on the default boot AND ?classic=1.
  • If you can get a real-GPU number, say so and say how; if not, state that the number is headless and what that costs in confidence.
  • Re-pin the budget of record in the docs that assert it, and state the tri number the same way (99124k of 200k was the audit's range; two sessions disagreed enough that it needs a pin).
  • Settle ONE shared instance cap for future town-wide standing layers (three animal proposals independently invented 120, 250 and "plus gulls" for the same layer). One number, written down, with the reasoning. Deliverable: the pinned numbers + the method, in LANE_F_NOTES §37 and wherever the laws are asserted. This unblocks everyone else's budget claims for the whole epoch.

0.1 — THE KERB: FOOTPATH (Lane A ruling-side · Lane B code · Lane F gate)

John's ruling: the 9 m band between kerb and shopfront is footpath. Lane A's published corridor law (roadWidth / vergeBand / poleOffset in core/registry.js) is the single source of truth and Lane B adopts it.

  • B: extend the existing merged footGeos class inward from e.width/2 to roadWidth(e)/2 in ground.js. This must stay +0 draws (same merged mesh) — if it cannot, stop and report rather than paying a draw. Expect ~2k tris and better fill-rate (18 m of every main street stops being painted as road). Special-case or it breaks: arcade (roadWidth 0 → zero-area road quad + coincident kerbs) and lane (vergeBand = [2,2]). Grass verges survive on residential edges only.
  • B: ship ?verge=0 — a permanent flag that reverts to the pre-ruling geometry. It is the gate's falsifiability control and it costs nothing; it stays in the codebase forever.
  • A: the corridor law is yours — confirm the exports are what B should consume, and fix the selfcheck's poster-clearance assertion, which currently validates against roadWidth/2 (5 m) while B painted bitumen to 14 m, i.e. the gate was green while 14 gig posters stood in the road on the default boot. Say plainly whether any golden moves (it should not — this is render-side), and if one does, amendment law, same commit.
  • F (after B): the gate — assert poster clearance on the default boot, and assert the same leg FAILS under ?verge=0. The pre-change failure is known and counted at exactly 14.

0.2 — REPAIR smoke_tram (Lane F, micro)

flags_check.py:617-630 asserts exactly one thing — !!getObjectByName('tram') — prints a SKIP and returns when absent, and passes on the fenced path, because tram.js:110-114 adds a named empty group. A live vacuous-gate violation inside our own suite. Fix it so it proves the tram runs (route resolved, stops sane, moves between frames) on the towns where it runs, and proves it is genuinely absent on the fenced towns — with a control that fails.

0.5 — classic_regression GETS A NETWORK ALLOW-LIST (Lane F, micro)

classic_regression (flags_check.py:128-241) makes no network assertion at all. That is why R36's fetch-surface widening (five DJ bodies) needed a brand-new smoke to catch it. Give it an allow-list: the four v2-era depot furniture GLBs (bench, bin, bus_shelter, food_cart — git-verified v2 baseline, 24cef5a, tagged v2.0-alpha→v2.0) plus same-origin. Allow-list, never deny-list — a deny-list only catches what you already thought of. Prove it discriminates: point it at a fabricated extra fetch and assert it goes red.

0.4 — WIRE ctx.onChunkBuilt / onChunkDisposed (Lane B, one line each)

Producer at chunks.js:43-51, consumer at sim.js:203-205. Both shipped, never connected, since R3. Every per-chunk entity system in the v8 slate wants it. Wire it, prove a consumer actually fires, and confirm zero behaviour change when nobody subscribes.

Laws

Everything standing. This round specifically: +0 draws is a requirement, not an aspiration, for 0.1 · every new/repaired gate must FAIL when its subject is absent, and each ships with its falsifiability control demonstrated · pathspec-atomic commits (three lanes share the tree) · no pushes, no tags — Fable pushes at the close · measurement over brief: if a premise here is wrong, prove it with numbers and say so loudly.

Order

  1. Parallel: F (0.3 first, then 0.2 + 0.5 — all in tools/) · B (0.1 code + ?verge=0 + 0.4) · A (0.1 ruling-side + selfcheck). Disjoint files by construction.
  2. Then F again: the kerb gate against B's landed code + the ?verge=0 control, full qa.sh --strict --matrix, and the round report.

FABLE'S MID-ROUND RULING — CLASSIC KEEPS ITS PAINT (B's escalation, §0.1)

B implemented the kerb ruling with ?classic=1 forcing verge off — i.e. classic keeps the pre-ruling ground — rather than moving a covenanted town's render on its own initiative, and escalated the choice. RULED: keep the fence. Classic keeps v2's paint.

Reasoning, and it is not the R27 precedent: R27 (John's facade ruling — "the covenant is anti-drift machinery, not a defect preservative") applies when classic is preserving a live defect. Here it is not. The defect this ruling fixes is posters standing in the road — and ?classic=1 has no gig layer, therefore no posters, therefore no defect to preserve. What classic would be adopting is a cosmetic change to road paint on a town whose entire job is to be v2, unchanged, forever. The museum piece keeps its paint.

The one real cost, and its mitigation: a fenced classic means two ground geometries exist — and "two implementations of one thing" is precisely the disease this round was convened to stop (four isOpens, three chunkIndex divergences, two registries). So the fence is ruled acceptable only as a single branch on one code path, never a second implementation. B has built it that way (one flag, one bandOuter <= bandInner test); it stays that way. If it ever starts to fork, the fence comes down and classic takes the footpath.

John may overrule; it is a one-token change (drop !classic), and B has proven both sides render identically to their intended baselines.

Standing

  • John's three rulings are made; nothing in this round needs him.
  • Still open for later rounds, not now: the market-plaza amendment, hardyards provenance, where MOCAPGOD actually lives.