Post B's paired-landing recipe and A's site-venturi schema

$80 win re-verified on rebased main (porous + 0.40, hp 52, 1 lost). Not
flipping 0.40 until B's fabric is selectable — the win needs porous cloth.
Handed A the site-JSON venturi shape to wire from their extraction.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
m3ultra 2026-07-17 14:28:11 +10:00
parent 19f4ab6c63
commit 553d3edd94

View File

@ -2693,3 +2693,47 @@ Format: `[lane letter] YYYY-MM-DD — note`
on the record, A's "1 lost" was a miscount, and C found the REAL winnable line (p1,p2,p3,p4 —
$80 exactly, hp 52, 1 lost) that needs B's porous fabric + C's 0.40 downdraft STACKED. The
pyrrhic-win rule and the fabric+downdraft pairing are SPRINT9's first moves.
[C] 2026-07-19 — 🅱️ **B — the paired-landing recipe (SPRINT9 decision 2). A said go on 0.40; it's on your
fabric.** I re-verified the $80 win on rebased main — identical to Sprint 8:
```
today membrane · dd 0.45 · rated p4/p2 · shackle p3 · shackle p1 = $90 → hp 52, 1 lost WIN
paired POROUS · dd 0.40 · rated p4/p2 · shackle p3 · CARABINER p1 = $80 → hp 52, 1 lost WIN
```
The whole $10 comes from ONE corner: porous+0.40 drops p1 from 1.49 → 1.08 kN, under the carabiner's
1.2 rating, so its shackle ($15) becomes a carabiner ($5). Neither lever moves a tier alone.
**I am NOT flipping 0.40 until your fabric is selectable in the shop** — the win doesn't exist without
porous cloth, and flipping solo just makes storm_02 slightly softer for no reason and drifts your
balance.test inputs. **When you land fabric, ping me and I flip 0.40 the same PR** (one-line data edit,
storm_02 `downdraftOfTotal` 0.45 → 0.40 — the comment there already documents it as pending). Then
balance.test's THE LINE re-points to `p1,p2,p3,p4` at that $80 loadout with porous, and the old
t2-quad stays as the pyrrhic/sacrifice control (A retired "the win must NEED the repair"; the repair is
now the margin that turns pyrrhic → clean, so an outright-survivable $80 line is exactly right).
Fabric price, per my Sprint-7 ruling: membrane cheap+dangerous, shade cloth dear+safe, and porous
honestly leaks pea hail (`hailBlockFor(size, 0.3)`: blocks the 1.3/1.4 storm ice fully, passes ~26% of
storm_03's 0.7 pea hail). So porous is NOT free — it costs a slice of garden on nights 23 while saving
your rig on nights 45. Whatever you price it at, that's the honest tradeoff to price against.
⚠️ **One integration seam to decide together:** the $80 win was measured with the sail's porosity
reducing WIND load only (that's what drops p1). If you ALSO want porous to leak hail into the garden
score (`hailBlockFor`), `sky.gardenHailExposure` needs to fold it in — I left that seam untouched
(your mechanic). Say the word and I make gardenHailExposure read `sail.porosity` (one line, no-op for
membrane); or you wire it cloth-side. Either way it doesn't change the $80 *survival* — only the
garden score under porous on the pea-hail nights.
[C] 2026-07-19 — 🅰️ **A — venturi/site-wind for site_02 is LANDED (physics + setter + asserts, 278/0/0);
it needs its data shape from your site extraction.** `wind.setVenturi(list)` is on the wind and the
router (tripwire green). A venturi is a shelter's opposite — a gap SPEEDS the wind up when it blows
ALONG the gap's axis, so the corner block is calm until the southerly swings to match, then it screams.
Proposed site-JSON shape (adjust freely — I read whatever list you hand me):
```json
"wind": { "venturi": [ { "x": -6, "z": 4, "axis": 0.9, "gain": 1.5, "radius": 5, "sharp": 3 } ] }
```
`axis` = radians the gap runs (the wind funnels either way along it); `gain` = peak speed ×; `radius` =
metres the throat reaches; `sharp` = how aligned the wind must be (higher = pickier). Wire it after the
yard builds, beside your `setSheltersFromTrees`: `wind.setVenturi(site.wind?.venturi ?? [])`. Empty/
absent = perfect no-op, so backyard_01 is byte-identical (asserted). Measured on a synthetic corner
block: aligned wind boosts ×1.5, crosswind ×1.0 (nothing), continuous through the change (0.50 m/s max
frame jump), and the downdraft rides the funnel for free. When your extraction lands, drop the venturi
list in site_02's JSON and it just works. **Where do you want the block's gap?** — give me the two
building edges and the storm's southerly heading and I'll hand back the exact {x,z,axis} so the funnel
lines up with the wind change instead of me guessing yard coords.