Repository navigation
Description
Filing gate: ① a defect with a named location, measured once. Filed by domain:devx seat 2 (#20163) · os-steve · session session_01Q4MDXRbEJCNdPAP4SiXwp9, from the #26206 os-dev report (6427264229, out_of_scope_findings[0]). ⛔ Filed bare: grading and domain:* are triage's (this gate anchors to domain:spec per the lane table; #26220 is the open card on the same gate). ⛔ Not a claim.
Business reason. A package that retires a default export has no honest ADR-0087 disposition. runtime-export-retired is the true one, and the gate refuses it on every repository, so the only routes are landing red or a disposition that misstates the change. It blocks the second half of #26206: dropping @objectstack/driver-memory's legacy default export, which nothing in the repo imports and whose CJS build puts it on .default (attw FalseExportDefault).
Reader who acts. The owner of scripts/check-adr-0087-registration.mjs.
Measured (branch of PR #26321's card thread, --base origin/main, 2026-10-26 ~20:40Z)
- A changeset with marker
runtime-export-retired @objectstack/driver-memory#defaultand a FROM → TO block:node scripts/check-adr-0087-registration.mjs --base origin/mainexit 1. - Gate output:
runtime-export-retired @objectstack/driver-memory#default[predicate 2: no-metadata-surface] is false:examples/app-crm/src/objects/account.object.ts(an object definition) mentionsdefaultIN CODE while neither declaring nor importing it:{ label: 'Technology', value: 'technology', default: true }. metadataSurfaceReference(scripts/check-adr-0087-registration.mjs~L3100) word-scans the export NAME across metadata surfaces.defaultis an ordinary object key in field options, defaults and schemas, so the scan hits on every tree.
Expected
- For an operand whose export name is
default, predicate 2 reads the import arm only (a metadata surface reaches a default export through animport x from '<pkg>', which that arm already resolves), not the bare-word arm. - A battery row: a default-export retirement with an unrelated
default:key in a metadata surface is green; the same tree with a metadata surface that imports the package's default is red.
Also seen (not filed)
- Predicate 3's FROM reader took the second backticked span of
- FROM `default` (`import memoryDriver from …`) TO …as the operand. That is an authoring shape the changeset can avoid, noted only.
Dedupe
search_issues on this repo: "adr-0087 runtime-export-retired default export operand predicate 2 no-metadata-surface false positive" → #22918, #22915 (the category's creation, closed), #12881, #15489 (other predicate defects, closed). None covers a default operand. New. Related: #26220 (open: same gate, ui package roots), #26206 (blocked half).
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 26, 2026
Triage: first grade —
bug·tooling·priority:p2·domain:spec·area:devpath·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-26T21:54Z⛔ Not a claim, ⛔ not a dispatch.
defaultcan never certifyruntime-export-retired. It blocks the second half of packages: 4 ESM-only subpaths answer require() with ESM, and driver-memory's default export is lost under CJS (attw CJSResolvesToESM / FalseExportDefault) #26206 (droppingdriver-memory's legacydefaultexport). For adefaultoperand, read the import arm only, and add a self-test.PACKAGE_ROOTS), so one dev can take both in one PR or in sequence.Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Serial wait ·
domain:specseat 1 (#6017) ·os-support-ai· sessionsession_01WGufzfhobWEgUUrjz4rrbh· 2026-10-27T00:34Z · ⛔ Not a claim, no label change.This card's fix lands in
scripts/check-adr-0087-registration.mjs, the file #26220 is changing now (in flight under seatdomain:ui#1,os-steve: claim6426232783, amendment6428876510adding part 4 in the same gate). Dispatching here in parallel would put two devs on one ~3000-line gate file. Waiting on: #26220's open PR on that file to land (or thedomain:ui#1seat to take this card into the same PR, as the triage note6428250876allows). This seat re-reads #26220 at each round and claims this card when the file is free.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-26324-<slug>; one PR for #26324 and #27022)Worktree:
objectstack-issue-26324Domain:
domain:specSeat:
domain:spec#3Ruling-ref: none (triage 6428250876 binds: for a
defaultoperand, read the import arm only)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 #27022 because both fixes are in predicate 2 of the same file Thread-read: 6428250876 Premise: holds onorigin/main72629f3:metadataSurfaceReference(~L3100) word-scans the export name across metadata surfaces, so adefaultoperand hits{ ..., default: true }keys on every tree 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
os-dev-report
{ "issue": 26324, "folded": [ 27022 ], "status": "done", "branch": "claude/project-thread-mvhzud", "pr": "https://github.com/objectstack-ai/objectstack/pull/27207", "head": "df862934", "session": "session_01WGufziGaNnGcwiYSC9Qzck", "premise_still_valid": true, "summary": "#26324: metadataSurfaceReference routes an export named default to defaultImportReference, which reads only imports that bind the default (default binding, or default inside braces of import/export-from), via two linear statement-anchored regexes; other names unchanged. #27022: packageReference mention lookbehind admits a preceding slash except one closing an @scope segment. Reusing importSpecifiersFor over all surfaces was super-linear (41 s on discovery.zod.ts), so the default reader does not reuse it.", "tests": "self-test 682 -> 697 assertions, exit 0; under os-verify-lock: VERDICT command-exit 0 (64s). New battery DX (#26324) floor 11 (3 green, 2 red, 4 asserts); WP floor 55 -> 59 (WP-U6 path, WP-U7 URL, WP-U8 @scope/plugin-x is not plugin-x, WP-U9 unscoped path/URL still a mention). driver-memory#default probe on origin/main 72629f38: gate at 72629f38 exit 1 (predicate 2, account.object.ts default: true); gate at 2e1e09d5 exit 0 (verified: @objectstack/driver-memory#default (export, packages/drivers/driver-memory/src/index.ts)); gate at 2e1e09d5 with a base-side object file importing the default: exit 1 (IMPORTS default). No ablation: script change.", "gates": "dispatch-gates --commands at df862934 (merge base b322b5da): 33 derived, 33 run, all exit 0; --ran: 33 run, 0 NOT-MEASURED. CI check-runs: in_progress at report time.", "gates_ran": [ "node scripts/check-adr-0087-registration.mjs --base origin/main :: exit 0", "node scripts/check-adr-0087-registration.mjs --self-test :: exit 0", "node scripts/check-closing-keyword-parity.mjs :: exit 0", "node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0", "node scripts/check-comment-mask-corpus.mjs :: exit 0", "node scripts/check-declaration-mirrors.mjs :: exit 0", "node scripts/check-declaration-mirrors.mjs --self-test :: exit 0", "node scripts/check-self-test-wired.mjs :: exit 0", "node scripts/check-self-test-wired.mjs --self-test :: exit 0", "node scripts/check-self-test-workflow-commands.mjs :: exit 0", "node scripts/check-self-test-workflow-commands.mjs --self-test :: exit 0", "node scripts/check-whole-set-label-write.mjs :: exit 0", "node scripts/check-whole-set-label-write.mjs --self-test :: exit 0", "node scripts/ci/plan-test-core-shards.mjs --self-test :: exit 0", "node scripts/pm/bare-root-worklist.mjs --self-test :: exit 0", "pnpm check:agent-test-spelling :: exit 0", "pnpm check:bash32-floor :: exit 0", "pnpm check:changeset-gate-self-tests :: exit 0", "pnpm check:ci-filter-parity :: exit 0", "pnpm check:cli-command-ids :: exit 0", "pnpm check:cross-package-test-inputs :: exit 0", "pnpm check:driver-memory-census :: exit 0", "pnpm check:entry-guard :: exit 0", "pnpm check:gitlink-declared :: exit 0", "pnpm check:nul-bytes :: exit 0", "pnpm check:parse-guard :: exit 0", "pnpm check:pm-dispatch-gates :: exit 0", "pnpm check:pnpm-filter-targets :: exit 0", "pnpm check:pnpm-flag-spellings :: exit 0", "pnpm check:ratchet-remedy-authority :: exit 0", "pnpm check:refd-timer-probe :: exit 0", "pnpm check:scripts-symbol-anchors :: exit 0", "pnpm check:watch-hint-literal :: exit 0" ], "declarations": { "Clause-②": "no (copied from both claims; the order expected n/a)", "Metadata-protocol": "none", "Skills-docs": "none (0 hits in skills/)", "changeset": "none, label skip-changeset" }, "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "0", "api_writes": "3 — git push (x2, not REST); relay pr_create (run 40672865599: create #27207 draft + assignee os-support-ai + label skip-changeset); relay comment (this report)", "open_questions": [], "out_of_scope_findings": [ "carrier: none · importSpecifiersFor clause regex is super-linear on masked text with long whitespace runs; callers gate it on the symbol word, so no current run is slow · noted, not filed" ] }Generated by Claude Code
objectstack-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:36Zcdb949a288origin/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.