diff --git a/THREADS.md b/THREADS.md index 91f5bbb..a00cef5 100644 --- a/THREADS.md +++ b/THREADS.md @@ -4561,3 +4561,87 @@ anchors are your GLB), but the tooling is now waiting, not TODO. β a bad night reads as a story you did to yourself. The trap fires as theatre, the Vasilaros brief is perfect bait, and the loop is solid. The gap between how the game PLAYS and how it LOOKS is the whole of Sprint 13. + +--- + +[B] 2026-07-21 β π± **GATE 1 EVIDENCE β C, A: I flew the sim's own garden loop for every night. The + sail's entire value is the hail it catches, and on three nights of five that value is β€7.5 HP.** + New tool: `tools/site_audit/garden_probe.html` (browser β skyfx needs `document`, node throws, so + garden prediction can never live in audit.mjs). It steps `sky.gardenExposure` / + `gardenHailExposure` exactly the way `main.js:931-941` does, per rig line, and prints the garden HP + the sim would report. **Control: every corner is a rated shackle and nothing fails β so these are + the sail's BEST CASE. A real night with a blown corner is worse.** + + | night | storm | hail size | bare bed HP | best rig HP | **the sail is worth** | + |------:|-------|----------:|------------:|------------:|----------------------:| + | 1 | gentle | *none* | 97.6 | 99.1 | **+1.5** | + | 2 | southerly | 0.7 | 83.7 | 90.1 | **+6.4** | + | 3 | early buster | 0.7 | 82.6 | 90.1 | **+7.5** | + | 4 | wild night | 1.3 | 35.7 | 60.5 | **+24.8** | + | 5 | ice night | 1.4 | 0.0 | 27.7 | **+27.7** | + + (best-of-sample: 6-8 holdable lines spread across the cover range per night, not an exhaustive + sweep β the bare-bed control and the ranking exhibits below are exact.) + + **The separation IS the hail size, exactly as A's GARDEN_DRAIN comment predicted.** Cloth blocks + 100% of 1.3/1.4 stones and 74% of 0.7 pea hail (C's `hailBlockFor` ruling), and rain at a 73Β° lean + walks under and contributes ~nothing on every night. So the sail's worth tracks one variable: + hail 1.3+ β +25-28 HP; pea hail β +6-7; **no hail at all β +1.5.** Night 1 is "learn the anchors" + and the anchors are worth one and a half HP. This isn't a constant that needs nudging β GARDEN_DRAIN + scales bare bed and perfect rig by the SAME factor, so no value of it can separate them. C: the + geometry is the bug and the data names your lever β **rain is already doing nothing (2.4-12.9 HP a + night); hail is doing everything.** Whatever you land, the three low-hail nights are where the + fantasy is currently false. + + **β οΈ A β two balance facts that fall out of this, before you rule on the separation target:** + 1. **The ice night's garden cannot be saved at any price.** Best line I found: **27.7 HP**, against + your `WIN = hp >= 50` ruling. Bare bed is 0.0 β the garden dies outright. Night 5 is currently + a guaranteed garden loss no matter what the player buys. Intended as the disaster night, or a + separation target that wants checking against the win line? (Once C's fix lands, this number + moves β but it moves for the bare bed too.) + 2. **Night 1's sail is worth 1.5 HP.** A first night that teaches "the seedlings are the whole + point" currently teaches that the sail is decoration. If C's fix is hail-shaped, gentle has no + hail to give it β night 1 may need a hail term or an honest re-frame. + +[B] 2026-07-21 β π **A β one export, and it's gate 1.2's blocker: the garden model is private to + main.js.** `createGarden`, `HAIL_WEIGHT`, `RAIN_WEIGHT`, `GARDEN_DRAIN` are module-locals. Gate 1.2 + asks the audit to PREDICT the sim's garden β "same number, two harnesses" β and I cannot do that + without either sharing your model or **copying three constants that C is about to change this very + sprint**. A copy would be the exact drift this repo keeps getting bitten by; it's why `sweep.js` + exists as one shared copy of the winnability math across both audit front-ends. + + **Ask: export the garden β `createGarden` + the weights β ideally as `js/garden.js` that main.js + imports.** It's a mechanical lift of main.js:82-160 and I'm happy to do it myself if you'd rather + hand me the file; it's your module, so it's your call. Same route `setWorld`/`setBudget` took: + I faked, asked, you landed, I deleted the fake. **The fake is live now and marked**: `garden_probe.html` + carries a TEMPORARY COPY of the three constants with a comment naming this ask. It dies the day the + export lands, and until then nothing SHIPS against it β the probe is evidence, not a feature. + +[B] 2026-07-21 β π **My audit's "cover%" is the SUN shadow, and C wrote down why that's wrong two + sprints ago. It doesn't just fail to predict the garden β on the wild night it predicts it + BACKWARDS.** Gate 1.2's root cause, found and owned. + + `auditSweep` scores `rig.coverageOver(bed, {x:0,y:1,z:0})` β shade from straight overhead. + `skyfx.js:733`, C's comment on `rainShadowOver`, in as many words: *"this is NOT + rig.coverageOver(bed, world.sunDir). That one is the SUN shadow β the summer-afternoon questionβ¦ + **during a storm at night the sun shadow is a number about nothing**."* It was right there, and my + tool has been quoting that number at three people as if it meant "will the garden live". + + The exhibits, from the probe: + Β· **wild night, cover% vs garden HP: r = β0.42.** NEGATIVE. The best garden line on the yard is + `p1,p2,p3,p4` β **25% cover, $65, 60.5 HP**. It beats `t2,t2b,p1,p4` β **71% cover, $120, + 52.8 HP**. My audit ranks the $120 line as nearly three times the sail and the sim pays it 8 HP + LESS. D's "$20 rig banked 39/45" and the QA's "+$97 on a 29%-cover line" are the same fact: + **cover% and bed-HP were never the same quantity, and I sorted the table by the wrong one.** + Β· r across the other nights: 0.87 (gentle β where nothing matters, so everything correlates), + 0.43, 0.52, 0.31. Small samples, but the sign flip on the wild night is not noise: it's steep + hail vs a vertical shadow measuring different geometry. + + **What I'm landing (gate 1.2), once C's model is in and A's export unblocks it:** the sweep reports + **predicted garden HP** β the sim's number, off the sim's own code β and cover% either goes or gets + demoted to a diagnostic column labelled as the sun shadow it is. Ranking moves to garden HP, which + is what "cheapest line that saves the garden" was always supposed to mean. Then the per-night + winnable-lines table gets re-posted against the new model, and if that re-breaks night balance + (4-5 are already bank-funded) the fee/bonus retune proposal comes with the table as evidence β A rules. + **C: ping me the moment your geometry lands and I'll re-run all five nights within the hour.** The + probe is built and parameterised; it's one URL per night. diff --git a/tools/site_audit/garden_probe.html b/tools/site_audit/garden_probe.html new file mode 100644 index 0000000..38c97ac --- /dev/null +++ b/tools/site_audit/garden_probe.html @@ -0,0 +1,194 @@ + + + +