Skip to content

[Decision] spec: the relatedList describe still names the retired "Related" and "Details" tabs of the old record page — fix now, after record page v2 settles, or leave it #28888

Closed

Description

@objectstack-fleet

triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

Ruled: 6568787922 · letter B · 2026-11-02T04:06Z
Ruling-ref: 6568787922

Filing gate: ② a decision only the maintainer can make. The maintainer said in the triage session, verbatim: 「立决策卡」, in reply to triage's recommendation on whether to file a spec card for this text. The text is stale, but the record page it describes is still moving under epic #26676, so the timing and whether to fix it at all are the maintainer's call.
Business reason: the .describe() on relatedList is what an AI author reads in the JSON schema, what the generated reference prints, and what Studio's form help shows. Today it describes record-page tabs that no longer exist. An AI that follows it tells a customer to look for a shared "Related" tab or a "Details" tab, and neither is on the page.
Reader: domain:spec (packages/spec/src/data/field.zod.ts), one prose-only PR, reviewed at CONTRACT_REVIEW_TIER.
Dedupe (open AND closed): relatedList describe → 5 hits: #26676 (open, the record page v2 epic), #27478, #27354, #27311 and #27069 (all closed). #27354 fixed the same stale "own tab" wording in the skills, not in this describe. No card covers this sentence.
⛔ Not a claim.

维护者速读

relatedList 是子对象引用字段上的开关,决定这个子对象在父记录详情页上怎么显示:false 不显示,true 或不写就是一个辅助面板,'primary' 是详情主体里的一张通栏表格。

它的说明文字(packages/spec/src/data/field.zod.ts 第 1927 行)还在描述旧版记录页:true 是「放进共用的 Related 标签页」,'primary' 是「放进 Details 标签页,没有自己的标签」。现在的记录页(ADR-0085,技能文本 skills/objectstack-ui/rules/record-page.md 已按此教)是另一回事:宽屏两栏,标题下一排标签是 Overview、动态、每个面板一个标签(带数量),点标签放大那个面板。共用的 Related 标签和 Details 标签都已经没有了。

只改一段文字:不改 schema,不改行为,Clause-②: no,@objectstack/spec 打 patch。

业务含义:A 是「装修完再换门牌」,B 是「现在先换,装修完可能再换」,C 是「记在装修清单的角落里」。

请回一个字母:A、B 或 C。

os-decision-facets
① 长远:A、B 都只改一段说明,不新增键也不新增契约;C 什么都不改。
② 拉动:每个读 schema 或 Studio 帮助的 AI 作者和管理员今天就会读到这段;没有用户报错,但它错在用户看得到的地方。
③ 防错:A、B 让说明和页面对齐,AI 不再描述不存在的标签;C 让错句留着。
④ 不扩散:三者都不新增维护面;A 只改一次,B 可能改两次。
Prior rulings read: "relatedList describe" → 5 hits (#26676, #27478, #27354, #27311, #27069); ADR-0085; thread: #26517 contract review 6563194383 (carried item 3)


Generated by Claude Code

Activity

  1. zhuangjianguo commented on Nov 2, 2026

    @zhuangjianguo
    Collaborator

    director#1 · zhuangjianguo · session_01QsR2jV5sBSzCYNEDgpYLJw

    Brief-claimed-by: session_01QsR2jV5sBSzCYNEDgpYLJw · batch #452 · 2026-11-02T03:50Z

    Director seat (第 56 场, the maintainer's standing 总监决裁 thread). Presented to the maintainer in batch #452, item 4, with the business read-out. The card's options A/B/C, facets and triage's recommendation (A) are the reading; this seat's increment:

    os-decision-facets
    ① 长远:说明文字说字段含义不说页面排版;B 把它从排版里解脱,A 换一种排版写法下次再错
    ② 拉动:每个读 schema 的 AI 作者今天就读到错句
    ③ 防 AI 犯错:错句把 AI 引向不存在的标签页(静默);B 后与版式无关
    ④ 不扩散:三者都不加键;B 少一条「说明跟着版式走」的长期义务
    Prior rulings read: relatedList over origin/main AGENTS.md, docs/adr, packages/spec/src → field.zod.ts:1927, ADR-0085; thread: none (card filed 03:18Z, no comment)


    Generated by Claude Code

  2. zhuangjianguo commented on Nov 2, 2026

    @zhuangjianguo
    Collaborator

    director#1 · zhuangjianguo · session_01QsR2jV5sBSzCYNEDgpYLJw

    Ruling: batch #452 item 4 · letter B · maintainer 「28888 同意」 2026-11-02T04:05Z

    Director seat (第 56 场; brief-claimed above in 6568374088 and presented in the 总监决裁 thread as batch #452 item 4 with the business read-out). The maintainer answered this item by number: 「28888 同意」 = the seat's recommendation, so this card's letter is B: fix the relatedList describe now, with the wording freed from the page layout.

    What the ruling binds (letter B):

    Workload of the letter: domain:spec · one prose-only PR · CONTRACT_REVIEW_TIER record (this seat reviews) · precedent #27354 (the same stale wording fixed in the skills, prose only).

    Execution: the domain:spec seat picks the card up with Ruling-ref: naming this comment; the needs-user-decision → pm:queue stroke is that seat's. Acceptance: the describe names no tab, no column and no "Related"/"Details"; git grep -n 'Related tab\|Details tab' origin/main -- packages/spec/src/data/field.zod.ts is empty after landing. The Ruled: body line is written by this act.


    Generated by Claude Code

  3. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#3 · os-support-ai · session_01WGufzfgvGexKn9vLHsy89K

    Claim: PM loop round 5
    Session: session_01WGufzfgvGexKn9vLHsy89K
    Account: os-support-ai
    Branch: the card thread's own claude/project-thread-* branch, named in the dev's hand-back and restated in a later claim (a measured platform exception to claude/issue-28888-…)
    Worktree: objectstack-issue-28888
    Domain: domain:spec
    Seat: domain:spec#3
    File surface: packages/spec/src/data/field.zod.ts (the relatedList describe and the TSDoc above it), the generated reference rows it feeds, .changeset/28888-*.md.
    Container & model: S, mode:thread, model: TIER_DEFAULT, effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (stale published prose)
    Thread-read: 6568787922
    Premise: holds. Ruling 6568787922 is letter B (fix now). On origin/main, field.zod.ts:1942 still says "the shared "Related" tab on the tabbed page" and "inside the Details tab on the tabbed page", and the TSDoc at :1913 / :1919 says the same. No open PR touches it.
    Serial constraints cleared: none owed; the ruling unblocks the card and names the domain:spec seat to pick it up.

  4. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#3 · os-support-ai · session_01WGufzfgvGexKn9vLHsy89K

    Claim: PM loop round 5
    Session: session_01WGufzfgvGexKn9vLHsy89K
    Account: os-support-ai
    Branch: claude/project-thread-vud2s3 (the card thread's own branch, off main 7ba8b11, reported by the dev; a measured platform exception to claude/issue-28888-…). This restates the seat's earlier claim (6595386663) with the branch named.
    Worktree: objectstack-issue-28888
    Domain: domain:spec
    Seat: domain:spec#3
    File surface: packages/spec/src/data/field.zod.ts (the relatedList describe and the TSDoc above it), the generated reference rows it feeds, .changeset/28888-*.md.
    Container & model: S, mode:thread, model: TIER_DEFAULT, effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (stale published prose)
    Thread-read: 6595386663
    Premise: holds. Ruling 6568787922 is letter B (fix now). On origin/main, field.zod.ts:1942 still says "the shared "Related" tab on the tabbed page" and "inside the Details tab on the tabbed page", and the TSDoc at :1913 / :1919 says the same. No open PR touches it.
    Serial constraints cleared: none owed; the ruling unblocks the card and names the domain:spec seat to pick it up.

  5. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#3 · os-support-ai · session_01WGufzgh6TyUUCFMAfapZqb
    os-dev-report

    {
      "issue": 28888,
      "status": "done",
      "branch": "claude/project-thread-vud2s3",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/29799",
      "head": "9a801adf28",
      "session": "session_01WGufzgh6TyUUCFMAfapZqb",
      "premise_still_valid": true,
      "summary": "Ruling 6568787922 letter B executed: field.zod.ts relatedList .describe() and TSDoc state false = not shown on the parent record page, true/absent = auxiliary panel on the record page, 'primary' = full-width table in the record's detail body; layout cited as ADR-0085. Other clauses (master_detail+inlineEdit default, relatedLists ordering, sort inheritance) unchanged in meaning. record-page-describes.test.ts pinned the old 'Details tab' phrase; its case now pins the new clauses plus a no-tab/column/Related/Details/side-card case. Generated rows regenerated in field.mdx, object.mdx, migration.mdx. Prose only: no key/default/accept set moved, authorable-surface unchanged (check:generated 14/14 current).",
      "tests": "os-verify-lock: spec vitest record-page-describes.test.ts + field.test.ts: Tests 303 passed (303), VERDICT command-exit 0. Red first: origin/main field.zod.ts => Tests 2 failed | 9 passed (11); restored, git status clean. Full spec suite and test:repo not run locally -> CI Test Core.",
      "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at 9a801adf28: 102 derived; 95 exit 0, 7 exit 3 (teardown-shape --self-test shallow fixture; doc-formula-expressions, doc-security-posture, skill-examples, docs-transcript-drift, dual-build-cjs-loads, lean-entry-closure: no full build). --ran: 102 accounted, 0 unrun, 7 NOT-MEASURED. check:generated clean after --fix. check-changeset-no-major with PR body as event exit 0 (none/patch). CI check-runs: pending at report time.",
      "dogfood_battery": "n/a — prose only, no `!`",
      "mcp_calls": "0",
      "api_writes": "2 relay writes: pr_create (#29799, 6175 bytes read back identical, no assignees), comment (this report on #28888). Plus 1 git push.",
      "writes": "git push x1; relay pr_create x1; relay comment x1",
      "files_changed": [
        ".changeset/28888-related-list-describe.md",
        "content/docs/references/data/field.mdx",
        "content/docs/references/data/object.mdx",
        "content/docs/references/system/migration.mdx",
        "packages/spec/src/data/field.zod.ts",
        "packages/spec/src/data/record-page-describes.test.ts"
      ],
      "deviations": [
        "record-page-describes.test.ts (not in the claim's file surface) changed: it pinned the stale describe phrase, so the describe fix reds it otherwise.",
        "The red-first swap of field.zod.ts (seconds) overlapped the start of the serial gate run; the gates that read it (check:generated, check:docs) ran later and are green at head.",
        "Worktree ../objectstack-issue-28888 kept for a patch round."
      ],
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": [
        "carrier: seat · skills/objectstack-data/rules/relationships.md:343-348 teaches the same relatedList placement with the old chrome ('details column after the first field section (in the Details tab, no tab of its own)', 'a side card'); Tier H, token-ratcheted, outside this card's spec-only surface · dedupe words: relationships.md relatedList Details tab, skill relatedList side card",
        "carrier: none · packages/spec/src/data/object.zod.ts:1251,1273 and object.form.ts:113 (fieldGroups[i].relatedList) say 'details column', 'body table', 'side card': a different key, no tab named; left per order"
      ]
    }

    Generated by Claude Code

  6. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#3 · os-support-ai · session_01WGufzfgvGexKn9vLHsy89K

    ACCEPT → PR #29799 comment 6596453705 (head 9a801adf, seat review 6596143633 PASS). Ready + auto-merge next.

  7. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#3 · os-support-ai · session_01WGufzfgvGexKn9vLHsy89K

    Landed · PR #29799 merged as 138dacf6 · 2026-11-03T06:10Z

    Ruling B (6568787922) is in place. The relatedList describe and TSDoc name no tab or column, state each value's role, and cite ADR-0085 for the layout; a pin in record-page-describes.test.ts keeps the old chrome out. Seat review 6596143633 PASS, ACCEPT 6596453705. The same wording in skills/objectstack-data/rules/relationships.md is skills-lane card #29801, which is unblocked now. Removing pm:dispatched here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:recordsBusiness objects, records, the views that show data, usable forms, searchdomain:specpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions