e0e9f69e71
7 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
db1977f55d |
Lane D S18 gate 1.3: a corner you CUT is not a corner that failed — and gate 1's four unwired seams
THE MONEY. B ruled on the rig that a cut is a decision and emitted no `break`
— but _releaseCorner sets c.broken for a cut exactly as for an overload, and
every ledger surface reads broken. So taking the signature decision billed you
for it five ways: the hardware, the $180 carport you cut the sail TO SAVE
(billed AND wrecked), the gnome's two-corner rule, the clean bonus it voided,
and a free warranty callout tomorrow plus half a star. The invoice would have
printed "You spent the sail to keep the steel" directly above a $180 charge for
the thing you kept. Nobody wrote a wrong line; the join is a flag no verb set
until now. A cut now bills nothing, wrecks nothing, warranties nothing and
costs no standing — and the refund counts it, because "save the anchors" is a
ledger line and not a slogan. `lost` still counts it: the sail IS on the lawn.
THE FOUR SEAMS, all found by playing night 5 and reading the cards, all data or
a name in A's files, all pre-authorised in THREADS, none of them visible to 574
green asserts:
· B's authored cowboy rig had not landed, so the carport corner ARRIVED DOWN
and the knife had no object.
· pay.garden = 0 had not landed; the first emergency invoice paid $38 for a
bed nobody had a prep phase to protect.
· rig.breakCorner?.() — the door is called failCorner. An optional call to a
renamed method is a silent no-op that reads exactly like a call.
· attach({at, wind}) was never passed: clockSkew read 30.02 on the one night
that starts mid-storm, and the knife's own invoice line said "9s in" on a
night you arrive at 30.
And the paper half of John's ruling: at ★0.0 the clamp eats the stand-up
charge, so the card promised a price the game would not take and the invoice
carried "−½★ standing" four rows above "★ 0.0 → ★ 0.0". The documents now print
what will actually be charged. Whether the ruling should have teeth at the
floor is John's, and it is filed with the measurement.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||
|
|
d8d3ef983f |
Lane A S18: ⚖️ E's items answered — 0.80 RULED, palette hunk applied, and the second law deleted because I proved it cannot fire
0.80 adopted as E proposed, reasoning endorsed not re-derived: it earns the
highest rung below the sail post because it is the only palette structure BUILT
to be tied to, and it stops short of 1.00 for section rather than condition.
De-rating honest steel for looking dangerous is the corroded post's lie
inverted, and one of those on a ladder is a trap — two is a pattern the player
learns to distrust generally, which would cost the rust post its teeth. The
"it usually holds" half is ruled IN explicitly: the lesson is "the same failure
has a different price depending on what is underneath it".
Palette hunk applied verbatim to editor.js (eighth application), with E's three
warnings carried into the code. HIDDEN on bare lane/a by `requires` — the
self-healing seam that filter was written for — so it appears by itself at merge
with no third commit. ANCHOR_TYPE widening ENDORSED, deliberately NOT duplicated.
E asked for a second one-variable law (a new TIER must not debut with the
callout). I built it, measured it on E's own poisoned scenario, and it returned
ZERO offences: rule 2 already requires the emergency's yard to be rigged by a
strictly earlier night, so every tier resident in that yard necessarily debuts
on that earlier ordinary job. Permanently green for a structural reason — the
exact shape of my own S17 stormsToPreload filing. Deleted rather than shipped;
the measurement lives in board.js beside the rule it would have extended.
⚖️ Gate 5: the gnome BELONGS in exposureOf and stays — the two harnesses differ
because they answer two questions, and that difference is legitimate where
$45-vs-$90 was not. After E's world.js hunks the remaining delta should be
exactly the gnome and nothing else.
Selftest 539/0/0.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||
|
|
397d9435bc |
Lane A S18: 👁️ played the callout — five bugs 535 green asserts could not see, all fixed and pinned; gate 5's A half
Eyes on the cards found what the suite structurally cannot:
· the board advertised $57 while the dispatch quoted $114 one click apart — the
quote-vs-settle lie walking back in through an unreachable closure inside
boot(). pricedOffers is now the exported pure priceOffer(), rigRecordFor's
precedent, and the bug has its own pin.
· the emergency wore the same grey "callout" tag as the Tuesday alternative
beside it — the tell rule broken on the surface the tell rule is for.
· the invoice argued with itself: the ledger said CB1 "is not on you" and the
verdict blamed CB1. verdictFor now reads `yours`, and the ruling is extracted
as answerableFor() so the RULING is pinnable, not just its consequences.
· the shop lied by $20 — the session charged me for the cowboy's carabiners.
· "the Hendersons IS expecting you", live, on the ruling's headline line.
Gate 5 (A's half): collateralKeyClashes() turns D's second-rust-post landmine
into a tripwire carrying both harnesses' numbers. It reports and does not throw
(D and E are authoring in parallel), and it deliberately does NOT make
exposureOf dedupe — the card is the honest side, the failure route is what needs
per-instance keys, and matching a bug converts a loud disagreement into a quiet
lie.
⚠️ RETRACTED IN THREADS: my $180 balance measurement is contaminated. C found
SailRig.step accepts `t` and never reads it, so setPhase('storm',{at:30}) moves
the sky and not the cloth (4.12× understated load, 93× light rain). B must not
rule the garden bonus against my $38. The TELL survives — CB1 still blows at
t≈33 — the ECONOMY does not.
Selftest 539/0/0 — 522 + 17, the exact sum. 19 mutations, all red with their own
words, controls green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||
|
|
82a52aa014 |
Lane A S18 gate 1 spine: 🚨 THE EMERGENCY CALLOUT — a night that starts in storm, a DISPATCH, double rates, the ledger unchanged
setPhase('storm', {at}) is the whole engine change: windTime() already returns
phaseT during a storm, tick() already ends at STORM_LEN, so an emergency night
is 60s long inside weather that is already working. No new phase.
EMERGENCIES, scheduled per night, not a POOL entry — a seventh pool entry would
re-roll every night's draw, and the one-variable law needs an author to place a
set-piece. Diffed the whole week against HEAD: exactly one line moved, and what
it replaced was corner_block_southerly — the same yard and the same storm as an
ordinary job. The job type is literally the only variable.
⚖️ Rulings: emergency rate ×2.0 (DESIGN.md line 29, canon, UNMEASURED-by-play);
a corner that ARRIVED broken bills nothing, wrecks nothing, books no warranty
and costs no standing (`theirs` on the rig record — without it the game charges
you for a cowboy's carabiner and books you a free callout to fix his work); the
inherited steel does not come home; the ute carries one free spare, or triage is
a verb with no object.
THE ONE-VARIABLE LAW IS NOW CODE: oneVariableOffences() accuses, offersFor()
throws, three-way vacuity guard. E's glasshouse cannot be the emergency's debut
stage no matter who wires what.
The DISPATCH is defined by its refusals: no schedule, no total, no AMOUNT DUE —
nobody costed this job. It prints the call, C's mid-storm read (feature-detected
through a namespace import), the rig that is already up with the down corners
marked ON THE GROUND, and the rate. Pinned in DOM, refusals included.
Seams live and waiting: B's breakCorner door, C's midStormRead, D's cutAway
event (tallied, carried to the settlement, printed on the invoice).
Selftest 535/0/0 — 528 + 7, the exact sum.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||
|
|
27d9ebcc63 |
Lane A S18 gate 0: ⚖️ DECLINING A BOOKED NIGHT COSTS YOU — −½★, on the card and on the invoice
John's ruling, 2026-07-25 ("it adds pressure"), wired end to end.
REP.STOOD_UP = -0.5, the exact mirror of REP.CLEAN: a stood-up client costs
you what a flawless night earns. Bounded above by REP.COLLATERAL so a broken
promise cannot outrank a wrecked carport. UNMEASURED per house rule; it is the
lever, not CLEAN.
isBooked(kind, night) — the diary is booked, the phone is not, and an emergency
in the diary's chair is not a booking. The first cut derived it from the night
alone and the pool yard came back booked; the probe caught it in one call.
take() records the broken promise, settle() charges it at dawn — charging inside
take() drops standing between the board and the sheet, and the fee is priced off
standing. That is the quote-vs-settle lie moved one card earlier.
Three surfaces off one ledger: the offer card prints the cost before the choice
in the client's own terms, the job sheet says they have not forgotten, the
invoice carries an OFF THE BOARD block. Two callouts and no booked job reads as
free, in words, with a vacuity guard behind it.
Selftest 528/0/0 — 522 + 6, the exact sum.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
||
|
|
39701884e3 |
Lane D S17 gate 3.2: THE POOL YARD — authored cold, in the game only by being chosen
site_04_pool_yard: E's ring (fourteen honest noes) east, the bed poolside, ONE corroded post in the venturi channel where the NE corner wants steel. Authored in the editor (palette shapes, iterative SCORE IT x3, canonical export). Gauntlet: WINNABLE at $80 — 13 quads, 6 clean, 1 marginal; cheapest hold $40 (h1,t1b,p2,p3, 92.7 FULL, no rust); every 92%-cover line routes through c1 — clean $65 rated on t1,p1,p2,c1, UNHOLDABLE on the two shapes that pull the eye harder. audit.html over the shipped file reproduces the card to the digit. Separation REFUSED with receipts (bare 83.7 FULL — mild-night canon, A's 0.4). board.js (A's granted edit): pool_yard_southerly POOL entry with the audit receipt. d.test: +5 pins (chosen-never-scripted, ring/rust facts, judged-XOR, wreck apron, exposure $160). gardenfly.selftest (B's file, flagged): judged walk 3 -> 4 in the same commit that ships the yard. Selftest 515/0/0 (510 + 5, the count moved by exactly what was added). Mutations: 1 full-suite (finding stripped -> DOUBLE red: B's walk 'UNJUDGED' + my XOR pin, 513/2), 10 probed (entry deleted/re-paired/receipt stripped/ scripted-slot, gnome unpriced/rust zeroed/fence priced, apron x3) — every one red with its own words, controls green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
dd69a2cf6c |
Lane A S17 gates 0+1+2: THE JOB BOARD — two offers a morning, the chosen job IS the night
Gate 0 rulings (written, with reasoning, in THREADS): - 0.4 hail-light balance: CANON. B's finding reproduces exactly ($4/$2 garden spread), but the mild-night rig market buys the STEEL and the collateral, not the bed — a cheap rig that fails on site_02 swings $184 and two stars against the same rig holding, and the cheapest HOLDING line is $40, not the $20 floor. Ruled for B's option (b): the separation block asks the wrong question on those nights; the new shape is B's and is NOT this sprint. Rain drain-weight lever declined at its proper price (full gauntlet re-measure, own gate). - 0.4b gradeFor scraped/solvent >=3 STANDS on the seven-night shape, ruled on the arithmetic (savable 6 → solvent is 4-6 dead, which is what the copy says). - 0.3 score-header wording consulted for B (no code from me). Gate 1 — the board: board.js (pure data, node-testable), week.offers()/take(), seeded from week+night via contracts' mulberry32 — no Date.now, no Math.random. An offer carries a whole NIGHT ENTRY and take() installs it, so sheet, quote, invoice, ledger, warranty, rep and end card all read a chosen job through the path they already had — seven surfaces, zero changed lines. Scripted spine runs byte-identically when nothing is taken. Gate 2 (data half) — constraints as night data, checked enum, premium ruled (+25% anchor ban / +20% budget cap, both UNMEASURED and flagged cut-first), stated on the offer, the job sheet and the invoice it was paid under. ONE calloutFee() now serves quote() and settle(). Enforcement is B's. Two bugs found off the suite: take() stored raw pool entries (crashed quote() on a missing pay block) → normaliseNight() split so both doors share it; and NIGHT 1 HAD NO BOARD — the splash bypassed it — found by looking, not testing. Pool pairings audited in the browser before shipping; both constraints checked for soft-lock against real holding lines. Mutation-checked ×6. One did NOT go red: "every pool storm is preloaded" passed with the POOL source deleted, because every pool storm is also in NIGHTS — the same coincidence that hid the calm-day bug. stormsToPreload(nights, pool) split so it can fail. Selftest 485/0/0 (474 + 11). |