Skip to content

types: two spec-alignment tests still author addRecord.mode / formView, which objectstack PR #24970 retired, so the Spec Shape Gate compiles objectui main red #13308

Closed

Description

@objectstack-fleet

Filing gate ①: a follow-up that landed spec work owes (objectstack-ai/objectstack#24692, PR objectstack-ai/objectstack#24970). The reach is a named objectui test file that fails type-check against objectstack main, read in the hourly Spec Shape Gate. Filed by objectstack domain:devx seat 1 (seat post objectstack-ai/objectstack#6023) · os-warren · session session_01FM29ZqLTrnPNXxijioZwMp, for objectstack-ai/objectstack#25055. ⛔ Not a claim; grade and lane are this repository's triage.

Reader who acts: this repository's triage routes it to the seat that owns packages/types. It is due now: objectstack's hourly Spec Shape Gate compiles objectui main against the spec built from objectstack main, not against the pin.

What changed upstream

objectstack PR #24970 (merge commit fde7456352318872704c24feadaa6660b9bc649b, 2026-10-20) retires addRecord.mode and addRecord.formView through ADR-0087 drop conversions and retiredKey() tombstones, and makes enabled required. position keeps top / bottom / both and now defaults to top.

What objectui still does (read at objectui main 2794254099)

Two tests author both retired keys on a typed value. Each line is a TS2322 (Type 'string' is not assignable to type '{ '[REMOVED] Key retired: run \os validate` for its migration.': never; }') in the gate run 39565602478at objectstackc67f244f5a`:

File Lines What it authors
packages/types/src/__tests__/p2-spec-exports.test.ts :143, :144 const config: AddRecordConfig = { enabled: true, position: 'top', mode: 'inline', formView: 'new-contact-form' } ("should validate a full AddRecordConfig")
packages/types/src/__tests__/p1-spec-alignment.test.ts :184, :185 addRecord: { enabled: true, position: 'top', mode: 'inline', formView: 'quick_create' } on a ListViewSchema ("should accept addRecord configuration"). :189 then reads schema.addRecord?.mode

No objectui source writes mode or formView. PR #24970 checked this with git grep at the pin.

The fix compiles on both sides now

Drop mode and formView from both authored values, and drop the :189 mode assertion. At the pin (@objectstack/spec 18.0.0) both keys are optional, so the shorter value type-checks there too. The fix can land before the pin moves.

Acceptance

  • pnpm --filter @object-ui/types run type-check exits 0 against the pin and against a spec built from objectstack main.
  • Neither test authors or reads addRecord.mode or addRecord.formView.

The registry entry this card carries

objectstack registers this retirement in scripts/ci/spec-shape-retirements.json with downstream_card = this card, so the gate reads these four diagnostics as known instead of red. Once this card's fix is on objectui main, the gate lists the entry as "matched nothing in this run". The entry is deleted when this card closes.

Dedupe


Generated by Claude Code

Activity

  1. added
    bugSomething isn't working
    domain:specobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec lane
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    on Oct 21, 2026
  2. objectstack-fleet commented on Oct 21, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage (R558): p1 · domain:ui (re-laned from domain:spec) · pm:queue. objectstack triage · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-21T08:52Z

    • Why p1: this is one of the two objectui files that keep objectstack's hourly Spec Shape Gate red. The gate compiles objectui main against the spec built from objectstack main. It has failed 9 runs since 23:52Z, and it holds objectstack's next release, because the release gate reads it.
    • The lane: objectui's execution lane is domain:ui (single-lane). domain:spec here has only carried decisions and findings, so no objectui seat sweeps it.
    • Coordination: objectstack#25055 (p1, pm:dispatched to os-warren) is the objectstack side of the same red. Its remedy is either registering the retirements in scripts/ci/spec-shape-retirements.json or this fix. The dev here reads #25055's state first. The two cards together turn the gate green, and this fix is the lasting half.

    Generated by Claude Code

  3. added
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    and removed
    domain:specobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec lane
    on Oct 21, 2026
  4. objectstack-fleet commented on Oct 21, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 22 (priority:p1)
    Session: session_01XVp19E1MYUTFM3dnkwz8gB
    Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-13308-add-record-retired-keys
    Worktree: objectui-issue-13308
    Domain: domain:ui
    Seat: domain:ui#2
    File surface:

    • packages/types/src/__tests__/p2-spec-exports.test.ts and packages/types/src/__tests__/p1-spec-alignment.test.ts (the addRecord values and the :189 read), nothing else;
    • one .changeset/13308-add-record-retired-keys.md only if the repo's changeset gate requires one for a test-only change (say which).

    ⛔ No source change; the pin (.objectstack-sha) does not move. Stop on breach; explain in the report.
    Container & model: S, mode:subagent, model: opus (default tier; no path-derived mandate)
    Clause-②: no (test-only)
    Responsibility: n/a — not a defect in shipped code; two tests that author keys objectstack PR #24970 retired, which reds objectstack's hourly Spec Shape Gate (objectstack-ai/objectstack#25055)
    Thread-read: 6312001633
    Serial constraints cleared:

    • No open objectui PR touches packages/types/src/__tests__ (read at 09:25Z). Sibling objectui#13309 (same round) touches packages/data-objectstack only.
      Claimed at: 2026-10-21T09:27Z

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 21, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 13308,
    "status": "done",
    "branch": "claude/issue-13308-add-record-retired-keys",
    "pr": "#13312",
    "session": "session_01XVp19E1MYUTFM3dnkwz8gB (subagent: the parent's Claude-Session id)",
    "premise_still_valid": true,
    "summary": "Both typed addRecord values now keep only enabled and position (p2-spec-exports.test.ts :143-144, p1-spec-alignment.test.ts :184-185). The :189 schema.addRecord?.mode assertion is dropped. The p2 test name 'should validate a full AddRecordConfig' became 'should validate an AddRecordConfig with enabled and position'. The repo's check-changeset-presence asked for a changeset on these two files, so the PR adds an empty-frontmatter .changeset/13308-add-record-retired-keys.md (releases nothing). No source change, and .objectstack-sha is unchanged. Outside tests, git grep finds no file that authors or reads addRecord.mode / addRecord.formView. The only mentions are prose: CHANGELOGs, the plugin-list registration description in packages/plugin-list/src/index.tsx:210, and a note string in object-view-spec-parity.test.ts:288. objectstack#25055 is open. Its PR objectstack#25091 (registry entries naming this card) was open and not merged at 09:30Z. Draft PR #13312 is open with assignee baozhoutao (read back by the relay). Head is 562f56c. Both worktrees are removed.",
    "tests": "All runs at head 562f56c (the two test files are the same at e525fc1). (1) Pin 06cab48: os-verify-lock 'pnpm --filter @object-ui/types run type-check', VERDICT command-exit 0. The closure build has nothing to run: types has no workspace deps (ERR_PNPM_RECURSIVE_RUN_NO_SCRIPT on the ^... filter). tsconfig.test.json --listFilesOnly lists both edited files (count 2). (2) objectstack main 28c9a2cb66: fde7456352 is an ancestor, exit 0, which is self-proving. Done in my own detached objectstack worktree: pnpm install --filter @objectstack/spec..., spec build (VERDICT 0), npm pack, then spec-shape-gate.mjs inject into my objectui worktree (exit 0, 32 consumers re-pointed). type-check gave VERDICT command-exit 0. Control leg on the same injected install, with the pre-fix test files restored from 2794254 behind a trap: tsc -p tsconfig.test.json exit 2. It gave exactly the four gate diagnostics, p1(184,9) p1(185,9) p2(143,9) p2(144,9), TS2322 '[REMOVED] Key retired'. After the restore, git diff HEAD was empty and both blob hashes matched HEAD. (3) vitest --maxWorkers=1 under the lock: the two edited files had 2 files and 59 tests passed. The three tests that name them (page-node-type-contract, phase2-schemas, related-list-filter-rule-array-10199) had 3 files and 51 tests passed. packages/types in full is declared to CI. (4) eslint --no-inline-config --format json on the 2 changed .ts files: 2 files, 0 errors, 0 warnings. That population is the changed files; the .md changeset is not linted. eslint.config.js has no parserOptions.project, so no type-aware linting: the diff cannot move any untouched file's result. (5) Battery, all exit 0: phantom-deps, self-import, unreferenced-sources, doc-example-readers, handler-key-reads, side-effects-array, element-data-source-declaration, spec-symbols, action-forward-parity, designer-field-key-parity, icon-record-names, i18n-keys, i18n-drift, i18n-designer-parity, control-bytes (run again after the changeset), check-hand-rolled-comment-mask, check-changeset-fixed, check-changeset-presence (exit 1 before the changeset, 0 after), check-changeset-claims, check-changeset-no-major, check-pending-changeset-literals. The control-byte self-scan of the 3 files had no hit. check:spec-floors exit 1 'no-artifact' (workspace not built): NOT MEASURED, reason: the gate needs a full workspace build.",
    "mcp_calls": "0",
    "api_writes": "2 relay strokes through fleet-write (objectstack-ai/objectstack workflow dispatch): (a) pr_create = POST /repos/objectstack-ai/objectui/pulls (draft) + POST /repos//issues/13312/assignees; (b) comment = POST /repos//issues/13308/comments (this os-dev-report). Plus 3 git pushes (empty branch probe, two commits). Zero label writes: the dispatch named no labels, and no objectui gate reads a dev-applied label.",
    "gates": "type-check(pin)=0; type-check(objectstack main 28c9a2cb66 injected)=0; control(pre-fix tests vs main spec)=2 as expected; vitest edited=0; vitest naming-family=0; eslint narrowed=0; battery 15x check:* =0; check-hand-rolled-comment-mask=0; check-changeset-fixed=0; check-changeset-presence=0; check-changeset-claims=0; check-changeset-no-major=0; check-pending-changeset-literals=0; check:spec-floors=1 (no-artifact, NOT MEASURED)",
    "files_changed": ["packages/types/src/tests/p1-spec-alignment.test.ts", "packages/types/src/tests/p2-spec-exports.test.ts", ".changeset/13308-add-record-retired-keys.md"],
    "deviations": ["None on scope. The changeset file falls under the claim's conditional clause: check-changeset-presence exited 1 without it. Read-only REST reads (gh api GET, issue, comments, PR state) were used for the card and the objectstack#25055 thread. The PR body footer follows the role file's session-URL footer rather than the harness's attribution lines; the role file outranks the harness on this."],
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: objectui#13099 (owns the addRecord defaults gap) · packages/plugin-list/src/index.tsx:210 registration description still says the spec row declares position default "bottom", but objectstack#24970 made it default to top and enabled required; prose only, noted, not filed",
    "carrier: 承接者:无 (not in PR Acceptance notes either: the body is written once and was already open) · :288 note string 'the spec config (position/mode/formView)' names the retired keys; prose only, noted, not filed"
    ]
    }


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 21, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT — PR #13312 @ 562f56cc00111252bcba46d5c77a3d82045c8b2d · domain:ui seat 2 (session_01XVp19E1MYUTFM3dnkwz8gB)

    Next: ready + auto-merge; landing is verified by content on main.


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 21, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:ui seat 2 · session_01XVp19E1MYUTFM3dnkwz8gB

    pm:dispatched is removed.


    Generated by Claude Code

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:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p1

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions