From 4a5e5bc03703a1c9af9d4c8c2dc73db961e5c56b Mon Sep 17 00:00:00 2001 From: m3ultra Date: Sat, 18 Jul 2026 19:10:14 +1000 Subject: [PATCH] =?UTF-8?q?Sprint=2015=20plan:=20TEETH=20=E2=80=94=20ledge?= =?UTF-8?q?r/warranty/rep,=20the=20membrane=20night,=20site=5F03,=20six=20?= =?UTF-8?q?nights?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ROADMAP.md is the new growth canon: five arcs from the shipped week to DESIGN.md's landscaping business (teeth → job board/clients → slow pressure → the season → the water table), with the earned principles up front — every arc ends live, no mechanic without a surface, balance is measured, one new variable per night. SPRINT15.md and the lane prompts draw arc 1's gates; John resolved S14 gate 4 as all-three-sequenced. Co-Authored-By: Claude Fable 5 --- LANE_PROMPTS.md | 102 +++++++++++++++++++++++++++++ README.md | 3 +- ROADMAP.md | 166 ++++++++++++++++++++++++++++++++++++++++++++++++ SPRINT15.md | 164 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 434 insertions(+), 1 deletion(-) create mode 100644 ROADMAP.md create mode 100644 SPRINT15.md diff --git a/LANE_PROMPTS.md b/LANE_PROMPTS.md index 6a05f82..d90a741 100644 --- a/LANE_PROMPTS.md +++ b/LANE_PROMPTS.md @@ -832,3 +832,105 @@ byte-identical JSON out) even though its UI needn't be. > number, a wreck where priceable, negative-control asserts (your bike > discipline — build the wrong one on purpose and watch it go red). Flag D > in THREADS the moment the palette is ready — their cold yard waits on it. + +--- + +# SPRINT 15 prompts (teeth — your work follows you) + +Same rules: own clone, own branch, rebase onto latest main FIRST +(`git fetch origin && git reset --hard origin/lane/` on a clean tree — +your local branch is BEHIND after integration fast-forwards). Read +**ROADMAP.md** (new — the growth canon; John resolved S14's gate 4: all three +branches, sequenced, teeth first), THREADS from the last [I] entry (the +fresh-eyes review landed six fixes on main — the fabric key, the divergence +break and the pond clamp are news your lane builds on), then SPRINT15.md. +Ports: A 8824, B 8825, C 8826, D 8827, E 8828 (untracked launch.json, copy +the example). Baseline selftest **409/0/0**. The one-variable rule is law: +the new site and the new storm never debut on the same night. + +## Lane A — Sprint 15 +> You are Lane A on HARD YARDS, Sprint 15. Rebase onto main, read ROADMAP.md, +> THREADS' last [I], then SPRINT15.md. Gate 1 is yours: THE LEDGER. The week +> records every committed rig (corners, hardware, what broke, what was +> repaired); a corner still broken at dawn books a WARRANTY line on the next +> morning's job sheet — hardware's shop price, off the fee AT QUOTE TIME, so +> week.js's quote==settle invariant holds by construction. Reputation is one +> number on the letterhead (job sheet AND invoice, E's contract): clean +> nights up, warranty down, collateral down harder, and it moves the callout +> fee multiplier ON THE SHEET so trust becomes visible money. Night 5's +> gardenBeyondSaving must not cost rep — a designed loss the ledger punishes +> is the verdict lying again. Aftermath and end-of-week card speak rep. +> a.test: warranty only on unrepaired breaks; quote==settle with a warranty +> line; rep untouched on designed losses; clean-week negative control. You +> also print C's hail-size and rain lines on the forecast block (their gate +> 3.3 exposes them). Pool: dev-line visibility default, second carry. Do NOT +> build the job board — that's arc 2, and gate 6 aims it. + +## Lane B — Sprint 15 +> You are Lane B on HARD YARDS, Sprint 15. Rebase onto main, read ROADMAP.md, +> THREADS' last [I] (the review touched YOUR files: the divergence break in +> _checkFailure, the post-flow pond clamp, the F key in your rigging UI, and +> a fixed tautology in your own suite — read the receipts), then SPRINT15.md. +> Gate 2 is yours. (a) THE HEAL: after a divergence break, non-finite node +> positions reset from the nearest finite neighbour (prev matched — verlet +> must not invent velocity); assert finite within 1 s, mutation-proof, and +> the existing divergence test stays untouched. (b) THE RECORD: the chosen +> fabric prints in prep summary, invoice, and the verdict when it mattered — +> the F key exists, now the paperwork remembers the bet. (c) THE PIN: site_02 +> declares no separation block and the SCORE IT card calls it out — run +> gardenfly, pin the honest held-vs-bare target, assert it; if the yard +> can't separate at $80, that's a FINDING for THREADS, not a fudged pin. +> Pool: the >83 ms determinism bound gets a pinning test or a documented +> waiver; membrane pricing stays parked until rain's drain weight moves. + +## Lane C — Sprint 15 +> You are Lane C on HARD YARDS, Sprint 15. Rebase onto main, read ROADMAP.md, +> THREADS' last [I], then SPRINT15.md. Gate 3 is yours. (1) STORM_06, the +> pea-hail soaker: stones under your own 2 mm-weave blocking ruling, heavy +> rain, mild wind — the first night membrane is the RIGHT answer. Cloth must +> leak fine hail all night; membrane must pond (the broom matters); the +> membrane line must be affordable at $80 and MEASURABLY better — gardenfly +> and site_audit numbers pinned in your selftest, funnel state in the header. +> If cloth still wins, retune until the bet is real: a decoration night is +> worse than no night. (2) makeStorm(seed): a seeded generator inside +> authored envelopes, deterministic (same seed → byte-equal def), schema- +> valid across 100 seeds, storm_envelope-tested — arc 4's roguelite eats +> this; no shipped night uses it yet. (3) Expose hail stone size and rain +> rate for the forecast block (A prints them) — bands, not promises. The +> one-variable rule binds you to D: storm_06 flies over a yard the player +> already knows. + +## Lane D — Sprint 15 +> You are Lane D on HARD YARDS, Sprint 15. Rebase onto main, read ROADMAP.md, +> THREADS' last [I], then SPRINT15.md. Gate 4 is yours and it's the sprint's +> acceptance test again. (1) site_03 SHIPS this time: author it cold in the +> editor (no JSON hand-editing, no console — the S14 discipline), any theme +> E's palette supports, winnable-but-mean at $80, separation pinned, +> collateral priced, _design/_why filled; file every editor friction in +> THREADS. (2) The week becomes SIX nights: you own the NIGHTS order and the +> two new briefs (client flavour is data — the corner block got a name and a +> reason; match that bar). One-variable rule: site_03 debuts under a storm +> the player has survived; storm_06 flies over a yard they know; never both +> new at once. Night 5's beyond-saving arc and going-broke-never-on-the- +> final-night must survive your re-ordering — a.test will tell you. (3) +> Cold-play all six on one wallet and file the verdict: is a warranty line +> FAIR when it lands? Does rep-moves-pay feel earned? Is night 6's bet +> legible from the forecast alone? Your play is gates 1–3's acceptance. +> Pool: the phantom-sail seam, third sprint — verify A's fix or keep the +> repro honest. + +## Lane E — Sprint 15 +> You are Lane E on HARD YARDS, Sprint 15. Rebase onto main, read ROADMAP.md, +> THREADS' last [I], then SPRINT15.md. Gate 5 is yours: arc 2 needs yards +> this palette cannot dress. Build TWO of three, factory-built, byte-stable, +> negative-control-proven (build the wrong one on purpose, watch red): the +> GLASSHOUSE (collateral apex — priced, wrecked variant, collateral_key +> wired so a SECOND one placed in the editor still bills; nothing about it +> adopts as an anchor), the POOL KIT (pool + compliant fence ring where +> every fence post is honest tie_off:false — adoptAnchor's `?? 1` makes a +> silent node the best steel in the game, and the pool yard's whole puzzle +> is that the legal tie-offs are in the wrong places), the TRAMPOLINE + tie- +> down kit (if S14's pick didn't land it — typed honestly in the checked +> enum). Flag D in THREADS as each lands; site_03's theme may want one. +> Axis trap stands: measure exported GLBs in three.js coords, look at the +> render in assetcheck, never trust a docstring about orientation. diff --git a/README.md b/README.md index 2aae89b..9db0217 100644 --- a/README.md +++ b/README.md @@ -24,9 +24,10 @@ No pip, no npm, no build. Python 3.8+ and a browser. 1. `DESIGN.md` — the design canon (what the game is) 2. `PLAN3D.md` — the build canon (stack, contracts, lane model) · `docs/MANUAL.md` — the HOW: tool map, asset/site cookbooks, earned gotchas + · `ROADMAP.md` — the growth canon (the arcs from the week to the business) 3. `THREADS.md` — the append-only lane log. **The project's memory.** Read the last few `[I]` integrator entries to know the current state. -4. `SPRINT12.md` — the current sprint (highest-numbered SPRINTn.md wins) +4. `SPRINT15.md` — the current sprint (highest-numbered SPRINTn.md wins) 5. `LANE_PROMPTS.md` — copy-paste prompts per lane, per sprint (bottom = newest) ## The lane model (how this repo is built) diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 0000000..0d679fd --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,166 @@ +# HARD YARDS — the growth canon (where the game goes after the week) + +*Written 2026-07-18 at John's direction, following the fresh-eyes review (THREADS +[I] same date). DESIGN.md says what the game IS — it remains the design canon and +nothing here overrides it. PLAN3D.md said how to BUILD the first game — done, 14 +sprints, live at partly.party/hardyards. This file says how the shipped week +becomes the landscaping business DESIGN.md describes, in arcs that each end with +something playable on the public URL. Sprints draw gates from here; when a sprint +and this file disagree, the sprint is newer — fix this file.* + +**John's ruling, 2026-07-18 (this is gate 4 of SPRINT14, resolved):** all three +deferred branches — reputation/warranty, more sites, heatwaves — are wanted. Not +picked between: SEQUENCED. Teeth first, clients and yards second, slow pressure +third. "It doesn't just have to be one night… it's clearly much more than that +now." + +--- + +## Where we are (the honest baseline) + +Five 90-second nights, two yards, five storms, one wallet, ~15 minutes of +campaign. Selftest 409/0/0. An editor that makes new yards cheap and scores them +through the real engines. An economy whose own comments say the balance is +unmeasured, and a scorecard that says a bare bed reads 82.6 where the best clean +rig reads 91.3 — **doing nothing scores 90% of doing everything, and that is the +single number this roadmap exists to fix first.** The sim is the strongest thing +in the repo; the thinnest thing is consequence. + +## The principles (each one was earned, none is negotiable) + +1. **Every arc ends live.** partly.party/hardyards after every integration, a + stranger can play it. No arc is "infrastructure for the next arc" — if it + doesn't change a night a player feels, it isn't an arc, it's a gate inside one. +2. **No mechanic without a surface.** The fabric bet shipped in SPRINT6 and no + key reached it until SPRINT15. A sim feature the player cannot reach and the + job sheet does not argue about does not exist. Every new mechanic lands with + its input, its HUD read, and its line on the paperwork, in the same sprint. +3. **Balance is measured, not reasoned.** The audit gauntlet (site_audit, + gardenfly, storm_envelope, SCORE IT) runs before a night ships, and the pinned + numbers go in THREADS. The bare-beds number is what "reasoned" balance looks + like after eight sprints of everyone being careful. +4. **Sites are data; storms are data; clients are data** (week.js proved the + third). Content arcs must not add code paths per night — they add JSON and + surfaces that read it. +5. **One new variable per night.** A new site, a new storm, and a new mechanic + never debut together — a player who loses must be able to name what beat them. +6. **The full water sim stays a trap until it isn't** (DESIGN.md's own warning). + Slices of water that reuse the pond (runoff aim, clogged inlets) are fair + game; the heightmap flow layer waits for its own PLAN document and its own + proof of fun in a bench, like the cloth had. + +--- + +## ARC 1 — TEETH (SPRINT15, speced in full in SPRINT15.md) + +*The week gets consequences. Your work follows you.* + +Reputation and warranty hang off the invoice exactly as DESIGN.md drew it: a +corner of yours that blew and stayed blown books an unpaid warranty line on the +next morning's job sheet; a clean night builds the number on the letterhead; the +number moves what clients pay. The fabric bet gets its paper trail (forecast +argues hail size and rain, invoice records the cloth you chose). site_03 finally +ships, the week becomes six nights, and one of them — C's pea-hail soaker — is +the first night where the default fabric is the wrong answer. The bare-beds +separation fight starts here and does not end until held-vs-bare is a pinned, +teeth-bearing number on every shipped site. + +## ARC 2 — THE BOOK OF CLIENTS (≈ two sprints) + +*From a scripted week to a job board. Variety without new engines.* + +- **The job board**: mornings offer N callouts, you take one. Pay, risk, client, + and site visible before you commit — income becomes a choice, replay becomes + real, and BROKE_BELOW starts meaning something because you can chase money + into jobs you shouldn't take. The week structure (five-to-seven nights, one + wallet) survives; what changes is that no two weeks need be the same list. +- **Job types beyond "rig for tonight"** — each is a variation on engines that + already exist, none needs new sim: + - *Emergency callout* — you arrive MID-STORM at double rates to someone + else's failing rig: triage, repair, cut-away. The storm phase already does + everything this needs except spawn you at t=30 with a rig you didn't build. + - *The cowboy audit* — storm-proofing someone else's work 36 hours out: walk + the yard, find what's about to fail (frayed wire, unmoused pins, a carabiner + where a shackle should be — the inspection tells exist as rating hints and + hardware states), fix the worst of it on a budget that cannot fix all of it. + - *Warranty callout* — arc 1's ledger, now as a full night: your own past + work, revisited in weather, unpaid. +- **Client personalities as constraints** (DESIGN.md's soft-constraint idea): + "nothing attached to the house", "the pool fence is off limits", "cheapest + option and I'll sue" — data on the night, enforced by the rigging session, + argued on the job sheet. Cheap to build, huge puzzle variation. +- **Yards 4–6 out of the editor**: the pool yard (fence compliance + corroded + cheap hardware), the granny-flat alley (the venturi as the whole level), the + glasshouse yard (maximum collateral, E's arc-1 asset). D authors them cold, + the gauntlet prices them, separation pinned before they ship. + +## ARC 3 — SLOW PRESSURE (≈ two sprints) + +*DESIGN.md's other half: days, sun, and water you can see coming.* + +- **Heatwave days**: the sun arcs, the shadow moves, shade-hours-delivered is + the score (coverageOver() already ground-projects; it needs a sun path and an + hourly integral). No storm — the tension is coverage over TIME, a different + brain. Slow days between violent nights is the Overcooked rhythm DESIGN.md + named, and it makes the storms land harder. +- **The seasonal sun**: the same yard needs a different rig in February than + July (sun elev/azim already live in site JSON — make them a season, not a + constant). Seasonal-adjustment callouts fall out for free. +- **Water, the honest slice**: sail runoff has to GO somewhere — one corner low + dumps the pond's drainage where you aimed it (the veggie bed: bad; the path: + fine; the neighbour's side: a bill). Reuses the pond machinery wholesale, adds + aim. Second slice: leaves clog the one drain inlet and the puddle drowns the + bed corner — the leaf layer already exists in debris.js as an ambient tell. + Both slices are legible without a flow sim, and both make yards read as + plumbing, which is the door arc 5 walks through. +- **Heat affects you**: work slows in the blaze, water breaks are real, dawn + and dusk are the smart hours — player.sim already has the shove/stagger + scaffolding for one more environmental pressure. + +## ARC 4 — THE SEASON (≈ two sprints) + +*The campaign clock, persistence, and the roguelite.* + +- **Save the business**: localStorage persistence — wallet, rep, gear, week + number. The week loop closes into a season of weeks with a job-board economy. +- **Storm season (roguelite)**: fixed starting budget, procedurally generated + storm sequences inside authored envelopes (C's makeStorm(seed) groundwork + lands in SPRINT15), survive the season solvent. The seeded weather core was + built for this from day one. +- **Gear that persists**: hardware tiers into TOOL tiers — the petrol auger vs + the shovel (post placement time), the laser level (free grading intel), the + second trailer (carry more spares). DESIGN.md's life-changing-upgrade list. +- **Sandbox**: the storm designer sliders (dev_skyfx.html is 80% of it) plus + the editor, public. Break your own yard for fun; the chaos physics carries it. + +## ARC 5 — THE WATER TABLE (the big swing — gated, not scheduled) + +*Retaining walls, drainage, the heightmap that flows. DESIGN.md's second game.* + +Not scheduled until it passes the same bar the cloth passed: a bench that proves +the fun before a lane builds the feature. The gate to open this arc is a +tools/water_bench/ prototype — coarse-grid flow on a heightmap, one swale tool, +one wall that can blow out, played in a probe page and felt to be a game. Arc 3's +runoff/clog slices will have taught players (and us) how much water legibility +buys at what sim cost. Everything DESIGN.md says about walls, weep holes, +surcharge and the mudslide entering the debris system waits here, intact. + +--- + +## The standing rails (every arc, no gate needed) + +- **Perf floor**: the game must hold 60 fps on the M1 Ultra and stay playable on + an Intel MacBook's integrated GPU. The review's 12-fps embedded-pane datum was + the reviewer's harness, not the game — but nobody has MEASURED a low-end + machine, and "measure, don't reason" applies to frame rate too. +- **Sound**: every new mechanic that can kill a corner gets a tell by ear + (DESIGN.md: players learn to defend by ear). The tink of a backing-out pin is + still unbuilt and is the single highest-value audio asset in the design. +- **Touch**: the notice locks phones out honestly. A touch rigging UI is a real + future (the editor's raycast placement is most of one) — parked until arc 4, + named here so nobody half-builds it sooner. +- **Deploy**: tools/deploy_hardyards.sh after every integration; the live site + is currently one sprint behind main and that gap should never exceed one. +- **The sim's debt, tracked**: node-position heal after divergence (SPRINT15 + gate 2), the >83 ms frame determinism bound (documented, un-tested), membrane + pricing the day rain's drain weight moves (rigging.js's comment names it). diff --git a/SPRINT15.md b/SPRINT15.md new file mode 100644 index 0000000..b942c2f --- /dev/null +++ b/SPRINT15.md @@ -0,0 +1,164 @@ +# SPRINT 15 — TEETH: YOUR WORK FOLLOWS YOU + +*Sprint 14 built the editor and the editor built the argument: SCORE IT put the +bare-beds number on a card (bare 82.6 vs best clean 91.3) and nobody can unsee +it. John played, ruled on gate 4 (ROADMAP.md, 2026-07-18): all three branches, +sequenced, teeth first. This sprint the week grows consequences — reputation on +the letterhead, warranty on the job sheet, a sixth night, a third yard, and the +first night where the default fabric is the wrong answer. Baseline selftest +**409/0/0** (the fresh-eyes review landed six fixes on main — read THREADS [I] +2026-07-18 before you start; the fabric key, the divergence break and the pond +clamp are all news your lane may be building on). Keep it green; mutation-check +anything you'd call coverage.* + +**The one-variable rule is LAW this sprint (ROADMAP principle 5):** six nights, +exactly one flies the new storm, exactly one is the new site, and they are NOT +the same night. A player who loses night 6 must be able to say whether the yard +beat them or the weather did. + +## Gate 1 — THE LEDGER (A owns: week.js, hud.js surfaces, main.js wiring) + +Reputation and warranty, hung off the paperwork that already exists. No new +phase, no new sim — this is week-state plus three surfaces telling the truth. + +1. **The work history.** Every committed rig is recorded on the week: corners, + hardware, effective ratings, what broke, what was repaired by dawn. This is + data the night already computes — the ledger just keeps it. +2. **Warranty.** A corner of YOURS that broke and was still broken at dawn books + a warranty item: the NEXT morning's job sheet carries it as a line — + "warranty — q3, shackle, no charge to the client" — and its cost (the + hardware's shop price, unpaid labour is the point) comes off that night's + fee AT QUOTE TIME. week.js's own invariant is non-negotiable: the sheet and + the invoice never diverge — the quote already carries the deduction, so + settle pays exactly what was quoted. A repair you made mid-storm is NOT a + warranty item; riding it out broken is. +3. **Reputation.** One number on the letterhead (pick the unit — stars read as + client-speak; whatever it is, it appears under the ABN on job sheet AND + invoice, E's letterhead contract). Clean night (no breaks, no collateral): + up. Warranty item: down. Collateral event: down harder. It MOVES PAY at + quote time — a trusted outfit's callout fee multiplier, printed on the + sheet, so the player watches their number become money. Start neutral; + night 5's beyond-saving garden must NOT cost rep (the flag exists — read it; + a designed loss the ledger punishes is the verdict lying again). +4. **Aftermath teaches it.** The invoice's verdict line and the end-of-week + card both speak rep: a week that ends broke-but-clean and a week that ends + rich-with-warranties are different endings and should read as such. +5. Tests, a.test: warranty fires only on unrepaired breaks (repaired = no + item); quote==settle holds with a warranty line on the sheet; rep never + moves on gardenBeyondSaving nights for garden reasons; the multiplier is on + the sheet the night it applies. Negative control: a clean five-night week + books zero warranty items and ends rep-positive. + +## Gate 2 — THE HEAL + THE PAPER TRAIL + THE PIN (B owns) + +1. **Divergence heal.** The review landed the break (a NaN corner now lets go, + reason:'divergence', production path) — but the freed node then integrates + from NaN forces and the cloth renders ugly after one. Sanitize on the break: + any non-finite node position resets from its nearest finite neighbour (or + the corner's anchor), prev matched so verlet doesn't invent velocity. + Assert: poison → break → every node finite within 1 s of sim, render-safe. + Mutation: heal off, assert red. The existing divergence test must keep + passing untouched — the heal is IN ADDITION to the break, not instead. +2. **Fabric on the paperwork.** The chosen fabric prints in the prep summary, + on the invoice, and in the aftermath verdict when it mattered (a membrane + night survived in cloth should say what the leak cost). The FORECAST half is + C's (gate 3.3) — yours is that the choice the player made is on the record. +3. **Pin site_02's separation.** The SCORE IT card says NONE PINNED and calls + it out — a shipping site should promise held-vs-bare and be held to it. Run + gardenfly, pick the honest target, pin the block in site_02's JSON, assert + it like backyard_01's. If the honest answer is "this yard cannot separate + held from bare at $80", that is a FINDING about the yard — post it in + THREADS and gate 4's balance fight starts there, not at a fudged pin. + +## Gate 3 — THE MEMBRANE NIGHT + THE SEEDED STORM (C owns) + +1. **storm_06 — the pea-hail soaker.** Small stones (under the 2 mm-weave + ruling's blocking threshold), heavy rain, mild wind. The night the bet + flips: cloth leaks fine hail onto the bed all night; membrane stops + everything and the mild wind means its doubled load is affordable — but it + PONDS, so the broom matters. Author it so both lines exist and the membrane + line is genuinely better: measure with gardenfly/site_audit (funnel state in + the header, per the discipline), pin membrane-vs-cloth garden separation in + the storm's own selftest, and make sure a $80 wallet affords the membrane + line on the night's site. If the measured numbers say cloth still wins, + retune the hail spectrum until the bet is real — the storm exists to make + the F key matter, and a decoration night is worse than no night. +2. **makeStorm(seed) — groundwork, not a shipped night.** A seeded generator + inside authored envelopes (base curve, gust budget, direction change window, + rain/hail ranges as data), producing storm defs that pass the schema + validator and the storm_envelope harness. Deterministic from seed — + ROADMAP arc 4's roguelite eats this. Selftest: same seed → byte-equal def; + 100 seeds → all schema-valid, all inside the envelope; a seed that violates + the envelope is a red test, not a shrug. +3. **The forecast argues the bet.** Hail stone size and rain rate join wind on + the job sheet's forecast block (the data is in the storm JSON; A prints + what you expose). The band-not-a-promise rule holds — forecast bands, real + values inside them. + +## Gate 4 — SITE_03 AND THE SIX-NIGHT WEEK (D owns) + +1. **site_03 ships.** Your S14 cold-authoring run never landed a yard — the + editor is a sprint older now and SCORE IT prices collateral. Author it + cold (editor only, the S14 discipline), any theme E's palette supports, + winnable-but-mean at $80, separation pinned, collateral priced, _design/ + _why filled. File the friction in THREADS — every place the editor fights + you is still gate-1/2 feedback one sprint late. +2. **The week becomes six nights.** Wire site_03 and storm_06 into NIGHTS under + the one-variable rule: site_03 debuts on a storm the player has already + survived; storm_06 flies over a yard they already know. You own the order + and the two briefs (client flavour is data — write clients worth meeting; + the corner block got a name and a reason, match that bar). Night 5's + beyond-saving flag and the went-broke arc must both survive re-ordering — + the a.test week asserts will tell you. +3. **Cold-play the whole six**, wallet from night 1, and file the verdict: + does a warranty callout read as FAIR when it lands on your sheet? Does rep + moving pay feel earned or arbitrary? Is night 6's bet legible from the + forecast alone? Your play IS the acceptance test for gates 1–3. +4. Pool (yours): the phantom-sail seam re-test, third sprint running — if A's + view fix landed, verify and close it in THREADS; if not, your repro keeps + it honest. + +## Gate 5 — THE NEXT TEMPTATIONS (E owns) + +Arc 2 needs yards this palette cannot dress yet. Two of these three, factory- +built, honest extras, negative-control asserts (your discipline — build the +wrong one on purpose and watch red): +1. **The glasshouse** — the collateral apex. Priced high, wreck variant, + collateral_key wired so a second one placed in the editor bills (the + carport's five-sprint lesson is one sprint old). Panes that read as fragile + at a glance; nothing about it may adopt as an anchor. +2. **The pool kit** — pool + compliant fence ring. The fence posts are the + temptation: honest `tie_off:false` (silence is not neutral — adoptAnchor's + `?? 1` makes an unrated node the best steel in the game), because the whole + point of the pool yard is that the legal tie-offs are all in the wrong + places. +3. **The trampoline** — if S14's pick didn't land it: typed honestly in the + checked enum, plus a tie-down kit prop (the prep-phase counter to the + storm's opening projectile, priced like it matters). +Flag D in THREADS as each lands — site_03's theme may want one. + +## Gate 6 — JOHN: PLAY, THEN AIM ARC 2 + +Six nights at partly.party/hardyards (deploy after integration — the live gap +is one sprint and ROADMAP says it never exceeds that). Three sentences in +THREADS. Then one ruling for arc 2's first sprint: **emergency mid-storm +callout or the cowboy audit** — which job type leads THE BOOK OF CLIENTS? + +Pool, spread by ownership: dev-line visibility default (A, second carry); +bench-vs-UI residual cause (open since S13; the margin rule stands in); +membrane pricing the day rain's drain weight moves (B, rigging.js's comment +names the start); the >83 ms determinism bound gets a pinning test or a +documented waiver (B). + +``` +gate 1: ledger — warranty on the sheet, rep on the letterhead, quote==settle + holds, a designed loss costs nothing +gate 2: divergence heal (finite in 1s, mutation-proof); fabric on the record; + site_02 separation pinned or honestly refused +gate 3: storm_06 makes membrane the right answer, measured not asserted; + makeStorm(seed) deterministic inside envelopes; forecast argues the bet +gate 4: site_03 cold-authored and shipped; six nights, one-variable rule; + the whole week cold-played and judged +gate 5: two temptation assets, honest extras, negative controls +gate 6: John's three sentences + the arc-2 job-type ruling +```