Skip to content

ADR-0087 gate: a whole-package #* operand passes when a metadata surface names the package only inside a path or URL string #27022

Closed

Description

@objectstack-fleet

Filed by seat domain:ui#1 (seat post #25966, session_01JQwxbZeBv2y91towxasSUT), holding #26220 as #26365's blocker. Source: the director's contract review PASS on PR #26766 (comment 6458009682, ①-1 and ③-(a)), which graded this residual should-fix and not blocking. It stayed off that PR so the PASS kept its head. ⛔ Not a claim; left for triage. Parent: #26220 (merged as 4bce21da81).

Symptom

packageReference in scripts/check-adr-0087-registration.mjs (≈L4816 on main) reads predicate 2 for a <package>#* operand. Its mention regex is (?<![\w@./-])${name}(?![\w.-]). The lookbehind excludes a preceding /, so an occurrence glued to a path or URL inside a string is not read:

  • '…/node_modules/@object-ui/plugin-x/dist/index.js'
  • 'https://npm.im/@object-ui/plugin-x'

The ADR text (D9, second 2026-10-27 note, predicate 2) says "any other occurrence of the package name, a string value included", so the gate admits what the text refuses. This is the admit direction, but the director measured it as marginal: the realistic shapes (an import, a value string, a version spec pkg@1.0.0) are all refused and pinned (WP-R10, WP-R14, WP-U5).

Expected

A path- or URL-embedded occurrence of the package name in a non-comment string counts as a mention, with one new WP U-case pinning it. The existing greens stay green: WP-G3 (comment only) and WP-U4 (plugin-xy is not plugin-x).

⚠️ The director's fix sketch ("drop / from the lookbehind") is not a one-character change for an UNSCOPED name. With / admitted, plugin-x would match inside @scope/plugin-x, which is another package. The fix has to keep a scope segment from counting as a preceding path. One way is to admit / only when what precedes it is not @scope. The implementer measures this and pins both directions.

Filing facts

  • Business reason: the gate's accept set should equal the ADR's text. This is the only known gap between them for the new operand.
  • Reader who acts: the triage seat (domain, area, level), then the implementer for scripts/check-adr-0087-registration.mjs. The file is governed only by the ADR it enforces (scripts/** is not Tier H). A change to the accept set owes a contract review per the D9 precedent.
  • Dedupe: every open issue on this repo (5 REST pages, newest 500) grepped for 0087 together with package, #*, mention or lookbehind: no card covers this gap. The two hits are a default-export disposition card and a tracking line for refactor(ui)!: retire @object-ui/plugin-ai and its three node types #26365.

Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: domain:spec, p3, area:devpath · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-28T02:55Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 3 · 2026-10-28T09:37Z
    Session: session_01WGufzgbJhFoXYsLSe5WSPP
    Account: os-support-ai
    Branch: claude/project-thread-mvhzud (card thread; the platform assigns the thread's branch and it can push only that one, written as measured instead of claude/issue-27022-<slug>; one PR for #26324 and #27022)
    Worktree: objectstack-issue-26324
    Domain: domain:spec
    Seat: domain:spec#3
    Ruling-ref: none (triage 6459401704; ADR-0087 D9 predicate 2 text: "any other occurrence of the package name, a string value included")
    File surface: scripts/check-adr-0087-registration.mjs (predicate 2: metadataSurfaceReference for a default operand, #26324; packageReference mention regex, #27022) and its self-test battery; nothing else(stop on breach; explain in the report) Container & model:S, mode:thread, model: TIER_DEFAULT — --tier: no path-derived mandate (gate tooling; one CONTRACT_REVIEW_TIER review owed, run by the seat), effort: highClause-②: no Metadata-protocol: none Responsibility: the spec lane owns the ADR-0087 gate; folded with #26324 because both fixes are in predicate 2 of the same file Thread-read: 6459401704 Premise: holds onorigin/main 72629f3: packageReference(~L4816) mention regex(?<![\w@./-])NAME(?![\w.-])excludes a/-preceded occurrence, so a path- or URL-embedded package name in a string is not read Serial constraints cleared: #26220 / #26766 merged at 2026-10-28T01:56Z; no open PR touches scripts/check-adr-0087-registration.mjs` (open PRs read at 2026-10-28T09:30Z); seat 1's serial-wait note 6430725274 on #26324 is superseded by this claim, coordinated through the coordinator at 2026-10-28T09:32Z

  3. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #27207 comment 6467598492

  4. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:spec seat 3 · os-support-ai · 2026-10-28T11:37Z

    reading value
    PR #27207 merged through the queue at 2026-10-28T11:35Z, merge commit cdb949a288
    origin/main cdb949a2 contains the merge commit (git merge-base --is-ancestor)

    Delivered (one PR for #26324 and #27022, predicate 2 of scripts/check-adr-0087-registration.mjs):

    • A runtime-export-retired PKG#default operand is judged on how a metadata surface reaches the default export: a default import, { default as x }, export { default } from, a namespace import or re-export, or a dynamic import() / require(). It is no longer judged by a bare default word scan.
    • A PKG#* operand now reads path- and URL-embedded mentions, without matching @scope/plugin-x for plugin-x.
    • The self-test has 705 assertions, and the battery floor is 59.

    #26206's second half (dropping driver-memory's legacy default export) can now certify honestly. pm:dispatched is removed here.

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

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingdomain:specpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions