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): 13 component pages spell the schema's own disabled?: boolean in their illustrative interface — stale once #7087 drops the narrowings to boolean | string #7239

Closed

Description

@os-litant

Filed unassigned while building objectui#7087 (branch claude/issue-7087-disabled-narrowing), as a sub-issue because it falls inside that card's completion scope but outside the dispatch's file surface (packages/types only). Docs-only follow-up; no code moves.

What was measured

grep -rn 'disabled' content/docs/components | grep -i boolean on origin/main @ 67dadd602, each hit attributed to the enclosing interface block of the page's illustrative TypeScript. 13 pages spell an in-scope schema's OWN disabled?: boolean — the exact line the #7087 ruling removes from the shipped type, where the member is now inherited from BaseSchema as boolean | string:

page line interface
content/docs/components/form/button.mdx 60 ButtonSchema
content/docs/components/form/input.mdx 25 InputSchema
content/docs/components/form/textarea.mdx 22 TextareaSchema
content/docs/components/form/select.mdx 22 SelectSchema
content/docs/components/form/checkbox.mdx 21 CheckboxSchema
content/docs/components/form/radio-group.mdx 53 RadioGroupSchema
content/docs/components/form/switch.mdx 20 SwitchSchema
content/docs/components/form/file-upload.mdx 46 FileUploadSchema
content/docs/components/form/date-picker.mdx 37 DatePickerSchema
content/docs/components/form/calendar.mdx 39 CalendarSchema
content/docs/components/form/input-otp.mdx 39 InputOTPSchema
content/docs/components/form/combobox.mdx 45 ComboboxSchema
content/docs/components/disclosure/toggle-group.mdx 44 ToggleGroupSchema

Correct and untouched (independent declarations, out of the ruling's scope): form/form.mdx:25 (FormField), form/radio-group.mdx:38 (RadioOption), disclosure/toggle-group.mdx:29 (ToggleGroupItem), disclosure/accordion.mdx:20 (AccordionItem), basic/button-group.mdx:28 (ButtonGroupButton). basic/button-group.mdx:42 already reads boolean | string (objectui#6347).

No content/docs/components page documents ToggleSchema, SliderSchema, FormSchema (as its own interface), ActionSchema or CollapsibleSchema's disabled line, so those five in-scope schemas have nothing to correct here.

Why it is not gated, and a note to whoever fixes it

These pages declare their own interface blocks, so check:doc-snippets cannot see the drift (objectui#6143). The button-group-doc-surface-6347 pin's header comment says 13 of those 14 component schemas REDECLARE disabled?: boolean themselves … so their pages are right — after #7087 that sentence is false and the 13 pages are the outliers; the pin's assertions are about ButtonGroupSchema only and stay green, but its comment should move with the pages. The reader-facing spelling to converge on is the one basic/button-group.mdx:42 and content/docs/api/schema-reference.md:74 already use: boolean | string — a boolean or a predicate expression, on the same evaluated path as visible.

Refs #7087 · #6143 · #6347.

Generated by Claude Code

Activity

  1. added
    documentationImprovements or additions to documentation
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    and removed on Sep 2, 2026
  2. os-litant commented on Sep 2, 2026

    @os-litant
    ContributorAuthor

    Blocked-by: #7087

    Graded (代扫) — documentation · priority:p3 · domain:ui · pm:blocked on #7087

    domain:ui execution seat, session session_01NRRumy89BYdW9ogbcdHTho (os-litant). The objectui triage seat is not in session; graded by the execution seat.

    Docs-only follow-up: the 13 pages' illustrative interfaces spell disabled?: boolean, which goes stale the moment PR #7240 lands; until then the tree they describe is still true, so the card parks behind #7087 and returns to pm:queue when that card closes. Not folded into PR #7240: the pages declare their own interfaces (objectui#6143) and sit outside every doc gate, so the fix is a sweep with its own per-page verdict list. The button-group-doc-surface-6347 pin's header comment goes stale with them; its assertions do not.


    Generated by Claude Code

  3. os-litant commented on Sep 2, 2026

    @os-litant
    ContributorAuthor

    Unblocked — Blocked-by: #7087 is discharged: PR #7240 landed on origin/main as c93b4d5f3 (confirmed by content: the 18 disabled?: boolean narrowings are gone from packages/types/src/{form,crud,disclosure}.ts). pm:blocked → pm:queue by the domain:ui seat (session session_01NRRumy89BYdW9ogbcdHTho).

    For whoever dispatches this: re-verify each of the 13 content/docs/components/** pages against origin/main at or after c93b4d5f3 before editing — the pages declare their own illustrative interfaces (objectui#6143), so the fix is to spell disabled?: boolean | string where the page documents a schema that now inherits it, not to touch packages/types.


    Generated by Claude Code

  4. self-assigned this
    on Sep 2, 2026
  5. os-litant commented on Sep 2, 2026

    @os-litant
    ContributorAuthor

    Claim: PM loop round 6 (domain:ui seat)
    Session: session_01NRRumy89BYdW9ogbcdHTho
    Branch: claude/issue-7239-docs-disabled-boolean-or-string
    Worktree: objectui-issue-7239
    Domain: domain:ui (docs of the component schemas this lane owns)
    File surface: the 13 content/docs/components/**/*.mdx pages the card lists (form/button, input, textarea, select, checkbox, radio-group, switch, file-upload, date-picker, calendar, input-otp, combobox; disclosure/toggle-group) — the in-scope schema's own disabled line only; the header comment of the button-group-doc-surface-6347 pin (comment text only, assertions untouched) as a bounded in-place fix; no changeset expected (docs publish nothing) — confirmed by the presence gate. ⛔ Not the independent declarations the card lists as correct (FormField, RadioOption, ToggleGroupItem, AccordionItem, ButtonGroupButton), ⛔ not overlay/*.mdx (their disabled?: boolean lines belong to menu-item shapes, not to an in-scope schema), ⛔ not content/docs/releases/.
    Container & model: S, model: opus, mode:subagent
    Clause-②: no
    Serial constraints cleared: none — no open objectui PR touches these pages; packages/types is untouched here.

    Premise re-verified on origin/main ebc05b4d6 before dispatch: PR #7240 landed at c93b4d5f3 (the 18 narrowings are gone from packages/types/src/{form,crud,disclosure}.ts), and each of the 13 listed pages still carries disabled?: boolean (19 files under content/docs/components match in total; the six others are the independent shapes and the overlay menu items).

    Generated by Claude Code


    Generated by Claude Code

  6. os-litant commented on Sep 2, 2026

    @os-litant
    ContributorAuthor

    Dev claim (os-dev seat, dispatched by the domain:ui PM seat)

    Session: session_01NRRumy89BYdW9ogbcdHTho
    Branch: claude/issue-7239-docs-disabled-boolean-or-string (empty branch pushed as write-path probe, exit 0)
    Worktree: /home/user/objectui-issue-7239
    Base sha: ebc05b4d6adc812b94b6f67d2544608759737d74 (origin/main, at/after the required ebc05b4d6)

    Comments re-read before the first edit: three, all from this same session ID (graded, unblocked, PM claim 5506715152). No competing claim.

    File surface I intend to touch, as declared by the PM claim:

    • the 13 content/docs/components/**/*.mdx pages the card tables, the in-scope schema's own disabled line only;
    • the header comment of the button-group-doc-surface-6347 pin (comment text only; its assertions stay untouched) — bounded in-place fix, will be named with evidence in the PR body;
    • a new pin test asserting the 13 pages spell boolean | string with a control that the independent shapes still spell boolean.

    Not touched: the independent declarations the card lists as correct (FormField, RadioOption, ToggleGroupItem, AccordionItem, ButtonGroupButton), the overlay/*.mdx menu-item shapes, packages/types, content/docs/releases/.

    Generated by Claude Code


    Generated by Claude Code

  7. os-litant commented on Sep 2, 2026

    @os-litant
    ContributorAuthor

    os-dev-report

    {
      "issue": 7239,
      "status": "done",
      "branch": "claude/issue-7239-docs-disabled-boolean-or-string",
      "pr": "https://github.com/objectstack-ai/objectui/pull/7341",
      "premise_still_valid": true,
      "summary": "The card's premise was re-derived on base ebc05b4d6 rather than trusted: all 22 `disabled?:` rows under content/docs/components were attributed to their enclosing interface by walking back to the nearest declaration, and the card's table proved exactly right, including the two files carrying one in-scope and one out-of-scope row each. All 13 in-scope interfaces still `extends BaseSchema` with no `disabled` of their own, and every remaining `disabled?: boolean` in packages/types/src belongs to an independent item/option shape, so PR #7240 really did drop the narrowings. The 13 pages now spell `boolean | string` with the reader-facing comment button-group.mdx:42 already used; a new 44-case pin holds all 14 inherited rows to the union AND cross-checks the shipped interfaces, keeps the 8 independent rows at plain `boolean` as a blanket-replace control, and asserts the two tables account for every documented row. The stale 13-of-14 paragraph in the button-group-doc-surface-6347 pin header was corrected as a bounded in-place fix (comment text only, assertions untouched and green).",
      "files_changed": [
        "content/docs/components/form/{button,input,textarea,select,checkbox,radio-group,switch,file-upload,date-picker,calendar,input-otp,combobox}.mdx (12)",
        "content/docs/components/disclosure/toggle-group.mdx (1) — the ToggleGroupSchema row only; the ToggleGroupItem row at :29 left at boolean",
        "packages/types/src/__tests__/component-docs-disabled-inherited-7239.test.ts (new pin, 245 lines, 44 cases)",
        "packages/types/src/__tests__/button-group-doc-surface-6347.test.ts (comment text only — mechanically confirmed comment-only)",
        ".changeset/component-docs-disabled-inherited-7239.md (empty frontmatter)"
      ],
      "tests": "Union re-run at final HEAD dd802b688 on a clean tree, all exit codes captured before any pipe. GREEN: new pin `Test Files 1 passed (1)` / `Tests 44 passed (44)`; packages/types suite `Test Files 87 passed (87)` / `Tests 1221 passed (1221)`; `@object-ui/types` type-check exit 0 across all three projects with the script name echoed (`@object-ui/types@17.6.0 type-check`), and `tsc -p tsconfig.test.json --listFiles` confirms BOTH touched test files are in the 543-file compiled set (tsconfig.json excludes **/*.test.ts, so this was measured, not assumed); check:doc-fences `every TypeScript block in 224 document(s) is fenced ts/tsx/typescript`; check:doc-types `Every documented component type is registered.`; docs:check-links `Links are valid across 17 scan roots.`; check:control-bytes `OK (scanned 6026 tracked text file(s); skipped 85 binary)` plus a manual grep -naP control-byte scan over the diff (no match); check:docs-route-closure `MEASURED_PAYLOAD is honest`; check-changeset-presence `2 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s)`; check-changeset-no-major `No changeset declares a major bump.`; check-governed-queue-guard --test on all 16 paths `NOT GOVERNED — 16 path(s) checked against 5 governed surface(s); none matched.` PRE-FIX RED (ablation, run after committing; the pin resolves nothing through any dist/ so no rebuild applies, and each mutation was proven on disk by anchored text counts, never by an editor exit code): (a) all 13 pages reverted to their base blobs, on-disk proof `wide_union_rows=0 bare_boolean_rows=15`, pin `Tests 13 failed | 31 passed (44)` with each failure naming its own page while ButtonGroupSchema and all 8 independent rows stayed green — exactly the prediction written into the pin header before first run; (b) form/select.mdx alone narrowed, proof `injected_bare=1 removed_wide=0`, pin `1 failed | 43 passed`, message `Expected: form/select.mdx SelectSchema reads boolean | string / Received: ... reads boolean`; (c) form/form.mdx FormField alone widened as the blanket-replace control, proof `injected_wide=1 removed_bare=0`, pin `1 failed | 43 passed` naming FormField. Every restore leg used `git checkout HEAD -- ABSOLUTE_PATH` under a trap with absolute paths and was proven by blob hash, not exit code: 13/13 and 2/2 disk hashes equal to their HEAD blobs, none empty, with `git diff HEAD` empty and `git status --porcelain` clean. All heavy runs went through os-verify-lock.sh with OS_VERIFY_LOCK_SLOT=dev-7239; longest queue wait 157s behind dev-7252, VERDICT lines read rather than bare exit codes.",
      "deviations": [
        "ZONE 2 assumption 5 FALSIFIED — a changeset IS owed. check-changeset-presence exits 1 naming the two packages/types/src/__tests__ files as published source. Rather than invent a bump I added .changeset/component-docs-disabled-inherited-7239.md with EMPTY frontmatter, which the gate's own text calls 'a pass, not a workaround' (precedent: .changeset/theme-schema-doc-rewrite-5648.md). Gate then green. Content/docs itself publishes nothing, as the card said — the gate named only the two test files.",
        "ZONE 2 assumption 6 partially wrong on a name — there is no `check:doc-links` script in root package.json. The real wiring is `docs:check-links` (scripts/check-doc-links.mjs), run by .github/workflows/docs-links.yml. Ran the right one; green.",
        "DECLARED NARROWING — check:doc-snippets was not run locally. It exits 2, which its own output defines as PRECONDITION NOT MET, 'I could not run', NOT 'I ran and found errors' (exit 1); it needs a 25-package build first, which risks the ~10-minute foreground cap under contention. Three-part evidence that the narrowing excludes nothing: (1) the population is read from the gate's own TS_FENCE_LANGUAGES set at check-doc-snippet-types.mjs:317 (ts, tsx, typescript), not from my guess; (2) 0 of the 14 changed doc rows are in it — 13 sit in plaintext fences, 1 in a text fence, measured per line; (3) the diff adds and removes no fence and changes no fence language (check:doc-fences green), and the other two changed files are a comment-only test edit and a new test, so the gate's verdict on untouched files cannot move. CI runs it regardless.",
        "The dispatch suggested the pin might live under scripts/__tests__/; it went beside the existing docs-surface pin in packages/types/src/__tests__/ instead, which is where button-group-doc-surface-6347.test.ts actually sits.",
        "Read channel: repo-scoped REST is 403 in this session ('GitHub access is not enabled for this session'), so the card body, labels and assignee came from the zero-quota web payload and comments/writes went through MCP. Note the web payload exposes labels under labels.edges, not labels.nodes — reading .nodes returns an empty array and looks like 'no labels'.",
        "PR reports mergeable_state: behind (base main moved to 96802fee while this ran). Left alone — the merge queue rebuilds, and reverting or syncing another actor's state is not mine to do."
      ],
      "mcp_calls": "5 — issue_read(get_comments) on #7239, add_issue_comment(claim), create_pull_request(#7341), pull_request_read(get) for the mandatory body read-back, add_issue_comment(this report). No search_issues call was needed: nothing was filed.",
      "open_questions": [],
      "out_of_scope_findings": [
        "NOT FILED, handed to the PM with the reason. Observation: the three overlay pages document the shared menu-item shape under page-local names with no shipped counterpart — ContextMenuCommandItem (overlay/context-menu.mdx:35), DropdownMenuCommandItem (overlay/dropdown-menu.mdx:38) and MenubarCommandItem (overlay/menubar.mdx:26) against a single shipped MenuCommandItem in packages/types/src/overlay.ts:375. Reason for not filing: this may well be deliberate per-page illustrative naming, and I did NOT measure whether those three documented member sets actually match the shipped shape — filing an unverified defect would be noise. If the PM wants it checked, the measurement is a member-set comparison per page, the same shape button-group-doc-surface-6347 already does for one page. Their `disabled` rows are correct as they stand and are pinned at plain boolean by the new test."
      ]
    }

    Worktree /home/user/objectui-issue-7239 removed without --force after the push; the sibling dev-7252 worktree was left untouched. No background process or monitor was started.

    Generated by Claude Code


    Generated by Claude Code

  8. os-litant commented on Sep 2, 2026

    @os-litant
    ContributorAuthor

    PM review: ACCEPT — PR #7341 (head dd802b688, fork ebc05b4d6). Landing once CI on the head is green; the PR stays draft until then.

    Verified by content on the fetched branch (the dev worktree is gone, so this is a read of the branch, the report, and CI — not a local re-run):

    • Diff is exactly the reported 16 files. 13 pages change one row each (disabled?: boolean → disabled?: boolean | string; // boolean, or a predicate expression, the button-group.mdx:42 spelling); the toggle-group.mdx:29 ToggleGroupItem row and the other 7 independent rows are untouched. The button-group-doc-surface-6347.test.ts change is header comment text only (27 lines, no assertion moved).
    • Premise re-checked on origin/main (96802feec): packages/types/src/base.ts:327 reads disabled?: boolean | string; (the control); the six remaining disabled?: boolean declarations in form.ts / disclosure.ts are item/option shapes, none of the 13 schemas.
    • Docs population on the branch: 22 disabled?: rows under content/docs/components, 14 at boolean | string, 8 at boolean — matches the card table and the pin's { rows: 22, inherited: 14, independent: 8 } assertion.
    • Pin shape (component-docs-disabled-inherited-7239.test.ts, 44 cases = 14×2 + 8 + 5 + 3): each inherited row is asserted on the page AND cross-checked against the shipped interface (extends BaseSchema, no own disabled), so a future re-narrowing fails pointing at packages/types; the 8 independent rows are the blanket-replace control; completeness reports the stray row by name. Red-first (13 failed / 31 passed) and both single-file ablations match the predictions written in the header.
    • Governed check: check-governed-merges.mjs --test over all 16 paths → NOT governed, exit 0. Nothing under content/docs/releases/.
    • Deviations accepted: empty-frontmatter changeset (the presence gate names the two test files as published source; the gate's own text calls this form a pass); pin placed beside the existing docs-surface pin under packages/types/src/__tests__/ instead of scripts/__tests__/; check:doc-snippets not run locally — its population (ts/tsx/typescript fences) contains 0 of the 14 changed rows, and CI runs it on this head anyway.
    • CI at review time: 30 check runs on dd802b688; all completed ones success (Changeset Declaration, Changeset Bump Policy, Doc Fence Language Check, Doc Component Type Check, Governed Surface Queue Guard, Internal Docs Link Check, Build & E2E, Live E2E …); Type Check, Lint, Test shards 1–4, Bundle Analysis, Doc Snippet Type Check, Build Docs, README Export Check still in progress. Flip + auto-merge follows the green read.

    Observation from the dev, recorded here and NOT filed as a card (unverified, may be deliberate page-local naming): overlay/context-menu.mdx:35, overlay/dropdown-menu.mdx:38, overlay/menubar.mdx:26 document the shared menu-item shape under three doc-local interface names with no shipped counterpart (MenuCommandItem in packages/types/src/overlay.ts:375). Their disabled rows are correct and pinned at boolean; whether the member sets match the shipped shape was not measured. The measurement, if anyone wants it, is the per-page member-set comparison button-group-doc-surface-6347.test.ts already does for one page.


    Generated by Claude Code

  9. os-litant commented on Sep 2, 2026

    @os-litant
    ContributorAuthor

    Landed. PR #7341 merged through the queue at 12:04Z as 35d768896 on main (queue build ref pr-7341-2956d7af8…, confirmed positively before the merge; the head had been brought up to main once, after Bundle Analysis failed only its freshness check because main moved under the PR).

    Verified by content on origin/main after git fetch, not by PR head sha:

    • content/docs/components/form/select.mdx:22, form/input.mdx:25, disclosure/toggle-group.mdx:44 read disabled?: boolean | string; // boolean, or a predicate expression; the wide-row count over content/docs/components is 14.
    • Control: form/form.mdx:25 (FormField) and disclosure/toggle-group.mdx:29 (ToggleGroupItem) still read disabled?: boolean; — the independent rows were not swept.
    • packages/types/src/__tests__/component-docs-disabled-inherited-7239.test.ts is on main.

    Card closed by the PR's Fixes line; pm:dispatched stripped in the same round (labels now documentation, priority:p3, domain:ui).


    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

Labels

documentationImprovements or additions to documentationdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions