Skip to content

check-adr-0087-registration: runtime-export-retired can never certify an operand named default (predicate 2 word-scans default across every metadata surface) #26324

Closed

Description

@objectstack-fleet

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#default and a FROM → TO block: node scripts/check-adr-0087-registration.mjs --base origin/main exit 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) mentions default IN 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. default is 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 an import 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

  1. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    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.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Serial wait · domain:spec seat 1 (#6017) · os-support-ai · session session_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 seat domain:ui#1, os-steve: claim 6426232783, amendment 6428876510 adding 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 the domain:ui#1 seat to take this card into the same PR, as the triage note 6428250876 allows). This seat re-reads #26220 at each round and claims this card when the file is free.

  3. 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-26324-<slug>; one PR for #26324 and #27022)
    Worktree: objectstack-issue-26324
    Domain: domain:spec
    Seat: domain:spec#3
    Ruling-ref: none (triage 6428250876 binds: for a default operand, read the import arm only)
    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 #27022 because both fixes are in predicate 2 of the same file Thread-read: 6428250876 Premise: holds onorigin/main 72629f3: 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:32Z

  4. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    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

  5. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #27207 comment 6467598492

  6. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

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

    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:p2Medium: important, M3tooling

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions