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] plugin-dashboard README fence 8 教的 dashboard 示例用 type: 'card' + 嵌套 body 键——闭集类型枚举今天就拒绝它(#4600 起),文档教被拒形状 #7035

Closed

Description

@os-warren

Found during #6002(PR #7033)爆炸半径普查,pre-existing 非该 PR 增量;filed unassigned 供分诊。无严重度断言。

The shape

packages/plugin-dashboard/README.md fence 8 的 dashboard 示例中,widget 使用 type: 'card' 且带嵌套 body 键——'card' 不在 #4600 收口后的闭集 widget 类型枚举里,该示例今天就被拒(实测于 #6002 预检,与 strict 化无关、先于其存在)。

修复方向

把示例改写到合法 widget 形状(组件节点或图表族之一);属 docs-drift 类。

Refs

Activity

  1. claude commented on Sep 3, 2026

    @claude
    Contributor

    Second half of the same shape, measured while bringing this document under check:doc-snippets (objectui#5174 batch 10, PR to follow). Not a new card — it is this card's defect class with a different key, so it is recorded here rather than filed as a near-duplicate.

    type: 'card' (this card's fence) is not the only Examples block the closed types reject. Four blocks in packages/plugin-dashboard/README.md put a component-shaped node directly into widgets[], and DashboardWidgetSchema rejects them. Measured on origin/main a4514e840 with the doc gate's own program (annotate the example and compile it against the built dist/):

    TS2561: Object literal may only specify known properties, but 'value' does not
            exist in type 'DashboardWidgetSchema'. Did you mean to write 'values'?
    TS2322: Type '"card"' is not assignable to type 'DashboardWidgetTypeName | undefined'.
    

    The first one is the wider half: the Basic Dashboard, Dashboard with Charts and Responsive Dashboard examples all write { type: 'metric-card', title, value, icon, trend, trendValue, description } as a widget, and value / trend / trendValue / description are MetricCard's component props, not DashboardWidgetSchema keys. The README's own "TypeScript Support" section says as much in prose ("MetricCard's own props are the component's, not the widget's"), while the Examples section above it writes them as widget keys.

    So the fix direction on this card covers both, and either the docs or the type is wrong for both:

    • if a bare component node IS legal in widgets[], DashboardWidgetSchema is too narrow (it models the component format only as { id, component: { ... }, layout });
    • if it is not, four examples on the package's front page teach a shape the platform rejects.

    Deciding which needs the renderer's behaviour measured, which this batch did not do. What batch 10 did NOT do, deliberately: those four blocks were left exactly as they are — untyped const schema = { ... } literals that parse and compile. They were not annotated, because annotating them is what produces the diagnostics above, and choosing a side of that question is this card's job, not the ledger batch's. They are now COVERED by check:doc-snippets (which checks their syntax and undefined names) but they are not type-checked against the dashboard types, and that limit is stated in the PR body rather than left to be discovered.


    Generated by Claude Code

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

    @os-zhuang
    Contributor

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

    Anchor read, not guessed. packages/plugin-dashboard/README.md ⇒ domain:devx(docs 面)。

    复核 objectui origin/main a472b07(2026-09-05T00:55:13Z):type: 'card' 在该 README 的 :226 与 :235 两处仍在 —— ⇒ 卡面所述的示例还在树上,⚠️ 而且是两个 widget,不是一个。⛔ 修的时候两处都要改,别只改「fence 8 里那个」。

    定级 p3

    文档教一个今天就被拒的形状 —— 'card' 不在 #4600 收口后的闭集 widget 类型枚举里,而且卡面明说这一点是在 #6002 预检里实测的,与 strict 化无关、先于其存在。

    ⇒ 不是 p2:失败在保存/校验时响亮,作者不会带着坏 dashboard 上线;而且 README 的读者是插件开发者,不是终端作者。不是可关掉的:一份教被拒形状的 README,是纯粹的浪费 —— 读者按它写,然后被拒,再回来发现文档是旧的。

    ⭐ 归属:与本轮同批路由的 #7006(react-pages.md 只陈述另一层的拼写规则)、#7095(README 教一个不存在的导出)同族 —— objectui 的文档面上,「照抄即失败」的实例本轮已见三例。⚠️ 这三例的共同点是都由别的工作顺带发现,没有一例是被某道 gate 抓到的。⇒ 若这个数字继续涨,值得问的是「文档里的示例有没有被编译/校验过」,而不是再修第四个示例。

    边界测试 —— Bug/整理,无人工地板

    改一份 README 里的示例。⛔ 不动任何代码、枚举或 accept surface。

    修复方向

    卡面已给:改写到合法 widget 形状(组件节点或图表族之一)。⚠️ 本席补一句:改完请用与 #6002 预检同一条路径验一次,⛔ 不要靠肉眼判断新形状合法 —— 闭集枚举的成员是可枚举的,不该靠记忆。

    ⭐ 卡面自带的一条去重防护,值得点名保留

    另:apps/console/src/preview-samples.ts 的 dashboard 样例已在 preview-samples-spec-valid.test.ts 的 KNOWN_STALE 台账内,不需要新卡(同一次普查触及,记录于此防重复发现)。

    ⇒ ⭐ 在卡里写下「我还看到了什么、以及为什么那个不需要卡」,是本席位一直希望变便宜的行为。 它省掉的正是下一个普查者的一次重复发现 —— 而本轮已经有两张卡(#6973、#6978)是因为没人记下「这个已经修好了」而被重新路由到本席手上的。

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


    Generated by Claude Code

  4. claude commented on Sep 6, 2026

    @claude
    Contributor

    Claim: PM loop round R44
    Session: session_013uAaxiwgYDybsTNV9xwa1M
    Branch: claude/issue-7035-dashboard-readme-rejected-widget-shapes
    Worktree: objectui-issue-7035
    Domain: domain:devx
    File surface: packages/plugin-dashboard/README.md (the type: 'card' widgets at :226 / :235 and, if the measurement says the docs are the wrong side, the three metric-card-as-widget examples) — ⛔ no change to DashboardWidgetSchema or any packages/types file: a type widening is a fork to report, not to make (stop on breach; explain in the report)
    Container & model: M, measurement first (renderer behaviour decides docs-vs-type; the docs half is this card's, the type half is a fork), mode:subagent, model: opus — 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:48Z touches packages/plugin-dashboard/README.md (last landed 2026-09-05 669d71b); batch 10 (#5174) left its four untyped example blocks byte-untouched and recorded the measurement here (5523309430); #4600 is the closed-set enum's source


    Generated by Claude Code

  5. claude commented on Sep 6, 2026

    @claude
    Contributor

    Claim: dev seat, dispatched by PM round R44
    Session: session_013uAaxiwgYDybsTNV9xwa1M
    Branch: claude/issue-7035-dashboard-readme-rejected-widget-shapes
    Worktree: /home/user/objectui-issue-7035 (base a2e10cf96)
    File surface: packages/plugin-dashboard/README.md (the two type: 'card' widgets and the three metric-card-as-widget example blocks named in 5523309430)
    Measurement first: the renderer's handling of widgets[] entries decides which side is wrong. The docs half is this card's; a DashboardWidgetSchema / packages/types widening is a fork to report, not to make.


    Generated by Claude Code

  6. claude commented on Sep 6, 2026

    @claude
    Contributor

    os-dev-report

    {
      "issue": 7035,
      "status": "done",
      "branch": "claude/issue-7035-dashboard-readme-rejected-widget-shapes",
      "pr": "https://github.com/objectstack-ai/objectui/pull/7951",
      "premise_still_valid": "partly — the card's own defect (`type: 'card'`) is real and fixed; comment 5523309430's widening to four blocks is falsified for three of them",
      "renderer_reading": {
        "dispatch_on_widget_type": "packages/plugin-dashboard/src/widgetDispatch.ts:108-117 — `classifyWidgetType`; a type outside the chart/metric/table/pivot/custom/unsupported families returns `{ family: 'passthrough' }` at :117",
        "passthrough_handling": "packages/plugin-dashboard/src/DashboardRenderer.tsx:815-818 — the passthrough branch returns `{ ...widget, ...options }`, which `SchemaRenderer` resolves through `ComponentRegistry`; so a widget slot really does hold an ordinary component node",
        "legacy_component_slot": "packages/plugin-dashboard/src/DashboardRenderer.tsx:573 — `if (widget.component) return widget.component;`",
        "contract_faces": "zod: packages/types/src/zod/complex.zod.ts:887 `widgets: z.array(z.union([DashboardWidgetSlotComponentSchema, DashboardWidgetSchema]))`, first arm at :749; typescript: packages/types/src/complex.ts:1733 `widgets: DashboardWidgetSchema[]` — ONE arm",
        "closed_enum": "packages/types/src/complex.ts:1568 `DASHBOARD_COMPONENT_WIDGET_TYPES = ['metric-card']`, admitted by the 2026-08-14 maintainer ruling objectstack#8593 quoted verbatim at :1539"
      },
      "four_shapes_measured": [
        { "block": "README :48 quick start, `type: 'metric-card'`", "safeParse": "ACCEPT, all authored keys preserved", "render": "title/value/trend/trendValue reach the DOM", "verdict": "docs correct — NOT rewritten" },
        { "block": "README :178 Basic Dashboard, three `metric-card`", "safeParse": "ACCEPT", "render": "value 1,234 + icon/trend/description render", "verdict": "docs correct — NOT rewritten" },
        { "block": "README :217 Dashboard with Charts, two `type: 'card'`", "safeParse": "REJECT — invalid_union at widgets[1] and widgets[2]", "render": "card chrome renders; nested `body` names `line-chart`, which nothing registers, so the registry paints OBJUI-001", "verdict": "DOCS DEFECT — rewritten in this PR" },
        { "block": "README :275 Data Sources, `type: 'metric-card'`", "safeParse": "ACCEPT", "render": "renders", "verdict": "docs correct — NOT rewritten" }
      ],
      "population_correction": "comment 5523309430 named 'Basic / with Charts / Responsive' as the three metric-card-as-widget blocks. Measured: the Responsive Dashboard block (README :257) writes `widgets: [/* widgets */]` and holds NO widget at all. The three metric-card-as-widget blocks are :48, :178 and :275. Triage 5548234695's `:226`/`:235` two-widget instruction is exact and both were rewritten.",
      "before_diagnostics_reproduced": "annotated against built dist, --strict: 5x `TS2561: Object literal may only specify known properties, but 'value' does not exist in type 'DashboardWidgetSchema'. Did you mean to write 'values'?` and 2x `TS2322: Type '\"card\"' is not assignable to type 'DashboardWidgetTypeName | undefined'.` — both codes and both messages exactly as batch 10 recorded them",
      "after_verdict": "every dashboard block EXTRACTED FROM THE FILE (not retyped) parses: :48 ACCEPT, :129 ACCEPT, :178 ACCEPT, :217 ACCEPT, :257 ACCEPT, :275 ACCEPT — 6 dashboard block(s); 0 rejected",
      "probe": {
        "planted_probe_predicted": "REJECT / red",
        "planted_probe_observed": "mis-spelling one rewritten widget `type` in the README (`line` -> `lien`) turned the extractor red at :217 with invalid_union at widgets[1]; on-disk proof `type: 'lien'` count 1 and `type: 'line',` count 0, blob hash changed 99358fb -> 9921261; restore byte-identical (99358fb)",
        "ablation_predicted": "the new pin goes red on exactly the reverted block",
        "ablation_observed": "reverting :217 to the `type: 'card'` spelling on the COMMITTED tree: `x :217 Dashboard with Charts validates against the shipped DashboardComponentSchema` / `AssertionError: README.md:217 (\"Dashboard with Charts\") is refused: invalid_union at widgets1: Invalid input; invalid_union at widgets2: Invalid input` / `Tests 1 failed | 6 passed (7)`",
        "ablation_on_disk_proof": "`type: 'card'` count 0 -> 2, `type: 'line',` count 1 -> 0, blob 99358fb -> cef2aa6",
        "ablation_restore_proof": "git hash-object equals the HEAD blob (99358fb) and `git diff HEAD --name-only` is empty"
      },
      "summary": "Measurement first, and it split the card. The `type: 'card'` half is a real docs defect on both faces: `@object-ui/types/zod`'s DashboardComponentSchema.safeParse returns invalid_union at widgets[1] and widgets[2], and rendered unvalidated the first widget's `body` names `line-chart`, which nothing registers, so it paints OBJUI-001. Both widgets are now the chart-family widgets the renderer dispatches (`line` / `pie` with inline rows under `options.data` and `options.xField`/`options.yField`), plus one paragraph stating the rule. The `metric-card` half is NOT a docs defect: `DASHBOARD_COMPONENT_WIDGET_TYPES` admits that component node into the widget slot by the 2026-08-14 maintainer ruling (objectstack#8593), the zod widget slot is a two-arm union whose first arm is exactly it, and the shipped renderer renders every key those blocks author. Those three blocks are byte-untouched. Zone 1 clause 3 was honoured per shape rather than for the card as a whole: no `packages/types` file is touched, and the type-side half is filed as #7952. A permanent pin now parses every dashboard example on the page through the shipped schema — no gate asked that question before.",
      "tests": "All on 70ea5b79b, heavy runs through `bash /home/user/objectstack/scripts/pm/os-verify-lock.sh -c ...` (objectui has no os-verify-lock.sh of its own). BUILD: `pnpm --filter '@object-ui/plugin-dashboard...' build` VERDICT command-exit 0; the doc gate's own closure `turbo run build --concurrency=2 $(node scripts/check-doc-snippet-types.mjs --build-filter)` -> `Tasks: 34 successful, 34 total`; `pnpm --filter '@object-ui/plugin-ai...' build` (needed before check:readme-exports could run at all — see deviations). TESTS: `pnpm exec vitest run --maxWorkers=2 packages/plugin-dashboard/` -> `Test Files 94 passed (94) · Tests 846 passed (846)`; `... examples/schema-catalog/test/plugin-dashboard-component-schema.test.ts` (the standing widget-slot contract gate) -> `Test Files 1 passed (1) · Tests 21 passed (21)`; the new pin -> `Tests 7 passed (7)`. TYPECHECK: `pnpm --filter @object-ui/plugin-dashboard type-check` exit 0, and the new test is IN the program — `tsc -p tsconfig.test.json --noEmit --listFiles` names it (1 hit), so this is measured coverage, not assumed. LINT: `pnpm --filter @object-ui/plugin-dashboard lint` -> `426 problems (0 errors, 426 warnings)`, every warning pre-existing `no-explicit-any`; the targeted eslint run on the new file caught a real `preserve-caught-error` error, which is fixed by dropping the wrapper entirely (Error.cause is ES2022, above this repo's ES2020 lib — the route `plugin-gantt/src/readme-navigation-example.test.ts` already documents). Repo-wide `pnpm lint` is CI's. ABLATION: rebuild not required (no dist participates — the pin reads the README off disk and imports the built @object-ui/types/zod, which was built before every run); mutation and restore each proven on disk by grep counts plus git hash-object equality, both legs recorded under `probe`.",
      "gates": {
        "pnpm check:doc-snippets": "EXIT=0 — `Every covered documentation snippet compiles against the built types.` (467 of 467 block(s) judged, 0 failed)",
        "pnpm check:doc-fences": "EXIT=0 — `check:doc-fences — every TypeScript block in 227 document(s) is fenced ts/tsx/typescript...`",
        "pnpm check:doc-types": "EXIT=0 — `Every documented component type is registered.` NOTE: green because package READMEs are outside its walk (objectui#7896), not because it read this file",
        "check-doc-links (docs-links.yml)": "not run locally — the workflow's own step; nothing in this diff adds or moves a link",
        "pnpm check:readme-exports": "EXIT=0 — `check-readme-exports: OK (43 tracked README(s)...)`. First run was EXIT=1 PREREQUISITE NOT MET (`@object-ui/plugin-ai` type entry not on disk — `run pnpm build first`), re-run green after building that closure; the failure was never about this diff",
        "pnpm check:control-bytes": "EXIT=0 — `check-control-bytes: OK (scanned 6410 tracked text file(s); skipped 85 binary).` Plus the manual sweep `grep -naP '[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]'` over all three changed files: no match",
        "node scripts/check-changeset-presence.mjs": "EXIT=0 — `1 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s) ... Every one of them has an EMPTY frontmatter — declared as releasing nothing`. It first refused (EXIT=1) because the new test lives under `packages/plugin-dashboard/src/`, so the empty-frontmatter declaration is the gate's own named exemption, not a workaround",
        "node scripts/check-changeset-no-major.mjs": "EXIT=0 — `No changeset declares a `major` bump.`",
        "node scripts/check-governed-queue-guard.mjs --test (3 paths)": "EXIT=0 — `NOT GOVERNED — 3 path(s) checked against 5 governed surface(s); none matched.`",
        "git grep -l 'plugin-dashboard/README' scripts packages examples apps": "3 hits, none a guard: packages/core/CHANGELOG.md, packages/plugin-dashboard/CHANGELOG.md, scripts/check-doc-snippet-types.mjs (a prose reference in a comment, not a ledger entry — this README is NOT in UNGATED_DOCS)"
      },
      "final_sha": "70ea5b79b",
      "files_changed": [
        "packages/plugin-dashboard/README.md — the two `type: 'card'` widgets at :226/:235 rewritten to `line` / `pie`, plus one paragraph after the block",
        "packages/plugin-dashboard/src/__tests__/readme-dashboard-examples-spec-valid.test.ts — NEW, the permanent pin (kept deliberately: see deviations)",
        ".changeset/dashboard-readme-card-widget-7035.md — NEW, empty frontmatter, declares that this releases nothing"
      ],
      "mcp_calls": "0 — every GitHub read and write on this run went over repo-scoped REST; dedup was served by the PM's own round-R44 open-issue snapshot in the shared scratchpad plus local grep, so no search endpoint was needed",
      "deviations": [
        "Zone 1 clauses 2 and 3 were applied PER SHAPE, not to the card as a whole, because the measurement answered differently for the two populations. Clause 2 (docs-only rewrite) executed for the `type: 'card'` widgets; clause 3 (do not widen, stop, report) executed for the `metric-card` blocks — which is why they are byte-untouched and why no `packages/types` file is in the diff. A whole-card `needs_decision` with `pr: null` would have left the card's own named defect on the tree, and rewriting the three legal blocks would have been doc surgery around a type gap.",
        "A test file IS kept, explicitly, as clause 5 allows: `packages/plugin-dashboard/src/__tests__/readme-dashboard-examples-spec-valid.test.ts`. It earns it — the defect was invisible to all three doc gates for a stated reason each, and the ablation shows the pin catches exactly this regression. It follows `plugin-gantt/src/readme-navigation-example.test.ts`, the same pattern one package over, so it is not a new instrument class.",
        "The rewritten block is left UNTYPED, as batch 10 left it. Annotating it is blocked by the divergence in #7952, not by the rewrite: the block's first widget is the legal `metric-card`, and annotating the literal as `DashboardComponentSchema` reintroduces TS2561 on a shape the platform accepts. The pin covers it on the axis that actually owns the question (safeParse) instead.",
        "Zone 2's build-then-annotate route was followed, and its diagnostics reproduced verbatim. Zone 3's 'keep the annotations if the gate accepts them' could not be taken for the reason above.",
        "Two out-of-scope findings, both dedup-checked against the PM's round-R44 snapshot (400 open issues) before acting: (a) the TS/zod widget-slot arm divergence — NOT a duplicate of objectui#7759, which sorted `widgets` into its SCHEMA-NODE bucket and thereby out of its disposition lane, filed as objectui#7952 unassigned and unlabelled; (b) the `check:doc-types` package-README gap — ALREADY filed as objectui#7896, so no new card: a live-instance note was added there instead (comment 5556854703), naming the extra turn that this block was fenced ```typescript and so WAS read by check:doc-snippets, which passed correctly.",
        "The scratch render harness needed `packages/plugin-dashboard/src/__tests__/` placement plus a temporary line in `vitest.config.mts`'s heavyDomTests to get the registry setup. Both were removed and `vitest.config.mts` restored with `git checkout HEAD --`; `git status --porcelain` and `git diff HEAD` are clean of them. An early reading that the rewritten `line` widget painted OBJUI-001 was a HARNESS artifact — the dom-heavy setup does not import `@object-ui/plugin-charts`, which registers `chart` — and was corrected by importing it, not by changing the rewrite."
      ],
      "open_questions": [],
      "out_of_scope_findings": [
        "filed as #7952: `DashboardComponentSchema.widgets` is a two-arm union in zod and a one-arm array in TypeScript, so the ruled-legal `metric-card` component node parses green and tsc refuses it — and the parity ledger files that key as SCHEMA-NODE, which sorts a concrete divergence out of #7759's lane",
        "already filed as #7896 (no new card): `check:doc-types` does not walk `packages/NAME/README.md`. This README's unregistered `line-chart` is a live instance; recorded as comment 5556854703 there"
      ]
    }

    Generated by Claude Code

  7. claude commented on Sep 6, 2026

    @claude
    Contributor

    ACCEPT — PR #7951 (head 70ea5b79b): the card split under measurement — the type: 'card' half is a real docs defect and is fixed; the metric-card half is legal by ruling and left byte-untouched.

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

    item reading (mine)
    PR shape draft ✅ · base main ✅ · first line Fixes #7035 ✅ · no other closing keyword adjacent to a card number ✅ · one platform footer ✅
    Path surface (get_files) exactly 3: packages/plugin-dashboard/README.md (+17/−9), packages/plugin-dashboard/src/__tests__/readme-dashboard-examples-spec-valid.test.ts (+143, NEW), .changeset/dashboard-readme-card-widget-7035.md (+14, empty frontmatter — the changeset gate's own named exemption for a test under src/). Zero governed paths; ⛔ no packages/types file touched — zone 1 clause 3 honoured per shape
    The page on the branch type: 'card' 0 (was 2) · metric-card 10 kept · the two rewritten widgets are line / pie chart-family widgets the renderer actually dispatches, plus one paragraph stating the rule
    Premise correction, adopted comment 5523309430's widening to four blocks is falsified for three: the Responsive block holds no widget at all; the three metric-card-as-widget blocks (:48, :178, :275) are admitted by DASHBOARD_COMPONENT_WIDGET_TYPES under the 2026-08-14 maintainer ruling (objectstack#8593) and parse green through the shipped zod schema — not a docs defect. Triage 5548234695's two-widget instruction (:226/:235) was exact
    Probe / ablation planted mis-spelling turned the extractor red at :217 with invalid_union at widgets[1] (on-disk count 1/0, blob changed, restored byte-identical); reverting :217 to type: 'card' on the committed tree fails exactly the new pin's :217 case, 6 others pass; restore proved by git hash-object = HEAD blob and empty git diff HEAD
    Gates check:doc-snippets 467/467 · check:doc-fences 227 docs · check:readme-exports OK (43) · check:control-bytes OK (6410) · check-changeset-presence 0 · check-changeset-no-major 0 · governed guard NOT GOVERNED · plugin-dashboard 94 files / 846 tests · widget-slot contract gate 21/21 · new pin 7/7 · package type-check 0 with the new test IN the program (--listFiles 1 hit) — quoted at 70ea5b79b
    CI on head at 2026-09-06T04:25Z 25 success · 4 shards in progress · 3 skipped · 0 failing

    Two out-of-scope findings, handled by the dev correctly: #7952 filed unassigned (zod two-arm vs TS one-arm widget slot; dedup against #7759 read and accepted — that ledger sorts widgets into its SCHEMA-NODE bucket), and a live-instance note on the already-open #7896 (check:doc-types does not walk package READMEs) instead of a new card.

    Landing plan

    Path surface clean ⇒ flipped ready at 2026-09-06T04:27Z; 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

  8. claude commented on Sep 6, 2026

    @claude
    Contributor

    LANDED — PR #7951 merged 2026-09-06T04:49:51Z (queued 04:34:38Z). Verified on origin/main d4864f3a4 by CONTENT, ⛔ not by the merge event.

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

    reading expected got
    type: 'card' in packages/plugin-dashboard/README.md 0 0
    type: 'line' / type: 'pie' in the same file ≥ 2 2
    control — metric-card still present (the three legal blocks byte-untouched) ≥ 1 14 ✅ probe fires
    the pin readme-dashboard-examples-spec-valid.test.ts under packages/plugin-dashboard/src/__tests__/ 1 1
    .changeset/dashboard-readme-card-widget-7035.md (empty frontmatter, declares nothing) 1 1

    Card closed by Fixes. Stripping pm:dispatched and clearing the assignee in this stroke. The type-side half (zod two-arm vs TS one-arm widget slot) lives on as #7952, unassigned, for triage.


    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