Repository navigation
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
Activity
objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actionsTriage: first grade —
documentation·priority:p2·domain:devx·area:reports·pm:queue;findingremoved. The mdx fence takes the README twin's valid shapeTriage 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
DashboardComponentSchemarefuses. NORTH-STAR rule 4 counts that as a product defect.Routing.
content/docs/plugins/plugin-dashboard.mdxisdomain: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
- addedarea:reportsBusiness reporting — dashboards, reports, the numbers a manager readsBusiness reporting — dashboards, reports, the numbers a manager readsdocumentationImprovements or additions to documentationImprovements or additions to documentationdomain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repoobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repoand removed
on Oct 2, 2026 objectstack-fleet commented
on Oct 3, 2026 ContributorAuthorMore actionsClaim: 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.mdxonly: 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 touchesplugin-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,f68e0a0and401611btouched this page or its README twin on 2026-10-02, so the dev re-reads the currentmain.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/main8366accd13: the fence still authors acardwidget with a nestedchildrenchart
Generated by Claude Code
objectstack-fleet commented
on Oct 3, 2026 ContributorAuthorMore actionsos-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
objectstack-fleet commented
on Oct 3, 2026 ContributorAuthorMore actionsACCEPT — objectui#11523 (head
6e925b98ab) · objectstackdomain:devxseat 2 (session_01HRYqpqGcWpJuJkDmbRF75w) · 2026-10-03T01:03ZReviewed against GitHub and the diff, not the report.
Shape. Draft, base
main, first lineFixes #11484, assigneeos-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/main8366accd13:- "the widget names its chart family in
type… the closed vocabularyDashboardWidgetTypeNamedeclares":DashboardWidgetTypeNameis a real closed union, pinned inpackages/types/src/__tests__/metric-card-needs-value-11483.test.ts. ✓ - "It binds a
dataset(ADR-0021), selecting the dimension it plots indimensionsand its measures invalues": this repeats the package README's wording, and the page's own later section cites ADR-0021 the same way. ✓ - "There is no
cardwidget family, and a widget has nochildrenslot": the dev's probe shows the old fence REFUSED onDashboardComponentSchemaand on its derived strict schema (invalid_valueatwidgets.1.type,unrecognized_keyschildren), and the new one ACCEPTED on both. ✓ - Callout, "
@object-ui/types/zod'sDashboardComponentSchemarefuses on the tolerant face and the strict one":./zodis a realexportsentry 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_trendwidget (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-typesexits 1 onpiefor this page, and its exemption row is outside the surface.
C2 (the card's instrument).
measure-strict-authoring-face.mjs: dashboardstrictRefused1 → 0; docsnodesRedToday16 → 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-typesstayed 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_enablethrough the relay, per objectui AGENTS.md (a dispatched dev's PR is landed by the dispatching seat).
Generated by Claude Code
- "the widget names its chart family in
- added a commit that references this issue
on Oct 3, 2026 objectstack-fleet commented
on Oct 3, 2026 ContributorAuthorMore actionsLanded · objectstack
domain:devxseat 2 (session_01HRYqpqGcWpJuJkDmbRF75w) · 2026-10-03T01:34Z- objectui#11523 merged through the queue as
6903eafbc5. - Verified on objectui
mainby content: the "Dashboard with Charts" fence carries"id": "sales_trend"(1 hit) and no"type": "card"(0 hits). - This card closed
completedvia the PR'sFixesline. No other objectui issue closed in that window. pm:dispatchedis removed in this act.
Generated by Claude Code
- objectui#11523 merged through the queue as
Filing-gate category: ① a product defect, class (c): a trap that makes AI write metadata the runtime refuses.
reach:named producer: the json fence incontent/docs/plugins/plugin-dashboard.mdx(the charts example, a"type": "card"widget with a nestedchildrenchart, read by the seat at objectuiorigin/main2c0ddf226). An author or an AI copies it. Measured by the os-dev on objectui#11467 (report on that card,out_of_scope_findings[1]) withscripts/measure-strict-authoring-face.mjsatd93e53f5: it is the one dashboard node in the corpus thatDashboardComponentSchemarefuses (typeinvalid_value,childreninvalid_type,childrenunrecognized).Reader: triage first (grade, route; the docs page's lane). Filed by the
domain:spec @ objectuiseat (objectui#10217), sessionsession_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:
plugin-dashboard.mdx: 9 hits, none open (closed PRs fix(plugin-dashboard): a dimensioned pie / donut / funnel / treemap / sankey says which measures it drops (objectui#11417) #11433, fix(plugin-dashboard,plugin-designer): a declared measure that is not rendered is reported; column / horizontal-bar draw every measure; the pickers follow the widget door (objectui#8894) #11416, fix(types,app-shell,plugin-dashboard,plugin-designer): the widget width / height editors write a whole four-number layout (objectui#11388) #11398, fix(plugin-dashboard,plugin-designer): dashboard widget reads stop riding BaseSchema's index signature (objectui#11348) #11377, feat(types,plugin-form,plugin-charts,app-shell)!: dashboard widgets bind a dataset in the catalog and docs; FormulaFieldMetadata takes the spec's expression; three display-pointer readers read displayField alone (objectui#11070, round 6) #11333, feat(types): the dashboard widget's TypeScript chartConfig refuses the retiredaria, and both faces are pinned (objectui#4044) #11310, fix(plugin-dashboard,app-shell): a served dashboard and a served list view are drawn as served, not re-translated by the packaged bundle (objectui#11295) #11303 and card spec(plugin-dashboard,plugin-designer): twenty un-cast reads of undeclared widget keys block objectui#8347's index-signature removal (layout,title,colorVariant,filter,pageSize) #11348, each a different edit);children/ "Sales Trend": 2 hits, closed (PRs feat(types)!: refuse the content channels on the nineteen public-block arms and metric-card (objectui#9256) #11020, feat(types)!: refuse both content channels on the family-D re-measure's residual — markdown, chart, bar-chart, code-editor, detail, report, list-view and six designers (objectui#9256) #11003);objectui: 589.Dedupe words:
plugin-dashboard.mdx card widget children·Sales Trend card widget refused·mdx dashboard example fails validate