test(types): retire the list-view tabs fixture objectstack#20357 made unauthorable, so the Spec Main Shape Gate compiles again (objectui#10987) - #10992
Conversation
… unauthorable (objectui#10987) objectstack#20357 retired the list view's own `tabs` as a `retiredKey()` tombstone, so on spec `main` its input type is `never` and the fixture "should accept tabs configuration" in `p1-spec-alignment.test.ts` no longer compiled on the Spec Main Shape Gate (TS2322 on the `tabs` array, TS2339 on `isDefault`). The installed 17.4.0 still admits the key, so neither an accept nor a refusal fixture compiles on both specs until the pin bump; the fixture is retired, and its place is taken by the protocol's prescription: each tab as a named `listViews` entry, with `defaultListView` naming the one `isDefault` picked. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN
…thing (objectui#10987) The presence gate counts a test under `src/` as published source, so the test-only change declares itself with an empty frontmatter. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN
|
changeset-claim-re-read
|
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contract reviewServed-tier: This is an in-seat review. The PR changes one test file and adds an empty changeset (2 files, +29 −17), ① Derived judgments
② Semver levelThe changeset is empty: test-only, releasing nothing. ③ Boundary flags
Implemented-by: VERDICT: PASS |
Fixes #10987
Clause-②: no — the protocol retired the key upstream, and objectui follows with a test-only change. No published type, export or renderer behaviour moves: the by-reference
NamedListView.tabsdeclaration is untouched, so nothing narrows ahead of the pin bump.objectstack#20357 retired the list view's own
tabs. One@object-ui/typesfixture still authored it, sopackages/typesstopped compiling against specmain, and the Spec Main Shape Gate went red for every PR in the merge queue. This PR is test-only. Session:session_014mXUNuFomfj24w7s1pZzhN(mode:subagent,domain:uiseat 2, PM claim comment 5871115946).What changed
packages/types/src/__tests__/p1-spec-alignment.test.ts: the fixture "should accept tabs configuration" is retired.6e3e5462c6) made the list view'stabsaretiredKey()tombstone whose input type isnever, so the protocol now refuses what the fixture authored.listViewsentry, not as the retired list-viewtabs", authors the protocol's prescription on anObjectViewSchema.listViewsentry: the tabnameis the key, and the entry takes the tab'slabelandfilterand declares its owncolumns.defaultListViewnames the entry thatisDefaultpicked.listViewsfixture before this one..changeset/10987-retire-list-view-tabs-fixture.md: the frontmatter is empty.check-changeset-presencecounts a test undersrc/as published source, and it asked for a declaration.Reproduction: red against spec
main, green against both specsThe procedure is the gate's own:
@objectstack/specfrom objectstack7fa3e3e07cc6in a detached worktree:pnpm install --frozen-lockfile --filter @objectstack/spec..., thenpnpm --filter @objectstack/spec build.npm pack --ignore-scripts.node scripts/spec-main-shape-gate.mjs inject. The marker.spec-main-shape-gate.jsonis present afterwards, and zod is re-pointed to 4.6.1, as the gate does.The installed legs ran in the branch worktree, where the marker is absent. Each leg is
pnpm run type-checkinpackages/types, which runs all threetscprograms (tsconfig.test.jsonincluded). Every leg ran under the shared verify lock.main, before7fa3e3e07cc642687baf20(base)tabsarray. TS2339 "Property 'isDefault' does not exist on type 'never'." These are the two the gate reported on the queue run.main, afterfd91433c16(head)fd91433c16(head)The gate's own
reportstep was run over the same logs:src/__tests__/p1-spec-alignment.test.ts"againstobjectstack-ai/objectstack@7fa3e3e07cc67877ae2f5d49eac42665c0515fda".@objectstack/specat that commit."objectstack
mainhas moved one commit since the build, to8cdbe0c6e5. That commit touches nothing underpackages/spec:git log 7fa3e3e07c..8cdbe0c6e5 -- packages/specis empty, and the range counts 1.turbo run type-check --continueover every package. Locally, only@object-ui/typeswas compiled against specmain. It is the only package the gate reported on the queue run (against6e3e5462c6), and the only package this diff touches. The full farm is the gate's own run on this head.Census pins
The census pins are the order's three (
object-view-unmirrored-keys-7779,schema-reference-named-list-view-keys-7923,list-view-spec-parity), plus the edited file. They were run withpnpm exec vitest runfrom the repo root.fd91433c16main(7fa3e3e07cc6)fd91433c16main(7fa3e3e07cc6)42687baf20All three failures are in
object-view-unmirrored-keys-7779, in the describe block "objectui#7924 — the unread members, in the FOUR buckets the ruling was written in, derived against the installed protocol":pageNameandtabs.pageName,tabs, and the result was empty.These are runtime pins, derived against the INSTALLED protocol. The Spec Main Shape Gate runs no tests, so they do not gate the queue. They fail the same way on base:
pageNameis already retired on specmainand sits in the same bucket, and it turns them red beforetabsdoes. That is how objectui carries thepageNameretirement today: no objectui change before the pin bump, and the pins move at the bump.Gates
All gates were run at head
fd91433c16.packages/typestype-check: exit 0 on the installed spec, and exit 0 on specmain(see the table above).pnpm exec vitest run packages/types/(installed spec): 271 files, 5984 tests passed.node scripts/check-changeset-presence.mjs: 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."pnpm check:pending-changeset-literals: exit 0. "No test source names a pending changeset."pnpm check:new-line-citations: exit 0. "VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0"pnpm check:control-bytes: exit 0. "check-control-bytes: OK (scanned 9273 tracked text file(s); skipped 85 binary)."check-changeset-no-majorexit 0, andcheck-changeset-overwriteexit 0.git merge-tree --write-treeagainst a freshorigin/main: exit 0, treee5e70ce20c.origin/mainis42687baf20, which is still this branch's base..tsfile with--no-inline-config --format jsonand reported 1 file, 0 errors and 0 warnings.eslint.config.js.packages/typeshas no config of its own, and that config's**/*.{ts,tsx}and test-file blocks cover this file.parserOptions.project, noprojectService), so this diff cannot move the verdict on any untouched file. The changeset is markdown and outside every package's lint run.Acceptance notes (left for the pin bump)
These sites compile against both specs today, so they are left untouched, as the order says:
NamedListView.tabs?: ListViewSchema['tabs']inpackages/types/src/objectql.ts, the declared-inert member besidepageName. On specmainit resolves toundefined. At the bump, its docblock ("Tab definitions for a multi-tab view interface") and the objectui#8980 measurement text beside it stop being true.ListViewSchema(thelist-viewnode type) takestabsby reference fromSpecListViewSchema.shape. It follows the tombstone at the bump with no edit.object-view-unmirrored-keys-7779.test.ts:BUCKET_DECLARED_INERT,NAMED_LIST_VIEW_UNREAD,PROTOCOL_RETIRED_KEYSand the live-key count. They go red at the bump, forpageNameandtabstogether (the three rows above).TabBar, the one component that could draw the list view's owntabs. objectstack#20357 measured it as having zero production mounts. That was not re-measured here, and there is no carrier.These were measured and are not sites:
userFilters.tabs, the page-only preset bar that reusesViewTabSchema, which is not retired. It appears inphase2-schemasandspec-symbol-parityinpackages/types, and in plugin-list'sUserFilterstests.DetailView.tabsandpage:tabs.plugin-view.mdx"View tabs" section and the schema catalog'sobject-view-named-viewsentry already teach thelistViewsprescription.tabsarrays carryingisDefaultorpinned, references toListViewSchema['tabs'], and.tabsreads, acrosspackages,apps,content/docs,examplesandskills. It finds no other author of the list view's owntabs. Controls: the same patterns hit the retired fixture inpackages/typesat base, and they hit theuserFilters.tabssites above.Generated by Claude Code