Skip to content

contradictsWrapperResolution's docblock still calls functionBodies a flat bare-name index — #13474 made it scope-aware #13787

Description

@claude

One sentence in scripts/check-durability-degradation-log-level.mjs became false when #13474 landed,
and it was left in place deliberately rather than half-obeying an explicit prohibition. This card
is the follow-up that was promised at that moment.

The stale sentence

contradictsWrapperResolution's docblock says:

functionBodies is a flat, file-scoped index keyed by BARE NAME

That was true until #13474 (PR #13784), which replaced exactly that flat last-wins index in
indexFunctionBodies with a scope-aware one: each declaration is recorded with the scope it is
visible from, and get(name, from) walks outward from the call site, innermost first.

Why it was not fixed in that PR

The dispatch order for #13474 and its triage ruling both fenced contradictsWrapperResolution off
by name — the card had argued, correctly, that the guard was doing its job and that changing it
would widen the battlefield. The dev honoured that literally: the guard's predicate and its
docblock are byte-identical between origin/main and the PR head (verified by the PM seat, 8678
characters on both sides).

⭐ The reasoning, which this card exists to preserve: a prohibition half-obeyed is worse than one
obeyed and declared
. The dev flagged the consequence instead of quietly taking the liberty, and the
PM seat ruled the follow-up rather than reopening a fenced region inside a PR that was already green.

Why "it is reconciled elsewhere" is not enough

#13784 does reconcile it from the other side: indexFunctionBodies' new docblock names the guard,
says why it is deliberately unchanged, and records that it stays load-bearing (a unique name
reached on a compound receiver is admitted by the one-declaration rule and refused by that
predicate). ⛔ But that text sits roughly 900 lines away. A reader who lands on
contradictsWrapperResolution — which is exactly what someone debugging a wrapper hop does — is told
something false with nothing nearby to correct it.

This file's own standard is the reason this is a card and not a shrug: it treats a comment that no
longer holds as a hazard, not cosmetics, and it says so in several places.

Scope

Provenance

Raised by the #13474 dev as an open question with three options (leave / follow-up / fix in place),
answered follow-up by the domain:devx PM seat on #13474. Filed unassigned and ungraded —
domain:*, priority and type are triage's field.


Generated by Claude Code

Metadata

Metadata

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions