HardYards/SPRINT13.md

8.1 KiB
Raw Permalink Blame History

SPRINT 13 — THE GARDEN MATTERS, AND THE NIGHT LOOKS LIKE A NIGHT

Sprint 12 made the trap real and the paperwork beautiful, and the integrator's QA pass (THREADS, last [I] entry — read it FIRST, it is this sprint's evidence base) found the gap that's left: the game PLAYS dramatically and LOOKS calm. The sail died at t=3 on the funnelled buster and the bare bed still finished 83%; a 65 km/h southerly ran under a noon-blue sky; and the public URL (partly.party/hardyards is LIVE — strangers can reach this game now) had an Enter exploit that paid full price for a storm that never ran. 335/0/0 at integration; the Enter fix is hot-fixed and deployed, unpinned.

Baseline: selftest 335/0/0. Every landing keeps it green and adds asserts that can actually fail — mutation-check anything you'd call coverage.

Gate 1 — THE GARDEN MATTERS (C owns the model, B the audit, D the verdict, A rules)

Three independent sightings of one variable (QA entry, 🌱 section): the sim's garden outcome barely responds to whether a sail is up. A's GARDEN_DRAIN comment in main.js names the suspect — the rain shadow decays to ~nothing as wind builds (driving rain walks under the sail), so a perfect rig is ~23% drier than a bare bed and NO drain constant can separate good rigging from none. The core fantasy ("the seedlings are the whole point") is not currently true in the sim.

  1. C — the shadow geometry is yours. Diagnose where protection actually goes: measure rain-shadow-over-bed and hail-shadow-over-bed across wind speeds for (a) a held honest rig, (b) a bare bed, both yards, all five storms. Then fix the MODEL, not the constant. Candidate levers, yours to choose with measurements: hail carrying more of the damage budget on windy nights (stones fall ≤20° off vertical — a sail honestly stops them; rain at a 73° lean honestly doesn't), a bed-level occlusion term (the bed has sides; driving rain at 73° hits the planting from the side the FENCE and sail edge shadow, not the sky), or storm-profile hail timing. The DESIGN target A rules on (propose it in THREADS before you tune to it): a held honest rig vs a bare bed must separate by enough that the garden bonus reads as earned — think alive-vs-dead on the wild nights, not 88-vs-83.
  2. B — cover% and bed-HP must become the same quantity. Your audit's "cover" told three people a $20 rig was bad while the sim paid it +$97. Whatever C lands, your audit must PREDICT the sim's garden outcome — same number, two harnesses, or the tool goes back to lying politely. Re-post the per-night winnable-lines table once C's model lands; expect the cheap lines to finally price honestly. If the fix re-breaks night balance (nights 45 were already bank-funded), propose fee/bonus retunes in THREADS with the table as evidence — A rules.
  3. D — the verdict. Replay the three QA scenarios exactly: night 2 cheap line, night 3 carport line (sail dead at t=3), night 3 honest line. The acceptance is felt, not asserted: losing the sail must COST the garden, holding it must SAVE it, and the invoice's garden line must feel earned in both directions. File numbers like always.
  4. A — two rulings. The separation target (C proposes, you rule), and whether GARDEN_DRAIN itself moves once the geometry is honest (your comment says the constant was compensating; it may want lowering back).

Gate 2 — THE NIGHT LOOKS LIKE A NIGHT (C + E + D judges; A wires camera)

The QA 🌤 section, in priority order. All sim-visible work stays deterministic (dt, t) — no Date.now, no Math.random in the render path keyed off wall time.

  1. C — storm grade. Sky colour, light intensity, and shadow softness keyed on storm intensity: as the wind builds the sky dims toward slate, the sun loses its noon edge, the yard reads WEATHER. Cheap version first (lerp the sky/hemisphere/directional intensities off the same intensity curve the rain already uses); a dusk baseline palette for the whole week is in scope if it stays one constant away from reversible — it is the NIGHT shift.
  2. C — the wall's edges. From in-yard eye height (not the bench): kill the hard vertical seam (soften/feather the bank's ends) and ground the base ON the horizon — blue sky under the wall reads as a floating slab. D re-judges from inside the yard this time.
  3. C — ambient debris. A few leaves streaming with the wind from ~30 km/h sells the gale better than any HUD number. debris.js is yours; keep the count tiny (single digits) and deterministic.
  4. E — wind clips for the player. Lean/stagger/brace Mixamo clips, staged by wind band (calm / working breeze / gale). Ship them like every clip: deterministic factory, byte-identical, dims verified, and LOOK at the silhouette — your own bike rule. D wires them (player.js is D's): thresholds off wind.speedAt(player.pos), brace pinned to the C key that already exists.
  5. A — two camera fixes. Spawn framing: the boot camera puts a pole dead-centre through the player on every single first impression — bias the spawn yaw so the opening frame is player + bed + sail line, no pole. And aftermath: the dead draped sail can swallow the camera whole; the cloth needs to join the camera's solid set (you own camera.js and its setSolids).
  6. D — judge all of it in play and fix your two pool nits while you're in there: the ladder label says "fascia" on a carport bracket, and the dropped spare's whereabouts after a ladder knock are unknown.

Gate 3 — THE FRONT DOOR (A owns; the public URL earns it)

  1. Pin the Enter fix. The hot-fix is in main.js with a comment; write the regression assert — an advance() reachable from 'storm' via keydown must go red. Mutation-check it by reverting the guard.
  2. Splash card. Name, one line of premise ("rig shade sails; keep the client's garden alive through the storm"), controls (WASD · mouse orbit · [ ] tension · S spare · E repair · C brace · Enter commit), one START button. It is the game's real front door now — a stranger from partly.party's arcade should know what to do in five seconds. Keep it in hud.js's card system (.card, .go) — it is one more card, not a menu system.
  3. Pause + mute. P pauses the fixed-dt accumulator (storm only; cards already pause by construction), M mutes C's audio bus. Two keys, shown on the splash and the help line.
  4. Touch notice. A coarse-pointer/no-keyboard visitor gets a polite card ("HARD YARDS needs a keyboard and mouse — grab a laptop") instead of a dead canvas.
  5. Small ones, spread by ownership: BLOWN label collision when adjacent corners die together (B — marker layout is rigging.js); setHardware() silently no-ops on an unknown key — throw or ticker it (B); dev fps line sits under the anchor panel (A); ghost-white sliver near the shed table in aftermath — identify and fix or explain in THREADS (D, it smells like the ladder ghost); standing-kN preview per corner in prep (B — the panel is yours; D's "first lesson costs $60 blind" find); rig.t never resets between nights (B). B stretch, only if the gate-1 re-audit leaves room: sweep mixed-hardware lines for fuse behaviour (D's +$147 exhibit) and say whether cheap-corner-as-fuse is emergent depth to keep or a hole to close.

Gate 4 — JOHN PLAYS (six sprints standing, and the URL makes it easy)

partly.party/hardyards, five nights, three sentences in THREADS. The Sprint 14 branch — reputation/warranty vs site_03 vs heatwave days — stays undecided until they land. Nobody builds any of the three this sprint.

gate 1: shadow geometry fixed by measurement · separation target ruled and hit ·
        audit cover% predicts sim garden · D feels the difference both ways
gate 2: storm grade in · wall grounded and seamless from in-yard · leaves fly ·
        player leans into the gale · spawn frame clean · camera can't drown in cloth
gate 3: Enter assert pinned · splash, pause, mute, touch notice shipped ·
        the small-ones list empty or argued in THREADS
gate 4: John's three sentences