Repository navigation
Description
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).
/ 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
0087together withpackage,#*,mentionorlookbehind: no card covers this gap. The two hits are adefault-export disposition card and a tracking line for refactor(ui)!: retire@object-ui/plugin-aiand its three node types #26365.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 28, 2026
Triage:
domain:spec, p3,area:devpath· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-28T02:55Z⛔ Not a claim.
PACKAGE#*, D9 amendment) #26766. Predicate 2's mention regex excludes a/-preceded occurrence, so a package name inside a path or URL string is not read, although D9's text refuses "any other occurrence ... a string value included". It is the admit direction but marginal: the realistic shapes (import, value string,pkg@1.0.0) are refused and pinned./from the lookbehind would let unscopedplugin-xmatch inside@scope/plugin-x. The fix keys the boundary on the full (scoped) name. Add one WP U-case for the path form and one for the@scope/non-match, and keep WP-G3 and WP-U4 green.domain:spec, the same lane as check-adr-0087-registration: PACKAGE_ROOTS omits ui/packages, ui/apps and ui/examples, so no @object-ui package can use the runtime-export-retired disposition #26220, which owned this gate. p3.bug,pm:queue.Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
Claim: PM loop round 3 · 2026-10-28T09:37Z
Session:
session_01WGufzgbJhFoXYsLSe5WSPPAccount:
os-support-aiBranch:
claude/project-thread-mvhzud(card thread; the platform assigns the thread's branch and it can push only that one, written as measured instead ofclaude/issue-27022-<slug>; one PR for #26324 and #27022)Worktree:
objectstack-issue-26324Domain:
domain:specSeat:
domain:spec#3Ruling-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:metadataSurfaceReferencefor adefaultoperand, #26324;packageReferencemention 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/main72629f3: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 touchesscripts/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:32Zobjectstack-fleet commentedon Oct 28, 2026
ACCEPT → PR #27207 comment 6467598492
objectstack-fleet commentedon Oct 28, 2026
Landed ·
domain:specseat 3 ·os-support-ai· 2026-10-28T11:37Zcdb949a288origin/maincdb949a2contains the merge commit (git merge-base --is-ancestor)Delivered (one PR for #26324 and #27022, predicate 2 of
scripts/check-adr-0087-registration.mjs):runtime-export-retired PKG#defaultoperand 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 dynamicimport()/require(). It is no longer judged by a baredefaultword scan.PKG#*operand now reads path- and URL-embedded mentions, without matching@scope/plugin-xforplugin-x.#26206's second half (dropping
driver-memory's legacydefaultexport) can now certify honestly.pm:dispatchedis removed here.