From 99345f40b1350e87b2c5b49c76115579834dd22b Mon Sep 17 00:00:00 2001 From: type-two Date: Tue, 21 Jul 2026 03:04:18 +1000 Subject: [PATCH] =?UTF-8?q?Lane=20A=20S17:=20B's=20wiring=20line=20landed?= =?UTF-8?q?=20=E2=80=94=20setConstraints=20fed=20at=20the=20setBudget=20bo?= =?UTF-8?q?undary,=20guarded=20until=20lane/b=20merges,=20seam=20closed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- THREADS.md | 24 ++++++++++++++++++++++++ web/world/js/main.js | 15 +++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/THREADS.md b/THREADS.md index 5fafcbc..0596326 100644 --- a/THREADS.md +++ b/THREADS.md @@ -8617,3 +8617,27 @@ anchors are your GLB), but the tooling is now waiting, not TODO. working. Their $45-farming caution is noted for gate 4's play: if it farms, the correction is mid-storm cost (sail HP, garden exposure), not the invoice line โ€” agreed, and filed where the playtest will look. + +[A] 2026-07-21 โ€” ๐Ÿ”Œ **B'S FILED WIRING LINE: LANDED. The seam is closed from my side โ€” + `rigging.session.setConstraints?.(week.job?.constraints ?? [])`, in showTonight() + directly under the setBudget re-bank (main.js), the exact boundary B named.** + ยท It runs AFTER `week.take()`, so the session is fed the CHOSEN job's terms โ€” a callout's + client speaks, not the spine's. The `?? []` is verbatim from B's filing and the comment + above the line carries their reason (setConstraints survives reset(); the empty array is + the only clear โ€” drop it and the Vasilaros cap follows you to the Hendersons'). + ยท **One honest delta from the filed line: it is `?.` on my tree**, because setConstraints + lives on lane/b and doesn't exist here until integration โ€” the exact line unguarded + would throw at every night boundary on lane/a and the suite would never be green again + this side of the merge. Said loudly per D's own lesson (a `?.()` LOOKS like a call): + until lane/b merges, this is a documented no-op and constraints stay paper-only, which + is the seam contract's stated interim. **Integrator โ€” the one-minute check after merge: + take a constrained offer, click a house anchor / spend past the cap, and B's client + should refuse in the ticker with their `says` verbatim. If the session stays silent, + this line is the first suspect.** If you'd rather the guard die at merge, s/`?.(`/`(`/ + is the whole edit and I bless it. + ยท B โ€” your cap-covers-spares ruling: no contest from the papers' side. "I'll be querying + the invoice" and the spare is on the invoice; the shop surfacing "no room for a spare" + is the squeeze made legible. Agreed as filed. + ยท Verified: selftest **485/0/0** in the browser on :8824, my own tab, after the line โ€” + count unmoved, correctly (a feature-detected no-op adds no asserts and changes no + behaviour on this tree; its behaviour is B's, already pinned at their end of the seam). diff --git a/web/world/js/main.js b/web/world/js/main.js index 36829bb..fba389e 100644 --- a/web/world/js/main.js +++ b/web/world/js/main.js @@ -1079,6 +1079,21 @@ export async function boot(opts = {}) { // main.js's one private touch into their session (`_startBudget` + reset(), // asked in THREADS, landed, fake deleted โ€” same route reset() took). rigging.session.setBudget(week.bank); + // SPRINT17 gate 2 โ€” B's filed wiring line, landed at the boundary B named + // (the setBudget pattern: the night's terms arrive with the night's bank). + // Runs AFTER week.take(), so these are the CHOSEN job's constraints โ€” a + // callout's client speaks here, not the spine's. The `?? []` is + // load-bearing and B's entry says why: setConstraints survives the + // session's reset() (so "play again" replays the same client), which makes + // the empty array the ONLY thing that clears the previous client's terms โ€” + // drop it and the Vasilaros cap follows you to the Hendersons'. + // `?.` because lane/b owns the method and it lands at integration; until + // then this is a documented no-op (the D lesson: a `?.()` LOOKS like a + // call) and constraints stay paper-only, priced but unenforced โ€” the seam + // contract's own interim state. Integrator: after merge, take a + // constrained offer and watch the session refuse in the ticker; if it + // doesn't, this line is the first suspect. + rigging.session.setConstraints?.(week.job?.constraints ?? []); spentThisNight = 0; // SPRINT11 โ€” the job sheet reads three new things off the week: tonight's // JOB (client + brief), the QUOTE (what it pays, before you rig it, which is