Repository navigation
finding(types): the Spec Main Shape Gate is red in the merge queue: objectstack#20357 retired the list view's tabs key, and p1-spec-alignment.test.ts still authors tabs #10987
Description
Activity
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsClaim: PM loop round 15 (maintainer-directed exception to serial dispatch) —
domain:uiexecution seat 2
Session:session_014mXUNuFomfj24w7s1pZzhN
Branch:claude/issue-10987-spec-main-tabs-retired
Worktree:objectui-issue-10987
Domain:domain:ui
Seat:domain:ui#2
Provenance: the maintainer, in this seat's session chat on 2026-09-28 at 13:4xZ, chose "Take it now" for this card, beside the serial card objectui#10951, because the red required gate ejects every seat's queued PR. The card is not yet triaged. Triage's grade is welcome and binds the priority; this claim only takes the execution.
File surface:packages/types/src/__tests__/p1-spec-alignment.test.ts: the "should accept tabs configuration" fixture authors a key the protocol now refuses (feat(spec)!: retire the list view's owntabskey; named presets arelistViewsentries objectstack#20357), so it is retired or re-pointed.packages/typesdeclarations that re-declaretabsby reference to the spec (tabs?: ListViewSchema['tabs']) follow the retirement the same way objectui handledpageName, the sibling tombstone already in the census's declared-inert bucket. The dispatch measures that against the objectui#7779 / docs(api):schema-reference.md'sobject-viewexample authorslistViews.NAME.default: true, a keyNamedListViewnever declared andObjectViewnever reads #7923 census pins.- Any other
tabsauthoring on a list view in tests, docs or examples, found withgit grep. - A changeset only if a gate asks for one.
Container & model:S,mode:subagent,model: opus(default judgment tier)
Clause-②: no
Why no: the protocol retired the key upstream. objectui follows it with no renderer behaviour change (no objectui renderer reads thistabs), and the dispatch re-rules this line if a published objectui type narrows before the pin bump.
Thread-read: none
Serial constraints cleared: - The serial card objectui#10951 touches
packages/componentsonly. This card touchespackages/types, tests and docs. - I read the open-PR file lists at 2026-09-28T13:4xZ, at objectui
origin/main42687baf20: none touchesp1-spec-alignment.test.ts. - If another seat claims at the same time, the earliest live claim wins and this seat yields.
- addeddomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seat
on Sep 28, 2026 objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 10987,
"status": "done",
"branch": "claude/issue-10987-spec-main-tabs-retired",
"pr": "#10992",
"session": "session_014mXUNuFomfj24w7s1pZzhN — the dispatching seat's id (mode:subagent, so the parent's), as stamped in the Claude-Session commit trailer",
"premise_still_valid": true,
"summary": "Draft PR #10992 (head fd91433, 2 commits) retires the p1-spec-alignment fixture "should accept tabs configuration", which authored the list view's owntabsthat objectstack#20357 turned into a retiredKey() tombstone (input type never). A fixture for the protocol's prescription takes its place: each tab is a namedlistViewsentry on an ObjectViewSchema, anddefaultListViewnames the oneisDefaultpicked. The PR also adds the empty-frontmatter changeset the presence gate asked for. packages/types type-check reproduces the gate's two diagnostics at base against spec built from objectstack 7fa3e3e07cc6 (exit 2), and exits 0 at head against both that build and the pinned 17.4.0. No published type moves:NamedListView.tabs?: ListViewSchema['tabs']and the census pins compile on both specs and are left for the pin bump, which is howpageNameis carried. The card assignee os-elon-musk was PM-set and left untouched; the PR assignee is set to os-elon-musk.",
"tests": [
"GATE REPRO (the gate's procedure: spec built from objectstack 7fa3e3e07cc6 in a detached worktree, npm pack --ignore-scripts, scripts/spec-main-shape-gate.mjs inject into a separate objectui worktree with marker .spec-main-shape-gate.json present and zod re-pointed to 4.6.1; each leg ispnpm run type-checkin packages/types, three tsc programs including tsconfig.test.json, under os-verify-lock).",
"spec main @ base 42687ba: "VERDICT command-exit 2", 2 errors: p1-spec-alignment.test.ts TS2322 "... is not assignable to type 'undefined'." and TS2339 "Property 'isDefault' does not exist on type 'never'." The gate report step exits 1 with both rows attributed "against objectstack-ai/objectstack@7fa3e3e".",
"spec main @ head fd91433: "VERDICT command-exit 0", 0 errors. The gate report step exits 0: "objectui type-checks against @objectstack/spec at that commit."",
"installed 17.4.0 @ head fd91433 (marker absent): "VERDICT command-exit 0", 0 errors.",
"CENSUS (object-view-unmirrored-keys-7779, schema-reference-named-list-view-keys-7923, list-view-spec-parity, plus p1-spec-alignment; pnpm exec vitest run from the repo root). Installed @ head: "Test Files 4 passed (4)", "Tests 296 passed (296)". Spec main @ head: "Test Files 1 failed | 3 passed (4)", "Tests 3 failed | 293 passed (296)". Spec main @ base: the identical 3 failures.",
"The 3 census failures are all in 7779's describe "... derived against the installed protocol": the tombstone list received adds pageName and tabs; the live-key count expected 45 and got 43; bucket ① expected [pageName, tabs] and got []. These are runtime pins, and the gate runs no tests. They are red on base too, so this diff does not change them. They are pin-bump items.",
"pnpm exec vitest run packages/types/ (installed, @ fd91433): "Test Files 271 passed (271)", "Tests 5984 passed (5984)".",
"LINT, narrowed and proved: eslint --no-inline-config --format json on the one edited .ts file reports 1 file, 0 errors, 0 warnings. Population: the root eslint.config.js (packages/types has no own config), whose **/*.{ts,tsx} and test-file blocks cover the file. Invariance: no parserOptions.project or projectService, so no type-aware linting, so no untouched file's verdict moves.",
"NO NEW PIN: the replacement fixture is a type-level accept fixture, not a pin. The red-then-green evidence is the gate reproduction above. No ablation was needed."
],
"gates": [
"check-changeset-presence @ fd91433: exit 0, "1 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s): .changeset/10987-retire-list-view-tabs-fixture.md." (It was exit 1 before the changeset was added.)",
"check:pending-changeset-literals @ fd91433: exit 0, "No test source names a pending changeset."",
"check:new-line-citations @ fd91433: exit 0, "VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0"",
"check:control-bytes @ fd91433: exit 0, "check-control-bytes: OK (scanned 9273 tracked text file(s); skipped 85 binary)."",
"check-changeset-no-major: exit 0. check-changeset-overwrite: exit 0, "No pre-existing changeset was modified or deleted."",
"git merge-tree --write-tree against a fresh origin/main 42687ba (still the branch base): exit 0, tree e5e70ce20c.",
"CI on #10992: NOT MEASURED — not read at report time and not waited on, per the role file; the gate verdict on this head belongs to the PM read."
],
"files_changed": [
"packages/types/src/tests/p1-spec-alignment.test.ts (the fixture is retired and a listViews prescription fixture replaces it; ObjectViewSchema type import added)",
".changeset/10987-retire-list-view-tabs-fixture.md (empty frontmatter)"
],
"deviations": [
"Narrowed: locally, only @object-ui/types was compiled against spec main. The gate runs turbo type-check --continue over every package, and that full farm is the gate's own run on this head.",
"objectstack main moved from 7fa3e3e07cc6 to 8cdbe0c6e5 after the spec build. The one commit in that range touches nothing under packages/spec (the git log for that range, limited to packages/spec, is empty), so the build was not redone.",
"The first spec-main and installed type-check legs and the census legs were taken at dc70c7a. The only difference from head is one .changeset file. All of them were re-run at the final head fd91433, and the figures quoted here are from those runs.",
"Instruction conflict: the harness attribution reminder asked for a model-named Co-Authored-By trailer and a different PR footer. The order and the role file govern here: the commits carry the model-free pair, and the PR body ends with the session-URL footer.",
"Cleanup: the branch worktree and the two measurement worktrees (objectui-issue-10987-specmain, objectstack-specmain-10987) were removed after their node_modules were deleted. The branch worktree was removed only after its HEAD was confirmed equal to the remote branch and its status was clean."
],
"pr_body_replacement": null,
"mcp_calls": "0",
"api_writes": "3 REST writes through the fleet-write relay, each carried by one POST /repos/objectstack-ai/objectstack/dispatches. (1) pr_create: POST /repos/objectstack-ai/objectui/pulls, draft, relay run 36433668031. The stored body was read back byte-identical to what was sent (9335 chars, no differing byte). (2) label-write --assign: POST /repos//issues/10992/assignees os-elon-musk, relay run 36433782769; the read-back MATCHES, and the labeler'spackage: typesandtestsare untouched. (3) This os-dev-report comment: POST /repos//issues/10987/comments via post-stamped.mjs. Plus 3 git pushes: the empty-branch probe, the fix, and the changeset.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: the @objectstack/spec pin-bump PR (no card named) · NamedListView.tabs?: ListViewSchema['tabs'] in packages/types objectql.ts resolves to undefined on spec main, and its docblock plus the objectui#8980 measurement text go false at the bump · noted in the PR's Acceptance notes, not filed",
"carrier: the same pin-bump PR · the object-view-unmirrored-keys-7779 census (BUCKET_DECLARED_INERT, NAMED_LIST_VIEW_UNREAD, PROTOCOL_RETIRED_KEYS, the live-key count) fails 3 rows on spec main, identically at base, for pageName and tabs together · noted, not filed",
"carrier: none (承接者:无) · plugin-list TabBar, the only component that could draw the list view's own tabs, has zero production mounts per objectstack#20357's measurement; not re-measured here · Acceptance notes only"
]
}objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actions✅ ACCEPT: PR objectui#10992 (
Fixes) atfd91433c16; ready and auto-merge follow this ACCEPTdomain:uiseat #2,session_014mXUNuFomfj24w7s1pZzhN. This was taken on the maintainer's direct instruction as an exception to serial dispatch (claim5871115946), because the red required gate ejected every queued PR. I checked this against the diff and CI, not against the report's own account.Implemented-by: claude/issue-10987-spec-main-tabs-retired Reviewed-by: session_014mXUNuFomfj24w7s1pZzhNitem reading the change p1-spec-alignment's "should accept tabs configuration" fixture is retired, because objectstack-ai/objectstack#20357 made the list view's owntabsinput typenever. A fixture for the protocol's prescription replaces it: namedlistViewsentries plusdefaultListView. Test-only, with an empty changesetproof the gate's own procedure, run by the dev: packages/typestype-check exits 2 at base against specmain(the two diagnostics), and 0 at head against both specmainand the pinned 17.4.0. CI'sSpec Main Shape Gateis green on this headreview in-seat record PASS (posted with this landing) carried NamedListView.tabsand the 7779 census rows forpageName/tabsmove at the spec pin bumpCI head fd91433c16: every check final and green before readyclosing keywords Fixes #10987- added a commit that references this issue
on Sep 28, 2026
Filing-gate category: ① a required gate red on every merge-queue run, with a named landing site. Reader: triage first (grade and route). Filed by
domain:uiseat 2,session_014mXUNuFomfj24w7s1pZzhN, after the merge queue ejected PR #10983 (objectui#10963) forCI_FAILUREat 13:39Z. ⛔ Not graded here.What fails
Spec Main Shape Gatecompilespackages/typesagainst@objectstack/specbuilt from objectstackmain. On the queue commit2bfe567c50for PR objectui#10983, against objectstack6e3e5462c6,pnpm run type-checkexits 2:packages/types/src/__tests__/p1-spec-alignment.test.tsline 154:TS2322 … is not assignable to type 'undefined';TS2339: Property 'isDefault' does not exist on type 'never'.tabs: [{ name: 'all', label: 'All Records', isDefault: true }, …]on aListViewSchema.Why
tabskey; named presets arelistViewsentries objectstack#20357 (6e3e5462c6, merged 12:49Z,feat(spec)!) retiresListViewSchema.tabs, and the same key onObjectListViewSchema, as aretiredKey()tombstone: "authoring it is atscerror (input typenever)". The prescription is to move each tab to a namedlistViewsentry. The D2 conversionview-list-tabs-removedstrips it from stored views.tabsby reference to the spec type (tabs?: ListViewSchema['tabs']). Its own docblock records that no objectui renderer reads it: "the onlytabsread inpackages/plugin-listisUserFilters'config.tabs". So on specmainthe fixture no longer compiles.Direction (for triage to grade)
packages/typescompiles against both the pinned 17.4.0 (which still acceptstabs) and specmain.tabsre-declaration now, or at the pin bump, is for the dispatch to measure against the census pins. The objectui#7779 / docs(api):schema-reference.md'sobject-viewexample authorslistViews.NAME.default: true, a keyNamedListViewnever declared andObjectViewnever reads #7923 "objectui declares every LIVE protocol key" rows care which one.tabsauthoring on a list view: tests, docs, examples.JoinedReportBlockSchema).Dedupe
A search of objectui issues ("Spec Main Shape Gate",
tabs,p1-spec-alignment, objectstack 20357) found only the closed precedents objectui#10916, #10287 and #10229.domain:uiseat 2 · finding · 2026-09-28