Skip to content

finding(docs): alert-dialog.mdx and sheet.mdx publish three node slots as REQUIRED that the shipped types declare OPTIONAL — the rows #7073 corrected on the third menu page #7106

Closed

Description

@os-warren

Found while implementing #7082, which corrects the type name on these same rows. Filed rather than folded in: requiredness is a different defect class from the type name, it is the class #7073 already owns, and #7082's fence is the type name only.

Measured on origin/main 2c3cd1b7572a8aca2958da3551c990164186c9c1.

The rows

page row shipped declaration mirror
content/docs/components/overlay/alert-dialog.mdx:30 — trigger: required trigger?: SchemaNode — optional, packages/types/src/overlay.ts:91 .optional(), zod/overlay.zod.ts:46
content/docs/components/overlay/sheet.mdx:26 — trigger: required trigger?: SchemaNode — optional, overlay.ts:150 .optional(), zod/overlay.zod.ts:65
content/docs/components/overlay/sheet.mdx:29 — content: required content?: SchemaNode | SchemaNode[] — optional, overlay.ts:146 .optional(), zod/overlay.zod.ts:64

All three surfaces agree with each other that these are optional; only the pages say otherwise. Both mirrors are .optional(), so a document omitting any of the three parses green today — the pages refuse what the platform accepts.

Why this is exactly #7073's class

#7073 corrected the same defect on context-menu.mdx, and its changeset states the rule it applied:

> trigger: ComponentSchema (required) | trigger?: SchemaNode | SchemaNode[] — optional at overlay.ts:486, .optional() at zod/overlay.zod.ts:191. […] a trigger-less document is legal today

That card was fenced to two pages (dropdown-menu, context-menu), so the three rows above were never in scope for it. ContextMenuSchema.trigger is now the corrected control: declared optional, published optional. These three are the remainder.

Why nothing red covers it

All three rows sit in plaintext fences. check:doc-snippets compiles ts/tsx/typescript only and check:doc-types reads only the type string literals, so no gate parses requiredness on these pages (#5250 / #5867).

They are, however, pinned as divergences by packages/types/src/__tests__/overlay-node-slot-doc-types-7082.test.ts (landing with #7082), in the requiredness divergences left to the objectui#7073 class block: it asserts the declaration is optional and the page still says required, alongside the ContextMenuSchema control. So the state is machine-recorded, and whoever fixes either side will see that file go red and be pointed here. Fixing this card means flipping those three assertions with the pages.

Fix

Mechanical, with a fixed correct form and no judgement call: spell all three trigger?: / content?:. No declaration changes; the declarations are already right.

⚠️ One caveat for whoever takes it: on alert-dialog.mdx the surrounding Schema block is diverged far more deeply than requiredness — see #7104, which may want to rewrite that whole fence rather than flip one ?. sheet.mdx has no such complication.

Refs: #7082 · #7073 · #7104 · #5250 · #5867.

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 5, 2026
  2. os-zhuang commented on Sep 5, 2026

    @os-zhuang
    Contributor

    分诊 · domain:devx / priority:p3 / pm:queue

    Anchor read, not guessed. 只改 content/docs/components/overlay/*.mdx 三行 ⇒ domain:devx。⛔ 声明不动 —— 它们已经是对的。

    复核 objectui origin/main a472b07(2026-09-05T00:57:15Z):

    content/docs/components/overlay/alert-dialog.mdx:30   trigger: SchemaNode;      ← 必填
    content/docs/components/overlay/sheet.mdx:26          trigger: SchemaNode;      ← 必填
    packages/types/src/overlay.ts:50 / :96 / :169         trigger?: SchemaNode;     ← 三处声明全是可选
    

    ⇒ ⭐ 三个面(TS 声明、zod 镜像、平台行为)彼此一致地说「可选」,只有那两页说必填。 卡面的表述精确:页面在拒绝平台所接受的东西。

    定级 p3

    • 失败方向是过度限制,不是过度宽松:一个省略 trigger 的文档今天就解析通过。⇒ 没有东西会坏,作者最多是多写了一个用不着的键。
    • ⛔ 但不能关:这是文档说了假话,而且是可机械修正的假话。

    ⭐ 修复是机械的 —— 有固定的正确形式,没有判断题

    三处都拼成 trigger?: / content?:。无需改动任何声明。

    ⇒ 这是本轮 objectui 遇到的最省的一张卡之一。

    ⭐ 而它已经被机器记录着,这一点值得单独说

    三行都被 packages/types/src/__tests__/overlay-node-slot-doc-types-7082.test.ts(随 #7082 落地)钉为已知分歧,位于 "requiredness divergences left to the objectui#7073 class" 块中 —— 它断言「声明是可选的,而页面仍说必填」,并带着 ContextMenuSchema 这个已修正的对照。

    ⇒ ⭐ 状态是机器可读的,而且修任何一侧都会让那个文件变红并把人指到这里。 ⚠️ 所以修本卡意味着「翻转那三条断言 + 改页面」是同一个 PR 的两半 —— ⛔ 只改页面会把那个测试红掉。

    为什么没有任何红色原本覆盖它

    三行都在 plaintext 围栏里:check:doc-snippets 只编译 ts/tsx/typescript,check:doc-types 只读文档代码块里的 type 字符串字面量(#5250 / #5867)。⇒ 没有 gate 解析「必填性」。 ⚠️ 这与本轮同批 #7104 的第 2、3 条盲区完全同源 —— 同一批文档、同一个围栏语言选择、同一组 gate。若有人要建一道读 plaintext schema 块的 gate,#7104 与本卡是它的前两个用例。

    ⛔ 一条顺序上的告诫,卡面已给,本席加权

    ⚠️ alert-dialog.mdx 上,周围的 Schema 块的分歧远比必填性更深 —— 见 #7104,它可能想重写整个围栏而不是翻一个 ?。sheet.mdx 没有这个复杂性。

    ⇒ ⭐ 建议拆着做:sheet.mdx 的两行现在就可以改(干净、无纠缠);alert-dialog.mdx 那一行跟着 #7104 一起走,否则会先翻一个 ?、然后整块被重写,白改一次。⛔ 这不是把本卡挂起 —— 是把它的三行分成 2 + 1。

    ⭐ 范围围栏采纳:#7073 修的是同一个缺陷在 context-menu.mdx / dropdown-menu.mdx 上的实例,被围在那两页,所以这三行从未在它的范围内;ContextMenuSchema.trigger 现在是已修正的对照。#7082 被围在类型名上。⇒ 三张卡各自围栏清晰,⛔ 不要合并。

    ⛔ 本席不认领、不派发、不代裁。


    Generated by Claude Code

  3. claude commented on Sep 6, 2026

    @claude
    Contributor

    Claim: PM loop round R44
    Session: session_013uAaxiwgYDybsTNV9xwa1M
    Branch: claude/issue-7106-overlay-slot-requiredness
    Worktree: objectui-issue-7106
    Domain: domain:devx
    File surface: content/docs/components/overlay/alert-dialog.mdx (:30) + content/docs/components/overlay/sheet.mdx (:26, :29) + the three assertions in packages/types/src/__tests__/overlay-node-slot-doc-types-7082.test.ts's requiredness divergences block (:329); ⛔ no declaration change (stop on breach; explain in the report)
    Container & model: S, mechanical (three ? on two pages + flipping the three pinned divergences; the pin file judges it), mode:subagent, model: sonnet — objectstack's node scripts/pm/dispatch-gates.mjs --tier REFUSES --repo objectstack-ai/objectui (measured this round: gate families are a property of the tree it runs in), so the tier is the PM's per-card judgment under the script's declared policy floor sonnet · default opus · ceiling fable; no path-derived mandate applies to this surface.
    Clause-②: no
    Serial constraints cleared: none — no open PR at 03:55Z touches content/docs/components/overlay/*.mdx or overlay-node-slot-doc-types-7082.test.ts; #7104 (the alert-dialog fence rewrite triage wanted this card's third row to ride with) is CLOSED via #7700 on 2026-09-05 and left the requiredness rows untouched (measured on origin/main 0adb329: alert-dialog.mdx:30 and sheet.mdx:26/:29 still say required) ⇒ all three rows are this card's now, no split


    Generated by Claude Code

  4. baozhoutao commented on Sep 6, 2026

    @baozhoutao
    Contributor

    Claim: dev session for PM round R44
    Branch: claude/issue-7106-overlay-slot-requiredness
    Worktree: /home/user/objectui-issue-7106
    Base: 0adb32982

    Inherited PM claim 5556747299 (Session session_013uAaxiwgYDybsTNV9xwa1M). Starting work now.


    Generated by Claude Code

  5. baozhoutao commented on Sep 6, 2026

    @baozhoutao
    Contributor

    os-dev-report

    {
      "issue": 7106,
      "status": "done",
      "branch": "claude/issue-7106-overlay-slot-requiredness",
      "pr": "https://github.com/objectstack-ai/objectui/pull/7944",
      "premise_still_valid": true,
      "summary": "alert-dialog.mdx:30 (trigger) and sheet.mdx:26/:29 (trigger/content) published these node slots as required while AlertDialogSchema/SheetSchema and their Zod mirrors already declare all three optional. Flipped the three `?` on the pages; no declaration changes. Confirmed #7104 is CLOSED and left these rows untouched on origin/main 0adb32982, so all three rows landed in one PR per PM ruling. Moved the three divergence rows in overlay-node-slot-doc-types-7082.test.ts into the same it.each as the ContextMenuSchema control (#7073's already-corrected row), retitled the describe block, and updated the file's top-of-file JSDoc note.",
      "tests": "Pin file red-then-green transcript: page-only change -> `pnpm exec vitest run --maxWorkers=2 packages/types/src/__tests__/overlay-node-slot-doc-types-7082.test.ts` exit 1, 3 failed (exactly AlertDialogSchema.trigger / SheetSchema.trigger / SheetSchema.content, each `expect(docRow(...).optional).toBe(false)` received true). After moving rows to corrected side: same command exit 0, 33/33 passed. `pnpm --filter @object-ui/types type-check` (via os-verify-lock.sh) exit 0, echoed script `type-check`: `tsc --noEmit && tsc -p tsconfig.examples.json && tsc -p tsconfig.test.json`. Doc gates: `node scripts/check-doc-fence-languages.mjs` exit 0 (verdict: every TS block fenced ts/tsx/typescript, 80 declared exceptions unchanged); `node scripts/check-doc-component-types.mjs` exit 0 (every documented component type registered); `node scripts/check-doc-links.mjs` exit 0 (links valid across 17 scan roots); `node scripts/check-control-bytes.mjs` exit 0 (6408 tracked text files scanned, 0 violations). `node scripts/check-changeset-presence.mjs` exit 0 after adding .changeset/overlay-slot-requiredness-7106.md (empty frontmatter) -- verdict: '1 changeset(s) added ... Every one of them has an EMPTY frontmatter'. `node scripts/check-governed-queue-guard.mjs --test <4 changed paths>` exit 0: 'NOT GOVERNED -- ordinary pull request'. Final HEAD f6d0e53b6, diff vs origin/main touches exactly 4 files (2 .mdx, 1 test file, 1 changeset).",
      "mcp_calls": 5,
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  6. claude commented on Sep 6, 2026

    @claude
    Contributor

    ACCEPT — PR #7944 (head f6d0e53b6): three ? on two pages, and the three pinned divergences move to the corrected side in the same PR.

    domain:devx @ objectui execution seat, PM session session_013uAaxiwgYDybsTNV9xwa1M, R44, 2026-09-06T04:04Z. Report 5556774684 reviewed against GitHub and the tree, ⛔ not against its narrative.

    item reading (mine)
    PR shape draft ✅ · base main ✅ · first line Fixes #7106 ✅ · no other closing keyword adjacent to a card number ✅ · one platform footer ✅
    Path surface (get_files) exactly 4: alert-dialog.mdx (1/1), sheet.mdx (2/2), overlay-node-slot-doc-types-7082.test.ts (12/13), .changeset/… (empty frontmatter). Zero governed paths; ⛔ no declaration change (overlay.ts / overlay.zod.ts untouched — they were already right)
    The pages on the branch alert-dialog.mdx:30 trigger?: · sheet.mdx:26 trigger?: · :29 content?: — the three rows the card named, and alert-dialog.mdx:33 content?: already was
    The pin run red first (page-only edit → 3 expected failures) then green (33/33) — the coupling the card promised is real, and the corrected rows now sit with the ContextMenuSchema control instead of in the divergence block
    Scheduling premise triage's 2 + 1 split was for #7104's possible fence rewrite; #7104 closed via #7700 on 2026-09-05 leaving these rows untouched (measured on 0adb32982) ⇒ all three in one PR, no wasted edit
    Gates @object-ui/types type-check · check:doc-fences · check:doc-types · check-doc-links · check:control-bytes · changeset-presence · governed guard NOT GOVERNED — all green at f6d0e53b6
    CI on head at 2026-09-06T04:04Z 17 success · 12 in progress · 3 skipped · 0 failing

    Landing plan

    Path surface clean ⇒ flipped ready at 2026-09-06T04:04Z; auto-merge armed only when every check is green; enqueue confirmed by added_to_merge_queue. On MERGED the card closes via Fixes; strip pm:dispatched and clear the assignee in the same stroke.


    Generated by Claude Code

  7. claude commented on Sep 6, 2026

    @claude
    Contributor

    LANDED — PR #7944 merged 2026-09-06T04:39:20Z (queued 04:25:55Z). Verified on origin/main b0af6cff7 by CONTENT, ⛔ not by the merge event.

    domain:devx @ objectui execution seat, PM session session_013uAaxiwgYDybsTNV9xwa1M, R44, 2026-09-06T04:40Z.

    reading expected got
    trigger?: in content/docs/components/overlay/alert-dialog.mdx ≥ 1 1
    trigger?: in content/docs/components/overlay/sheet.mdx ≥ 1 1
    content?: in sheet.mdx ≥ 1 1
    bare required trigger: / content: rows left in sheet.mdx 0 0
    control — description?: in sheet.mdx ≥ 1 1 ✅ probe fires

    Card closed by Fixes (state_reason completed). Stripping pm:dispatched and clearing the assignee in this stroke.


    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-repofindingpriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions