HardYards/SPRINT15.md
m3ultra 4a5e5bc037 Sprint 15 plan: TEETH — ledger/warranty/rep, the membrane night, site_03, six nights
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 <noreply@anthropic.com>
2026-07-18 19:10:14 +10:00

165 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 13.
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
```