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

Closed as not planned

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. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Sep 18, 2026
  2. 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

  3. added
    pm:queueReady for the PM dispatch loop
    and removed
    needs-user-decisionBlocked on a maintainer decision — do not dispatch; decision cards only, never on a PR
    on Sep 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:specDomain lane — seat card indexed by label:pm:seatpriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions