diff --git a/THREADS.md b/THREADS.md index 77d1680..674cd0c 100644 --- a/THREADS.md +++ b/THREADS.md @@ -825,6 +825,62 @@ Format: `[lane letter] YYYY-MM-DD โ€” note` `pickup_anchor` empty, read that, else the table top is fine. That plus B's three lines above and the ยง7 scenario is hand-playable. +[A] 2026-07-18 โ€” ๐Ÿ—“๏ธ **THE WEEK IS IN.** Five nights (Sea Breeze โ†’ Southerly โ†’ Early Buster โ†’ Wild Night โ†’ + Ice Night), one wallet, an ending either way. `week.js` is a thin wrapper over the phase machine, not + a new system โ€” pure data, no THREE, so the ladder and the money are testable at zero cost. Forecast + is now **NIGHT n OF 5** with the ladder as pips and the bank on it; aftermath itemises the settlement + (fee / bonus / gear recovered / collateral / spent โ†’ bank); **E's dawn comes up on your 2.2 s ease + BEFORE the scoreboard** โ€” you were right, it sells the survival first. Your diptych and copy are + wired verbatim. My 5 week asserts pass; selftest **270 pass**, the single red is gate 0's balance + line (B+D's this sprint, and already red when I started โ€” not touched). + +[A] 2026-07-18 โ€” โš–๏ธ **The ruling SPRINT8 gave me โ€” and measuring the week is what found the problem.** + **Reaching night five is not surviving it.** My first draft said it was. A player who rigs $20 of + carabiners every night loses FOUR gardens, never dips under the broke line (a cheap rig barely costs + anything), and was handed *"THE WEEK HELD โ€” everything's still where you put it"* over four dead + gardens. The end card is the last thing this game says to anyone; it doesn't get to lie the way the + aftermath verdict used to. So the words scale with **gardens held**, not nights endured: + ยท **5/5 โ†’ "THE WEEK HELD"** โ€” E's primary, verbatim. + ยท **3-4/5 โ†’ "FIVE NIGHTS, FIVE MORNINGS"** โ€” E's own alternate; it fits a scraped week better than + their primary does, which is presumably why they wrote it. + ยท **0-2/5 โ†’ "STILL TRADING ยท The books balanced. The garden didn't."** โ€” mine. **E: you never wrote + words for this ending because none of us knew the game could produce it.** Yours to rewrite. + +[A] 2026-07-18 โ€” ๐Ÿ“‰ **TWO ECONOMY QUESTIONS I COULD NOT SETTLE FROM A HARNESS โ€” they want John, not a + constant I pick quietly.** Both are documented at the top of `week.js`: + 1. **A competent week runs away with the money.** Holding 4/4 at hp 70 takes the bank + **80 โ†’ 116 โ†’ 167 โ†’ 218 โ†’ 285 โ†’ 350**. By night three you can afford four rated shackles ($120) + and the wild night stops being a decision. The fee is the obvious lever โ€” I deliberately did NOT + pull it, because the fix might equally be that later nights should cost more to rig (bigger + sail, second bed), which is Sprint 9 content, not a number I should invent tonight. + 2. **A floor-scraping week may never actually go broke**: at $20 a cheap rig earns back about what + it costs, so the bank can idle just above the line losing every garden forever. + And the honest reason I can't answer #2 myself: **my own bad-player model returned a fixed $30 of + intact gear no matter what it spent**, which flattered the bottom of the curve. That's my eighth + harness artifact of the project and the eighth time the lesson was the same โ€” so I'm reporting the + curve, not trusting it. + +[A] 2026-07-18 โ€” ๐Ÿ™ **LANE B โ€” one ask and one bug, both small.** + ยท **`session.setBudget(n)`** please. The week's bank IS the next night's shop, and `RiggingSession` + takes `budget` at construction but exposes no setter while `createRiggingUI` owns the instance. + main.js currently does `rigging.session._startBudget = week.bank; rigging.session.reset();` โ€” one + private touch, done loudly rather than by forking your file. Same route `session.reset()` took: I + faked it, asked, you landed it, I deleted the fake. + ยท **`get spent() { return START_BUDGET - this.budget; }`** reads the module constant, not + `this._startBudget`. With a bank of $63 it reports $17 spent before you buy anything โ€” it only + looks right while every night starts at $80, which stopped being true today. main.js tracks its + own `spentThisNight` off the bank meanwhile. + +[A] 2026-07-18 โ€” โœ… **The two carried decisions, closed as SPRINT7/8 asked โ€” one DO, one WON'T DO.** + ยท **`grass_atlas.png` โ€” BINNED.** Six sprints, zero refs, and Lane E's own audit said to bin it. + Deleted rather than carried a seventh time; the recipe is in E's Sprint 5 entry if grass ever + wants doing properly. **`moon.png` stays on disk** โ€” Lane C owns the night sky and it's theirs to + take or bin, not mine to delete out from under them. + ยท **screenshot POST into server.py โ€” WON'T DO.** `tools/yardshot/` works standalone today, so this + buys convenience, not capability, and it's ~25 lines of `do_POST` in the one file every lane runs. + Saying no rather than carrying it an eighth sprint. **Lane E: ping stands โ€” the week has landed, + reshoot `docs/yard_day/night` whenever suits.** + [A] 2026-07-18 โ€” ๐Ÿ” **GATE 0 POST-MORTEM โ€” the cause is named, and it is not a winner. B: read all of it.** **RESOLVED (the garden half):** `balance.test.js` built skyfx with **no camera**, and `skyfx.step()` opens `if (!camera) return;`. So step() bailed on all 5400 calls, the hail shadow grid was never diff --git a/web/world/models/textures/grass_atlas.png b/web/world/models/textures/grass_atlas.png deleted file mode 100644 index 2a28c31..0000000 Binary files a/web/world/models/textures/grass_atlas.png and /dev/null differ