HardYards/ROADMAP.md
m3ultra 3dee2a7c83 Merge origin/main: S14 lane integration + review fixes; TEETH becomes SPRINT16
Two same-day integrations reconciled: their SPRINT15 (post ruling, editor
iterative, honest edges) stands and runs first because it re-measures the
numbers TEETH pins; the TEETH plan moves to SPRINT16 with a fires-after-15
banner, its D gate rewired to the landed swing lawn. ROADMAP arc 0 records
the fork. THREADS keeps both sides chronologically.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 10:34:21 +10:00

176 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.

# 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 shipped yards (a third — the swing lawn — authored
and inert), 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 0 — THE TRUE BASELINE (SPRINT15, already speced — the fork's gift)
*This roadmap and SPRINT15 were written in parallel forks the same day and
reconciled: S15's gates (the post rating_hint ruling, the iterative editor
score, the honest edges) re-measure the very numbers arc 1 pins, so S15 runs
FIRST and TEETH fires as SPRINT16. The fork was the process working — D's
cold-authoring pass found a shipped balance bug nobody reasoning from the
code would have caught.*
## ARC 1 — TEETH (SPRINT16, speced in full in SPRINT16.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). D's swing lawn
enters the rotation, 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 46 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 (SPRINT16
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).