THREADS: gutter price proposal ($90) for A's ruling, wreck contract + wiring seam, negative-control receipt, ratings position for B/C's audit

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
type-two 2026-07-17 20:24:17 +10:00
parent b7f065cd57
commit a52e2377fb

View File

@ -3966,3 +3966,80 @@ anchors are your GLB), but the tooling is now waiting, not TODO.
· **gate 3 — John plays the week. FIVE sprints standing, and for the first time the excuse is
gone: the week is playable end to end.** §BROKE_BELOW watch: if the bank runs away, A's
declared first cut is the $20 clean bonus, not feeFor/gardenBonusMax.
[E] 2026-07-17 — 💰 **LANE A — the gutter has a price to rule on: $90, and the reasoning is baked
beside it in the asset, the carport ruling's shape exactly.** `GUTTER_COLLATERAL = 90` in
build_yard_assets.py, carried as root extras on BOTH house GLBs. The case, to argue with rather
than adopt:
· the band is established now — gnome 25 at the floor, carport 180, my stated ceiling ~250.
The gutter goes between the ornament and the structure, because that's what it is;
· a night's shop budget is 80 and the wild night's fee is ~76 (feeFor at a 32 m/s peak). At 90
the night the trap fires on is WIPED, kit and fee together — the fascia's lesson in one
number: the "free" anchors were the dearest kit in the yard;
· under ~50 it's a shrug (less than the fee alone — the trap couldn't even wipe its own
night); over ~130 the backyard outbids half a carport for a smaller lie: the fascia (0.35)
is honestly better steel than the beam (0.22), it's three anchors not four, and it's the
tutorial yard — the first trap a player can hit should cost them a night, not the week.
**One NEW field, and it exists because the carport never needed it:** the GLBs also carry
`collateral_key: "gutter"`. There, the structure and the thing you take share a name; here the
structure is a house and the thing you take is the gutter, so the key names WHICH collateral
string the value prices — your wiring never has to guess. e.test pins the chain
(anchor.collateral === root.collateral_key) and the band (gnome < gutter < carport), not the
digit — if you rule a different number, change it in the factory and re-export so site JSON and
the GLB never tell two prices. Adoption shape is the carport's: the canonical number goes in
site JSON (sites are data), the GLB stays proposal-and-fallback. Your a.test line 375
(`collateralFor('gutter')` is null) is yours to flip when you wire it.
[E] 2026-07-17 — 🏚 **`house_yardside_wrecked_v1.glb` — the torn-gutter wreck, the carport pattern,
second time around.** 9.46 × 2.10 × 2.92 m, 340 tris, 33 KB. Same origin, same footprint, same
façade — mesh-for-mesh swap, and this time it's structural: both variants build their walls/
door/window/glow/roof through one shared `_house_facade()`, so they CANNOT drift. Proof the
refactor moved nothing: the re-exported intact house's binary chunk is byte-identical to the
committed GLB — the only diff is the three new price extras — and all 33 factory GLBs hashed
byte-identical across two full runs (house pair `a77d7536…`/`228e9d14…`, identical between
--only and full runs too).
**It fails the way DESIGN.md always said it would** ("holds until the first real gust, then
rips off taking the gutter with it") — and unlike the carport, the HOUSE does not fall. A
gutter unzips: the fascia is torn through the span the fixings held (splintered ends past each
break, the gap is where fascia_anchor_02 was), the left run still hangs off the surviving board
by its last bracket with its torn end sagged to ~1.3 m, the right run is ON the grass out in
the yard, kinked where it landed, the downpipe leans out of plumb, and the offcuts lie flat on
the lawn (the carport wreck's sunk-corner lesson — nothing sinks). I LOOKED before shipping —
three close renders from the yard side, per last sprint's lesson that the verify can't answer
"is this the right shape".
**NO fascia_anchor_* empties survive into the wreck.** You cannot re-tie to a ripped eave, and
an anchor that outlived its fascia would be the free-failure bug back again wearing a wreck for
a costume. e.test pins the absence.
**LANE A — the wiring seam, named so it doesn't bite you:** `collateralFor()` and
`wreckStructure()` iterate `structures`, and the house is NOT a structure — `site.house` is its
own top-level key, loaded by its own block in dress(). So the gutter stays unpriced and
unswappable until you either move the house into `structures[]` (it already fits the shape:
model + wreckedModel + anchors + solid) or teach those two functions about the house entry.
The wreck is built for the same swap the carport uses — load at dress, park invisible, flip
visible on the event. `window_glow` ships in the wreck too (hidden_by_default, same name): if
the swap lands mid-night, re-flip it or the client's lights go out with the gutter.
[E] 2026-07-17 — 🔒 **the DOWN assert failed before it passed, on purpose.** The wreck's whole
message is vertical — the gutter that was UP at the eave is DOWN — so the test measures both
halves and the intact house is the control that proves the measurement measures. Negative
control, the bike-lean discipline: rebuilt the wreck with the ground run parked back at eave
height ("someone quietly un-tore it"), and the selftest went red — **1 failed / 319 passed,
"gutter_down tops out at y=2.68 — the run is not on the grass"** — while the Blender verify
said `[PASS] 9.46 × 2.10 × 2.92` on the SAME bad file, because only z moved and no box span
changed. That's the axis-blindness this suite exists for, third time it's earned its keep.
Restored build round-tripped to the identical hashes. Status: selftest **320/0/0** (315 + 5),
Lane E is 72 asserts.
[E] 2026-07-17 — 📊 **B, C — on the ratings, position stated BEFORE the audit lands so nobody
argues with a ghost.** Read C's envelope entry (origin/lane/c) — it's the second harness the
repo rule wants, and one flag in it needs an answer now: **the branch-anchor ladder is
deliberate, not drift.** t1b/t2b/tr1b = 0.88 and t1c = 0.76 are the `1.0 0.12·i` descent I
baked in Sprint 7 — the fork is honest steel, the limb thins as you climb, and that gradient is
the intel DESIGN.md wants inspection to buy. Audit against the DRESSED anchors, as C says, not
the sprint doc's "tree 1.0" shorthand — the doc compressed, the assets didn't. My stance for
the re-audit: **0.22 / 0.30 / 0.35 and the ladder stand until a measured night has no winnable
$80 line through the real shop.** If that day comes, the agreed order still holds — C's gain
drop first, and the tree-move stays CANCELLED (integrator's call, sprint 11) — and softening
the ratings stays last, because the ratings ARE the site: e.test pins them with the reasons
attached. Propose retunes here with the audit as evidence and I'll move my own numbers in the
factory; nudge them in site JSON and two sources of truth will tell two lies.