Repository navigation
docs(skills): page-builder guide drops the retired page:header breadcrumb and names placedActions - #30115
Conversation
…ui page-builder guide PageHeaderProps.breadcrumb is a retiredKey tombstone since spec 17 (ADR-0087 D2); the guide's title-row sentence still named it. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J8VVAjSbVpQUeFNuTTm3me
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract-review-claim: session_01J8VVAnMUWA9rufXzFaEh4J · head d93cef6 · 2026-11-04T14:52Z The seat review runs at CONTRACT_REVIEW_TIER in an isolated subagent. No review seat ( Generated by Claude Code |
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract reviewServed-tier: Reviewer: an isolated contract reviewer at CONTRACT_REVIEW_TIER, read-only on GitHub (REST reads only; nothing written, pushed or commented), fed the card body and comments, the PR body, the diff against the merge-base, the head's check-runs, AGENTS.md, contract-review.md, review-checklist.md, lanes/skills.md and the example record cr42. The dev gate record was read as input, not as conclusions; every count and every claim about the spec and the renderer below is this review's own reading of the head tree, of ① Derived judgments
② Semver levelPatch, and the changeset says patch. ③ Boundary flags
④ Design judgmentPer hits file, against the card's scenario (an agent composing a page from the guide must not write a key the props lint refuses, and should learn the header's live keys where the guide names any) and the code on
Must-fix: none. Should-fix: S1 — now that #30097 is on Check-runs at record time: 54 check-runs on d93cef6 at the third read, 42 success, 8 skipped, 0 failure, 4 in progress (Test Core 1/8, Test Core 2/8, Lint UI, Type Check · consumer gates); three reads went 52 → 54 → 54 runs and 14 → 42 → 42 success with no non-success completion at any read (the first read had 30 in progress: the sixteen Test UI shards, Build & E2E UI, Live E2E UI, Lint UI, Type Check UI, the four Lint lanes, the four Type Check lanes and the two Test Core shards; all but the four named completed success by the second read). Success: Lint & Repo Gates (a required floor), Lint · repo & tooling gates, Lint · CI, release & engine gates, Lint · PM dispatch-gates, Lint · docs & code guards, Lint · ESLint, Lint · scoped · tooling self-tests, Lint · scoped · slot lookup & corpus, Lint · scoped · query-options erasure, Type Check · workspace / source gates / debt ledger, Build Core, Governed Surface Queue Guard, Dogfood Regression Gate, Test UI and its sixteen shards, Type Check UI, Build & E2E UI, Live E2E UI, Build UI Deps, Plan Test Core shards, PR-body guards, Check Changeset, Check PR Size, Auto Label, filter. Skipped by path filter or opt-in: Build Docs, UI Published Artifacts, Dogfood Verify CLI, Temporal Conformance, Schedule gate, 18.x upgrade harness, Packed-tarball smoke, and the matrix-templated placeholder row for the Dogfood shards. The Implemented-by: VERDICT: PASS Generated by Claude Code |
PR #30097 made the header renderer read placedActions, so the objectui page-builder guide names it beside actions and the objectstack-ui pages catalogue drops "not drawn yet". Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J8VVAjSbVpQUeFNuTTm3me
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract-review-claim: session_01J8VVAnMUWA9rufXzFaEh4J · head 0f1ccae · 2026-11-04T15:45Z Delta review against the PASS at head d93cef6 (comment 6634141370). The delta is S1 and S2 in one new commit after a merge of Generated by Claude Code |
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract reviewServed-tier: Reviewer: the same isolated contract reviewer at CONTRACT_REVIEW_TIER, read-only on GitHub (REST reads only; nothing written, pushed or commented). The full review on d93cef6 (PASS, should-fixes S1, S2, S3) stands as read; this record judges only the delta ① Derived judgments
② Semver levelUnchanged: patch, and the changeset still says patch. The delta is one line in each of two published skills ( ③ Boundary flags
④ Design judgmentPer hits file, for the delta only:
Must-fix: none. Should-fix: none remaining — S1, S2 and S3 of 6634141370 are all resolved on this head. Check-runs at record time: 60 check-runs on 0f1ccae at the second read, 50 success, 10 skipped, 0 failure, 0 in progress; the first read had 60 runs, 49 success, 10 skipped, 1 in progress (the rerun's Check Changeset row, success by the second read). Four names carry two rows because Implemented-by: VERDICT: PASS Generated by Claude Code |
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J 维护者速读
席位核对 — ACCEPT · domain:skills#1 · head
|
…-5c51ya # Conflicts: # skills/objectstack-ui/rules/pages.md
…n the diff main already carries the pages.md catalogue fix, so the changeset prose names page-builder.md only. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J8VVAjSbVpQUeFNuTTm3me
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract-review-claim: session_01J8VVAnMUWA9rufXzFaEh4J · head 1614562 · 2026-11-04T20:43Z Delta review against the PASS at head 0f1ccae (comment 6635380355), after the queue dropped the PR as Generated by Claude Code |
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract reviewServed-tier: Reviewer: the same isolated contract reviewer at CONTRACT_REVIEW_TIER, read-only on GitHub (REST reads only; nothing written, pushed or commented). The full review on d93cef6 (6634141370, PASS) and the delta on 0f1ccae (6635380355, PASS, nothing outstanding) stand as read; this record judges only the delta ① Derived judgments
② Semver levelUnchanged: patch, and the changeset still says patch. The net diff is one line in one published skill ( ③ Boundary flags
④ Design judgmentPer hits file, for the delta only:
Must-fix: none. Should-fix: none. Check-runs at record time: 60 check-runs on 1614562 at the second read, 50 success, 10 skipped, 0 failure, 0 in progress; the first read had 60 runs, 49 success, 10 skipped, 1 in progress (the body-edit rerun's Check Changeset row, success by the second read). Four names carry two rows because Implemented-by: VERDICT: PASS Generated by Claude Code |
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J 维护者速读
席位核对 — ACCEPT · domain:skills#1 · head
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J
Requested by Irene · project thread
Fixes #30031
Clause-②: no
Metadata-protocol: none
The maintainer waived the model-tier mandate for
skills/**while that tier had no quota; this PR was developed below it.维护者速读
skills/objectui/guides/page-builder.mdL100-101 的page:header标题行键表删掉已退役的breadcrumb,并加上已上线的placedActions: true,现为 (title,subtitle,actionsorplacedActions: true)。PageHeaderProps.breadcrumb自 spec 17 起是retiredKey墓碑(ADR-0087 D2),props lint 拒绝手写的breadcrumb;fix(console): the record header reads placedActions, so a packaged sys_user header action draws again (#29951) #30097 合入后 header 渲染器已读取placedActions。@objectstack/skillspatch;回滚即 revert。What changes
skills/objectui/guides/page-builder.mdL101:`breadcrumb`,is removed from thepage:headertitle-row list, andplacedActions: trueis named as the alternative toactions. The sentence now reads "a title row (title,subtitle,actionsorplacedActions: true) that takes nochildren". The rest of the file is byte-identical tomain..changeset/30031-page-builder-header-breadcrumb.md:'@objectstack/skills': patchwithClause-②: noandMetadata-protocol: none, its prose namingpage-builder.mdonly. Noskip-changesetlabel: askills/**diff ships in@objectstack/skills(pr-automation.yml route 1).An earlier head of this PR also changed the
page:headerrow inskills/objectstack-ui/rules/pages.mdL46, which saidplacedActions: truewas "not drawn yet". PR #30127 (#29951) landed that fix onmain("(all placed, read live)"). The merge ofmaininto this branch tookmain's line as is, sopages.mdis no longer in this PR's diff.Read off
mainat9a53fc9f(merged into the branch, no rebase):PageHeaderPropsinpackages/spec/src/ui/component.zod.ts:breadcrumbandshowStarareretiredKeytombstones. Live keys:title,subtitle,actions,placedActions,recordChrome,showCopyId,maxVisible,mobileMaxVisible,aria.placedActionsis live. fix(console): the record header reads placedActions, so a packaged sys_user header action draws again (#29951) #30097 (console(record header): a url action placed at record_header on sys_user no longer renders in the 18.3 Console header menu, drawer or full page (18.2 rendered it) #29951) dropped the[PLANNED — not yet rendered]marker from its describe, which now reads "Draw every action of the page's object whoselocationsincluderecord_headerorrecord_more, read live from the object's metadata, in place of an authoredactionslist … Refused astruebeside an authoredactionslist: keep one." Thepage:headerrenderer inui/packages/components/src/renderers/layout/containers.tsxreadsplacedActionsand draws the placed header actions. The.refineonPageHeaderPropsrefusesplacedActions: truebeside an authoredactionslist, so the guide spells the two as alternatives ("or"). The first head of this PR (d93cef6e) leftplacedActionsout because the describe at its base still carried the PLANNED marker; that reason no longer holds onmain.recordChrome,showCopyIdandmaxVisibleshape the record chip and the overflow menu, not what the title row holds, so the guide's sentence does not name them.skills/objectui/**: L101 was the onlybreadcrumb.showStarappears nowhere.Token ratchet.
page-builder.md: 13628 → 13639 bytes, 3410 tokens (ceiling 3411, headroom 1). No ceiling row moves, nothing was re-wrapped, and no payment is owed.Why
The guide taught a key the props lint refuses, so a page authored from it would fail validation, and it did not name
placedActionsafter #30097 made the header draw it.Verification
Head
16145621: on top of0f1ccaec, a merge oforigin/mainat9a53fc9f(31fbfb98,pages.mdresolved tomain's line) and one commit scoping the changeset prose.Local gates on 1614562: 44 derived, 44 run with exit 0, 0 NOT MEASURED (`dispatch-gates --ran`)
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 44 commands for the two changed files. All ran afterpnpm install --frozen-lockfileand a fullpnpm buildon the merged tree (exit 0), each under a 900 s timeout with its exit code captured before any pipe.check-skills-token-ratchet.mjs,check:skill-examples,check:skill-identifier-liveness,check:skill-frame-sync,check:doc-authoring,check:dts-closure,check:dual-build-cjs-loadsandcheck-comment-mask-corpus.mjs.--ranprinted:44 derived famil(ies) accounted for — 44 run, 0 NOT-MEASURED (a DERIVED zero — all 44 recorded an exit code and none of them is 3).node scripts/check-commit-card-trailers.mjs --range origin/main..HEAD: exit 0 (5 commits) before the push.Human Minimum
packages/specholds no runtime logic. (Not touched.)main, one pull request.packages/spectouched: its generated artifacts are regenerated and committed. (Not touched.)content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.Generated by Claude Code