Skip to content

Commit 6a4737a

Browse files
docs(skills): objectstack-data teaches relatedList placement by each value’s role, not by record-page tabs or columns (#29929)
<!-- claude-projects-attribution: {"github_login":"huangyiirene"} --> _Requested by **Irene** · [project thread](https://claude.ai/code/project/chan_01TJXtQ1tVD26ecLDZxFS67x?thread=cmsg_01TJXtQ1tVD26ecLDZxFS67x3m7Q5P762q9G5xUUBGiGko)_ Fixes #29801 Clause-②: no Metadata-protocol: none Fable mandate waived by the maintainer; contract review by triage. ## 维护者速读 - 改了什么:objectstack-data 技能 `rules/relationships.md` 里 `relatedList` 的三条说明不再提任何标签页或栏位:`'primary'` = 记录主体内容里的一张通栏表格(记录详情主体);`false` = 父记录页不显示该子对象;`true` 或不写 = 记录页上的一个辅助面板。另加一个 `'@objectstack/skills': patch` changeset。 - 为什么改:PR #29799(#28888,裁决 6568787922 字母 B)已把 spec 的 `relatedList` describe 改成只讲各值的角色;技能还在教「Details 标签」「side card(共用 Related 标签)」,AI 照着写会把用户引向记录页上不存在的标签。 - 风险与回滚:纯技能文本 + changeset,无代码、键、默认值改动。文件变小(3844 → 3838 tokens,上限 3873 未动),无 re-wrap。回滚即 revert。 - 先看:`skills/objectstack-data/rules/relationships.md` 的 `relatedList is tri-state` 三条;对照 `packages/spec/src/data/field.zod.ts` 的 `relatedList` describe。 - 两分钟验证:`grep -rn "Details tab\|Related\*\* tab\|side card" skills/`,预期无输出;`node scripts/check-skills-token-ratchet.mjs`,预期 relationships.md 3838/3873。 - 需要你做的:Tier H 受管面(`skills/**`),契约复审由 triage 出具后,需要 `GOVERNED_APPROVERS` 的批准;PR 保持 draft。 ## What changes `skills/objectstack-data/rules/relationships.md`, the three value bullets under "`relatedList` is tri-state — placement (ADR-0085)". Each now says what the merged `relatedList` describe in `packages/spec/src/data/field.zod.ts` (read at `a04e9d76`, L1950) says, and names no tab or column. The heading line, the "Order is the parent's" bullet below and every other line in the file are byte-identical. **Before:** ``` - `'primary'` — main content: a full-width table in the details column after the first field section (in the Details tab, no tab of its own). Default for a `master_detail` FK with `inlineEdit`. - `false` — hidden from the parent's page. - `true`, or omitted (except inline-edited `master_detail`) — a side card (the shared **Related** tab). ``` **After:** ``` - `'primary'` — part of the record's main content: a full-width table in the record's detail body. Default for a `master_detail` FK with `inlineEdit`. - `false` — the child object is not shown on the parent record page. - `true`, or omitted (except inline-edited `master_detail`) — an auxiliary panel on the record page. ``` The spec describe it follows: "false = the child object is not shown on the parent record page; true/absent = shown as an auxiliary panel on the record page; 'primary' = part of the record's main content, shown as a full-width table in the record's detail body. ... The page layout is defined by ADR-0085." The ADR-0085 pointer is already on the heading line, so it is not repeated. `.changeset/29801-related-list-placement-skill.md`: `'@objectstack/skills': patch`, with both declaration lines. `@objectstack/skills` (`packages/skills`) is in the fixed release group in `.changeset/config.json` and ships this catalog, so the teaching change publishes and takes a patch changeset. ### Token ratchet (no ceiling row moved, no re-wrap) | file | tokens before / after / ceiling | lines before / after | |:--|:--|:--| | `rules/relationships.md` | 3844 / 3838 / 3873 (headroom 29 → 35) | 414 / 413 | | package `skills/objectstack-data` (17 files) | 44406 / 44400 | 3970 / 3969 | The edit is smaller than the text it replaces, so no deletion is owed to pay for it. ## Tests - `node scripts/check-skills-token-ratchet.mjs`: exit 0, `rules/relationships.md is 3838 tokens (ceiling 3873; headroom 35)`, `57 authored bundle file(s) within their ceilings`. - The card's done-when grep, `grep -rn "Details tab\|Related\*\* tab\|side card" skills/`, prints nothing at this head (exit 1). - No code changed, so no package test, typecheck, ablation or dogfood battery is owed (`Clause-②: no`, no `!` in the title). ## Acceptance notes - The code comment in the example above the bullets, `relatedList: 'primary', // read side: a body table`, is left as it is. It names no tab or column, the card's done-when grep does not match it, and the order scoped this card to the three bullets. If the seat wants it to read "a full-width table" too, it is a one-line follow-up in the same file. - The edit is made on the branch the platform fixes for this thread (`claude/project-thread-xwv4ux`, named in the claim 6604743289) in this container's own checkout rather than in a sibling worktree. The container is this card's alone. - PR #29781 (same file, the `deleteBehavior` paragraph) merged before this branch was cut, so no rebase lap was owed. ## Verification Head `baa17407` (one commit on `a04e9d76`). <details><summary>Local gates on baa1740: 42 derived, 41 run with exit 0, 1 NOT MEASURED (`dispatch-gates --ran`)</summary> - `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` derived 42 commands for the two changed files. All 42 ran in a tree with `pnpm install --frozen-lockfile` done and `@objectstack/formula`, `@objectstack/lint` and `@objectstack/objectql` built (turbo build exit 0), each with a 900 s timeout and its exit code captured before any pipe. - 41 exited 0, among them `check-skills-token-ratchet.mjs` (and its `--self-test`), `check-adr-0087-registration.mjs --base origin/main`, `check-changeset-no-major.mjs`, `check-empty-changeset.mjs`, `check:changeset-gate-self-tests`, `check-comment-mask-corpus.mjs`, `check:doc-authoring`, `check:doc-formula-expressions`, `check:skill-compatibility`, `check:skill-frame-sync`, `check:skill-identifier-liveness`, `check:pm-skill-id-lint`, `check:pm-governed-merges`, `check:role-word`, `check:nul-bytes`, `check:dts-closure` and `check:lean-entry-closure`. - `pnpm check:dual-build-cjs-loads` exited 3: `PREREQUISITE NOT MET` (`Run pnpm build first. This is NOT a pass: nothing was measured.`); it needs a full `pnpm build`. This diff touches no `packages/**` file; CI's `Lint & Repo Gates` run on the PR is its reading. - `--ran` printed: `42 derived famil(ies) accounted for — 41 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)`. - `node scripts/check-commit-card-trailers.mjs --range origin/main..HEAD`: exit 0 (one commit, no card relation, model-free trailer pair). - Writes: `git push` ×2 (the bare branch pointer, baa1740); one relay `pr_create`; no GitHub MCP write. </details> ## Human Minimum - [x] 1. Schemas start as Zod; `packages/spec` holds no runtime logic. (No schema touched.) - [x] 2. Every name I added uses the casing for its kind. - [x] 3. No formatter ran; `pnpm lint` is CI's repo-wide run. - [x] 4. One issue, one branch off an up-to-date `main`, one pull request. - [x] 5. A change that publishes carries a changeset, and both declaration lines are filled in here and in the changeset. - [x] 6. `packages/spec` not touched. - [x] 7. No hand edits to `content/docs/references/`, `packages/*/CHANGELOG.md` or `content/docs/releases/`. - [x] 8. Title, body and comments are in English (the 维护者速读 block is the repo's own Chinese reading aid). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01J8VVAkV4r9DLBV3JKUsdf5 --- _Generated by [Claude Code](https://claude.ai/code/session_01J8VVAkV4r9DLBV3JKUsdf5)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent cde9a80 commit 6a4737a

2 files changed

Lines changed: 17 additions & 6 deletions

File tree

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
'@objectstack/skills': patch
3+
---
4+
5+
docs(skills): objectstack-data teaches `relatedList` placement by each value's role, not by record-page tabs or columns
6+
7+
Clause-②: no
8+
Metadata-protocol: none
9+
10+
- **Before.** `rules/relationships.md` said `relatedList: 'primary'` draws "a full-width table in the details column after the first field section (in the Details tab, no tab of its own)" and that `true` / omitted is "a side card (the shared **Related** tab)". The spec's `relatedList` describe no longer names any tab or column, so the skill taught a page layout the record page does not draw.
11+
- **Now.** The three bullets follow the spec describe: `'primary'` is part of the record's main content, a full-width table in the record's detail body (still the default for an inline-edited `master_detail` FK); `false` means the child object is not shown on the parent record page; `true` or omitted is an auxiliary panel on the record page. Layout stays ADR-0085's to define.
12+
- The file gets smaller and stays under its token ceiling; no ceiling moves, no schema, key or behaviour changes.

‎skills/objectstack-data/rules/relationships.md‎

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -335,12 +335,11 @@ audit_ref: { type: 'master_detail', reference: 'invoice', relatedList: false },
335335
336336
`relatedList` is tri-state — placement (ADR-0085):
337337
338-
- `'primary'` — main content: a full-width table in the details column after
339-
the first field section (in the Details tab, no tab of its own). Default for a
340-
`master_detail` FK with `inlineEdit`.
341-
- `false` — hidden from the parent's page.
342-
- `true`, or omitted (except inline-edited `master_detail`) — a side card
343-
(the shared **Related** tab).
338+
- `'primary'` — part of the record's main content: a full-width table in the
339+
record's detail body. Default for a `master_detail` FK with `inlineEdit`.
340+
- `false` — the child object is not shown on the parent record page.
341+
- `true`, or omitted (except inline-edited `master_detail`) — an auxiliary
342+
panel on the record page.
344343
- Order is the parent's: `relatedLists: ['task', 'event.related_to']` (child, or
345344
`object.field`) lists those first. A child in the stack with no inbound FK is
346345
refused everywhere; one that exists nowhere is refused by `os validate` /

0 commit comments

Comments
 (0)