diff --git a/web/world/js/tests/d.test.js b/web/world/js/tests/d.test.js index a97e913..d6905d0 100644 --- a/web/world/js/tests/d.test.js +++ b/web/world/js/tests/d.test.js @@ -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;