You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
spec: retire the page member of the list-view type enum and its pageName mount — enforce-or-remove, the objectui render half was never built (maintainer 2026-09-09 「撤」) #17063
Filed by the director seat (summon #20, session_01Tep4AYXZvyBA7jsvne5KZV, GitHub os-bill) executing a maintainer ruling. domain:spec set by the mechanical rule 凡触 packages/spec 一律转 spec 座位; triage corrects if it disagrees.
Ruling (who / verbatim / where)
Maintainer, live PM chat with the director seat, 2026-09-09T05:3xZ, on decision batch #107 item 1 (objectui#8429) after two questions — what a type: 'page' list view is, and when the requirement was decided and whether it is valuable. Presented options: A finish the objectui delegating mount · 撤 retire the enum member from spec under enforce-or-remove · D park with the current-state pin. Reply, verbatim: 「撤」.
Governing text: the 2026-08-29 ruling on #13216 (direction 1: a page member on the view type enum, render delegated to the page renderer — landed on the spec side as PR #13372d23dc08a; the objectui mount half never landed, objectui#8429); ADR-0049 enforce-or-remove; the four-axis principle 「已发布零消费的能力不因沉没成本获得豁免」 (SKILL.md 〈升级与决策〉); packages/spec/liveness/view.json/props/list/children/type/note and /props/list/children/pageName/*.
What is measured (2026-09-09, origin/mainc0e4bc74+)
packages/spec/src/ui/view.zod.ts:1848 — 'page' in the ListViewSchema.type enum; :1946-1970pageName; :1632-1720checkListViewPageMount + the three refusal messages (VIEW_PAGE_MOUNT_NEEDS_PAGE_NAME, VIEW_PAGE_NAME_NEEDS_PAGE_TYPE, VIEW_PAGE_MOUNT_HAS_COLUMNS), attached at :2138, :3720, :4633 (three list-view doors).
packages/spec/src/stack.zod.ts#validateCrossReferences — the build-time page-name existence branch; packages/lint/src/validate-view-page-refs.ts#validateViewPageRefs — the CLI / publish-gate resolution (runtimeTypes: ['flow','view']).
packages/spec/liveness/view.json — the pageName rows and the type note quoted above.
Real usage: zero authored type: 'page' list views in this tree or any consuming app the seats can read (objectui#8429's census; the 25 in-tree type: 'page' hits are app nav items, a different key that stays). objectui's ListView maps page → grid with a warn (declared ≠ enforced).
Deliverable — follow .claude/skills/spec-property-retirement end to end
Remove 'page' from the list-view type enum on every door that carries it (ListViewSchema, ObjectListViewSchema, ListViewOverlayWireSchema and any mirror), remove pageName, checkListViewPageMount and its three messages, the validateCrossReferences branch and validateViewPageRefs (or narrow them to what remains), and every docblock / VIEW_HISTORY line that describes the mount — replace with the standard tombstone naming this card and the ruling.
Liveness ledger: retire the pageName rows and rewrite the type note; regenerate every generated baseline / form / skill reference the playbook lists (⛔ never by hand).
ADR-0087: a stored view with type: 'page' or a pageName key is refused by name at rehydration and by os migrate meta (zero producers ⇒ not-required / refuse-by-name per the playbook's route choice; the dev records the route and its reason in the changeset).
Docs: every content/docs/** mention of the page view type / pageName on views is removed or rewritten (the nav-item type: 'page' docs are a different key and stay).
Pins: a refusal pin per door (type: 'page' refused; pageName refused as unknown key), and the liveness/enum ratchets green.
Changeset: @objectstack/spec (and @objectstack/lint if touched) minor with the BREAKING banner under the launch-window convention, naming what an author loses and the tombstone.
Dispatch shape: Clause-②: no — an accept-set narrowing / retirement (#16349 direction), ordinary tier; the path arm hits (packages/spec/src/**) so the in-seat contract review at CONTRACT_REVIEW_TIER is on record before enqueue per SKILL.md 〈入队与落地〉.
Downstream
objectui#8429 becomes the objectui half — retire UNDRAWABLE_VIEW_KINDS.page, the normalizeListViewSchema warn arm and the PR #8684 current-state pin once the spec release carrying this removal is installable (cross-repo unlock criterion = 消费方可安装, not merged). It carries Blocked-by: objectstack-ai/objectstack#<this card>.
Dedupe: #13216 (closed, the ruling that added the member), #13100 (closed, the finding), #13620 (direction 2 design card — different question); no open card asks for this removal.
Filed by the director seat (summon #20,
session_01Tep4AYXZvyBA7jsvne5KZV, GitHubos-bill) executing a maintainer ruling.domain:specset by the mechanical rule 凡触packages/spec一律转 spec 座位; triage corrects if it disagrees.Ruling (who / verbatim / where)
Maintainer, live PM chat with the director seat, 2026-09-09T05:3xZ, on decision batch #107 item 1 (objectui#8429) after two questions — what a
type: 'page'list view is, and when the requirement was decided and whether it is valuable. Presented options: A finish the objectui delegating mount · 撤 retire the enum member from spec under enforce-or-remove · D park with the current-state pin. Reply, verbatim: 「撤」.Governing text:the 2026-08-29 ruling on #13216 (direction 1: apagemember on the view type enum, render delegated to the page renderer — landed on the spec side as PR #13372d23dc08a; the objectui mount half never landed, objectui#8429); ADR-0049 enforce-or-remove; the four-axis principle 「已发布零消费的能力不因沉没成本获得豁免」 (SKILL.md 〈升级与决策〉);packages/spec/liveness/view.json/props/list/children/type/noteand/props/list/children/pageName/*.What is measured (2026-09-09,
origin/mainc0e4bc74+)packages/spec/src/ui/view.zod.ts:1848—'page'in theListViewSchema.typeenum;:1946-1970pageName;:1632-1720checkListViewPageMount+ the three refusal messages (VIEW_PAGE_MOUNT_NEEDS_PAGE_NAME,VIEW_PAGE_NAME_NEEDS_PAGE_TYPE,VIEW_PAGE_MOUNT_HAS_COLUMNS), attached at:2138,:3720,:4633(three list-view doors).packages/spec/src/stack.zod.ts#validateCrossReferences— the build-time page-name existence branch;packages/lint/src/validate-view-page-refs.ts#validateViewPageRefs— the CLI / publish-gate resolution (runtimeTypes: ['flow','view']).packages/spec/liveness/view.json— thepageNamerows and thetypenote quoted above.type: 'page'list views in this tree or any consuming app the seats can read (objectui#8429's census; the 25 in-treetype: 'page'hits are app nav items, a different key that stays). objectui'sListViewmapspage→gridwith a warn (declared ≠ enforced).pageview type on objects, or nav registration at publish time #13216 (command-palette indexing of published pages, PR feat(spec,metadata-protocol): a page hit kind on GET /api/v1/search — command palette indexes published pages #14249) is not part of this retirement and stays. Direction 2's design card [Design] 运行时发布的页面能否注册进代码定义 app 的导航?—— #13216 方向 2 的授权设计(反转 app.allowOrgOverride=false 与否) #13620 is untouched.Deliverable — follow
.claude/skills/spec-property-retirementend to end'page'from the list-viewtypeenum on every door that carries it (ListViewSchema,ObjectListViewSchema,ListViewOverlayWireSchemaand any mirror), removepageName,checkListViewPageMountand its three messages, thevalidateCrossReferencesbranch andvalidateViewPageRefs(or narrow them to what remains), and every docblock /VIEW_HISTORYline that describes the mount — replace with the standard tombstone naming this card and the ruling.pageNamerows and rewrite thetypenote; regenerate every generated baseline / form / skill reference the playbook lists (⛔ never by hand).type: 'page'or apageNamekey is refused by name at rehydration and byos migrate meta(zero producers ⇒not-required/ refuse-by-name per the playbook's route choice; the dev records the route and its reason in the changeset).content/docs/**mention of the page view type /pageNameon views is removed or rewritten (the nav-itemtype: 'page'docs are a different key and stay).type: 'page'refused;pageNamerefused as unknown key), and the liveness/enum ratchets green.@objectstack/spec(and@objectstack/lintif touched)minorwith the BREAKING banner under the launch-window convention, naming what an author loses and the tombstone.Dispatch shape:
Clause-②: no— an accept-set narrowing / retirement (#16349 direction), ordinary tier; the path arm hits (packages/spec/src/**) so the in-seat contract review atCONTRACT_REVIEW_TIERis on record before enqueue per SKILL.md 〈入队与落地〉.Downstream
objectui#8429 becomes the objectui half — retire
UNDRAWABLE_VIEW_KINDS.page, thenormalizeListViewSchemawarn arm and the PR #8684 current-state pin once the spec release carrying this removal is installable (cross-repo unlock criterion = 消费方可安装, not merged). It carriesBlocked-by: objectstack-ai/objectstack#<this card>.Dedupe: #13216 (closed, the ruling that added the member), #13100 (closed, the finding), #13620 (direction 2 design card — different question); no open card asks for this removal.