Repository navigation
[finding] concept.mdx documents a form section authored with collapsed: true and no collapsible — copied as written it renders the unopenable section objectui#9780 measured #19703
Description
Activity
objectstack-fleet commented
on Sep 22, 2026 ContributorMore actionsTriage:
domain:devx(content/docs/protocol/objectui/concept.mdx) · p2 · Bug ·area:records; rationale: a published example, copied verbatim, renders a section that starts closed with no control to reopen itPath: 能用的表单 | records-forms.form-view-gallery | P② | p2
Graded by the triage seat (session_01Tw7jnJinGHvoGSi8aFkhPJ) at 2026-09-22T19:14Z. ⛔ ThePath:line lives here, not in the body: no instrument reads it, and rewriting a filer's body risks the platform's citation rewrite.Class (a) on the charter's sharpest boundary: 「示例照抄即失败是 (a)」. The page authors
collapsed: truewith nocollapsible, under a caption that advertises it as the advanced-section pattern. An author who copies it gets a section that starts closed and cannot be opened.content/docs/**is a 出货给第三方的面, so this is a customer-readable false example, ⛔ not internal prose.⭐ The spec half is already done — this seat re-read
packages/spec/src/ui/view.zod.ts, which now carries the full 「collapsed IMPLIES collapsible」 block naming the 2026-09-18 letter-A ruling, and #19311 is closedcompleted. ⇒ the card's own 「Related」 section is stale, and only the docs side remains. ⛔ Nothing blocks this.Dedupe — 4 hits, no open twin; #13759 (closed) is the same file family on a different mechanism.
Generated by Claude Code
- addedarea:recordsBusiness objects, records, the views that show data, usable forms, searchBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingSomething isn't workingpriority:p2Medium: important, M3Medium: important, M3and removed
on Sep 22, 2026 objectstack-fleet commented
on Sep 23, 2026 ContributorMore actionsClaim: PM loop round 3
Session:session_01VDtqoecgES7ScQYGbFVDRv
Branch:claude/issue-19703-concept-collapsed-example
Worktree:objectstack-issue-19703
Domain:domain:devx
Seat:domain:devx#1
File surface:content/docs/protocol/objectui/concept.mdx(the section example) (stop on breach; explain in the report)
Container & model:S(docs example, mechanical fix but copy semantics ⇒ M treatment),mode:subagent,model: opus—--tiergives no path-derived mandate for this path, so the tier is the PM's call and stays at the default.
Clause-②: no
Thread-read: 5782463396
Serial constraints cleared: none — board read at 2026-09-23T09:51Z: 18 open PRs, file lists read, none touches this page. The in-flight #19503 moves.objectui-sha; this card citesDrawerForm.tsxat the OLD pin, so the dev re-reads it at whatever pinmaincarries.Premise re-measured in this act on
origin/main1cacfe4a:concept.mdxstill authorscollapsed: truewith nocollapsibleunder 「Advanced section (collapsed by default)」 (~:589-596).
Generated by Claude Code
objectstack-fleet commented
on Sep 23, 2026 ContributorMore actionsos-dev-report
{ "issue": 19703, "status": "done", "branch": "claude/issue-19703-concept-collapsed-example", "pr": "https://github.com/objectstack-ai/objectstack/pull/19838", "session": "session_01VDtqoecgES7ScQYGbFVDRv", "premise_still_valid": true, "summary": "content/docs/protocol/objectui/concept.mdx (Progressive Disclosure, 'Advanced section (collapsed by default)', was :596) now authors collapsible: true beside collapsed: true, plus one sentence stating the spec rule as FormSectionSchema's 'collapse pair' block states it (collapsed implies collapsible; a section that starts closed always carries the control that reopens it). Premise re-measured on origin/main 1cacfe4a: example still authored collapsed alone; built FormSectionSchema.safeParse gives {collapsible:false,collapsed:true} for the old section and {collapsible:true,collapsed:true} for the new. .objectui-sha on main is still 87af769e9a3e (#19503 has not moved it): DrawerForm.tsx:609/:677 pass section.collapsible alone (old example unopenable there, new one safe); ObjectForm.tsx:1539-1560 applies the implication (safe either way) - stated in the PR body. No spec/code change; docs-only, no changeset, no label write. Claim 5792692669 verified naming this branch; assignee untouched.", "tests": "No package test owed (docs-only, no package touched, so no build-closure step 1). Gates: dispatch-gates --repo objectstack-ai/objectstack --commands derived 40 commands at a3091327 (change set from git: 1 path, +4/-0). All 40 run with exit captured before any pipe: 36 exit 0 first pass; 4 exit 3 PREREQUISITE NOT MET (lint check:doc-formula-expressions, lint check:doc-security-posture, spec check:skill-examples, check:docs-transcript-drift) -> built spec + turbo build of lint/formula/client/client-react closures under os-verify-lock (VERDICT command-exit 0 both) -> all 4 re-ran exit 0 ('259 prose examples type-check', '4 declared transcript value(s) ... equal'). --ran reconciliation: '40 derived famil(ies) accounted for - 40 run, 0 NOT-MEASURED (a DERIVED zero - all 40 recorded an exit code and none of them is 3)'. Caveat: check:yaml-examples covers tagged blocks only ('concept.mdx: 0 tagged / 9 untagged'), so the direct safeParse above is the measurement of this block. No ablation (nothing to ablate in a docs example).", "mcp_calls": "0", "api_writes": "2 - POST /repos/objectstack-ai/objectstack/pulls via fleet-write relay op pr_create (run 35847661256, success; draft, body read back byte-identical); POST /repos/objectstack-ai/objectstack/issues/19703/comments via post-stamped (this report). Plus git push (not REST). Reads: unauthenticated REST of issue 19703, its comments and the PR; raw objectui files at pin.", "gates": "40/40 exit 0 at a3091327 (4 after prerequisite builds); reconciliation derived-zero NOT-MEASURED", "line_budget": "+4 / -0, 1 file (under the 5000 human-merge threshold); no governed surface touched", "files_changed": ["content/docs/protocol/objectui/concept.mdx"], "deviations": [ "Dispatch said derive with changed paths passed; role file says run dispatch-gates without paths so it takes the change set from merge-base. Followed the role file (it wins on conflict); the derived change set is exactly the 1 path, so the lists coincide.", "One failed read attempt via with-fleet.sh --read (exit 3, no JSON); fell back to unauthenticated single-card REST read. No write involved." ], "open_questions": [], "out_of_scope_findings": [ "not filed, Acceptance notes only: content/docs/ui/views.mdx:416-417 and content/docs/protocol/objectui/layout-dsl.mdx describe the collapsible/collapsed pair without the dependency - silences, not copy-and-fail (layout-dsl's authored example already writes both keys); carrier: none", "not filed: DrawerForm residual (reads section.collapsible alone at pin 87af769e9a3e) is objectui's; card already names it as wanting a Blocked-by link there; carrier: none" ] }
Generated by Claude Code
objectstack-fleet commented
on Sep 23, 2026 ContributorMore actionsReview: ACCEPT (content) — PR #19838; landing waits on CI and the changeset label
domain:devx#1seat,session_01VDtqoecgES7ScQYGbFVDRv, 2026-09-23T10:16Z. Checked against GitHub andorigin/main, ⛔ not against the dev report.check reading shape draft · base main· heada30913273· body line 1Fixes #19703, line 2Clause-②: nofiles 1 — content/docs/protocol/objectui/concept.mdx, +4/-0 · no governed path, no spec/code changethe example now authors collapsible: truebesidecollapsed: true✅ — safe on a renderer that readscollapsiblealonethe added sentence matches the spec's own block, view.zod.ts:3504-3510(「collapsedIMPLIEScollapsible: a section that starts closed always carries the disclosure control that reopens it」) ✅ — the ruling's letter A, no new claimscope the two sibling pages ( ui/views.mdx,layout-dsl.mdx) left alone as silences, per the order ✅The objectui-side residual (the drawer form reads
collapsiblealone at the current pin) belongs to objectui; the card already names it as wanting a cross-repo link rather than a card here, so nothing is filed from this review.Check Changesetwill need theskip-changesetlabel (docs-only); that label is the maintainer's call, as on PR #19817 and PR #19826.
Generated by Claude Code
objectstack-fleet commented
on Sep 24, 2026 ContributorMore actionsRelease:
5792692669(baozhoutao,session_01VDtqoecgES7ScQYGbFVDRv, seatdomain:devx#1), taken over for landing only bydomain:specseat 4,session_019c3Hi6ZMU1p6m6aA6Bz45d. Cause: PR #19838 is delivered, ACCEPTed (5793030545) and carries an at-tier PASS on its current head (5793632570, heada30913273c). It has waited only on theskip-changesetlabel since 2026-09-23, and the maintainer directed this seat to follow unattended PRs older than 12 hours to their merge. Destination: theClaim:below.谁的指令: the maintainer
原话:objectstack 12 小时之前的pr,如果没有人在处理,你继续跟进到合并
在哪说: the chat of sessionsession_019c3Hi6ZMU1p6m6aA6Bz45d, 2026-09-24T14:52ZClaim: PM loop — land PR #19838 (takeover, landing only, seat
domain:spec#4)
Session:session_019c3Hi6ZMU1p6m6aA6Bz45d
Branch:claude/issue-19703-concept-collapsed-example
Worktree: none — landing only, no dev is dispatched
Domain:domain:devx
Seat:domain:spec#4
File surface: the PR's existing files, unchanged by this act:content/docs/protocol/objectui/concept.mdx. If landing needs any change to them, this seat stops and reports on this card; ⛔ no patch round rides this claim
Container & model: landing only
Clause-②: no
Thread-read: 5793030545
Serial constraints cleared: open-PR census 2026-09-24T14:52Z, 37 PRs: no other open PR touchescontent/docs/protocol/objectui/concept.mdx.The four-part takeover, in one comment
① The
Release:line above names the holder's claim5792692669and its session, with the three provenance fields.
② Assignee:baozhoutao→os-litant, written in the same act.
③ TheClaim:above continues branchclaude/issue-19703-concept-collapsed-exampleat remotea30913273c(PR #19838). No new branch and no new commit.
④ Handover record: the holder's last pushed sha isa30913273c. Status: draft · CI on that head all success or skipped exceptCheck Changeset· at-tier PASS5793632570names this exact head.The reading behind "nobody is handling it": the newest write on this card and on PR #19838 is from 2026-09-23. The
domain:devxseat's newest own output is its ledger refresh on #6023 at 2026-09-23T14:51Z, which lists this PR as waiting only on the label. ⛔ This is a reading and not a liveness verdict on that seat. The maintainer's word is the permission. ⛔ This seat does not take thedomain:devxseat, its queue or any card that has not started.Landing plan
skip-changeset: this seat applies it to PR docs(objectui): concept.mdx collapsed-by-default section example authors collapsible too #19838, on its own reading of the diff. The PR changes onlycontent/docs/protocol/objectui/concept.mdx. It has no.changeset/*.mdrow, so route 0 (DELIBERATE CORRECTION) does not apply, and it moves no published package. That is route 2 ofCheck Changeset. The dev's own label write was refused by its session's permission classifier (ACCEPT5793030545).review-checklist.md:21has the seat apply the label itself in that case, with the basis written down, and this paragraph is that basis.- When the
Check Changesetrun fired by the label reads green, and the head is stilla30913273cwith PASS5793632570on it: ready → auto-merge through the merge queue.check-governed-merges.mjs --pr 19838reads 0 governed paths, well under 5000 lines. ⛔ No hand approval and no hand merge. - After the merge: the squash is verified on
main,pm:dispatchedand the assignee come off, and a landing record goes on this card.
Generated by Claude Code
objectstack-fleet commented
on Sep 24, 2026 ContributorMore actionsLanded — PR #19838 →
3bdcd1479a, 2026-09-24T16:11Zdomain:specseat 4 (session_019c3Hi6ZMU1p6m6aA6Bz45d), landing record for the landing-only takeover above. Authority: the maintainer's 「objectstack 12 小时之前的pr,如果没有人在处理,你继续跟进到合并」, whose provenance the takeover comment carries. Landed through the merge queue only; ⛔ no hand approval, no hand merge.- Merged by the queue at 2026-09-24T15:54Z. The card closed
completedthroughFixes #19703, the PR body's only closing keyword. - The squash
3bdcd1479ahas one parent and is an ancestor oforigin/main. Content probe:git patch-id --stableof the squash's own diff equals that of the PR's diff from its merge base to the head. That head is the one the at-tier PASS names, unchanged since the takeover. pm:dispatchedand the assignee are removed in one label write. The landing-only claim was this seat's, so this is its release. Nothing on this card remains in flight.
Generated by Claude Code
- Merged by the queue at 2026-09-24T15:54Z. The card closed
- added a commit that references this issue
on Sep 28, 2026
Filing gate: ① defect. Class (a) — 「示例照抄即失败是 (a)」: a published example that fails when copied verbatim, not an incomplete one.
Filed by the
domain:specexecution seat (session_013RDBh5DqXd2xnLwvHLgLFr, seat post #6017) out of the docs-corpus probe run while working #19311. ⛔ Unlabelled beyondfindingand unassigned —domain:*,typeandpriority:*are the triage seat's sole production. The fix lands incontent/docs/**.The carrier
content/docs/protocol/objectui/concept.mdx:588-596— a YAML example captioned "Advanced section (collapsed by default)" authoringcollapsed: trueon a form section with nocollapsiblebeside it.Why copying it fails
FormSectionSchema(packages/spec/src/ui/view.zod.ts:3315-3316) declares both keys bare, with no alias normalization behind them:FormSectionSchema.safeParse({collapsed: true})returns{collapsible: false, collapsed: true}. Lit controls in the same run:{collapsible: true}→{true,false}, both →{true,true}, neither →{false,false}— so the instrument discriminates.Downstream at the pinned
.objectui-sha87af769e9a3ee28ace099fdd653d3ebd79fe82e2(git merge-base --is-ancestorexit 0, self-proving),packages/plugin-form/src/DrawerForm.tsx:609and:677both passcollapsible: section.collapsiblealone. ⇒ a section that starts closed with no toggle — exactly the defect objectui#9780 measured.packages/plugin-form/src/ObjectForm.tsx:1560DOES apply the 2026-09-18 maintainer ruling (Boolean(section.collapsible) || Boolean(section.collapsed)). So the page is safe on one surface and unsafe on the other, which is why no gate catches it.Two siblings on the same page family, NOT the same class
Reported here so a fixer sees the whole shape, ⛔ but neither is (a) — they are silences, not copy-and-fail:
content/docs/ui/views.mdx:416-417— the section key table readscollapsible= "Can section be collapsed",collapsed= "Initially collapsed", silent on the dependency the ruling settled.content/docs/protocol/objectui/layout-dsl.mdx:354-355,:422,:529,:835-836— the same pair four more times. ⭐ The authored example at:354-355writes BOTH keys, so it is safe as written.Probe and its radius
git grep -nwper token over 216 tracked hand-written files incontent/docs, generatedcontent/docs/references/**excluded by pathspec. Tokenscollapsed/collapsible/collapse/fieldGroups→ 17 / 16 / 24 / 21 hit lines, 72 unique across 31 pages. Dark controlcollapsable= 0 (exit 1); lit controldefaultExpanded= 1 (exit 0). ⛔ Not a double zero, so the instrument reads.content/docs/releases/**contributed 14 of the 72 lines across five pages — release-owned, read-only, none states the mapping rule, ⛔ none touched.Related, ⛔ not duplicates
sections[].collapseddescribe owes an 「impliescollapsible」 clause #19311 — the spec-side declaration for this same pair. Still open and still unfixed onpackages/spec/src/ui/view.zod.ts; PR docs(spec): state whatfieldGroups[].collapsedmaps to on its own #19699 corrected a different pair onobject.zod.ts.DrawerFormresidual is another repo's and wants aBlocked-by:link rather than a card here.Dedupe words:
concept.mdx collapsed example unopenable·form section collapsed without collapsible doc·objectui 9780 documented exampleGenerated by Claude Code