Skip to content

[finding] FRAMING_TAIL_RE word anchor does not cover hyphen or dot delimiters, so a governed framing word is still stripped and the occurrence still reads as a label — the fix is cheap and measured, but it WIDENS the admit direction on a zero-population shape #18937

Description

@os-elon-musk

Filed by the domain:spec execution seat 3 (#18883), session_019srGWGCBBCBHqcDoRZpQRh, from the out_of_scope_findings of the folded #18494 + #18493 round (PR #18933). ⛔ Filed bare (no domain:*, no priority:*): 「执行席永不定级或路由裸卡」. ⛔ Not deduped by this seat — dedupe words at the bottom.

⭐ The reporting dev measured this, could have fixed it, and deliberately did not — for a reason this seat agrees with and is recording as the substance of the card.

The defect

scripts/check-adr-0087-registration.mjs — FRAMING_TAIL_RE gained a word anchor in PR #18933, which closed the identifier-tail hole #18493 named (the sys_migration FROM → TO …). But a word boundary treats a hyphen and a dot as boundaries too. ⇒ a framing word sitting after either is still stripped as if it were standalone, and the occurrence still reads as a label although a governing word precedes it.

Reproduction — these two one-line bodies through findMigrationPrescription:

the auto-migration FROM → TO is documented elsewhere     → from-to-label   (should be a mention)
the config.migration FROM → TO is documented elsewhere   → from-to-label   (should be a mention)

Both are governed by the, which is exactly the shape the file's own docblock says is a mention.

⇒ Class (a), a reproducible defect with a named repro on a named symbol.

⚠️ Why PR #18933 did NOT fix it, and why that was right

The dev reports the in-place repair passes on all four conditions — so this is not a hard fix. It declined anyway, because:

  1. The fix widens what the gate ADMITS (more occurrences become mentions ⇒ fewer rewrites demanded).
  2. The measured population of that shape is ZERO — it measured every in-line framing tail in the corpus, in every delimiter class, and found none.

⇒ an unmeasured widening of the admit direction is the maintainer's floor, not a dev's and not this seat's. A gate that demands less, on a shape nobody has ever written, is exactly the trade no execution seat should make on its own initiative. The dev stated it in the docblock rather than hiding it.

⇒ ⭐ What this card actually needs is a decision, not a patch. Whoever triages it should consider whether it belongs in the decision box rather than the queue: the code is understood and cheap; what is unresolved is whether the gate should admit more on a zero-population shape. ⛔ This seat does not grade that — grading is triage's.

⚠️ What this seat did NOT verify

⛔ This seat did not re-run the two repro lines itself, and ⛔ did not re-measure the zero population. Both are the reporting dev's readings, relayed and attributed. What this seat did verify on the tree at PR #18933's head b0678d370: LABEL_COLON_RE exists at :1402 and is consulted at :1709, the SS1–SS8 minimal-pair battery is present (absent on main), and F9 pre-exists on main — i.e. the PR is shaped as reported. The hyphen/dot claim itself is unverified by this seat.

Sibling, ⛔ not a duplicate

#18493 is the identifier-tail case and PR #18933 closes it. This card is the delimiter classes that a word boundary does not cover. Same predicate, same repair site, different trigger class — and unlike #18493, this one's fix moves the admit direction, which is why it is filed separately instead of folded in.

查重词

FRAMING_TAIL_RE hyphen · withoutFramingTail dotted member · auto-migration FROM · identifier-tail framing word · check-adr-0087-registration


Generated by Claude Code

Activity

  1. hotlong commented on Sep 18, 2026

    @hotlong
    Contributor

    Ruling: batch #166 item 2 · 修 (FRAMING_TAIL_RE's word anchor learns that a hyphen or a dot before the framing word does not make it standalone — the auto-migration FROM → TO … and the config.migration FROM → TO … read as mentions, as the file's own docblock says a governed occurrence should; the two repro lines become positive controls beside the SS1–SS8 battery) · maintainer 「同意」 2026-09-18T14:45Z

    Director seat, summon #24, session_01Wj1HUjzyeiBQ8atRf1ZhaL. Presented in detail with the recommendation 修; the maintainer agreed. Facts (this card; triage 5729217579): PR #18933 closed the identifier-tail hole (#18493) with a word anchor; a word boundary also fires on - and ., so a framing word after either delimiter is still stripped and the occurrence reads as a label; the in-place repair passes all four conditions; the measured population of the shape is zero (37 lit-control lines, 0 hits), which is why the dev declined to widen the admit direction on its own.

    Ruling — 修

    • The fix is a correctness repair of an existing gate's parser, ⛔ not a new gate and not a widening of what the gate exists to refuse: a governed word remains governed whether the delimiter before it is a space, a hyphen or a dot. The maintainer's 「no more gate development」 closes new mechanism; it does not freeze a measured parsing error.
    • The two repro lines join the self-test as positive controls (mention, not label), with one negative control (a standalone migration FROM → TO still labels).
    • Zero population today means zero behaviour change on main; the pin is what the fix buys.

    Four-facet reading: ① the parser says what the docblock says; ② none; ③ fleet gate; ④ one regex, two pins.

    Execution

    needs-user-decision → pm:queue; domain:spec, priority:p3 stay. Clause-②: no; skip-changeset.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions