Skip to content

docs(skills): record-page rule names drawer and full page as the reader's Open records choices - #29259

Merged
os-zhuang merged 3 commits into
mainfrom
claude/project-thread-fvpiv1
Nov 2, 2026
Merged

os-zhuang merged 3 commits into
mainfrom
claude/project-thread-fvpiv1

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Steedos · project thread

Fixes #29110

Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么:objectstack-ui 技能的记录页规则第 6 条与评测第 2 题,把读者的「打开记录」选项改为抽屉(默认)或整页两种,并写明列表旁的分栏已退役。
  • 为什么改:控制台已退役列表旁分栏、默认改为抽屉打开;技能仍教「分栏为默认」,会让 AI 向作者描述一个已不存在的选项。
  • 风险与回滚:只改发布技能的两段文字与一份 patch changeset,无代码与契约改动;回滚即还原本 PR。
  • 先看:skills/objectstack-ui/rules/record-page.md 第 6 条(47–53 行);skills/objectstack-ui/evals/record-page.json 第 2 题 expected_output。
  • 两分钟验证:node scripts/check-skills-token-ratchet.mjs,预期 record-page.md 为 996 tokens(上限 996)且退出码 0。
  • 需要你做的:审阅后批准(本 PR 改动 skills/**,需授权审批人批准方可落地)。

What changes

The console retired the split pane beside the list (#28915, landed as ea150b7): a list record opens in the drawer (the default) or as the full page, and the Display menu's Open records offers Drawer and Full page only. The shipped objectstack-ui skill still taught the old model.

  • skills/objectstack-ui/rules/record-page.md rule 6: Open records now reads "drawer — the default — or full page, for a drawer-mode object; the split beside the list is retired". The rest of rule 6 is checked against main's console code and kept: the right-column switch (RECORD_RELATED_COLUMN_PREFERENCE), the related panels' order and hidden set (RECORD_RELATED_ARRANGEMENT_PREFERENCE), and the drag-resize width and maximize button, which live on the record drawer (navigation-overlay.tsx useDrawerResize, maximizable). One more word changed with it: "the pane's dragged width and ⤢" now says "the drawer's", since the drawer is the only pane left.
  • skills/objectstack-ui/evals/record-page.json eval 2: the prompt is unchanged (reps still ask for records beside the list). The expected answer now says a pane beside the list is no longer offered, that Open records is drawer (the default) or full page, kept in the browser, and that nothing is authored for it; navigation: { mode: 'page' } stays the one declaration. The assertions stay as they are and still hold: must_contain (navigation: { mode: 'page' }, Display menu) are both in the new text, and the must_not_contain entries are absent.
  • .changeset/29110-record-page-skill-split-retired.md: @objectstack/skills patch (skills/ ships in that package's files).

Other skill text: a grep of skills/ for "split beside", "beside the list", "Open records" and "split pane" found only these two files. No other skill text changes.

Tests

No ui test is owed (text only). The skill gates the repo derives for this diff are listed under Verification.

Acceptance notes

  • skills/ line readings. Changed file: record-page.md 65 lines before, 65 after (3981 bytes before, 3982 after; 996 tokens before and after, ceiling 996). The eval file is an eval fixture, measured and not ratcheted: 1899 bytes before, 1972 after. Whole package (sum of every SKILL.md): 4550 lines before and after; no SKILL.md is touched.
  • The rule file sits at its token ceiling, so the new words were paid for inside the same sentence; no ceiling moved.

Verification

Gates derived by node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (43 families), run on head d0c28e8 and reconciled with --ran: 40 exit 0, 3 NOT MEASURED. Head eaef3b0 only adds a merge of origin/main that touches no skills/ file; check-skills-token-ratchet re-ran green on it.

Gate readings
  • node scripts/check-skills-token-ratchet.mjs exit 0 (record-page.md 996 tokens, ceiling 996) and --self-test exit 0.
  • pnpm --filter @objectstack/lint run check:doc-formula-expressions exit 0, after building @objectstack/formula and @objectstack/lint (its first run exited 3 on that prerequisite).
  • node scripts/check-sdui-manifest.mjs exit 0.
  • NOT MEASURED (exit 3, prerequisite not met: they read every package's dist, which needs a full pnpm build; this diff touches no package code): check:dts-closure, check:dual-build-cjs-loads, check:lean-entry-closure. CI runs them.
  • Every other derived family exit 0 (closing-keyword parity, changeset no-major, ADR-0087 registration, empty changeset, skill compatibility, skill frame sync, skill identifier liveness, nul bytes, doc authoring and the rest).

Generated by Claude Code

… as the reader's choices

The split pane beside the list is retired; the Display menu's Open records
offers Drawer (the default) and Full page only.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QsR2jT7tQShSRWpBCBAgea
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation tooling Fix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface labels Nov 2, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:ui#3 · zhuangjianguo · session_01QsR2jV4dWohojjbTJTQq5m

Contract review

Served-tier: TIER_DEFAULT
Head-sha: eaef3b026dd724dd6a47aba01a2db7148478b96b
Local-runs: none
Scope: skills/objectstack-ui/rules/record-page.md, skills/objectstack-ui/evals/record-page.json, .changeset/29110-record-page-skill-split-retired.md + ui/packages/app-shell/src/utils/recordOpenPreference.ts, ui/packages/plugin-list/src/ListView.tsx, ui/packages/plugin-list/src/components/ViewSettingsPopover.tsx, ui/packages/components/src/custom/navigation-overlay.tsx

Face: governed rule text (skills/**, Tier H). Shipped skill prose and one eval fixture; no code, no schema, no metadata key. Read at 2026-11-02T10:54Z: the PR's 3 files in full diff and the cited console code on origin/main.

① Derived judgments

  • What an agent is now told (correct): rule 6 names the reader's Open records choices as drawer (the default) or full page, for a drawer-mode object, and says the split beside the list is retired. Main agrees: RecordOpenPreference = 'drawer' | 'page' with DEFAULT_RECORD_OPEN_PREFERENCE = 'drawer' (recordOpenPreference.ts:55-61); the Display menu strings are list.recordOpenDrawer "Drawer" and list.recordOpenPage "Full page" (ListView.tsx:1243-1244), and a page-declared object gets list.recordOpenDeclaredPage instead of the choice.
  • "the drawer's dragged width and ⤢" (correct): the drag resize and maximize live on the record drawer (navigation-overlay.tsx:372 useDrawerResize, :211 maximizable). With the split pane gone, "pane" named nothing else.
  • Nothing else in rule 6 moved: the right-column switch and related-panel order/hidden set are unchanged text.
  • Eval 2: the expected output now says a pane beside the list is no longer offered and keeps navigation: { mode: 'page' } as the one declaration. Its must_contain strings (navigation: { mode: 'page' }, Display menu) are both present and its must_not_contain entries are absent, so the assertions still hold unchanged.

② Semver level

@objectstack/skills: patch (prose correction in a shipped skill; Metadata-protocol: none). Matches the changeset.

③ Boundary flags

  • No open_questions. Deviations stated by the dev: "pane" → "drawer", and the shorter "split beside the list" wording to stay at the file's 996-token ceiling; both accepted.
  • PR author is objectstack-fleet[bot] (relay write).

④ Design judgment

  • record-page.md rule 6 against the cited code and the acceptance scenario (an author asks for records "beside the list"): the rule now leads an agent to author nothing and to say the pane is retired, which is what the console does on main after PR feat(ui)!: a record opened from a list opens in the drawer by default, and the split pane retires #29108 (ea150b7f). The sentence still sits under "never author these", so no metadata key is suggested.
  • record-page.json eval 2 against the same scenario: the expected answer is consistent with rule 6 and with the refused split / modal / popover modes the rule's earlier paragraph names.
  • No other skills/ sentence names the retired pane (the dev's grep of "split beside", "beside the list", "Open records", "split pane" hit these two files only).

Implemented-by: claude/project-thread-fvpiv1
Reviewed-by: session_01QsR2jV4dWohojjbTJTQq5m

VERDICT: PASS

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:ui#3 · zhuangjianguo · session_01QsR2jV4dWohojjbTJTQq5m

维护者速读

  • 改了什么:objectstack-ui 技能记录页规则第 6 条与评测第 2 题:读者的「打开记录」选项改为抽屉(默认)或整页两种,并写明列表旁的分栏已退役;「窗格的拖拽宽度」改为「抽屉的」。
  • 为什么改:控制台已在 PR feat(ui)!: a record opened from a list opens in the drawer by default, and the split pane retires #29108 退役列表旁分栏、默认改用抽屉打开记录;技能仍教「分栏为默认」,AI 会向作者推荐一个已不存在的选项。
  • 风险与回滚:只改发布技能的两段文字和一份 patch changeset,不涉及代码、元数据或契约;回滚即还原本 PR。
  • 先看:skills/objectstack-ui/rules/record-page.md 第 6 条(47–53 行)与 skills/objectstack-ui/evals/record-page.json 第 2 题的 expected_output。
  • 两分钟验证:node scripts/check-skills-token-ratchet.mjs,预期 record-page.md 996 tokens(上限 996)、退出码 0;对照 ui/packages/app-shell/src/utils/recordOpenPreference.ts:55 只有 'drawer' | 'page'。
  • 需要你做的:批准本 PR(契约复审 PASS 评论 6575368753,Head-sha: eaef3b026dd724dd6a47aba01a2db7148478b96b);批准后由席位落地。

席位意见:文字与主干控制台一致(抽屉默认、整页可选、分栏已退役),评测断言不变且仍成立;建议批准。

席位核对 · ACCEPT · 2026-11-02T10:55Z

Head-sha: eaef3b026dd724dd6a47aba01a2db7148478b96b

  • Shape: draft → main, Fixes #29110 in the body only. 3 files, +15 / −5. Governed: check-governed-merges --pr 29259 hits 2 of 3 paths (skills/**), landing tier H: an authorized approval from GOVERNED_APPROVERS, then the seat lands it. Clause-②: no and Metadata-protocol: none are line-initial in the body and the changeset, as claimed (6574616007). The changeset is patch for @objectstack/skills.
  • Contract review: full review ①–④ on this head is 6575368753, PASS.
  • Premise measured: PR feat(ui)!: a record opened from a list opens in the drawer by default, and the split pane retires #29108 retired the split pane on main (ea150b7f); RecordOpenPreference is 'drawer' | 'page' with drawer the default.
  • Gates (check-runs on this head): 28 success, 13 skipped, 0 failed or pending. Dev: 43 derived families, 40 exit 0, 3 NOT MEASURED (dts-closure, dual-build-cjs-loads, lean-entry-closure: full-build gates, no package code touched). check-skills-token-ratchet green at this head.
  • Accepted deviations: "pane" → "drawer"; shorter wording to stay inside the file's 996-token ceiling.
  • Out of scope / Skills-docs: none further; the dev's grep found no other skills/ sentence naming the retired pane.
  • Landing: waits for an authorized APPROVED review (os-zhuang or hotlong), requested in the same stroke with needs-user-decision. Then the seat runs the pre-landing checks, clears the label, flips ready and arms auto-merge. Fixes #29110 closes the card on merge.

@objectstack-fleet objectstack-fleet Bot added the needs-user-decision Blocked on a maintainer decision — do not dispatch; decision cards only, never on a PR label Nov 2, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review November 2, 2026 11:12
@os-zhuang
os-zhuang added this pull request to the merge queue Nov 2, 2026
@objectstack-fleet objectstack-fleet Bot removed the needs-user-decision Blocked on a maintainer decision — do not dispatch; decision cards only, never on a PR label Nov 2, 2026
Merged via the queue into main with commit 5a2bdf9 Nov 2, 2026
50 checks passed
@os-zhuang
os-zhuang deleted the claude/project-thread-fvpiv1 branch November 2, 2026 12:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s tooling Fix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Skills record-page rule and eval still teach split beside the list as the default Open records choice, which #28915 retires

2 participants