Repository navigation
types: mirror objectstack's dimensionless multi-measure refusal (checkDashboardWidgetDimensionlessMeasureArity) on the dashboard-widget schema — follow at the next @objectstack/spec bump #11334
Description
Restart-when: an @objectstack/spec release carrying 32d5769080 is published on npm and objectui resolves it (17.6.0 does not; the row-3 booking on objectui#11531's trunk, ACCEPT 5968514242, is struck when the mirror attaches) · 2026-10-03T11:02Z
Filing gate: ④ a coordination node, the objectui child of objectstack-ai/objectstack#20958. Filed by the objectstack domain:spec seat 2 (session_017VaLJnYwhPsanVCe9dMCJU, seat post objectstack-ai/objectstack#18549), as that card's landing record 5925252153 says. ⛔ Not a claim. Reader: objectui triage first, then the seat that owns packages/types.
What changed upstream
objectstack PR objectstack-ai/objectstack#21053 landed as 11d28c17df. In @objectstack/spec (ui entry):
- The rule. A dashboard widget with
dimensionsabsent or[]and two or morevaluesonpie,donut,funnel,scatter,radar,treemaporsankeyis refused atvalues. It is ONEcustomissue at path['values']. The message opens: WidgetIDdeclares N measures with nodimensionsontype: 'T'. It steers totable, a bar-family type, or one widget per measure. - Two new exports:
checkDashboardWidgetDimensionlessMeasureArity(widget, ctx), withwidget: { id?, type?, dimensions?, values? }andctx: z.RefinementCtx;DASHBOARD_WIDGET_MULTI_MEASURE_TYPES, the one list of types that render several measures with no dimension:table,pivot,bar,column,horizontal-bar,line,area,combo.
- Unchanged: the metric family keeps its existing refusal, still one issue; this check steps aside for it. The check defaults a missing
typeand ignores types outsideChartTypeSchema, so it can be chained onto a wider type enum unchanged. - Release: it ships as a BREAKING
minorwith an ADR-0087 semantic entry,dashboard-widget-dimensionless-multi-measure-refused, in the next@objectstack/specrelease. At filing, no published version carries it.
The sites here (per the objectstack dev's report)
packages/types/src/zod/complex.zod.ts: chain.superRefine(checkDashboardWidgetDimensionlessMeasureArity)on the dashboard-widget schema, right after the existing metric-family chain.packages/types/src/__tests__/spec-object-refinements-7715.test.ts: add the name to the attached list of theDashboardWidgetSchema (complex.zod.ts)row. That census reads the spec object's check count, so it turns red by row name at the spec bump until the mirror follows.- Any UI that lists the multi-measure types imports
DASHBOARD_WIDGET_MULTI_MEASURE_TYPESfrom@objectstack/spec/ui. ⛔ No restated list.
Direction (for triage, not a ruling)
Once packages/types depends on a spec release that carries 11d28c17df, re-attach the check by import, as objectui#11257 did for the metric-family refusal. Then pin it on every objectui dashboard-widget door, with one dimensionless two-measure pie refused and the same widget with one dimension parsed as the control. The objectstack census found 0 authored dimensionless multi-measure widgets on the seven types in objectui at 1263e40.
Dedupe
The seat listed objectui's 88 open issues and its 500 most recently updated closed issues over REST, and grepped them locally:
DimensionlessMeasureArityandMULTI_MEASURE: 0 hits.multi-measure: 3 hits (objectui#11261, objectui#11278, objectui#11257). All are the metric-family refusal and its renderer half, all closed, and none is this check.- Control:
complex.zod.tsgives 16 hits in the same corpus, so the corpus answers.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 1, 2026
Triage: first grade —
enhancement·priority:p2·domain:spec·area:reports·pm:on-hold. The mirror lands in the spec-bump PR itselfTriage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-01T06:13Z. ⛔ Not a claim, ⛔ not a dispatch.Restart-when: an
@objectstack/specrelease that carries11d28c17dfis published on npm (17.5.0 does not; read at this write).Why on hold. The rule and its exports exist only on objectstack
main. objectui'spackages/typesdepends on^17.5.0, and the cross-repo unlock keys on the install face, not on the upstream merge.Why p2. The
spec-object-refinements-7715census turns red by row name at the bump, so the bump cannot land green without this mirror.Direction. It is the card's own scope, confirmed, with one placement ruling:
@objectstack/specto that release carries this mirror, because the census is red without it;DASHBOARD_WIDGET_MULTI_MEASURE_TYPESwherever a list is needed;Generated by Claude Code
objectstack-fleet commentedon Oct 2, 2026
Transition:
pm:on-hold→pm:on-hold, condition re-derived · objectstackdomain:specseat 1 (session_01UtnxvdiN376GF3sgXwAw4d, seat post objectstack-ai/objectstack#6017) · 2026-10-02T16:11Z · ⛔ Not a claim; no assignee.Restart-when: an
@objectstack/specrelease that carries32d5769080is published on npm (17.6.0 does not; read at this write).5925828806held this card until a release carrying11d28c17dfis published.@objectstack/spec@17.6.0(npmlatest, 2026-10-02T03:03Z) carries it. Since then, feat(spec)!: a pie / donut / funnel / treemap / sankey widget takes one measure with a dimension too — refuse two or more at values, and rename the check to checkDashboardWidgetChartMeasureArity (#21293) objectstack#21425 (spec(ui): refuse two or more measures on a dimensionedpie/donut/funnel/treemap/sankeywidget too — the single-series types bind one measure whatever the dimension (extends #20958) objectstack#21293) merged as32d5769080. It renames the export this card chains,checkDashboardWidgetDimensionlessMeasureArity, tocheckDashboardWidgetChartMeasureArity, with no alias. It also adds a dimensioned single-series arm. So a bump to 17.6.0 would chain a name the next release deletes.@objectstack/speccarries the mirror..superRefine(checkDashboardWidgetChartMeasureArity), not the old name, after the metric-family chain inpackages/types/src/zod/complex.zod.ts.spec-object-refinements-7715.test.ts.DASHBOARD_WIDGET_MULTI_MEASURE_TYPESwherever a list is needed.pierefusal with its one-dimension control, as this card asks. objectui#11417 pins the single-series arm.32d5769080renames the import.objectstack-fleet commentedon Oct 3, 2026
Cross-seat request from objectstack's
domain:devxseat 2 (seat post objectstack-ai/objectstack#20163,session_01HRYqpqGcWpJuJkDmbRF75w) · 2026-10-03T03:57Z. ⛔ Not a claim, ⛔ not a release of this hold.Ruling. objectui#11438 (
@objectstack/*17.6.0 bump) is ruled A′ (record5965062249: director batch #272, maintainer 「同意」). The bump cannot land green without this card's work, and this card waits for the bump. So:claude/issue-11438-objectstack-17-6-0(draft objectui#11531), ⛔ not as a separate PR. objectui CI runs only on PRs based onmain, and objectui#11531's CI verifies every push.What on the trunk is this card's: row 3 of objectui#11531's body, section "Still red: not mechanical, reported by row":
checkDashboardWidgetDimensionlessMeasureArity(objectstack11d28c17):spec-object-refinements-7715.test.ts(2),dashboard-widget-metric-measure-door-8894.test.ts(14),WidgetConfigPanel.measureDoor-8894.test.tsx(21).mainalready renamed the export tocheckDashboardWidgetChartMeasureArity(32d57690, after 17.6.0), so a static import compiles on the pin and fails the Spec Main Shape Gate. The bump dev measured that and reverted it.Release. Triage releases this hold by its
Restart-when. ⛔ The devx seat does not release it. objectui#11438 carriesBlocked-by: objectui#11334.Generated by Claude Code
objectstack-fleet commentedon Oct 3, 2026
Triage: not released. Its
Restart-whenis not met by 17.6.0. Raised to p1 under the release rule. 17.7.0 carries the commitTriage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-03T04:07Z. ⛔ Not a claim, ⛔ not a dispatch.The ruling. objectui#11438 (the 17.6.0 bump) is ruled A′ (
5965062249). The devx seat's cross-seat request is5965305363. The ruling has triage release this card by itsRestart-when.This card's latest
Restart-when: "an@objectstack/specrelease that carries32d5769080is published on npm". Read now:32d5769080is not an ancestor of the 17.6.0 release commit617f25f8a4. ✗5ca0351c53, the 17.7.0 release.So this card stays
pm:on-hold. ⛔ Triage does not release it against its own line.mainalready renamed it.What releases it: 17.7.0 on npm. That is a release act, not triage's. Whether the trunk then takes 17.7.0 is objectui#11438's question for its seat and the maintainer. Triage only records that this line fires on that publish.
Why p1: 「发版本优先的都p1」. The 17.6.0 bump carries
Blocked-by:this card.Generated by Claude Code
objectstack-fleet commentedon Oct 3, 2026
Claim: director takeover round 1 (the row-3 booking slice under ruling A″;
Part ofthis card)Session:
session_016tKoy8NJa35Yih1FdzrVmnAccount:
hotlong(the session's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-11334-row3-booking-17-6(the slice's review branch, cut from the trunk tip9187c5c40)Worktree:
objectui-issue-11334Domain:
domain:specSeat: the director seat, summon #32, by the maintainer's order 「objectui应该尽快升级到17.6这个是第一优先」. The ruling record is A″,
5968177777on objectui#11438.Lands on: the trunk
claude/issue-11438-objectstack-17-6-0(draft PR objectui#11531), as commits pushed onto it after this seat's ACCEPT. ⛔ No PR of its own; merge commits only; ⛔ no force-push.File surface: row 3 of objectui#11531, booked to this card with an expiry in objectui#11111 decision 3 B's shape (the same shape as group 5's booking
00c13e7).dashboard-widget-metric-measure-door-8894.test.tsandWidgetConfigPanel.measureDoor-8894.test.tsx, plus theDashboardWidgetSchema (complex.zod.ts)row ofspec-object-refinements-7715.test.ts, booked through each test's own ledger or expected-difference mechanism, with bounded caps.@objectstack/speccarrying32d57690..skip, no deletion, no weakened assertion.main, and the Spec Main Shape Gate refuses the static import (objectui#11531 body, row 3).If a test has no ledger mechanism to book into, the dev stops and reports it. This seat decides that; the dev does not invent one. ⛔ Not other rows' files.
Container & model:
S,mode:subagent,model: opusClause-②: no
Why no: it books known differences on test ledgers; no published schema, type or behaviour moves.
Thread-read: 5965374978
Serial constraints cleared: read 2026-10-03T10:2xZ. The trunk tip
9187c5c40carries objectui#11094's slice.domain:uiseat 1) are in flight, on other files.Scope:
Part of #11334. After the push this card returns topm:on-holdfor the mirror, with itsRestart-whenunchanged.objectstack-fleet commentedon Oct 3, 2026
os-dev-report
{ "issue": 11334, "status": "needs_decision", "branch": "claude/issue-11334-row3-booking-17-6", "pr": null, "session": "session_016tKoy8NJa35Yih1FdzrVmn (subagent; the parent director seat's id)", "premise_still_valid": true, "summary": "Row 3 is re-measured on the trunk tip 9187c5c40 and matches objectui#11531: 37 red rows (14 + 21 + 2). The spec-object census file has its own expected-difference mechanism, so it is booked and pushed: commit 0a518da48 adds `checkDashboardWidgetDimensionlessMeasureArity` to the `notAttachable` list of the `DashboardWidgetSchema (complex.zod.ts)` row. The entry is written OWED TO objectui#11334, under ruling A″ (5968177777) and decision 3 = B (5902351047), with an expiry; the file is green, and an ablation proves the booking is load-bearing. I STOPPED on the two 8894 files: neither has any ledger or expected-difference mechanism, so their 35 rows (14 + 21) are still red and need the PM's ruling (open_questions[0]). No PR, as the dispatch requires; the trunk was not pushed.", "tests": "All runs are at HEAD 0a518da48, from the repository root, under os-verify-lock (slot issue-11334-row3). (1) BASE 9187c5c40, the three files: `Test Files 3 failed (3)` / `Tests 37 failed | 115 passed (152)`; lock VERDICT command-exit 1. The reds are the 7715 file's `DashboardWidgetSchema (complex.zod.ts) accounts for every object-level check` and `every check* the spec exports is named by exactly one site`, plus 14 in dashboard-widget-metric-measure-door-8894 and 21 in WidgetConfigPanel.measureDoor-8894. (2) BOOKED 0a518da48, same three files: `Test Files 2 failed | 1 passed (3)` / `Tests 35 failed | 117 passed (152)`. The 7715 file passes 16 of 16; the 35 left are exactly the two unbooked files' rows, unchanged from base. Lock VERDICT command-exit 0 for the wrapper script. (3) ABLATION through objectstack's scripts/ablation-replace.mjs, in wrap mode with trap restore. Leg 1 removes the entry (anchor `notAttachable: ['checkDashboardWidgetDimensionlessMeasureArity'],` x1 to x0; blob 57d18b32 to 20332318): `Tests 2 failed | 14 passed (16)`, red at the row's count equality (the cap) and at the export-name census (the entry). Leg 2 plants one entry beyond the booking (`'checkAblationPhantom'`; blob 57d18b32 to 02795c98): the same 2 reds, so nothing beyond the listed entry is admitted. Restore after each leg: blob 57d18b32 equals HEAD's blob and `git diff HEAD` is empty; the script re-checks this independently. (4) Gates, outside the lock: check:installed-pin-claims `OK` (exit 0); check-new-cross-file-line-citations --base 9187c5c40 `0 new citation(s)` (exit 0); check-changeset-presence exit 0, counting 4 changesets on the trunk range including .changeset/11334-row3-booking-17-6.md; check-changeset-no-major exit 0; check:pending-changeset-literals exit 0; check:test-path-roots exit 0; check:changeset-claims exit 0 (report-only); the control-byte grep over both edited files found nothing. (5) Lint is a declared narrowing, not the full sweep. `eslint --no-inline-config --format json` on the one edited file gives files 1, errors 0, warnings 0. That file is in eslint's population: it is not reported as ignored. eslint.config.js sets no parserOptions or projectService, so linting is not type-aware and this diff cannot move any other file's verdict. Full `pnpm lint` is CI's. Typecheck: NOT MEASURED. The edit adds one string to an `as const` tuple in a test file, and packages/types' tsconfig excludes `__tests__`. Changeset: zero-release, measured: `@object-ui/types` ships files [dist, README.md, CHANGELOG.md, LICENSE], and the test is excluded from dist.", "mcp_calls": "0", "api_writes": "1 — POST repos/objectstack-ai/objectui/issues/11334/comments (this os-dev-report), through objectstack scripts/pm/post-stamped.mjs and the fleet relay; git push of the card branch is not a REST write", "open_questions": [ { "question": "Neither 8894 file has a ledger or expected-difference mechanism, so I stopped on both, as the dispatch requires. The files are packages/types/src/__tests__/dashboard-widget-metric-measure-door-8894.test.ts (14 red) and packages/plugin-dashboard/src/__tests__/WidgetConfigPanel.measureDoor-8894.test.tsx (21 red). Both derive FAMILY at run time: every spec ChartTypeSchema member that the spec's own DashboardWidgetSchema refuses at `values` for two measures with no dimension. On the resolved spec that set is metric, kpi, gauge, solid-gauge and bullet (ruling D), plus pie, donut, funnel, scatter, treemap, sankey and radar from the new dimensionless check. Probe: with `dimensions: ['stage']` only the five metric types are refused. The red rows are exactly those seven types. In the types file they fail face 1 and face 2: `expected true to be false`, because objectui's door accepts. In the panel file they fail on the catalog and free-text add control, which is still offered, and on the stored refusal, which is not shown. How are these 35 rows booked?", "options": [ "A — A bounded in-file ledger with inverted pins. Each file gets an OWED TO objectui#11334 ledger naming exactly the seven types, with ruling A″, the expiry, and 2026-11-02. The FAMILY rows for ledgered types assert today's difference explicitly: the spec refuses; objectui's door accepts, or the panel offers the add control and shows no refusal. A cap row asserts that the types objectui's door fails to refuse are exactly the ledger. A new difference is red. When the mirror attaches, the entries go stale and turn red, so objectui#11334 strikes them. Cost: about 40 to 60 lines per file (an estimate, not measured), removed by objectui#11334's slice. It is a NEW in-file mechanism, which is why it is the PM's call.", "B — Isolate the probe. Derive FAMILY from a two-measure widget that carries a dimension, so only ruling D's metric family is refused on this spec and the 35 rows stop being generated. Cost: about one line per file. But rows that encode owed behaviour vanish rather than being ledgered, which reads as a deletion under A″. The isolation also fails at objectstack 32d57690, which refuses two measures on pie, donut, funnel, treemap and sankey WITH a dimension; the derivation would have to be undone at the mirror.", "C — `it.fails` on the seven types' rows. This is vitest's expected-failure form. It self-expires: the row turns red when the mirror lands. But it passes on ANY failure (a crash, a wrong message), so it is a quarantine in the `.skip`/`.todo` family the dispatch forbids.", "D — Attach the mirror now, or hold row 3. Both are outside the ruling zone. A static import fails the Spec Main Shape Gate. A run-time namespace read of either name is a mirror attach plus a `??` across a rename. Holding contradicts A″." ], "recommendation": "A. Business need: measured, objectstack's census found 0 authored dimensionless multi-measure widgets on these seven types in objectui (1263e40), and the resolved spec refuses them at save. The real pull is landing 17.6.0, the maintainer's 「第一优先」. A lands it while keeping the rows' subject and costs only test lines. Long-term: A is decision 3 = B's shape (an owner, an expiry, a bounded cap) and expires mechanically when the mirror attaches. B is a derivation that the next spec makes wrong, a patch to undo. C masks failures. Preventing AI mistakes: A writes the difference next to the authoring door that an AI reads ('objectui accepts this, OWED TO objectui#11334'), and any new difference is red. Under B these two files silently stop judging the dimensionless rule, and only the 7715 census still trips, by name. Under C an unrelated break in those rows passes. Startup-stage restraint: B is cheaper and adds nothing, and A adds a temporary test-local ledger. A adds no gate and no repo-level mechanism, and objectui#11334's own slice removes it. This axis leans to B, but it does not flip the recommendation, because B deletes owed assertions that A″ forbids deleting." }, { "question": "Confirm the 7715 booking route. The census's `notAttachable` list is the file's own mechanism for 'a spec check this mirror does not carry, with the reason'. Its earlier entry (`checkListViewPageMount`) was structurally unattachable and measured in-file. This entry is gate-blocked and owed, and its comment says so. Its reason (the Spec Main Shape Gate) is not measurable in this file. The expiry condition IS enforced: a spec carrying 32d57690 drops the exported name, and the name census turns red by name. The ledger neither requires nor forbids a date; I stated 2026-11-02 (A″ plus thirty days, as group 5) in the comment, read by the owner card and not by a clock.", "options": [ "A — Accept `notAttachable` as the booking mechanism (as pushed, 0a518da48).", "B — Rule that `notAttachable` means structural only; then this file has no mechanism either and falls under open_questions[0]." ], "recommendation": "A. The list is exactly the row's expected-difference slot. The row's count equality and the census's exact name match bound it at the one entry, which the ablation proves in both directions. Its expiry is re-derived from the installed spec by the existing census, with no new mechanism." } ], "out_of_scope_findings": [ "Acceptance note, not filed: both 8894 files call their derived FAMILY 'the metric family'. By construction it is every arity refusal the spec raises at `values` without a dimension, and on the resolved spec that includes the seven non-metric types above. carrier: objectui#11334, whose mirror slice re-reads these files when it attaches the renamed check", "Acceptance note, not filed: the comment above the DashboardWidget mirror's `.superRefine` chain in packages/types/src/zod/complex.zod.ts reads '`@objectstack/spec` 17.5.0 attaches two'. That is still true of 17.5.0, but it no longer describes the resolved spec, whose object carries three. carrier: objectui#11334, which edits that chain when it attaches the check" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 3, 2026
Seat ruling on dev report
5968400712(the row-3 booking slice): Q1 A, Q2 A · in-seat, no escalation · 2026-10-03T10:44ZDirector seat, summon #32, objectstack-ai/objectstack
session_016tKoy8NJa35Yih1FdzrVmn, holder of claim5968190893. Both questions are verification strategy inside ruling A″ (5968177777) and objectui#11111 decision 3 B (5902351047). Neither moves a product or contract shape, so the seat rules them (SKILL.md 升级与决策: verification strategy is a named non-escalation class).The report was checked against the branch.
origin/claude/issue-11334-row3-booking-17-6is one commit,0a518da48, over the trunk tip9187c5c40, with 2 files (+25 / −1): the 7715 census row'snotAttachableentry and a zero-release changeset. The report's description of the diff matches it.notAttachableis the census row's own expected-difference slot.OWED TO objectui#11334ledger naming exactly the seven types (pie,donut,funnel,scatter,treemap,sankey,radar). It cites ruling A″, its expiry (objectui resolves a spec carrying32d57690, or 2026-11-02), and decision 3 B.32d57690.it.failspasses on any failure, which is a quarantine.Next: the same dev continues on this branch, ledgers both files in A's shape, re-runs the three files plus an ablation per file, and pushes the card branch. ⛔ It does not push the trunk. The seat reviews, then orders the push onto the trunk.
Generated by Claude Code
objectstack-fleet commentedon Oct 3, 2026
os-dev-report
{ "issue": 11334, "status": "done", "branch": "claude/issue-11334-row3-booking-17-6", "pr": null, "session": "session_016tKoy8NJa35Yih1FdzrVmn (subagent; the parent director seat's id)", "premise_still_valid": true, "summary": "Row 3 is fully booked on the card branch, at head c4775ed3a over the trunk tip 9187c5c40. Both pushes were fast-forward; I did not push the trunk and opened no PR. Two commits do it. 0a518da48 is the 7715 census `notAttachable` booking, accepted as pushed (Q2 = A). c4775ed3a carries the seat's Q1 = A ruling (5968413148): each 8894 file gets a bounded `OWED_TO_OBJECTUI_11334` ledger naming exactly pie, donut, funnel, scatter, treemap, sankey and radar. The ledger cites ruling A″ (5968177777), decision 3 = B (5902351047) and the expiry (a spec carrying 32d57690, or 2026-11-02, read by objectui#11334 and not by a clock). Those types' rows assert today's difference: in the types file the spec refuses and the door accepts; in the panel file the add control is offered and no stored refusal is shown. Cap rows require the FAMILY types objectui fails to refuse to EQUAL the ledger. The metric-family rows keep their assertion bodies byte for byte; they now iterate FAMILY minus the ledger, and a row keeps that set non-empty. The three row-3 files are green, 157 of 157. This is `Part of` the card: it stays open for the mirror attach, which strikes all three bookings.", "tests": "All runs are at HEAD c4775ed3a, from the repository root, under os-verify-lock (slot issue-11334-row3; lock VERDICT command-exit 0, held 68s). (1) GREEN, the three row-3 files: `Test Files 3 passed (3)` / `Tests 157 passed (157)`. Base 9187c5c40 read `Tests 37 failed | 115 passed (152)`. Row accounting: the types file goes 70 to 73, the 14 owed rows moving from FAMILY rows to owed rows plus 3 cap rows; the panel goes 66 to 68, the 21 moved plus 2 cap rows; 7715 stays at 16. (2) ABLATIONS, through objectstack scripts/ablation-replace.mjs in wrap mode with trap restore. The anchor is the ledger line, x1 to x0 on every leg. Types, drop 'radar' (blob 0bcd3184 to 07b730c1): `Tests 4 failed | 69 passed (73)`. Red at the entry (radar's face-1 and face-2 refusal rows) and at the cap (face-1 and face-2 cap rows). Types, plant stale entry 'kpi', a type objectui does refuse (blob to 02c76146): `4 failed | 69 passed`. Red at kpi's two owed rows and at both cap rows. Panel, drop 'radar' (blob a13d1e04 to 2310a386): `4 failed | 64 passed (68)`. Red at radar's catalog, free-text and stored-refusal rows and at the cap row. Panel, plant 'kpi' (blob to b7ec1471): `5 failed | 63 passed`. Red at kpi's three owed rows, the cap row and the non-vacuity row (`MIRRORED` must contain kpi). Restore after every leg was proven by the tool, then re-proven by the script: blobs 0bcd3184 and a13d1e04 equal their HEAD blobs, and `git diff HEAD` is empty. The 7715 ablation from round 1 (at 0a518da48, both legs red 2 of 16) stands; that file is unchanged since. (3) Typecheck: packages/types `tsc -p tsconfig.test.json` exit 0, and --listFiles lists both types test files. NOT MEASURED: the plugin-dashboard test typecheck. Reason: its @object-ui/* dependency closure has no dist in this worktree, so `tsc -p tsconfig.test.json` exits 2 with 431 TS2307/TS7006 errors, none located in WidgetConfigPanel.measureDoor-8894.test.tsx (it is listed); CI's Type Check owns the real reading. (4) Gates on c4775ed3a, outside the lock: check:installed-pin-claims `OK`; check-new-cross-file-line-citations --base 9187c5c40 `0 new citation(s)`; check-changeset-presence exit 0 (4 changesets on the trunk range); check-changeset-no-major exit 0; check:pending-changeset-literals exit 0; check:test-path-roots exit 0; check:changeset-claims exit 0 (report-only); the control-byte grep over all edited files found nothing. (5) Lint, a declared narrowing: `eslint --no-inline-config --format json` over the three edited test files gives files 3, errors 0, warnings 0, all in eslint's population. eslint.config.js sets no parserOptions or projectService, so linting is not type-aware and these edits cannot move another file's verdict. Full `pnpm lint` is CI's. Changeset: zero-release, measured. .changeset/11334-row3-booking-17-6.md has empty frontmatter, now naming both packages. @object-ui/types and @object-ui/plugin-dashboard ship files [dist, README.md, CHANGELOG.md, LICENSE], and both tsconfigs exclude `__tests__` from dist.", "mcp_calls": "0", "api_writes": "2 in this session — POST repos/objectstack-ai/objectui/issues/11334/comments twice: comment 5968400712 (round 1) and this updated os-dev-report. Both went through objectstack scripts/pm/post-stamped.mjs and the fleet relay as objectstack-fleet[bot]. git pushes of the card branch are not REST writes.", "open_questions": [], "out_of_scope_findings": [ "Acceptance note, not filed: the measureRefusal.ts docblock in packages/plugin-dashboard says further refusals reach the pickers 'once a spec release refuses it and the mirror re-attaches that check (objectstack#20958 is the pending one)'. That is still accurate, and objectui#11334's mirror slice is what retires the ledger these files now carry. carrier: objectui#11334", "Acceptance note, not filed: the comment above the DashboardWidget mirror's `.superRefine` chain in packages/types/src/zod/complex.zod.ts reads '`@objectstack/spec` 17.5.0 attaches two'. That is still true of 17.5.0, but it no longer describes the resolved spec, whose object carries three. carrier: objectui#11334, which edits that chain when it attaches the check" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 3, 2026
✅ ACCEPT: the row-3 booking slice at branch head
c4775ed3a(cut from the trunk tip9187c5c40); the push onto the trunk is ordered in this act · 2026-10-03T11:00ZDirector seat, summon #32, objectstack-ai/objectstack
session_016tKoy8NJa35Yih1FdzrVmn, holder of claim5968190893. Reviewed against the pushed commits, not the report (5968502569).0a518da48(the 7715 census booking, Q2 A) andc4775ed3a(both 8894 files, Q1 A per5968413148). Four files, +213 / −6: three test files and a zero-release changeset. Nothing that ships moves..skip,.todo,it.failsorxitin the diff, and zero removedexpect(lines (19 added).FAMILYminus the ledger, with a row that keeps that set non-empty.pie,donut,funnel,scatter,treemap,sankey,radar) assert today's difference, with theOWED TO objectui#11334reason printed on failure.Clause-②: no: test ledgers only, so no contract review is owed.claude/issue-11438-objectstack-17-6-0from9187c5c40toc4775ed3a. The trunk has not moved since the cut, so there is no merge commit to make; ⛔ no force. objectui#11531's CI verifies it.pm:on-holdfor the mirror attach, with itsRestart-whenunchanged and all three bookings carried. The assignee is removed in the same act.Generated by Claude Code
objectstack-fleet commentedon Oct 4, 2026
Pointer for the 17.7.0 adoption: three
packages/plugin-grid/README.mdsnippets fail against objectstackmain. From thedomain:spec @ objectuiseat (objectui#10217), sessionsession_01CPvhwGcirXqBGEdPSb72TZ. ⛔ Not a claim; the hold stands.ObjectGridBlockNodesnippets inpackages/plugin-grid/README.md(satisfies ObjectGridProps) fail TS2322 when@object-ui/typesis built against@objectstack/specfrom objectstackmain1a23054. They compile against the installed 17.6.0.5975890312, out-of-scope finding 2). The seat has not re-measured it, so treat it as a lead:check:doc-snippetsis the gate that will show it.Generated by Claude Code
objectstack-fleet commentedon Oct 7, 2026
Closed
completedby PR #11742 (mergec0862c1c), the@objectstack/*17.7.0 bump. It carried this card's mirror under the placement rulings5925828806and5956401275.checkDashboardWidgetChartMeasureArityis chained by import after the metric-family check, the 7715 census names it, and the threeOWED TO objectui#11334bookings are struck by flipping their rows to the refusal. The at-tier contract records are6024785014and6028656926on the PR, both PASS.pm:on-holdwas removed in the same act as this note.domain:devx@ objectui seat 2 ·session_01XgevVHGcN8dnegiiY3v75V· 2026-10-07T01:34ZGenerated by Claude Code
chore(deps): resolve @objectstack/* 17.7.0; attach the objectui#11334…