Filed unassigned and ungraded by the domain:cli seat while implementing #12545 (PR #12577, on scripts/check-cli-test-child-env.mjs). ⛔ Not claimed, not routed, ⛔ deliberately not fixed there — #12545's whole headline is that its unwrap stays targeted, and a drive-by in a second gate is how a review loses track of what was measured.
Measured on origin/main @ aa4591971.
⚠️Spelling note, learned the hard way on this very issue. The key placeholder in the source is the word anonymouswrapped in angle brackets. GitHub's body sanitizer silently eats short angle-bracket fragments — inside backticks and inside fenced code blocks — so the first version of this issue had them removed from its title and three places in its body, leaving the text asserting the fallback was an empty string. Everything below therefore spells it in prose. ⛔ Do not "restore" the literal spelling; it will be eaten again.
Why this was looked at
#12545's claim comment recorded that scripts/check-durability-degradation-log-level.mjs:1695 holds an independent copy of the same enclosingFunctionName walk, and asked whoever took the card to measure whether it carries the same (top-level) defect rather than assume it. This is that measurement, and the answer is no — but there is a different, related latency at one of its two call sites.
It does NOT have #12545's defect
enclosingFunctionName(node) (:1695) recognises four shapes: function declaration, method declaration, variable-bound arrow / function expression, and named function expression.
⇒ It has no call-argument-callback branch at all. It never names it('x', fn)either, not merely it.skip('x', fn) — so there is no identifier branch for a modifier unwrap to extend. (The guess recorded on #12545, that a copy taking no sourceFile argument may not have the same branches, is correct.)
Its fallback is undefined, not '(top-level)', and the two call sites diverge sharply:
:2493declaredPropagationFor — no defect, structurally
constfnName=enclosingFunctionName(tryNode);if(!fnName)returnglobalPropagation;constkey=`${relPath}::${fnName}`;An unnamed site short-circuits and no key is ever constructed. That is a closed door, not a shared one: no site declaration can be written for that catch, which the function's own docblock states as intended.
:2451 → readInventionKey (:2827) — the same collision class, latent
enclosingFunctionName(node) flows into seam.fn, and readInventionKey keys the rule's shrink-only baseline on f.file and f.fn joined by a double colon — substituting the fixed angle-bracketed anonymous placeholder whenever f.fn is undefined.
⇒ two read seams in one file that both sit inside anonymous callbacks produce the identical key, so one baseline entry would classify both — leaving the second unreviewed by the PR that needed the first. That is structurally the same carve-out-by-accident shape #12531 closed for check-cli-test-child-env's (top-level), and that #12545 is closing one modifier over.
It is LATENT, and here is the measurement that says so
scripts/durability-read-invention.baseline.json:
| measure | value |
|---|
| baseline entries | 1 |
entries whose fn is anonymous | 0 |
| files carrying more than one entry | 0 |
⇒ nothing is mis-keyed today, and no verdict on main is wrong. Exactly the latency profile #12545 itself had when it was filed: it is the next entry's problem, if that entry lands in an anonymous callback.
Re-check
git grep -n "readInventionKey\|function enclosingFunctionName" origin/main -- scripts/check-durability-degradation-log-level.mjs
node -e "const b=require('./scripts/durability-read-invention.baseline.json');console.log(b.entries.length, b.entries.filter(e=>!e.fn).length)"
⛔ Reverse-check any zero against a term known present in the same file, never a substring of the term under test.
Severity not judged
Recording so the residue is a stated fact rather than something rediscovered in three months. Whether it is worth closing at all is a real judgement call: the fix direction that worked for check-cli-test-child-env (name a callback after its call) would import a naming vocabulary into a gate that currently has none, and the honest alternative — leaving undefined to mean "undeclarable", as :2493 already does — may be better than minting shared placeholder keys at all. ⇒ ⛔ Not obviously a "make it match the other gate" card.
Dedupe performed
MCP search_issues (the dev seat's raw REST is 403, including reads), plus local grep. Three neighbours in the same file, none covering key granularity:
⚠️ Not deduped against domain:devx's own backlog beyond the searches above.
Generated by Claude Code
Filed unassigned and ungraded by the
domain:cliseat while implementing #12545 (PR #12577, onscripts/check-cli-test-child-env.mjs). ⛔ Not claimed, not routed, ⛔ deliberately not fixed there — #12545's whole headline is that its unwrap stays targeted, and a drive-by in a second gate is how a review loses track of what was measured.Measured on
origin/main@aa4591971.Why this was looked at
#12545's claim comment recorded that
scripts/check-durability-degradation-log-level.mjs:1695holds an independent copy of the sameenclosingFunctionNamewalk, and asked whoever took the card to measure whether it carries the same(top-level)defect rather than assume it. This is that measurement, and the answer is no — but there is a different, related latency at one of its two call sites.It does NOT have #12545's defect
enclosingFunctionName(node)(:1695) recognises four shapes: function declaration, method declaration, variable-bound arrow / function expression, and named function expression.⇒ It has no call-argument-callback branch at all. It never names
it('x', fn)either, not merelyit.skip('x', fn)— so there is no identifier branch for a modifier unwrap to extend. (The guess recorded on #12545, that a copy taking nosourceFileargument may not have the same branches, is correct.)Its fallback is
undefined, not'(top-level)', and the two call sites diverge sharply::2493declaredPropagationFor— no defect, structurallyAn unnamed site short-circuits and no key is ever constructed. That is a closed door, not a shared one: no site declaration can be written for that catch, which the function's own docblock states as intended.
:2451→readInventionKey(:2827) — the same collision class, latentenclosingFunctionName(node)flows intoseam.fn, andreadInventionKeykeys the rule's shrink-only baseline onf.fileandf.fnjoined by a double colon — substituting the fixed angle-bracketedanonymousplaceholder wheneverf.fnis undefined.⇒ two read seams in one file that both sit inside anonymous callbacks produce the identical key, so one baseline entry would classify both — leaving the second unreviewed by the PR that needed the first. That is structurally the same carve-out-by-accident shape #12531 closed for
check-cli-test-child-env's(top-level), and that #12545 is closing one modifier over.It is LATENT, and here is the measurement that says so
scripts/durability-read-invention.baseline.json:fnis anonymous⇒ nothing is mis-keyed today, and no verdict on
mainis wrong. Exactly the latency profile #12545 itself had when it was filed: it is the next entry's problem, if that entry lands in an anonymous callback.Re-check
⛔ Reverse-check any zero against a term known present in the same file, never a substring of the term under test.
Severity not judged
Recording so the residue is a stated fact rather than something rediscovered in three months. Whether it is worth closing at all is a real judgement call: the fix direction that worked for
check-cli-test-child-env(name a callback after its call) would import a naming vocabulary into a gate that currently has none, and the honest alternative — leavingundefinedto mean "undeclarable", as:2493already does — may be better than minting shared placeholder keys at all. ⇒ ⛔ Not obviously a "make it match the other gate" card.Dedupe performed
MCP
search_issues(the dev seat's raw REST is 403, including reads), plus localgrep. Three neighbours in the same file, none covering key granularity:collectLoggedLevelsonly recognises a logger named logger/log/console, so a catch that reports through an injected logger reads as silent to BOTH rules #8897 —collectLoggedLevelsonly recognises a receiver namedlogger/log/console. A vocabulary narrowness; decided option 1 in PR fix(gate): read-seam recognizer matched a callee NAME with no shape check, soArray.prototype.findpulled non-read catches into the census #12137. Different question.isReadCall's wrapper recursion skips nested function bodies, so some seams never enter the population. A denominator gap; this card is about two seams that are in the population sharing one key. Adjacent, not the same.callbackSiteName()still reports(top-level)forit.skip/it.only/it.each— the modifier family needs a targeted unwrap, and a blanket widening would be worse #12545 — the sibling gate's(top-level)collapse, whose implementation prompted this measurement.domain:devx's own backlog beyond the searches above.Generated by Claude Code