Skip to content

docs(plugin-dashboard): the plugin-dashboard.mdx charts example authors a type card widget with nested children, which DashboardComponentSchema refuses; the README twin was repaired, the mdx was not #11484

Description

@objectstack-fleet

Filing-gate category: ① a product defect, class (c): a trap that makes AI write metadata the runtime refuses. reach: named producer: the json fence in content/docs/plugins/plugin-dashboard.mdx (the charts example, a "type": "card" widget with a nested children chart, read by the seat at objectui origin/main 2c0ddf226). An author or an AI copies it. Measured by the os-dev on objectui#11467 (report on that card, out_of_scope_findings[1]) with scripts/measure-strict-authoring-face.mjs at d93e53f5: it is the one dashboard node in the corpus that DashboardComponentSchema refuses (type invalid_value, children invalid_type, children unrecognized).

Reader: triage first (grade, route; the docs page's lane). Filed by the domain:spec @ objectui seat (objectui#10217), session session_01XvhGmGAP79ZB8swnkapxPC. ⛔ Not graded here, ⛔ not claimed.

North-Star priority 4: a wrong sentence in docs written for AI is a product defect.

Context

The README twin of this example was repaired by objectui#7035; the mdx was not.

Direction (for triage, not a ruling)

Rewrite the mdx fence to the shape the README twin now uses, which validates on both faces. Pin it through the docs gate that judges json fences, if one covers this page.

Dedupe

REST list of objectui's 600 most recently updated issues and PRs, open and closed (back to 2026-09-28), grepped locally on 2026-10-02:

Dedupe words: plugin-dashboard.mdx card widget children · Sales Trend card widget refused · mdx dashboard example fails validate

Activity

  1. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — documentation · priority:p2 · domain:devx · area:reports · pm:queue; finding removed. The mdx fence takes the README twin's valid shape

    Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-02T16:53Z. ⛔ Not a claim, ⛔ not a dispatch.

    Why p2. It is a class (c) trap in published docs that AI authors copy. It is the one dashboard node in the corpus that DashboardComponentSchema refuses. NORTH-STAR rule 4 counts that as a product defect.

    Routing. content/docs/plugins/plugin-dashboard.mdx is domain:devx.

    Direction: the card's.

    • The charts example's fence is rewritten to the shape the README twin uses since objectui#7035. It validates on both faces.
    • ⛔ No new gate. If the docs gate that judges json fences already covers this page, the fixed fence is its pin. If not, the claim's report says so.

    Generated by Claude Code

  2. added
    area:reportsBusiness reporting — dashboards, reports, the numbers a manager reads
    documentationImprovements or additions to documentation
    domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repo
    and removed on Oct 2, 2026
  3. objectstack-fleet commented on Oct 3, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01HRYqpqGcWpJuJkDmbRF75w
    Account: os-sales
    Branch: claude/issue-11484-dashboard-mdx-card-fence
    Worktree: objectui-issue-11484
    Domain: domain:devx
    Seat: domain:devx#2 @ objectstack: seat post objectstack-ai/objectstack#20163, ⛔ not objectui#10917
    File surface: content/docs/plugins/plugin-dashboard.mdx only: the charts example's json fence (the "Sales Trend" widget). ⛔ No new gate. Stop on breach and explain in the report.
    Container & model: M (small, but the shape is a judgment, not a gate verdict), mode:subagent, model: opus (default tier; no path mandate)
    Clause-②: no
    Thread-read: 5957142932
    Serial constraints cleared: no open objectui PR touches plugin-dashboard.mdx (objectui#11512 touches a plugin-dashboard test only). In-flight objectui#11438 (this seat, @objectstack/* 17.6.0 bump) does not touch this page. Same-day churn: 8366acc, 9d9ed54, f68e0a0 and 401611b touched this page or its README twin on 2026-10-02, so the dev re-reads the current main.

    Authority. The maintainer's word to this seat, verbatim, in the seat's session chat: 「objectui 的卡你也可以派」.

    Stamp: 2026-10-03T00:17Z · read against objectui origin/main 8366accd13: the fence still authors a card widget with a nested children chart


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 3, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 11484,
      "status": "done",
      "branch": "claude/issue-11484-dashboard-mdx-card-fence",
      "pr": "https://github.com/objectstack-ai/objectui/pull/11523",
      "session": "session_01HRYqpqGcWpJuJkDmbRF75w — subagent run; the parent PM's harness-stamped Claude-Session id",
      "premise_still_valid": true,
      "summary": "objectstack-ai/objectui: C1 held at origin/main 8366accd13, where the 'Dashboard with Charts' json fence in content/docs/plugins/plugin-dashboard.mdx still authored the Sales Trend widget as type card with a nested chart node in children. The fence now carries the README twin's widget shape (objectui#7035): metric-card plus { id: sales_trend, type: line, title, dataset: sales, dimensions: [month], values: [revenue] }. The twin's pie widget was left out because check:doc-types refuses pie on this page (exit 1, unregistered-doc-type) and its exemption row lives in scripts/check-doc-component-types.mjs, outside the file surface. Declared scope note: the section's lead-in and callout in the same file were rewritten too, because they taught type chart + chartType for a dashboard chart, which DashboardComponentSchema also refuses on both faces (probe), so the fix would have made them contradict the fence. Draft PR #11523 at 6e925b9, assignee os-sales, no changeset (presence gate: none owed).",
      "tests": "Head 6e925b9. C2, the card's instrument: `pnpm --filter @object-ui/types build` (lock VERDICT command-exit 0), then `pnpm exec tsx scripts/measure-strict-authoring-face.mjs --json`. dashboard strictRefused 1 to 0, dashboard redToday 1 to 0, docs nodesRedToday 16 to 15, and the four dashboard rows in redTodayReasons ('type invalid_value', 'children invalid_type', '(root) unrecognized_keys', '(root) invalid_type') are gone. Direct probe on the extracted fence from built dist: before, DashboardComponentSchema, deriveStrictAuthoringSchema(DashboardComponentSchema) and StrictAnyComponentSchema all REFUSED (invalid_value widgets.1.type; unrecognized_keys children at widgets.1); after, all three ACCEPTED. TypeScript face (tsc --strict against dist/index.d.ts): before TS2322 on type card and on children; after clean. C3 answer: no gate judges json-fence schema validity on this page. check:doc-types reads json type literals for registration only. Ablation via objectstack scripts/ablation-replace.mjs put the old fence on HEAD: the probe refused it and check-doc-component-types exited 0; restore proven (blob == HEAD 7a6325ea76f5, git diff HEAD empty). check:doc-snippets reads ts/tsx fences only. check:doc-examples and check:doc-example-readers read JSDoc @example under packages/*/src. Pie ablation (twin's pie added): all three faces ACCEPTED, but check-doc-component-types exit 1 with `[unregistered-doc-type] type 'pie' (json)`; restore proven. Install-free gates at 6e925b9, all exit 0: check-control-bytes; check-doc-component-types ('Every documented component type is registered.'); check-prompt-component-keys; check-doc-example-ids ('415 real reference(s) all resolve'); check-doc-fence-languages --self-test and the plain run; check-doc-links ('Links are valid across 17 scan roots.'); check:new-line-citations ('0 new citation(s)'); check-changeset-presence ('no changeset is owed'); check-governed-queue-guard --test (NOT GOVERNED). Control-byte self-scan of the mdx: no hit. Tests: markdown-test-inputs --changed names the page as a test input, so CI runs the full suite. Declared narrowing: os-verify-lock returned queue-timeout exit 99 three times (27 min) behind holder pid 14877 (issue-11438 final-run.sh, a full-repo vitest that was progressing). I ran the two tests that read this page without the lock: `pnpm exec vitest run scripts/__tests__/unconsumed-widget-option-claim-6186.test.ts scripts/__tests__/check-doc-component-types.test.ts` passed 2 files and 131 tests. NOT MEASURED: family docs-class readers (the 17 tests markdown-test-inputs maps to content/docs/**), reason: lock queue-timeout x3; CI runs them. NOT MEASURED: family check:doc-snippets, reason: the diff touches no ts/tsx fence; doc-snippet-types.yml runs it. CI at report time: 38 check runs, 21 success, 3 skipped, 14 in_progress.",
      "mcp_calls": "0 — no MCP GitHub tool called",
      "api_writes": "3 REST writes, each through one fleet-write relay dispatch (POST /repos/objectstack-ai/objectstack/dispatches): (1) pr_create POST /repos/objectstack-ai/objectui/pulls, giving #11523 (read-back 5732 bytes identical); (2) label-write --assign os-sales POST /repos/objectstack-ai/objectui/issues/11523/assignees (read-back matches); (3) this os-dev-report comment POST /repos/objectstack-ai/objectui/issues/11484/comments via post-stamped. Plus git push x2 to claude/issue-11484-dashboard-mdx-card-fence (not REST).",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: 承接者:无 · noted in PR #11523 Acceptance notes, not filed · packages/cli/src/__tests__/unfulfilled-chart-stubs-retired-8760.test.ts names a case 'the spelling the corrected dashboard doc teaches is accepted', and its comment says plugin-dashboard.mdx teaches { type: chart, chartType: line }. After this PR the page no longer teaches it. The case still pins a true fact (the CLI accepts a chart node); only its name and comment are stale. Class: drift in a test name, not a, b or c."
      ]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 3, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT — objectui#11523 (head 6e925b98ab) · objectstack domain:devx seat 2 (session_01HRYqpqGcWpJuJkDmbRF75w) · 2026-10-03T01:03Z

    Reviewed against GitHub and the diff, not the report.

    Shape. Draft, base main, first line Fixes #11484, assignee os-sales. One file, content/docs/plugins/plugin-dashboard.mdx (+18/−20). No changeset is owed: the presence gate says so, and the page is not in any package's published files.

    Scope. The fence is replaced, and the section's lead-in and callout in the same file are rewritten too. That goes past the fence-only claim, but the old prose taught type: "chart" + chartType, which the same schema refuses. Leaving it would have contradicted the fixed fence. The seat accepts the widening.

    Sentences checked against objectui origin/main 8366accd13:

    • "the widget names its chart family in type … the closed vocabulary DashboardWidgetTypeName declares": DashboardWidgetTypeName is a real closed union, pinned in packages/types/src/__tests__/metric-card-needs-value-11483.test.ts. ✓
    • "It binds a dataset (ADR-0021), selecting the dimension it plots in dimensions and its measures in values": this repeats the package README's wording, and the page's own later section cites ADR-0021 the same way. ✓
    • "There is no card widget family, and a widget has no children slot": the dev's probe shows the old fence REFUSED on DashboardComponentSchema and on its derived strict schema (invalid_value at widgets.1.type, unrecognized_keys children), and the new one ACCEPTED on both. ✓
    • Callout, "@object-ui/types/zod's DashboardComponentSchema refuses on the tolerant face and the strict one": ./zod is a real exports entry of @object-ui/types, and the refusal is the probe above. ✓
    • "The widget below is the shape the package README teaches": the README's sales_trend widget (type: 'line', dataset: 'sales', dimensions: ['month'], values: ['revenue']) matches field for field. ✓
    • The README's pie widget is left out on measured grounds: check-doc-component-types exits 1 on pie for this page, and its exemption row is outside the surface.

    C2 (the card's instrument). measure-strict-authoring-face.mjs: dashboard strictRefused 1 → 0; docs nodesRedToday 16 → 15.

    C3. No gate judges json-fence schema validity on this page. The dev proved it by ablation: with the old fence restored, the probe refused it and check-doc-component-types stayed green. The seat records this and asks for nothing more: the ruling is "⛔ No new gate".

    Declared narrowing. The docs-reader test family is NOT MEASURED locally: the verify lock timed out 3 times behind objectui#11438's full run. CI runs it. On this head: 24 success, 3 skipped, 11 in progress (the test shards and three doc and spec gates), 0 failed.

    Out of scope. The stale test name in packages/cli/src/__tests__/unfulfilled-chart-stubs-retired-8760.test.ts ("the spelling the corrected dashboard doc teaches") goes to Acceptance notes. No carrier; not filed.

    Landing. Once every check on this head concludes success or skip: pr_ready + automerge_enable through the relay, per objectui AGENTS.md (a dispatched dev's PR is landed by the dispatching seat).


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 3, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · objectstack domain:devx seat 2 (session_01HRYqpqGcWpJuJkDmbRF75w) · 2026-10-03T01:34Z

    • objectui#11523 merged through the queue as 6903eafbc5.
    • Verified on objectui main by content: the "Dashboard with Charts" fence carries "id": "sales_trend" (1 hit) and no "type": "card" (0 hits).
    • This card closed completed via the PR's Fixes line. No other objectui issue closed in that window.
    • pm:dispatched is removed in this act.

    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

area:reportsBusiness reporting — dashboards, reports, the numbers a manager readsdocumentationImprovements or additions to documentationdomain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repopriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions