Repository navigation
docs(skills): pages.md says what a page type, template and region name run - #23758
Conversation
…e run `skills/objectstack-ui/rules/pages.md` follows the page contract `PageTypeSchema`, `PageTemplateSchema` and `PAGE_TEMPLATE_SLOTS` declare: `home` is the widest region page and not a landing (an app opens on its first navigation item; `isDefault` is refused on it), `utility` is a narrow inline region page with no floating or docked shell slot, the template set is closed to `default`, `header-sidebar-main`, `three-column` and `dashboard` with the regions each one places (`sidebar` left, `aside` right; `full-width` retired), a region the template does not place or a second region for a filled slot is refused, and `kind: 'jsx'` is retired rather than an alias of `html`. The published-skills token ratchet holds this file at zero headroom, so the added text is paid for in the same file: the disambiguation sentence that restated the table, the renderer clause of the five-values line and the `responsive.zod.ts` source pointer. Net -11 bytes. Claude-Session: https://claude.ai/code/session_01H9YpvyoScsRAsjBc2pCUgn Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9YpvyoScsRAsjBc2pCUgn Co-authored-by: Claude <noreply@anthropic.com>
席位核对 — ACCEPT (Tier H) · objectstack
|
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 38841339387 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
|
Queue build
Generated by Claude Code |
Fixes #23610
Clause-②: no
Executes ruling
6190536588item 4 under claim6204703954:skills/objectstack-ui/rules/pages.mdsays what PR #23708 makes the page contract. This PR is the card's last piece and carries its closing keyword (#23708 isPart of #23610). It turns ready only after #23708 has merged — the seat marks it; the dev does not — and, as askills/**diff (governed, Tier H), it lands only after a human approval, by the seat.What changes
One skill file,
skills/objectstack-ui/rules/pages.md, plus a@objectstack/skillspatch changeset. Every sentence follows the spec text #23708 lands —PageTypeSchema's docblock and enum comments,PageTemplateSchema,PAGE_TEMPLATE_SLOTS,checkPageRegionPlacement,misplacedDefaultPageRefusal, theutilityprint refusal — andcontent/docs/ui/pages.mdx's new wording. Nothing the spec does not declare enters the skill.main)home(24)isDefaultrefused): an app opens on its first navigation itemapp(25)utility(26)type: 'utility'…" plus a restatement of the table's threetypevaluestypevalues go (the table carries them)three-column/two-column/single-column; regionsheader,left_sidebar,main,right_sidebar,footerdefault(header, sidebar, main, aside, footer),header-sidebar-main(header, sidebar, main),three-column(the same five),dashboard(header, footer; other regions are grid cells);full-widthretired; on akind: 'full'page a region the template does not place, or a second region for a filled slot, is refused at itsname; left columnsidebar, rightasideutilitypanel"utilitypage"kind:'jsx'is a deprecated alias forkind:'html'"kind:'jsx'is retired: the parse refuses it and nameskind:'html'" (#23543 F5-jsx, PR #23638)The
homerow's landing sentence is the onemisplacedDefaultPageRefusalprints (an app's landing is its first navigation item); theutilityrow's isPageTypeSchema's ("no floating or docked shell slot"); the template sentence isPAGE_TEMPLATE_SLOTSpluscheckPageRegionPlacement's two refusals (unplaced region; second region for a filled slot). The file mentioned no page default or landing anywhere else, so nothing else moved.Token ratchet — paid in the same file
check:skills-token-ratchetholdsrules/pages.mdat ceiling 5692 with 6 tokens of headroom onmain. The new sentences cost about 135 tokens, so they are paid by deleting content from the same file, never by re-wrapping:typevalues;responsive.zod.tssource pointer under the Styling rules (the field nameresponsiveStylesand every rule stay).Readings,
ceil(utf8 bytes / 4)as the gate counts, ata869ea6→ this head:rules/pages.mdlinesrules/pages.mdbytes / tokensskills/**/*.mdlinesskills/**/*.mdbytes / tokensSKILL.mdlinesChangeset
@objectstack/skills: patch(.changeset/23610-skills-pages-contract.md):packages/skillsships theskills/**tree (sync-catalog.mjs→dist), so this text publishes; a docs fix in a released package takespatch.Clause-②: no— the accept set and the public surface are unchanged.Eval fixtures and generated references
skills/objectstack-ui/evals/views-apps-actions-pages.json:37namestemplate: 'three-column'— a member of the closed set, so it stands. No fixture underskills/objectstack-ui/evals/and no siblingrules/*.mdorSKILL.mdnamesutility,left_sidebar,right_sidebar,two-column,single-column,full-widthorkind:'jsx'(grep on this head).skills/objectstack-ui/references/_index.mdis generator-owned and unchanged (feat(spec)!: a page declares nothing the console does not honour — isDefault only on a bound record page, a closed template set, regions its template places #23708 keeps it byte-identical). No otherskills/**path enters this PR.Verification (head
e97d4c0)node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack: 41 families; each run once, exit captured before any pipe;--ranreconciliation: "41 derived famil(ies) accounted for — 41 run, 0 NOT-MEASURED (a DERIVED zero)"; every family exit 0. The skills families all pass:check-skills-token-ratchet(+--self-test),check:skill-compatibility,check:skill-frame-sync,check:skill-identifier-liveness,check:pm-skill-id-lint,check:doc-authoring,check:role-word,check:nul-bytes, the changeset gates (check-adr-0087-registration,check-changeset-no-major,check-empty-changeset,check:changeset-gate-self-tests,check:published-files,check:pm-changeset-deadline-census).PREREQUISITE NOT METon the fresh worktree (they sweep the built closure):check:doc-formula-expressions(lint),check:dts-closure,check:dual-build-cjs-loads,check:lean-entry-closure,check:sourcemap-no-sources-content. Afterpnpm buildunder the verify lock (75 tasks, 6m54s) each was re-run once and exited 0; the working tree stayed clean (no generated artifact moved).check:skill-frame-freshnessexit 0 (frame byte-identical toorigin/main).left_sidebar,two-column,Floating,deprecated alias,landing page,utility … panel.维护者速读(草稿)
改了什么 只改一个对外发布的技能文件
skills/objectstack-ui/rules/pages.md(加一条@objectstack/skillspatch changeset)。页面类型表里home不再写成「应用落地页」,改为「最宽的区域页;不是落地声明(isDefault被拒),应用打开的是第一个导航项」;utility不再写成「浮动工具面板」,改为「窄的内联区域页,没有浮动或停靠的外壳槽位」;「模板与区域」一段从three-column / two-column / single-column与left_sidebar / right_sidebar改为 #23708 落地的封闭模板集(default、header-sidebar-main、three-column、dashboard)和各自放置的区域名(左栏sidebar、右栏aside;full-width退役;模板不放置的区域、重复占槽的区域被拒);kind:'jsx'从「html的别名」改为「已退役,解析时被拒并指向html」。为什么改 这份技能是 AI 写页面元数据时读的规则。它教的
two-column、left_sidebar、「home 是落地页」在 #23708 之后会被os validate和保存门直接拒收(在此之前则是静默错排或无效声明),也就是技能本身在教 AI 写出会被拒的元数据。裁决6190536588第 4 项把这份文件的更新单列为一个 Tier H PR。风险与代价(含回滚) 零运行时影响:只有技能文本与 changeset,不碰
packages/**。文本描述的是 #23708 合入之后的契约,所以本 PR 在 #23708 合入前保持 draft,不会先于契约发布。token 棘轮零余量,新增内容靠删同文件的三处重复/指针付账(净 −14 字节),没有抬上限。回滚 = revert 这一个 commit 对,无状态可清理。席位意见 同意合入。#23708 已于 10-16 02:31Z 落地(
a69a40a572),main上的 spec 现在就拒收这份技能旧的教法(two-column、left_sidebar、home 上的isDefault);不合入,技能就在教 AI 写一定会被拒的页面元数据。改动只有一份技能文本加一条 patch changeset,零运行时影响,不碰契约(Clause-②: no),CI 全绿,与main无冲突。为满足 token 上限删掉的三处都是重复说明或源码指针,没有删任何规则;其中删responsive.zod.ts源码指针一处,席位已确认可接受。你要做的 一个动作:在本 PR 上点 Approve。席位随后开 auto-merge 落地,#23610 随之关闭。
Acceptance notes
mainasa69a40a572(2026-10-16T02:31Z). The seat marked this PR ready after that merge, and the skill and the parse now agree.Generated by Claude Code