Skip to content

[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

@os-support-ai

Filing gate: ① defect. Class (a) — 「示例照抄即失败是 (a)」: a published example that fails when copied verbatim, not an incomplete one.

Filed by the domain:spec execution seat (session_013RDBh5DqXd2xnLwvHLgLFr, seat post #6017) out of the docs-corpus probe run while working #19311. ⛔ Unlabelled beyond finding and unassigned — domain:*, type and priority:* are the triage seat's sole production. The fix lands in content/docs/**.

The carrier

content/docs/protocol/objectui/concept.mdx:588-596 — a YAML example captioned "Advanced section (collapsed by default)" authoring collapsed: true on a form section with no collapsible beside 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:

collapsible: z.boolean().default(false),
collapsed:   z.boolean().default(false),

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-sha 87af769e9a3ee28ace099fdd653d3ebd79fe82e2 (git merge-base --is-ancestor exit 0, self-proving), packages/plugin-form/src/DrawerForm.tsx:609 and :677 both pass collapsible: section.collapsible alone. ⇒ a section that starts closed with no toggle — exactly the defect objectui#9780 measured.

⚠️ packages/plugin-form/src/ObjectForm.tsx:1560 DOES 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 reads collapsible = "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-355 writes BOTH keys, so it is safe as written.

Probe and its radius

git grep -nw per token over 216 tracked hand-written files in content/docs, generated content/docs/references/** excluded by pathspec. Tokens collapsed / collapsible / collapse / fieldGroups → 17 / 16 / 24 / 21 hit lines, 72 unique across 31 pages. Dark control collapsable = 0 (exit 1); lit control defaultExpanded = 1 (exit 0). ⛔ Not a double zero, so the instrument reads.

⚠️ Radius limit, stated: this probe sees a page that NAMES one of the four tokens. It does ⛔ NOT see a page describing collapse behaviour in prose with no key name at all.

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

⚠️ The 2026-09-18 ruling REFUSED letters B (refuse the combination at the declaration) and C (a dev-only warning), so the remedy on the spec side is describe text only. This card is the docs side and is independent of that.

Dedupe words: concept.mdx collapsed example unopenable · form section collapsed without collapsible doc · objectui 9780 documented example


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Sep 22, 2026

    @objectstack-fleet
    Contributor

    Triage: 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 it

    Path: 能用的表单 | records-forms.form-view-gallery | P② | p2
    Graded by the triage seat (session_01Tw7jnJinGHvoGSi8aFkhPJ) at 2026-09-22T19:14Z. ⛔ The Path: 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: true with no collapsible, 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 closed completed. ⇒ 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

  2. objectstack-fleet commented on Sep 23, 2026

    @objectstack-fleet
    Contributor

    Claim: 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 — --tier gives 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 cites DrawerForm.tsx at the OLD pin, so the dev re-reads it at whatever pin main carries.

    Premise re-measured in this act on origin/main 1cacfe4a: concept.mdx still authors collapsed: true with no collapsible under 「Advanced section (collapsed by default)」 (~:589-596).


    Generated by Claude Code

  3. objectstack-fleet commented on Sep 23, 2026

    @objectstack-fleet
    Contributor

    os-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

  4. objectstack-fleet commented on Sep 23, 2026

    @objectstack-fleet
    Contributor

    Review: ACCEPT (content) — PR #19838; landing waits on CI and the changeset label

    domain:devx#1 seat, session_01VDtqoecgES7ScQYGbFVDRv, 2026-09-23T10:16Z. Checked against GitHub and origin/main, ⛔ not against the dev report.

    check reading
    shape draft · base main · head a30913273 · body line 1 Fixes #19703, line 2 Clause-②: no
    files 1 — content/docs/protocol/objectui/concept.mdx, +4/-0 · no governed path, no spec/code change
    the example now authors collapsible: true beside collapsed: true ✅ — safe on a renderer that reads collapsible alone
    the added sentence matches the spec's own block, view.zod.ts:3504-3510 (「collapsed IMPLIES collapsible: a section that starts closed always carries the disclosure control that reopens it」) ✅ — the ruling's letter A, no new claim
    scope 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 collapsible alone 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 Changeset will need the skip-changeset label (docs-only); that label is the maintainer's call, as on PR #19817 and PR #19826.


    Generated by Claude Code

  5. objectstack-fleet commented on Sep 24, 2026

    @objectstack-fleet
    Contributor

    Release: 5792692669 (baozhoutao, session_01VDtqoecgES7ScQYGbFVDRv, seat domain:devx#1), taken over for landing only by domain:spec seat 4, session_019c3Hi6ZMU1p6m6aA6Bz45d. Cause: PR #19838 is delivered, ACCEPTed (5793030545) and carries an at-tier PASS on its current head (5793632570, head a30913273c). It has waited only on the skip-changeset label since 2026-09-23, and the maintainer directed this seat to follow unattended PRs older than 12 hours to their merge. Destination: the Claim: below.

    谁的指令: the maintainer
    原话:

    objectstack 12 小时之前的pr,如果没有人在处理,你继续跟进到合并
    在哪说: the chat of session session_019c3Hi6ZMU1p6m6aA6Bz45d, 2026-09-24T14:52Z

    Claim: 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 touches content/docs/protocol/objectui/concept.mdx.

    The four-part takeover, in one comment

    ① The Release: line above names the holder's claim 5792692669 and its session, with the three provenance fields.
    ② Assignee: baozhoutao → os-litant, written in the same act.
    ③ The Claim: above continues branch claude/issue-19703-concept-collapsed-example at remote a30913273c (PR #19838). No new branch and no new commit.
    ④ Handover record: the holder's last pushed sha is a30913273c. Status: draft · CI on that head all success or skipped except Check Changeset · at-tier PASS 5793632570 names 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:devx seat'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 the domain:devx seat, 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 only content/docs/protocol/objectui/concept.mdx. It has no .changeset/*.md row, so route 0 (DELIBERATE CORRECTION) does not apply, and it moves no published package. That is route 2 of Check Changeset. The dev's own label write was refused by its session's permission classifier (ACCEPT 5793030545). review-checklist.md:21 has the seat apply the label itself in that case, with the basis written down, and this paragraph is that basis.
    • When the Check Changeset run fired by the label reads green, and the head is still a30913273c with PASS 5793632570 on it: ready → auto-merge through the merge queue. check-governed-merges.mjs --pr 19838 reads 0 governed paths, well under 5000 lines. ⛔ No hand approval and no hand merge.
    • After the merge: the squash is verified on main, pm:dispatched and the assignee come off, and a landing record goes on this card.

    Generated by Claude Code

  6. objectstack-fleet commented on Sep 24, 2026

    @objectstack-fleet
    Contributor

    Landed — PR #19838 → 3bdcd1479a, 2026-09-24T16:11Z

    domain:spec seat 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 completed through Fixes #19703, the PR body's only closing keyword.
    • The squash 3bdcd1479a has one parent and is an ancestor of origin/main. Content probe: git patch-id --stable of 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:dispatched and 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

  7. added a commit that references this issue on Sep 28, 2026
    3bdcd14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:devxpriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions