Gate 3.2: bike_kid_01_v1 on backyard_01's south fence, rotYDeg 180 so the baked -Z lean lands ON the fence — bars measured to the rail (0.286 m reach, z 9.69 -> grip at 9.98), tyres 0.31 m clear, between posts. Unpriced by ruling: the sim can't knock a bike over, and billing an unseen event is the lie the invoice kills; the windward-fence pose is the honest one. a.test pins lean direction, standoff band, and the ruling. 318/0/0.
116 lines
5.7 KiB
JSON
116 lines
5.7 KiB
JSON
{
|
|
"id": "backyard_01",
|
|
"name": "The Backyard",
|
|
"blurb": "You've worked this one for years. You know where everything is, which is the only advantage you get.",
|
|
"_blurb": [
|
|
"SPRINT11: this said 'Your own place' until the job sheet put a client's name at the top of the",
|
|
"card and the two lines called each other liars on screen — THE HENDERSONS over 'your own place'.",
|
|
"The blurb gave way, and it wasn't close: 'your own backyard' is a leftover from when the game had",
|
|
"exactly one yard, and DESIGN.md has never wanted it — line 3 is 'every callout is a different",
|
|
"site, a different client', and gate 2 is the sprint where that frame actually arrives.",
|
|
"The line's JOB survives, which is why it's a rewrite and not a deletion: night 1 is the tutorial",
|
|
"because you know this yard, and that advantage now comes from having worked it for years instead",
|
|
"of owning it. Client-agnostic on purpose — the yard is the site's business, the client is the",
|
|
"night's (week.js NIGHTS). Caught by looking at the card, not by a test. No assert reads a blurb."
|
|
],
|
|
|
|
"yard": { "width": 30, "depth": 20 },
|
|
|
|
"sun": { "elevationDeg": 55, "azimuthDeg": -125 },
|
|
|
|
"gardenBed": { "x": 1, "z": 2, "w": 6, "d": 4 },
|
|
|
|
"house": {
|
|
"model": "house_yardside_v1",
|
|
"x": 0, "z": -10.5,
|
|
"anchors": [
|
|
{ "id": "h1", "node": "fascia_anchor_01", "type": "house", "work": "bracket" },
|
|
{ "id": "h2", "node": "fascia_anchor_02", "type": "house", "work": "bracket" },
|
|
{ "id": "h3", "node": "fascia_anchor_03", "type": "house", "work": "bracket" }
|
|
]
|
|
},
|
|
|
|
"trees": [
|
|
{
|
|
"id": "t1", "model": "tree_gum_01_v1",
|
|
"x": -9, "z": 2, "phase": 0.7, "trunkH": 4.2, "anchorY": 3.4,
|
|
"anchors": [
|
|
{ "id": "t1", "node": "branch_anchor_01", "type": "tree", "work": "cloth" },
|
|
{ "id": "t1b", "node": "branch_anchor_02", "type": "tree", "work": "cloth" },
|
|
{ "id": "t1c", "node": "branch_anchor_03", "type": "tree", "work": "cloth" }
|
|
]
|
|
},
|
|
{
|
|
"id": "t2", "model": "tree_gum_02_v1",
|
|
"x": 8, "z": -2, "phase": 2.9, "trunkH": 3.8, "anchorY": 3.1,
|
|
"anchors": [
|
|
{ "id": "t2", "node": "branch_anchor_01", "type": "tree", "work": "cloth" },
|
|
{ "id": "t2b", "node": "branch_anchor_02", "type": "tree", "work": "cloth" }
|
|
]
|
|
}
|
|
],
|
|
|
|
"posts": [
|
|
{ "id": "p1", "x": -4.5, "z": 5.5, "h": 4.0, "type": "post", "work": "cloth" },
|
|
{ "id": "p2", "x": 4.0, "z": 6.0, "h": 4.0, "type": "post", "work": "cloth" },
|
|
{ "id": "p3", "x": 0, "z": 7.0, "h": 4.0, "type": "post", "work": "cloth" },
|
|
{
|
|
"id": "p4", "x": -3.2, "z": -1.2, "h": 4.0, "type": "post", "work": "cloth",
|
|
"_why": [
|
|
"DO NOT move this post toward the bed. Its position is swept, not chosen, and it is the",
|
|
"single number holding DESIGN.md's central tension open.",
|
|
"",
|
|
"Before p4 the wild night had NO winnable line, for a geometric reason: every anchor near",
|
|
"the bed (p1/p2/p3) is SOUTH of it and nothing stands north short of the house 10 m away,",
|
|
"so covering rigs had to span the yard and died while rigs small enough to survive sat",
|
|
"beside the bed rather than over it. p4 supplies the missing north-west corner.",
|
|
"",
|
|
"Swept against the smallest quad covering 90% of the bed:",
|
|
" (-2.2, -1.2) -> 44.4 m2 DO NOT: full coverage lands INSIDE the survivable band,",
|
|
" so covering the bed stops costing risk and the rigging",
|
|
" puzzle loses its wrong answers.",
|
|
" (-3.2, -1.2) -> 48.6 m2 <- here (with the 8 deg rake the top anchor lands at",
|
|
" -3.72,-1.40 and full coverage costs 51.6 m2)",
|
|
" (-3.2, -2.0) -> 51.7 m2",
|
|
" (-4.2, -3.0) -> 60.0 m2",
|
|
" beyond z=-4 -> 63.5 m2, i.e. too far out to matter at all",
|
|
"",
|
|
"Full coverage costs 63.5 m2 without it and 51.6 with: a real new option, still bigger",
|
|
"than the 23-38 m2 rigs that survive unaided. a.test.js asserts the >45 m2 floor, so",
|
|
"moving this inward goes red — that assert is the tension's only guard."
|
|
]
|
|
}
|
|
],
|
|
|
|
"shed": { "model": "shed_01_v1", "x": 11.8, "z": 6.2, "rotYDeg": -90 },
|
|
"shedTable": { "model": "shed_table_v1", "x": 9, "z": 6, "rotYDeg": -90, "pickupNode": "pickup_anchor" },
|
|
|
|
"gnome": { "model": "garden_gnome_01_v1", "x": 4.3, "z": 4.4, "rotYDeg": -126, "collateralValue": 25 },
|
|
|
|
"bike": {
|
|
"model": "bike_kid_01_v1", "x": -7, "z": 9.69, "rotYDeg": 180,
|
|
"_why": [
|
|
"The Hendersons' kid's bike, against the south fence. THE LEAN IS BAKED INTO THE GLB and it",
|
|
"leans toward local -Z (E's THREADS note; e.test pins it) - a bike doesn't stand up on its own.",
|
|
"rotYDeg 180 turns that lean into global +Z, INTO the fence. Any placement that doesn't point",
|
|
"the lean at something to lean ON reads as a physics bug and isn't one.",
|
|
"z is MEASURED, not reasoned: the bars' grip reaches 0.286 m past the origin (the tyre contact",
|
|
"line) toward the lean, and the fence rails sit at z = 10 +/- 0.02, so 9.69 + 0.286 = 9.98 =",
|
|
"the rail's inner face - bars touch the fence, tyres stand 0.31 m clear. x = -7 sits between",
|
|
"fence posts (-7.5 and -5), so the grip meets rail, not post.",
|
|
"NO collateralValue, BY RULING (THREADS [A] sprint 12): the sim cannot knock a bike over, and",
|
|
"billing $60 for an event the player never sees is the kind of lie the invoice exists to kill.",
|
|
"Leaning on the windward fence is the one pose a southerly can't falsify - the gust pins it",
|
|
"harder. Price it the day it can fall."
|
|
]
|
|
},
|
|
|
|
"fence": {
|
|
"sides": ["south", "west", "east"]
|
|
},
|
|
|
|
"wind": {
|
|
"venturi": []
|
|
}
|
|
}
|