5.8 KiB
SPRINT 15 — THE POSTS TELL THE TRUTH, AND THE EDITOR STOPS BEING BATCH
Sprint 14 built the yard editor and it immediately earned itself: nine bugs found before anyone authored a yard with it, three of them live on the public URL. D then authored a complete third yard cold — no JSON, no console — and it scored winnable-but-mean and played that way. 406/0/0, live at partly.party/hardyards, editor included.
What it also found is a shipped balance bug we deliberately did not patch, because half the repo's measured numbers are standing on it. That's gate 1.
Read THREADS from the last [I] entry. Baseline 406/0/0; keep it green, mutation-check anything you'd call coverage.
Gate 1 — THE POSTS TELL THE TRUTH (A rules · E supplies · B re-measures · D re-plays)
The factory bakes rating_hint = 0.9 on sail_post's top_anchor. Every
post in every shipped site is a plain JSON entry with no node, so
adoptAnchor never runs and they all default to 1.00. Every honest post
in the game is 10% stronger than E designed it, and always has been.
This is a gate and not a patch because A's separation block pins measured hp
through the real chain, B's audit tables predict against it, and D's played
verdicts sit on it. Move the number and all three move together, in order:
- A rules FIRST, before anyone measures: is the honest post 0.90 (E's
design intent reaches the sim) or 1.00 (the shipped value becomes canon and
E's baked hint is corrected to match)? Both are defensible — 1.00 is what
every played verdict in THREADS actually measured, and "the value we shipped
and balanced against is the real one" is a legitimate ruling. What is NOT
defensible is leaving the factory and the sim disagreeing. Whichever way
it goes, the mechanism must be fixed so a baked hint can never again fail to
reach a JSON-declared anchor silently — that's the actual bug, and it will
bite the next asset the same way (
tie_off,collateral, anything). - E: make the factory agree with the ruling and pin it — an assert that a JSON-declared anchor of a type the factory rates carries that rating at runtime. Your S14 audit rules (no silent anchors, no unpriced collateral) are the model; this is the third of that family.
- B: re-measure everything that moved. If the ruling is 0.90 every post line in both shipped yards gets weaker — expect the separation pin, the winnable-lines tables, and the night-4/5 affordability story to shift, and post the deltas as a table. Propose retunes with evidence; A rules.
- D: re-play the affected nights and say whether the change is FELT. If 0.90 makes the honest line stop holding, that's a design change wearing a bugfix's clothes and you're the one who says so.
Gate 2 — THE EDITOR STOPS BEING BATCH (B owns; D judges)
D's verdict: the 75–82 s fully-blocked score "made the editor batch, not iterative — I scored once and shipped that run rather than tuning." That is the difference between a tool you author WITH and a tool you check work AGAINST.
- B: make the score interruptible and legible. In priority order — a progress tick that actually paints (D says this may matter more than raw speed), then yielding so the page stays responsive, then speed itself (the cost scales like C(n,4) in candidate quads — a coarse pass that ranks before it flies is likely worth more than micro-optimising the sim). Whatever you do, the numbers must not change: pin the current site_02 and site_03 scores before you start and reproduce them after.
- B + C: one storm picker, not two independently-defaulted ones (D scored the wildnight while viewing the southerly — the exact class of two-harnesses-disagreeing this repo keeps paying for, now inside one page).
- D: re-author or re-tune a yard with the faster loop and say whether it changed how you work. That's the acceptance test, same as gate 3.2 was.
Gate 3 — THE EDITOR'S HONEST EDGES (A owns, mostly)
D's friction list, by owner, all seen in anger:
- A: number fields commit on blur only — Enter does nothing, and a house sat on the garden bed while the panel read the new value. Commit on Enter.
- A: objects place outside the fence silently and the yard still reads VALID. Either validate the yard bounds or draw the boundary — a yard that lies about being valid is the one thing this editor must never do.
- A: zoom is wheel-only (no keyboard, no pinch).
- A+B: no
separationfield exists in the editor, while B's score card says a shipping site should pin one. Either add it to the SITE panel or rule that separation is an integration-time concern and say so on the card. - A: honour
tie_off: falseat the palette layer if you offer anchors by name from GLB nodes (E's flag; the runtime half is already honoured).
Gate 4 — JOHN PLAYS, THEN CHOOSES (nine sprints)
partly.party/hardyards — five nights, three sentences in THREADS. Then the branch, which the editor has now repriced:
- More sites — D's
site_03_swing_lawnis authored, scored and played, sitting inert waiting for a NIGHTS entry. This branch is now nearly free. - Reputation / warranty — DESIGN.md's consequence loop; the invoice exists to hang it off. Unchanged in cost.
- Heatwave days — the slow-pressure half of the design, sun-arc coverage, a genuinely different puzzle. Unchanged in cost. Nobody builds any of the three this sprint.
gate 1: the post hint ruled, the mechanism fixed so a baked hint cannot
silently fail to reach a JSON anchor, both yards re-measured, D re-plays
gate 2: the score paints progress and stays responsive; numbers reproduce
exactly; one storm picker; D says the loop changed
gate 3: Enter commits, out-of-bounds stops reading VALID, the friction list empty
gate 4: John's three sentences + the branch, in writing