Lane D S18: the refusal pin, re-ruled by my own fix — 584/0/0

My whyNot fix made my own assert stale, which is fair. The pin now asks the
question the wording answers: standing at the beam with two posts still up, the
refusal has to say WALK; with every live corner up a wall, it has to say the
knife cannot reach it. Two arms, because that is how many reasons there are.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
type-two 2026-07-25 21:35:41 +10:00
parent 097f453b9d
commit e0e9f69e71

View File

@ -1414,8 +1414,22 @@ export default async function run(t) {
'the carport BEAM is bracket work — a knife cannot reach it, and having no time to fetch the '
+ 'ladder is the emergency\'s whole premise');
assert(!cuttable(corners[3], YARD.anchor('cb1')), 'cuttable() states the same rule directly');
// and the read says WHICH TOOL, rather than going silent — the greyed-prompt rule, S13
assert(/ladder/.test(K.read().whyNot ?? ''), 'the refusal names the tool it would need');
/**
* THE REFUSAL SAYS WHICH OF THE TWO REASONS IT IS, and this pin exists because playing it
* caught the version that did not: one constant that always blamed the bracket, so on a yard
* with no bracket in the quad the game told me to fetch a ladder for a corner that does not
* exist. `needsLadder`'s own SPRINT10 disease a rule keyed on the wrong thing, failing
* plausibly on the surface built to explain it.
*/
assert(/cleat|strop/.test(K.read().whyNot ?? ''),
`standing at the beam with two posts still up, the answer is WALK: ${K.read().whyNot}`);
const bracketOnly = fakeRig([
{ anchorId: 'cb1', broken: false, hw: { name: 'shackle', cost: 15, rating: 3200 } },
]);
const K2 = knifeAt(p, bracketOnly);
assert(/bracket/.test(K2.read().whyNot ?? ''),
`with every live corner up a wall, the answer is that the knife cannot reach it: ${K2.read().whyNot}`);
// out of range of everything: still a sail, still no cut
p.pos.x = 0; p.pos.z = 0;