Skip to content

docs(skills): a primary related list is a body table in the Details tab, and the relatedLists refusal states its package boundary - #27958

Merged
os-zhuang merged 2 commits into
mainfrom
claude/project-thread-ua16sf
Oct 30, 2026
Merged

os-zhuang merged 2 commits into
mainfrom
claude/project-thread-ua16sf

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Elon · project thread

domain:skills#2 · os-elon-musk · session_016WV4cyuFKhHVaGYSSdTHG8

Fixes #27354

What changes

  • skills/objectstack-ui/SKILL.md (read side, related-list layout): a relatedList: 'primary' child is a full-width body table in the details column after the first field section, inside the Details tab with no tab of its own; every other list is a side card in the one shared Related tab; field changes (trackHistory) join the Timeline tab under its Changes filter, and there is no History tab. The paragraph also stops teaching an app-level relatedLayout: 'tabs' | 'stack' override as surviving: objectstack#27055 removed it from the synthesizer (ui/packages/plugin-detail/src/synth/buildDefaultPageSchema.ts:163-171), and no spec schema carries it.
  • skills/objectstack-data/rules/relationships.md (Detail-page related lists): the 'primary' bullet says the same placement, and the relatedLists refusal states its boundary: a child in the stack with no inbound FK is refused everywhere; one that exists nowhere is refused by os validate / os build and by a metadata write naming no package; a write into a package stores it, and the page places nothing.
  • .changeset/27354-skills-related-list-body-table.md: @objectstack/skills patch.

Why

Both pages still taught the pre-v3 page after PR #27310 (eef83734d, record page v3) and PR #27352 (ad3a640e3, rewritten describes, seat ruling A on #27311). The new text follows packages/spec/src/data/field.zod.ts:1831 (relatedList), packages/spec/src/data/object.zod.ts:3178 (relatedLists), :277 (trackHistory), and buildDefaultTabs in buildDefaultPageSchema.ts:1016-1121.

Measured on origin/main ca54eaca: a shared Related tab still exists for non-primary lists (and attachments); History is no tab, it is the Timeline stream's Changes filter. grep -rniE "own tab|related tab|matching no inbound" over skills/** (evals included, every package) hits only the two passages fixed here; content/docs/ui/pages.mdx:187 already teaches the side-card Related tab correctly. No eval teaches the old text.

Token ratchet (node scripts/check-skills-token-ratchet.mjs)

File Before After Ceiling Ceiling moved
skills/objectstack-ui/SKILL.md 3848 3851 3851 no
skills/objectstack-data/rules/relationships.md 3872 3848 3873 no

Paid in-file by deleting restated text, no re-wrap: in objectstack-ui, the primary bullet's tab clause (now said once, in the layout paragraph), "Promoting a child table to a tab is a one-word change" and the surviving-relatedLayout sentence; in relationships.md, "The UI is derived from metadata (…)" (restates the sentence before it), the 'grid' / 'form' bullets' restatement of the code block's comments, the write-side parenthetical, "on the parent's detail page" in the default sentence, "(default with inlineEdit)" in the example comment (the bullet says it) and "both are optional — when omitted". No ceiling row is raised.

Verification

  • pnpm install --frozen-lockfile --ignore-scripts (exit 0), then every family node scripts/pm/dispatch-gates.mjs --commands derives at 46c30d4c: 45 families, re-derived after commit (identical). 40 exit 0 on the first run; 5 exit 3 (prerequisite: dists) until pnpm exec turbo run build (116 tasks, exit 0), then exit 0. dispatch-gates --ran: 45 derived, 45 run, 0 NOT-MEASURED, 0 UNRUN.

Clause-②: no
Metadata-protocol: none

Human Minimum

  • 1. Schemas start as Zod; packages/spec holds no runtime logic. (not touched)
  • 2. Every name I added uses the casing for its kind. (no names added)
  • 3. No formatter ran. (Markdown only; pnpm lint not run locally, CI runs it.)
  • 4. One issue, one branch off an up-to-date main, one pull request.
  • 5. A change that publishes carries a changeset, and both declaration lines are filled in here and in the changeset.
  • 6. packages/spec touched: n/a.
  • 7. No hand edits to generated references, changelogs or release notes.
  • 8. Title, body and comments are in English.

维护者速读

  • 改了什么:两份对外技能(objectstack-ui、objectstack-data)里关于记录页「相关列表」的说法改成现状:主相关列表是详情页签里的整宽表格,不再单独占一个页签;其余列表是共享「关联」页签里的侧卡;字段变更在时间线的「变更」筛选里,没有历史页签。
  • 为什么改:记录页 v3(feat(plugin-detail,app-shell,components): record page v3 layout #27310)与规范描述重写(docs(spec): related-list descriptions say which unknown names are refused; primary list and trackHistory describe the v3 record page #27352)落地后,技能还在教旧页面,AI 照着写会设计出不存在的页签,还以为任何拼错的 relatedLists 名都会被拒。
  • 风险与回滚:只改文档文字,无代码、无 schema;回滚即撤回本 PR。两份文件都在 token 天花板之内,没有提高任何上限。
  • 先看:skills/objectstack-ui/SKILL.md 的 Related-list layout 段,和 relationships.md 的 relatedList 三态列表。
  • 两分钟验证:对照 field.zod.ts:1831 与 object.zod.ts:3178 的 describe 读两段新文字;跑 node scripts/check-skills-token-ratchet.mjs。
  • 需要你做的:受管面 skills/**,欠一次契约复审(fable 档),落地为 Tier H,需受管审批人批准。

🤖 Generated with Claude Code

https://claude.ai/code/session_016WV4cyuFKhHVaGYSSdTHG8

…ab, and the relatedLists refusal states its package boundary

objectstack-ui SKILL.md and objectstack-data rules/relationships.md still
taught a relatedList: 'primary' child's "own tab" and an unbounded
relatedLists refusal. Since the record page v3 and the rewritten spec
describes, a primary list is a full-width body table in the details column
after the first field section (inside the Details tab); every other list is
a side card in the shared Related tab; field changes join the Timeline tab
under its Changes filter. The refusal now says which unknown names are
refused where. The removed app-level relatedLayout is no longer taught as a
surviving override. Restated sentences in relationships.md pay for the added
words; neither ceiling moves.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WV4cyuFKhHVaGYSSdTHG8
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation tooling labels Oct 30, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

Contract-review-claim: session_016WV4d1QkPVVzNz3FJqb2iS · head 46c30d4 · 2026-10-30T05:04Z

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 46c30d4c013892b58bdb3ee12412a32d3fba1841
Local-runs: none
Scope: skills/objectstack-data/rules/relationships.md, skills/objectstack-ui/SKILL.md + packages/spec/src/data/field.zod.ts (relatedList :1831, relatedListTitle :1833, relatedListColumns :1856), packages/spec/src/data/object.zod.ts (trackHistory :277, fieldGroups[].relatedList :1266, relatedLists :3174-3178, the ADR-0085 detail removal note :3553), packages/spec/src/stack.zod.ts (collectRelatedListNameErrors :3859-3958), packages/lint/src/validate-related-list-refs.ts (header), ui/packages/plugin-detail/src/synth/buildDefaultPageSchema.ts (BuildPageOptions :163-171, bodyTablePlacement :914-1010, buildDefaultTabs :1016-1121, buildDefaultPageSchema :1182-1275), docs/adr/0085-object-semantic-roles-over-surface-hint-blocks.md, scripts/check-skills-token-ratchet.mjs (rows :616 and :671), .changeset/27354-skills-related-list-body-table.md, content/docs/ui/pages.mdx :183-193 (read only as the PR cites it)

① Derived judgments

Base origin/main is ed0e71db9; eef83734d (#27310) and ad3a640e3 (#27352) are both ancestors, so the describes and the v3 synthesizer the skills now teach are the ones on main. Every sentence the diff adds, judged against the tree:

  1. relatedList: 'primary' is "a full-width body table in the details column after the first field section (in the Details tab, no tab of its own)" — TRUE. field.zod.ts:1831 describes 'primary' as "drawn in the record's body (the details column, after its first field section) as a full-width table (inside the Details tab on the tabbed page, with no tab of its own)". buildDefaultTabs puts every isBody list into the Details tab's children through bodyTablePlacement, which stacks unplaced body tables right after the FIRST field section (after the details node when there is one section or none). Both skill pages say this; relationships.md keeps "Default for a master_detail FK with inlineEdit", matching the describe's "Absent on a master_detail field that sets inlineEdit, the list is 'primary' by default". The old "its own tab" and "one tab per primary list" are gone from both files.
  2. "every other list is a side card in one shared Related tab" (ui) / "a side card (the shared Related tab)" (data) — TRUE. The describe: true/absent is "a side card in the record's related column (the shared Related tab on the tabbed page)"; buildDefaultTabs emits one Related tab holding sides plus attachments, only when non-empty. The synthesized page always emits the tab strip (buildDefaultPageSchema step 4, "always the synthesized strip"), so "On the synthesized record page" scopes the claim correctly. The ui page's "(see layout below)" on the primary bullet still resolves.
  3. "both in the object's relatedLists order" / "Order is the parent's: relatedLists [...] lists those first" — TRUE. object.zod.ts:3178: listed relationships first in that order, unlisted follow in the derived order; "the order applies among the body tables and among the side cards". The ui bullet keeps "it places, the parent's relatedLists orders", matching "'primary' places a list and does not order it".
  4. "Field changes (trackHistory) join the Timeline tab under its Changes filter; there is no History tab" — TRUE. object.zod.ts:277: "on the default record page they join the record's one timeline stream, under its Changes filter"; buildDefaultTabs doc: "field changes join it under its Changes filter, so there is no History tab"; buildDefaultTimeline merges discussion, activity and trackHistory field changes into ONE record:activity.
  5. Refusal boundary (data page): "A child in the stack with no inbound FK is refused everywhere; one that exists nowhere is refused by os validate / os build and by a metadata write naming no package — a write into a package stores it, and the page places nothing" — TRUE as the relatedLists describe and the validate-related-list-refs header state it (in-stack child with no FK: refused at defineStack and at the runtime door; absent child: refused at defineStack and by a wholeCollection write; under a package closure stored and placed nothing). One clause of the describe is not carried: os validate / os build "leave a sys_ / cloud_ / ai_ name to the runtime" (collectRelatedListNameErrors returns without an error for isPlatformObjectName(child) or an artifactScope child). The skill sentence is the common-case truth and matches the card's own wording; the gap is recorded as should-fix 1, not a must-fix, since it over-states a refusal rather than teaching a surviving tab or an unbounded refusal.
  6. "The object declares no per-surface layout hints: the detail.relatedLayout toggle, object-level detail: {...} block and app-level relatedLayout are removed (ADR-0085)" — TRUE, and the dropped sentence was stale. object.zod.ts:3553 records the detail passthrough block REMOVED; ADR-0085 line 68 rejects relatedLayout at the object layer; BuildPageOptions (buildDefaultPageSchema.ts:163-171) says relatedLayout is GONE from the options bag with no console caller; git grep relatedLayout on main outside tests and changelogs hits only that comment, the ADR's history table and ADR-0133's "no relatedLayout override exists anywhere in this repository". No spec schema carries the key, so "relatedLayout: 'tabs' | 'stack' survives only as an app-level default override" named nothing. Dropping it loses no true fact. Deviation accepted: same paragraph, inside the claimed surface.
  7. Dropped "Promoting a child table to a tab is a one-word change on the relationship" — correct to drop: there is no tab to promote to; content/docs/ui/pages.mdx:191 already teaches the surviving form ("moving a child table into the record's body is a one-word change").
  8. relatedListTitle / relatedListColumns teaching unchanged in substance on both pages ("override the derived title / columns; otherwise columns auto-derive from the child object's highlightFields") — TRUE against field.zod.ts:1833 and :1856 ("derived from the child object (highlightFields → field walk) when omitted").
  9. Inline Editing pay-down in relationships.md removed only restatement: "The UI is derived from metadata (relationship FK + child fields → grid columns)" restates the preceding "no form-view config and no bespoke page" plus the code block's "columns are otherwise derived from this object's fields"; the 'grid' / 'form' bullet heads restated the code block's own comments ("editable line-item grid", "read-only list; Add / per-row edit opens the FULL form"), and the bullets keep their thin/fat guidance; "(child pulled into the parent's entry form)" is the Inline Editing section's own definition; "on the parent's detail page" survives in the same sentence's "related list on the parent's record detail page"; "(default with inlineEdit)" is the 'primary' bullet; "both are optional — when omitted" became "otherwise" with the ui page still saying "both optional". No fact lost.
  10. Remaining stale claims on the head: git grep -i "own tab|related tab|history tab|matching no inbound|no inbound" over skills/ at 46c30d4c (95 files, evals and every package) hits only the three rewritten lines in objectstack-ui/SKILL.md:122-124, all of which state the removal. The one eval mentioning related lists (objectstack-ui/evals/views-apps-actions-pages.json:37) expects a record:related_list block on an authored page and teaches no tab. The PR's grep claim holds.
  11. Token ratchet, reproduced by the script's own convention without running it (ceil((bytes - 20-byte stamp line) / 4) for the stamped SKILL.md, ceil(bytes / 4) otherwise): objectstack-ui/SKILL.md 15412 bytes on main → 3848, 15421 at head → 3851, ceiling row :616 = 3851 (zero headroom, not raised); relationships.md 15486 → 3872, 15392 → 3848, ceiling row :671 = 3873 (not raised). The PR body's table is exact; scripts/check-skills-token-ratchet.mjs is untouched by the diff.
  12. Scope and declarations: the diff touches exactly the two claimed skill files and the changeset; PR body carries Fixes #27354, Clause-②: no, Metadata-protocol: none; the changeset repeats both lines. The PR cites ca54eacaa for its measurement; that commit and the actual merge base ed0e71db9 differ only by fix(cli)!: os plugin publish parses the compiled manifest through ManifestSchema before any upload #27910/fix(service-datasource)!: external validate answers an unknown datasource 404 RESOURCE_NOT_FOUND #27911 (cli, service-datasource), neither touching the cited files.

② Semver level

@objectstack/skills patch (packages/skills/package.json is the publishing package for skills/**). Prose-only correction of two published skill pages; no schema, key, export or behaviour changes; Clause-②: no is right, no narrowing declared or present. Patch is the correct level and the changeset says so.

③ Boundary flags

  • Seat report open_questions: none; out_of_scope_findings: none.
  • Deviations declared: (a) app-level relatedLayout sentence dropped — verified stale, accepted (① item 6); (b) Inline Editing pay-down outside the card's :347-353 lines but inside the claimed file — verified restatement-only (① item 9); (c) changeset added — required by Human Minimum 5; (d) assignment/review-request skipped — no MCP write, consistent with the seat's read-only MCP posture.
  • Author: PR user.login is objectstack-fleet[bot] (attribution comment names os-elon-musk); no non-bot login to record.
  • Contract-review-claim: comment 6515424313 names this session and this head; the only comment on the PR; no competing claim.
  • CI at review time (36 check runs on 46c30d4c): green — Auto Label, Build Core, Test UI, Dogfood Regression Gate, Lint scoped (tooling self-tests, query-options erasure, slot lookup and corpus), Type Check debt ledger; still in_progress — Lint ESLint, Lint CI/release/engine gates, Lint docs and code guards, Lint repo and tooling gates, Type Check (source gates, consumer gates, workspace), Plan Test Core shards, Live E2E UI; the rest skipped by path filter. No failure. The skills token ratchet runs in the Lint family, so the final "all green" check is still owed by the landing gate; the hand arithmetic in ① item 11 predicts it passes.
  • Draft PR, mergeable_state: blocked — Tier H human approval still owed after this record.

④ Design judgment

Rules face, per hits file:

  • skills/objectstack-ui/SKILL.md — against the card's scenario (an agent designing a record page must not invent a per-child tab or a History tab) and the spec on main: the layout paragraph now names the three real tabs' behaviour (Details with body tables, shared Related with side cards, Timeline with the Changes filter), the two ordering facts, the removed hint keys, and the escape hatch (custom record Page with record:related_list). It teaches nothing the synthesizer does not do. Holds.
  • skills/objectstack-data/rules/relationships.md — the tri-state list matches field.zod.ts:1831 on placement and default; the ordering bullet matches object.zod.ts:3178 including the package-closure boundary the card asked for. The one omission (platform-prefixed names left to the runtime by os validate / os build) is a precision gap inside a true-in-the-common-case sentence, affordable within the file's 25 tokens of headroom; it does not reintroduce the unbounded refusal the card was filed against. Holds, with should-fix 1.

No file in hits is a schema or ADR, so no first-consumer or execution-plan judgment is owed.

Implemented-by: claude/project-thread-ua16sf
Reviewed-by: session_016WV4d1QkPVVzNz3FJqb2iS

VERDICT: PASS

Must-fix: none.

Should-fix:

  1. skills/objectstack-data/rules/relationships.md ordering bullet: "one that exists nowhere is refused by os validate / os build" omits the describe's clause that os validate / os build leave a sys_ / cloud_ / ai_ (platform-prefixed, or sibling-artifact) child name to the runtime door (object.zod.ts:3178; collectRelatedListNameErrors returns for isPlatformObjectName(child) or an artifactScope child). A parenthetical of about 12 tokens fits under the 3873 ceiling (head count 3848). Can land as a follow-up without moving the ceiling.

…ild leave to the runtime

The ordering bullet in objectstack-data rules/relationships.md now carries
the describe's exception: os validate / os build leave a sys_ / cloud_ /
ai_ or sibling-artifact child name to the runtime door
(collectRelatedListNameErrors returns early for both). +21 tokens inside
the existing headroom; no ceiling moves.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WV4cyuFKhHVaGYSSdTHG8
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

Contract-review-claim: session_016WV4d1QkPVVzNz3FJqb2iS · head 8c62baf · 2026-10-30T05:39Z

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 8c62baf0c2a6ea6f0d079f56eb0ee0d4621200c7
Local-runs: none
Scope: skills/objectstack-data/rules/relationships.md, skills/objectstack-ui/SKILL.md + packages/spec/src/data/object.zod.ts (relatedLists :3174-3178 and its JSDoc :3130-3173), packages/spec/src/stack.zod.ts (isPlatformObjectName :2489-2491, collectRelatedListNameErrors :3859-3958), packages/spec/src/system/constants/platform-object-names.ts (hasPlatformObjectPrefix), packages/lint/src/validate-related-list-refs.ts (header), scripts/check-skills-token-ratchet.mjs (rows :616 and :671), .changeset/27354-skills-related-list-body-table.md; the record of 46c30d4c (PR comment 6515483400) carries the full ①–④ for every other sentence of the PR and is continued here, since this head is one delta commit on it

① Derived judgments

Delta review of 46c30d4c..8c62baf0c, one commit (8c62baf0c, "docs(skills): the relatedLists refusal names what os validate / os build leave to the runtime"), folding should-fix 1 of the previous record.

  1. The whole delta is 3 insertions and 2 deletions in skills/objectstack-data/rules/relationships.md :353-355 — git diff --stat 46c30d4c..8c62baf0c lists that one file. The changeset, skills/objectstack-ui/SKILL.md and the ratchet script are byte-identical to 46c30d4c. Nothing else changed.
  2. The added clause, "os validate / os build (which leave a sys_ / cloud_ / ai_ or sibling-artifact name to the runtime)", is TRUE to the describe and the code. object.zod.ts:3178: "An entry whose child exists nowhere is refused by os validate / os build (which leave a sys_ / cloud_ / ai_ name to the runtime) and by a metadata write that names no package". collectRelatedListNameErrors (stack.zod.ts:3935): if (!fieldsByObject.has(child) && (artifactScope.has(child) || isPlatformObjectName(child))) return; — the early return covers both arms the skill names: isPlatformObjectName is hasPlatformObjectPrefix (the sys_ / cloud_ / ai_ prefix test, stack.zod.ts:2489-2491), and artifactScope is the sibling-artifact object set the JSDoc at :3144-3146 names ("a child this stack does not declare but a sibling package does"). "to the runtime" is the describe's own phrase and the JSDoc's "the runtime door, which sees the registry, judges it"; for a sibling-artifact name the runtime door judges it on a write with no package closure (wholeCollection, lint header) and the sentence's existing tail ("a write into a package stores it, and the page places nothing") already covers the closure case. The skill's sentence is now the describe's boundary, one clause fuller (sibling-artifact), and that clause is what the code does.
  3. The rest of the bullet is unchanged from the PASSed head: in-stack child with no inbound FK refused everywhere; absent child refused by os validate / os build and by a metadata write naming no package; package write stores, page places nothing.
  4. Token ratchet, reproduced by the script's convention (ceil(bytes / 4) for an unstamped file): relationships.md 15476 bytes at 8c62baf0c → 3869, up 21 from 3848 at 46c30d4c, ceiling row :671 = 3873 (4 tokens of headroom left, not raised). objectstack-ui/SKILL.md unchanged: 15421 bytes, 20-byte stamp → 3851, ceiling row :616 = 3851. The thread's reading (+21, 3869/3873, ceiling unmoved) is exact. The ratchet script is untouched by the diff.
  5. Base: the GitHub base sha is still ed0e71db9; origin/main has since moved to 25b8ef348, and git diff ed0e71db9..origin/main over the cited files (skills/, the ratchet script, packages/spec/src/data, stack.zod.ts, validate-related-list-refs.ts, buildDefaultPageSchema.ts) is empty, so every truth judgment of the previous record still reads against the same tree. The branch's merge base with current main is ca54eacaa, the commit the PR body names for its measurement.
  6. Declarations unchanged and still right: Fixes #27354, Clause-②: no, Metadata-protocol: none in the PR body and the changeset; @objectstack/skills patch. The PR body's token table and its relationships.md "What changes" bullet were not refreshed for this commit (they still read After 3848 and omit the runtime-exception clause) — recorded as should-fix 1; the ceiling row and the gate are unaffected.

② Semver level

@objectstack/skills patch, unchanged by the delta: one clause of prose on a published skill page; no schema, key, export or behaviour changes; Clause-②: no holds. Correct level, changeset says so.

③ Boundary flags

  • The delta commit's own message names the describe's exception and the early return in collectRelatedListNameErrors; verified in ① item 2.
  • No new deviation: the commit touches only the file and bullet the should-fix named, inside the claimed surface.
  • Author: PR user.login is objectstack-fleet[bot]; no non-bot login to record.
  • Contract-review-claim: comment 6515867071 names this session and this head (2026-10-30T05:39Z); the previous record 6515483400 names 46c30d4c and is superseded for this head by this record; no competing claim.
  • CI on 8c62baf0c, 41 check runs read from the API: 28 success (Test Core and its two shards, Plan Test Core shards, Build Core, Test UI, Live E2E UI, Dogfood Regression Gate, Auto Label, filter, Lint and Repo Gates, TypeScript Type Check, Lint ESLint, Lint CI/release/engine gates, Lint docs and code guards, Lint repo and tooling gates, Lint PM dispatch-gates, Lint scoped slot lookup and corpus, query-options erasure, tooling self-tests, Type Check workspace, source gates, consumer gates, debt ledger, Governed Surface Queue Guard, Check Changeset, PR-body guards, Check PR Size), 13 skipped by path filter or opt-in (Lint UI, Type Check UI, Build UI Deps, Build and E2E UI, Test UI matrix, Dogfood Regression Gate matrix, Dogfood Verify CLI, Temporal Conformance, UI Published Artifacts, Build Docs, Schedule gate, Packed-tarball smoke, 18.x upgrade harness), 0 failed, 0 pending. The skills token ratchet runs inside the Lint family, which is green, confirming ① item 4. mergeable_state: clean.
  • Draft PR; Tier H human approval still owed after this record.

④ Design judgment

Rules face, delta only:

  • skills/objectstack-data/rules/relationships.md — against the card's scenario (an agent must not believe every misspelt relatedLists name is refused, nor that a platform-prefixed or sibling-package name is refused at build) and the spec on main: the ordering bullet now states the boundary exactly as relatedLists's describe states it, including the defineStack early return for prefixed and sibling-artifact names, and the package-closure tail. It teaches nothing collectRelatedListNameErrors or validate-related-list-refs does not do. Holds; the previous record's should-fix 1 is closed.
  • skills/objectstack-ui/SKILL.md — unchanged since 46c30d4c; the previous record's ④ stands.

No file in hits is a schema or ADR, so no first-consumer or execution-plan judgment is owed.

Implemented-by: claude/project-thread-ua16sf
Reviewed-by: session_016WV4d1QkPVVzNz3FJqb2iS

VERDICT: PASS

Must-fix: none.

Should-fix:

  1. PR body: the token table still reads relationships.md After 3848 (true at 46c30d4c; 3869 at this head, ceiling 3873 unmoved), and the relationships.md "What changes" bullet does not mention the runtime-exception clause the delta added. Refresh the two lines so the body describes the head it carries; no ceiling, changeset or declaration line changes.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

维护者速读

  • 改了什么:两页技能按 v3 记录页重写关联列表的说法。skills/objectstack-ui/SKILL.md:relatedList: 'primary' 的子表是 Details 页签里第一个字段区之后的整宽表格,没有自己的页签;其余列表是共用 Related 页签里的侧卡;trackHistory 的字段变更进 Timeline 的 Changes 筛选,不存在 History 页签;删掉已不存在的 app 级 relatedLayout 覆盖。skills/objectstack-data/rules/relationships.md:'primary' 条目同样改写,relatedLists 拒收边界按 describe 写全(os validate / os build 把 sys_ / cloud_ / ai_ 或兄弟制品名留给运行时)。另含 @objectstack/skills patch changeset。
  • 为什么改:feat(plugin-detail,app-shell,components): record page v3 layout #27310(记录页 v3)和 docs(spec): related-list descriptions say which unknown names are refused; primary list and trackHistory describe the v3 record page #27352 落地后,两页仍在教旧页面:每个主子表一个页签、History 页签、无界的拒收。AI 作者会据此设计出不存在的页签。
  • 风险与回滚:只改技能散文,不动 schema、渲染器或棘轮行。两个文件都在原有上限内付清(ui 3851/3851,relationships 3869/3873),revert 即回滚。
  • 先看:objectstack-ui/SKILL.md 关联列表布局段,再看 relationships.md 的 Detail-page related lists 一节。
  • 两分钟验证:node scripts/check-skills-token-ratchet.mjs exit 0。
  • 需要你做的:skills/** 是受管面,登记册判 Tier H。请批准本 PR(契约复核 PASS,增量记录在本评论之前,Head-sha: 8c62baf0c2a6ea6f0d079f56eb0ee0d4621200c7;首轮 6515483400 在 46c30d4c)。

席位意见:ACCEPT。两轮契约复核都 PASS,没有 must-fix。首轮 should-fix 1(拒收边界漏了运行时例外)已在 8c62baf0 补上并复核。增量记录剩一条 should-fix,只涉及信息:PR 正文的 token 表仍写 relationships.md After 3848,实际为 3869(上限 3873 未动),"What changes" 也未写新补的例外分句。以本评论和增量记录为准。CI 全绿。

席位核对

  • 形态: one PR, Fixes #27354, three files: skills/objectstack-ui/SKILL.md, skills/objectstack-data/rules/relationships.md, .changeset/27354-skills-related-list-body-table.md (@objectstack/skills patch). Clause-②: no, Metadata-protocol: none. Governed skills/**: register Tier H.
  • 前提实测: every added sentence is judged true against field.zod.ts:1831/:1833/:1856, object.zod.ts:277/:3178/:3553, collectRelatedListNameErrors (stack.zod.ts) and buildDefaultTabs / bodyTablePlacement in buildDefaultPageSchema.ts (first record ①1–12; delta record ①2 for the runtime-exception clause). origin/main moved to 25b8ef348 after the first review; the diff over every cited file is empty.
  • 门禁 check-runs: head 8c62baf0c2a6ea6f0d079f56eb0ee0d4621200c7: 41 check-runs, 28 success, 13 skipped, 0 failed, 0 pending; mergeable_state clean. Token ratchet green in the Lint family.
  • 接受的偏差: the stale app-level relatedLayout sentence is dropped (no schema carries the key); the restatement-only pay-down in relationships.md Inline Editing is inside the claimed file, with no fact lost (first record ①6, ①9).
  • 范围外去向: none. The PR body's token table is stale by one commit (should-fix 1 of the delta record); this comment carries the corrected figures. No code or ceiling change is owed.
  • 落地条款: Tier H: after a GOVERNED_APPROVERS approval, the seat lands it under the maintainer's landing grant for this term (seat thread, 2026-10-29 22:04Z).

@os-zhuang
os-zhuang marked this pull request as ready for review October 30, 2026 07:36
@os-zhuang
os-zhuang added this pull request to the merge queue Oct 30, 2026
Merged via the queue into main with commit 3a09125 Oct 30, 2026
50 checks passed
@os-zhuang
os-zhuang deleted the claude/project-thread-ua16sf branch October 30, 2026 07:55
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

Projects

None yet

2 participants