You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 51792f8
Browse filesBrowse the repository at this point in the historyBrowse files
fix(platform-checklist): count the binding pin over comment-MASKED source, and disclose what it still cannot see
F3, third pass. The pin demanded exactly one occurrence of each call site and
counted RAW source, so the most ordinary severing gesture there is walked
straight past it: commenting the call out IN PLACE left the commented line as
the one occurrence, and `--self-test` stayed at 217/217 with the live gate at
264 active. The nastier variant did the same while inverting behaviour —
comment the `mappedCount` gate out, add an ungated increment below it, and a
kind mapped only to planned items is counted as covered on the OK line.
The remedy is one line: `maskComments`, already imported in this file and
already used twice in it, applied before counting. Masking also settles the
decoy rule in the only consistent direction — a copy inside a comment is
neither a call site nor a decoy, so it must neither satisfy the count nor
inflate it.
⛔ And the claim is narrowed to the enforcement, which is the part that is not
optional. This is a TEXT pin. It answers "is this call site still written, in
live code, exactly once?" and it is NOT proof the call executes: shadowing, a
call moved into a never-called helper, and a call left under a dead branch all
keep the spelling intact and this pin reports nothing. The docblock says so and
G12 asserts it, so nobody reads a green G1 as more than it is. Closing those
needs the walk driven over a fixture ledger — a root knob or the walk factored
into a callable — which is not built here by the seat's scope call.
G9–G11 keep the mask: reverting it to a raw count reds those three rows and
nothing else. The OFF legs' first-occurrence anchoring is noted where they are
written.
Claude-Session: https://claude.ai/code/session_01AmH9bKvGoLjiY86Q4Z3og2
Co-authored-by: Claude <noreply@anthropic.com>
* which stays written and starts returning nothing;
278
+
* - **a dead helper** — the call moved into a function nobody invokes;
279
+
* - **a dead branch** — the call left under a condition that never holds.
280
+
*
281
+
* Those are SEMANTIC, and no text pin can reach them: the spelling is intact in
282
+
* every one. Closing them needs the walk driven over a fixture ledger, which
283
+
* needs a root knob (`AREAS_DIR` is fixed from `import.meta.url`) or the walk
284
+
* factored into a callable. That is deliberately NOT built here, and this
285
+
* paragraph is the disclosure that makes the omission a recorded trade rather
286
+
* than an implied guarantee. ⛔ Do not describe this function as proving the
287
+
* bindings execute.
288
+
*
289
+
* What masking DOES close is the form that defeated the first version of this
290
+
* pin: **commenting the call out in place**. The commented line was the one
291
+
* occurrence, the raw-source count read 1, and everything stayed green — the
292
+
* exact "commented-out draft" this function's own decoy note already named.
293
+
* `maskComments` is applied before counting for that reason, and three OFF legs
294
+
* below drive it.
295
+
*
268
296
* ⚠️ This pin is SPELLING-SENSITIVE on purpose, and that is its whole cost:
269
297
* rewording a call site reds it. ⛔ The repair is to update the pinned spelling
270
298
* in the same edit — ⛔ never to delete the row, which is indistinguishable
271
299
* from severing the call it guards.
272
300
*
273
-
* @param {string} source this module's own text
274
-
* @returns {string[]} one message per binding that is not present
301
+
* Readings quoted above were taken on `claude/issue-19157-checklist-planned-status`
302
+
* at `b835196bc1` (this repo) — a count without the tree it came from is not a
303
+
* reading.
304
+
*
305
+
* @param {string} source this module's own text, raw; comments are masked here
306
+
* @returns {string[]} one message per binding that is not present in LIVE code
275
307
*/
276
308
functionstatusBindingProblems(source){
277
309
constproblems=[];
310
+
// ⭐ Comments are masked BEFORE counting, and that one call is the whole
311
+
// difference between a pin that fires on a commented-out call site and one
312
+
// that does not. It also fixes the decoy rule's own blind spot in the right
313
+
// direction: a copy of a pinned spelling sitting in a comment is not a live
314
+
// call site, so it must neither satisfy the count nor inflate it.
315
+
// ⛔ Do not switch this back to raw `source` to make a reword green.
316
+
constlive=maskComments(String(source));
278
317
/**
279
-
* EXACTLY ONE occurrence, not "at least one" — and the second direction is
280
-
* the one this was rewritten for. The OFF legs below sever a call site over
281
-
* a copy of this text, so anything that leaves a SECOND literal copy of a
282
-
* pinned spelling anywhere in this file (a needle written out longhand, a
283
-
* commented-out draft, a doc example) keeps this check green after the real
284
-
* call is gone. That is a decoy, and the first draft of this very function
285
-
* shipped one: its severing needles were plain string literals, the predicate
286
-
* matched THOSE, and both OFF legs read as passes. The OFF legs caught it.
318
+
* EXACTLY ONE occurrence in LIVE code, not "at least one" — and the second
319
+
* direction is the one this was rewritten for. The OFF legs below sever a
320
+
* call site over a copy of this text, so anything that leaves a SECOND
321
+
* literal copy of a pinned spelling in live code (a needle written out
322
+
* longhand, a doc example in a template string) keeps this check green after
323
+
* the real call is gone. That is a decoy, and the first draft of this very
324
+
* function shipped one: its severing needles were plain string literals, the
325
+
* predicate matched THOSE, and both OFF legs read as passes. The OFF legs
326
+
* caught it.
327
+
*
328
+
* A copy inside a COMMENT is neither a decoy nor a call site — masking removes
329
+
* it from both sides of the count, which is the only consistent reading: the
330
+
* same commented line must not satisfy the rule when the real call is gone.
287
331
*/
288
332
constbound=(re,what)=>{
289
-
consthits=source.match(re)?.length??0;
333
+
consthits=live.match(re)?.length??0;
290
334
if(hits===1)return;
291
335
problems.push(
292
336
hits===0
293
337
? what
294
-
: `${what} — and this spelling occurs ${hits} times in the file; a second literal copy of a pinned call site is a DECOY that holds this check green after the real one is severed`,
338
+
: `${what} — and this spelling occurs ${hits} times in LIVE code; a second literal copy of a pinned call site is a DECOY that holds this check green after the real one is severed`,
t('G10 OFF — commenting the `mappedCount` gate out and adding an UNGATED increment in its place FIRES: the spelling survives in the comment while the behaviour inverts, and a kind mapped only to planned items would be counted as covered on the OK line',
t('G11 a copy of a pinned spelling inside a COMMENT neither satisfies the rule nor inflates it — the same masked line must not stand in for a call site that is gone',
2471
+
statusBindingProblems(`${OWN_SOURCE}\n// for (const msg of statusField${'Problems(item)) where(msg);'}`).length===0
2472
+
&&statusBindingProblems(`${outWalk.text}\n// a second commented copy changes nothing`).some((p)=>p.includes('statusFieldProblems(item)')));
2473
+
2474
+
// ⛔ And the disclosure, asserted rather than left to the docblock: the three
2475
+
// SEMANTIC severings this pin cannot see. Each keeps the spelling intact, so
2476
+
// the predicate reports no problem — that is the honest answer, and the row
2477
+
// exists so nobody reads a green G1 as "the bindings execute".
t('G12 DISCLOSED LIMIT — a shadowing redefinition leaves the spelling intact and this pin reports NOTHING. It is a TEXT pin; ⛔ never read it as proof the call executes',
2480
+
statusBindingProblems(shadowed).length===0);
2481
+
2376
2482
// ── the live control ──────────────────────────────────────────────────────
2377
2483
// The fixtures prove the rules; this reads the ledger the gate actually
2378
2484
// validates and proves they are pointed at IT. Every assertion above would
@@ -2418,7 +2524,7 @@ if (process.argv.slice(2).includes('--self-test')) {
2418
2524
' and the `/meta` call-spelling refusal reads its vocabulary out of the live generated contract, fires on every folded spelling a `call` can instruct, and stays silent on the canonical singular, on parameter placeholders, and on the `why`/`expect`/`source`/`requires` prose that narrates the fold;'+
2419
2525
' and the line-citation limb DETECTS NOTHING ITSELF EITHER: the last forked grammar in this file went into the shared core at #18592, so what is pinned here is the BINDING — the corpus declaring `pathlessLineCitations`, a source read finding no citation regex and no detector while the same read DOES find the declaration, the binding driven ON and OFF against ONE text so the green is the declaration working rather than a text that would have matched anyway, the DARK case that a citation both grammars already agreed on keeps its verdict either way, the refusal to over-fire on this ledger\'s own HTTP statuses, config literals, URL ports, clock times and quoted JSON, and the live zero with the control that says it is a reading;'+
2420
2526
' and the symbol-anchor limb DETECTS NOTHING AND RESOLVES NOTHING ITSELF: it is a registered corpus (#18107), so the grammar, the walk and the verdict are all `scripts/symbol-anchors.mjs`\'s, pinned here by a source read that finds no local extension set, no anchor regex and no detector while the same read DOES find the registration, by the anchorable-extension vocabulary being the shared OBJECT rather than a copy of it, by the `runs/` exclusion driven three ways on the live corpus (the subtree holds files, none is swept, the areas beside it still are, and dropping the exclusion puts them back), and by the #16898 binding re-taken through the registration — a call site / import / local parameter / string-substring all reading ABSENT, the positive control that a declaration and a complete quoted token still resolve, a `.json` key resolving where a `.json` value does not, an INLINE object-literal key reading absent where one at the start of a line resolves — with the closed, grow-never residual and the per-file anchor floor held in both directions beside it;'+
2421
-
` and the \`planned\` status is driven on fixtures rather than on a ledger that carries none of it — the accept set widened without losing its closure, \`since: null\`/no-steps/personas relaxed for planned alone while the ${plannedStatus.liveItems} live items are judged exactly as before, and the coverage ratchet held BOTH ways: a planned item beside an active one is silent, a kind whose only items are planned is UNMAPPED, and the bearing set is pinned NOT to contain \`planned\`; and the two CALL SITES those rules ride on are pinned by a source read driven ON and OFF, because severing either one left this very self-test green.`,
2527
+
` and the \`planned\` status is driven on fixtures rather than on a ledger that carries none of it — the accept set widened without losing its closure, \`since: null\`/no-steps/personas relaxed for planned alone while the ${plannedStatus.liveItems} live items are judged exactly as before, and the coverage ratchet held BOTH ways: a planned item beside an active one is silent, a kind whose only items are planned is UNMAPPED, and the bearing set is pinned NOT to contain \`planned\`; and the two CALL SITES those rules ride on are pinned by a source read over comment-MASKED source driven ON and OFF, because severing either one — by deletion OR by commenting it out in place — left this very self-test green; \u26d4 that pin is a TEXT pin and G12 records the three semantic severings it cannot see.`,
0 commit comments