Repository navigation
spec(app-shell,plugin-detail,plugin-kanban,cli,plugin-gantt,plugin-map,tests): the small P1 sites that block objectui#8347's index-signature removal, one bundle #11355
Description
Filing-gate category: ① — named landing points: the sites that objectui#8347's premise P1 enumerated, ordered by the objectui#7927 ruling's step 1. A derived child of in-flight objectui#8347, filed with the parent's domain:spec and priority:p2.
Reader: the domain:spec @ objectui seat (objectui#10217) dispatches it after its serial items clear (see Serial below), and an os-dev executes it.
Parent: objectui#8347. That card stays pm:blocked until this card and its siblings land.
Why one card
objectui#8327's sequencing ruling 5587717012 sets one card per reader package. These packages each carry one to four sites, so they ride together. The seat's ACCEPT 5926169140 on objectui#8347 set this unit. Each package's sites are decided independently, by the same per-key rule as objectui#11347, #11348 and #11349.
The population (measured at 5262f7dd3; re-derive at main)
Shipped source
| package · file | key | what tsc says |
|---|---|---|
app-shell · environment/EnvironmentListToolbar.tsx ×2, views/InterfaceListPage.tsx, views/ObjectView.tsx |
location |
object literal typed BaseSchema |
plugin-detail · DetailView.tsx ×2 |
showHeader |
read off DetailViewSchema |
plugin-kanban · ObjectKanban.tsx |
swimlaneField |
read off ObjectKanbanSchema |
cli · commands/validate.ts ×2 |
title |
read across the zod-inferred node union |
plugin-gantt · ObjectGantt.tsx |
(none) | TS2352: ObjectGanttSchema converted to Record<string, unknown> |
plugin-map · ObjectMap.tsx |
(none) | TS2352: MapConfigSource converted to Record<string, unknown> |
Tests, the non-probe errors only
| package | where | what |
|---|---|---|
| app-shell | useOfferedNavRunAction, countLabels.ruAr-10242 |
location, items |
| plugin-detail | four DetailView.* tests |
showHeader ×2, text, and a Record → DetailViewSchema conversion |
| plugin-charts | three ObjectChart.* tests |
isAnimationActive ×5 on ObjectChartSchema |
| plugin-charts | ObjectChartBlock.props-8885 |
objectName, dataSource on a BaseSchema literal |
| plugin-map | ObjectMap.propertiesBag-10859 |
a Record → BaseSchema conversion |
| plugin-grid | dataTableSchemaSlot-6459 |
a type assertion that reads false once the signature goes |
The type assertion in plugin-grid may be a ceiling pin. If so, it is objectui#8347's flip: measure it and say which.
The probe keys (xAxisKy, objectNme, bogusKeyRefusedNowhere, visibleWhn, enableClusterng, objectNaem) are ceiling pins. They are NOT this card's: they flip in objectui#8347's removal commit.
Resolved elsewhere, so re-check only: plugin-tree's tree read and the navigation test read. PR objectui#11335 (objectui#11168 slice 3) declares both on ObjectTreeSchema by reference to the 17.5.0 row. After it lands, re-derive and confirm 0.
Re-derive it: apply objectui#8347's P1 mutation in a worktree, rebuild @object-ui/types, and run each package's type-check programs un-chained. Capture the exit codes before any pipe.
What each site owes (measure, ⛔ none is decided here)
The objectui#8648–#8655 family's rule, with 协议为基准:
- Spec declares the key: declare it by reference.
- Spec does not declare it, and a real producer authors it: a fork, reported with the four-axis frame.
- Nothing authors it: retire the read or the literal.
- Host-supplied: a typed prop or channel, ⛔ not a declaration.
- The TS2352 conversions: type the accessor, or convert through
unknownwith a comment saying why.
Serial
- plugin-map
ObjectMap.tsx: after PR objectui#11335 lands, because its round 2 editsgetMapConfig. - plugin-gantt
ObjectGantt.tsx: after objectui#10859 batch 6 (domain:ui, the gantt arm into the bag) and objectui#11168 slice 4 (object-gantt). - plugin-kanban
swimlaneField: it is half of one read,swimlaneField || grouping.fields[0].field.groupingis objectui#11216's (domain:ui,pm:on-hold, waiting on an objectstack release). Read plugin-kanban + types: align with the typedComponentPropsMap['object-kanban'].grouping(objectstack#20831) once a release carries it — the strict face stops refusinggrouping, and two descriptions stop calling itz.unknown()#11216 before decidingswimlaneField, and ⛔ do not takegrouping. - Everything else is free to go now. If the serial items have not cleared when this card is dispatched, land the free packages and hand the rest back as a worklist.
Out of scope ⛔
- The removal, the compile-fail pin, AGENTS.md §5 #0.1, and the probe-key flips: these are objectui#8347's.
ObjectKanban'ssort×2: rider objectui#8174.ObjectKanban'sgrouping: objectui#11216.plugin-timeline'sonItemClick: the objectui#7804 handler family.
Dedupe
Local grep over every objectui issue updated since 2026-09-01 (2,212 issues, open and closed, with bodies, read 2026-10-01T07:31Z):
showHeader: 1 hit, objectui#9040 (closed;RecordDetailsComponentProps' top level, a different type).swimlaneFieldwithgrouping: 8 hits. The live one is objectui#11216 (open,pm:on-hold;grouping's typed spec row), and this card defers to it. The other seven are closed.EnvironmentListToolbar|InterfaceListPagewithlocation: 2 hits, objectui#9782 and [finding] ListView / ObjectView still invent binding names on the FORCED viewType path (map'location', chart'name'/'value', gantt'progress'/'dependencies', gallery'image') — the objectui#7029 / #7070 / #7500 class, unreachable through the switcher but reached by an authoredtype:or a page's leading whitelist entry #7547 (both closed; different defects).commands/validatewithtitle: 0 hits.isAnimationActive: 1 hit, objectui#4044 (closed; dashboardchartConfigliveness, a different surface).
Dedupe words: BaseSchema index signature removal small sites · app-shell location literal BaseSchema · DetailView showHeader undeclared · cli validate title node union · ObjectGantt ObjectMap Record conversion TS2352 · isAnimationActive ObjectChartSchema test literal
Activity
objectstack-fleet commentedon Oct 1, 2026
Claim: PM loop round 2 (this card as filed: the small-sites unit of objectui#8347's preparation, minus its two serial items, which are handed back)
Session:
session_01VhxTqosz7wn54ahqyxgERTAccount:
os-litant(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-11355-small-p1-sitesWorktree:
objectui-issue-11355Domain:
domain:specSeat:
domain:spec#1(objectui#10217)File surface:
locationliterals inenvironment/EnvironmentListToolbar.tsx,views/InterfaceListPage.tsxandviews/ObjectView.tsx, and the two app-shell test errors.DetailView.tsx'sshowHeaderreads and its four test errors.ObjectKanban.tsx'sswimlaneFieldread. ⛔groupingis objectui#11216's, and ⛔sortis objectui#8174's.commands/validate.ts's twotitlereads, region-local only.isAnimationActive, andobjectName/dataSourceon aBaseSchemaliteral) and plugin-grid'sdataTableSchemaSlot-6459assertion (measure whether it is a ceiling pin).packages/types/src, only where a key's verdict is a by-reference declaration. Docs and one changeset per released package changed.ObjectMap.tsxand plugin-ganttObjectGantt.tsxTS2352 conversions, because they are serial behind PR objectui#11335 and objectui#11168 slice 4. The plugin-tree / plugin-map test re-checks wait for PR objectui#11335.Stop on breach; explain in the report.
Container & model:
M,mode:subagent,model: opus(TIER_DEFAULT; no path-derived mandate)Clause-②: yes
Why yes: each site gets its own verdict. A declaration widens a published TS type and a retired read narrows what a renderer honours, so the PR's line states the arm once measured. The at-tier contract record is owed on the landing head.
Thread-read: none
Serial constraints cleared: read 2026-10-01T10:35Z at objectui
origin/mainc82ff391f, over all open PRs' file lists and every openpm:dispatchedclaim.cli/src/commands/validate.ts. This card's edit there is limited to the twotitleread lines. Whichever lands second mergesmain.objectstack-fleet commentedon Oct 1, 2026
os-dev-report
{ "issue": 11355, "status": "done", "branch": "claude/issue-11355-small-p1-sites", "pr": "https://github.com/objectstack-ai/objectui/pull/11384", "session": "session_01VhxTqosz7wn54ahqyxgERT (the dispatching seat's session; this is a subagent run)", "premise_still_valid": true, "summary": "Draft PR objectui#11384 (head e20a8cbc6, which merges origin/main edfcf5a5e; never rebased) settles the in-surface P1 sites of objectui#8347, each measured on its own. (1) ObjectKanbanSchema.swimlaneField is declared on both faces: the 17.5.0 object-kanban row declares it, so the TS member is ObjectKanbanProps['swimlaneField'] by reference; grouping is untouched (objectui#11216). (2) DetailViewSchema.showHeader is declared on both faces: detail-view has no spec row, and its producer is record:details, which writes its own spec-declared showHeader onto the node it builds, so the TS member takes that row's type by reference. Docs follow: the schema reference, plugin-kanban.mdx and the plugin-detail README. (3) cli validate reads title through 'title' in data, a narrowing at the read with no union widening; only those lines changed. (4) Per the PM update after PR objectui#11335 landed: plugin-map's ObjectMap.tsx shadowed-flat-key read is typed in place (no conversion), and the propertiesBag-10859 helper converts through unknown with a comment saying why; plugin-tree re-checked at 0 non-probe errors. Test fixtures retyped in plugin-detail, plugin-charts (props-8885 controls; inlineComboSeries-11315's yAxis entries lacked the spec-required field, unchecked because Omit over a signature-carrying type keeps only the signature) and app-shell (page:tabs in the spec properties carrier, checked against PageTabsProps). New pin: types small-p1-sites-11355.test.ts. Changeset: types minor, cli patch, plugin-map patch. Handed back: app-shell location x4 + 1 test, and plugin-charts isAnimationActive x5 (both need edits outside the claim's file surface; see open_questions); plugin-gantt ObjectGantt.tsx plus its propertiesBag-10859 test (serial, objectui#11168 slice 4); kanban grouping/sort; the ceiling pins.", "tests": "All at e20a8cbc6 unless stated. CENSUS: each package's tsc --noEmit and tsc -p tsconfig.test.json, un-chained, exit read before any pipe, over app-shell, plugin-detail, plugin-kanban, cli, plugin-charts, plugin-grid, plugin-map, plugin-tree and plugin-gantt. Control (signature present): 17 programs, 0 error TS. With objectui#8347's P1 mutation (uncommitted; src index-sig count 2 -> 1; types dist rebuilt, dist count 1): app-shell 4/5 (handed-back location); plugin-detail 0/0 (was 2/7 at base c82ff391f); plugin-kanban 3/3 (sort x2, grouping; swimlaneField gone); cli 0 (was 2); plugin-charts 0/8 (isAnimationActive x5 plus 3 probes; was 0/15); plugin-grid 0/3 (pins); plugin-map 0/1 (pin); plugin-tree 0/2 (pins); plugin-gantt 1/2 (handed back). Restore: 'RESTORED: packages/types/src/base.ts hash ce2bc9e31... == HEAD blob; git diff HEAD empty', types rebuilt, dist count back to 2. The error set equals the d538ead13 pass apart from line numbers. ABLATION at 5e5ef97b0, every leg through objectstack's ablation-replace (anchor x1 -> x0, blob changed; restore: blob == HEAD and git diff HEAD empty): zod swimlaneField renamed -> 'Tests 1 failed | 5 passed (6)'; zod showHeader renamed -> 1 failed | 5 passed; TS swimlaneField renamed -> TS2344 on both pin Expect rows plus zod-mirror-parity TS2322; TS showHeader renamed -> the same shape. REVERSE VERIFICATION: plugin-detail approvalBand with showHeader: 'no' -> 'error TS2322: Type string is not assignable to type boolean | undefined' against the rebuilt types .d.ts. TYPE-CHECK: types run type-check exit 0 at e20a8cbc6; all 7 touched packages' type-check scripts 'Done', exit 0, at 5e5ef97b0. VITEST (repo-root form, --maxWorkers=2, verify lock): packages/types/ 'Test Files 313 passed (313) Tests 8000 passed (8000)'; packages/plugin-map/ + packages/cli/ '61 passed (61) / 593 passed (593)'; 19 targeted files (every plugin-detail, plugin-kanban and apps/console test naming swimlaneField or showHeader, plus each edited test) '19 passed (19) / 454 passed (454)'. NOT MEASURED: the full plugin-detail + plugin-kanban suites (the combined run hit 'VERDICT command-exit 124' at its 560s cap on the shared box) and the full plugin-charts and app-shell suites. Their src is unchanged; only their tests changed, and each edited test file ran. Declared to CI. ESLINT, narrowed: 13 changed TS files, '--format json' count 13, 0 errors, 67 warnings and none on an added line (checked against git diff -U0); invariance: eslint.config.js enables no type-aware linting (grep for projectService/parserOptions/typeChecked: 0).", "gates": "e20a8cbc6: check-changeset-presence exit 0 ('13 source file(s) of 6 released package(s) changed, and this change declares 1 changeset(s)'); check-changeset-no-major 0; check:control-bytes 0; check:new-line-citations 0 ('0 new citation(s)'); check:spec-symbols 0; check:handler-key-reads 0; check:changeset-claims 0 (report-only; it lists 54 pending changesets naming files edited here, and every swimlaneField/showHeader statement in them is a dated reading, so none is made false); check:pending-changeset-literals 0; check-governed-queue-guard --test 'NOT GOVERNED'. 5e5ef97b0 (before the final merge, which touches none of these docs): check:doc-snippets 0 ('768 of 768 block(s) judged, 0 failed'); check:doc-examples 0; check:doc-types 0; check:doc-fences 0; check:readme-exports 0, after building the 35 packages it needs (the first run exited 1 with 'PRECONDITION NOT MET'-class unbuilt dist, so that run is not counted); check:component-surface-parity 0 (report-only, no new row); check:designer-field-key-parity 0; check:installed-pin-claims 0; check:test-path-roots 0. CI: in_progress at report time.", "files_changed": ".changeset/11355-small-p1-sites.md; content/docs/api/schema-reference.md; content/docs/plugins/plugin-kanban.mdx; packages/app-shell/src/views/__tests__/countLabels.ruAr-10242.test.tsx; packages/cli/src/commands/validate.ts; packages/plugin-charts/src/ObjectChart.inlineComboSeries-11315.test.tsx; packages/plugin-charts/src/__tests__/ObjectChartBlock.props-8885.test.tsx; packages/plugin-detail/README.md; packages/plugin-detail/src/__tests__/DetailView.nodeSlotNumericFalsy-9162.test.tsx; packages/plugin-detail/src/__tests__/DetailView.test.tsx; packages/plugin-map/src/ObjectMap.propertiesBag-10859.test.tsx; packages/plugin-map/src/ObjectMap.tsx; packages/types/src/__tests__/small-p1-sites-11355.test.ts; packages/types/src/objectql.ts; packages/types/src/views.ts; packages/types/src/zod/objectql.zod.ts; packages/types/src/zod/views.zod.ts (17 files, +243/-36 against edfcf5a5e)", "deviations": "(1) Surface extended by the PM's mid-run update, not by me: the plugin-map ObjectMap.tsx conversion and the plugin-map test re-check were added after PR objectui#11335 landed. (2) Two in-scope items stopped at the claim's file surface instead of breaching it ('Stop on breach'): app-shell location (needs a type export from @object-ui/components) and plugin-charts isAnimationActive (needs a declaration that is not by reference in packages/types/src, or a plugin-charts src prop). Both are in open_questions. (3) Population drift since the card's 5262f7dd3 census: plugin-charts' ObjectChart.inlineComboSeries-11315 TS2741 x4 (landed with objectui#11371) was included and fixed, as a non-probe error in a package already in the surface; plugin-gantt's ObjectGantt.propertiesBag-10859 TS2352 is re-derived and handed back with the gantt item. (4) The full plugin-detail, plugin-kanban, plugin-charts and app-shell suites are a declared narrowing (see tests). (5) The claim's Clause-② line 'yes' carries its measured arm in the PR body: 'Clause-②: yes (narrowing)'.", "mcp_calls": "0", "api_writes": "4 — git push (branch; 7 pushes, not REST); fleet-write relay pr_create, POST /repos/objectstack-ai/objectui/pulls (run 36874672958, read-back 9326/9326 bytes identical, PR objectui#11384, draft); label-write assign, POST /repos/objectstack-ai/objectui/issues/11384/assignees os-litant (run 36874743024, read-back matches); post-stamped os-dev-report, POST /repos/objectstack-ai/objectui/issues/11355/comments. Zero label writes on the PR (its labels come from labeler.yml).", "open_questions": [ { "question": "app-shell location x4 (EnvironmentListToolbar x2, InterfaceListPage, ObjectView) plus useOfferedNavRunAction's test literal: the PM prediction held. These are action:bar nodes, ActionBarSchema declares location?: ActionLocation, and the renderer reads it (actionRendersAt and the visible label). But ActionBarSchema lives in @object-ui/components' renderers/action/action-bar.tsx and is not on the package entry, so app-shell cannot import it. No spec row exists for action:bar (17.5.0 ComponentPropsMap has none), and @object-ui/types has no action:bar type. How should the literal be typed?", "options": [ "A: a one-line export of the ActionBarSchema type from @object-ui/components' entry, plus a components changeset; the five literals are typed as ActionBarSchema. Edits components/src/index.ts, outside this claim's file surface. Smallest contract-honest fix. Caveat: ActionBarSchema carries its own index signature, so typos inside an action:bar literal stay unrefused until that type is narrowed.", "B: move the action:bar node type into @object-ui/types (AGENTS.md section 8: schemas are defined in types), have components import it, and type the app-shell literals from types. The long-term home, but a larger diff across types, components and app-shell.", "C: leave the five sites for objectui#8347 to resolve with the removal. Refused by the objectui#7927 ruling, step 1 (census first, delete never before)." ], "recommendation": "A now, with B as its own later card. Four axes. Business need: the location key is read and honoured on every list toolbar. Long-term soundness: the literal takes the type its renderer already declares, adding no new contract. AI-error prevention: it removes the BaseSchema ride without inventing a second spelling. Startup focus: one type-only export line, no new surface semantics. The seat would extend this claim's file surface to packages/components/src/index.ts plus a changeset." }, { "question": "plugin-charts isAnimationActive x5, in three ObjectChart test files, on ObjectChartSchema. Measured: not a spec key (no object-chart row in 17.5.0, and no spec schema declares it); not a fixture defect in kind, since it is the determinism flag hosts set; it is a render flag that real code producers compose onto object-chart nodes (DashboardRenderer, DashboardGridLayout, DatasetReportRenderer), which ObjectChart forwards to ChartRenderer, which honours it (ChartRendererProps.schema declares it). ObjectChartSchema's docblock says it describes the node as code composes it, the dashboards included. Whether the tests would pass without it is NOT MEASURED. Which route?", "options": [ "A: declare isAnimationActive?: boolean on ObjectChartSchema's TS face as a host-composed member, filed runtime-only (unmirrored) in zod-mirror-parity, so it does not become an authorable properties-bag key. A non-by-reference edit in packages/types/src, outside this claim's surface.", "B: a typed ObjectChart prop (ObjectChartProps.isAnimationActive) forwarded into ChartRenderer's schema, with the tests passing it as a prop. A plugin-charts src change outside this claim's surface; the dashboard producers stay on the node key, so there are two channels.", "C: drop the key from the five fixtures, if a measurement shows the mark and tick assertions hold without it. Risks entrance-animation timing on the shared box." ], "recommendation": "A. Four axes. Business need: three in-repo producers write the key and the renderer honours it. Long-term soundness: the type then describes the node it says it describes (未声明键随实现). AI-error prevention: as runtime-only it is not offered to authors, so it is not declared on the authoring face. Startup focus: no new capability, only the existing one named. The seat would extend this claim's surface to objectql.ts and zod-mirror-parity.test.ts." } ], "out_of_scope_findings": [ "carrier: objectui#8347 · After the removal, no node type in @object-ui/types declares the spec's properties carrier, so a fresh spec-carrier literal written straight into SchemaRenderer's schema prop stops compiling (countLabels now passes a typed value) · noted in the PR's Acceptance notes, not filed", "carrier: objectui#8347 · ObjectChartBlock's schema prop is the pre-gate BaseSchema (ruling 5810232641); after the removal, a fresh object-chart literal with objectName at that prop stops compiling (the props-8885 controls now pass typed values) · noted, not filed", "carrier: objectui#8347 · Omit over a type that still carries the index signature keeps only the signature, so a test parameter typed that way checks nothing until the removal; inlineComboSeries-11315 was one instance (yAxis entries without the spec-required field), fixed here · noted, not filed", "carrier: objectui#8347 · Under P1 the parsed union's action arm loses its passthrough index; it is the only arm left with neither title nor an index signature (probe: 190 arm types, 63 declare title, 127 reach it via the index at control) · noted, not filed", "carrier: the plugin-gantt round behind objectui#11168 slice 4 · plugin-gantt's ObjectGantt.propertiesBag-10859 test carries the same Record-to-BaseSchema TS2352 as plugin-map's (absent from the card's 5262f7dd3 census) · noted, not filed", "dedupe words: action:bar ActionBarSchema location export app-shell; isAnimationActive ObjectChartSchema host-composed render flag" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 1, 2026
ACCEPT: report
5933315525, PR #11384 ate20a8cbc6, ready for the at-tier contract review (Refs; this card stays open for the items handed back below). From thedomain:spec @ objectuiseat (objectui#10217), sessionsession_01VhxTqosz7wn54ahqyxgERT, 2026-10-01T14:18Z.Checked against the PR, not the report's prose
check-governed-mergesreads NOT governed (0 of 17 paths). Size: +243 / -36.files_changed. Each sits inside the claim's surface, or inside the seat's mid-run extension after PR feat(plugin-tree,plugin-map,types): object-tree and object-map are judged and publish the keys their renderers honour (objectui#11168 slice 3) #11335 landed (ObjectMap.tsxand the plugin-map test re-check).git merge-treeagainstmain6c3da53ae(objectui#11348 landed there) is clean. The two PRs touch disjoint regions ofobjectql.ts/zod/objectql.zod.ts.Refs #11355/Clause-②: yes (narrowing). The arm is right on the diff's face: two TS members are new (a widening), and the zod mirror now refuses a wrongly typed value for each, where.passthrough()kept it (a narrowing).What lands
ObjectKanbanSchema.swimlaneFieldon both faces. The TS member takes the 17.5.0object-kanbanrow's type by reference.DetailViewSchema.showHeaderon both faces.detail-viewhas no spec row; its producerrecord:detailscarries its own spec-declaredshowHeaderonto the node, so the TS member takes that row's type by reference (「未声明键随实现」).cli validatereadstitlethrough'title' in data, region-local.ObjectMap.tsx's shadowed-flat-key read is typed in place, with no conversion.typesminor,clipatch,plugin-mappatch.For the record to judge: both zod members are written as
z.string().optional()/z.boolean().optional(), not by reference to the spec row's own zod member, as objectui#11348'sDataTableSchema.shape.pageSizewas.Handed back, booked on this card, NOT ruled this shift (the maintainer closed the shift at 13:54Z: 「当前任务处理完,合并后就下班」). Each needs an edit outside this claim's file surface, so the next seat decides and re-claims:
location×4, plus one test literal. These areaction:barnodes.ActionBarSchemalives in@object-ui/components'action-bar.tsx, off the package entry, and no spec row exists foraction:bar. The report's options:components' entry;@object-ui/types;The dev recommends A now and B as its own card.
isAnimationActive×5, in test fixtures. It is a host-composed render flag onobject-chartnodes: three in-repo producers write it, andChartRendererhonours it. It is not a spec key. The report's options:ObjectChartSchema, unmirrored inzod-mirror-parity;ObjectChartprop;The dev recommends A.
ObjectGantt.tsx, plus itspropertiesBag-10859test (TS2352). Serial behind objectui#11168 slice 4, which is in flight.On objectui#8347: once this PR lands, this card still blocks it, on items 1 to 3.
objectstack-fleet commentedon Oct 1, 2026
Partial landing: PR objectui#11384 merged through the queue as
3c3ce15a7(Refs; this card stays open for the three items handed back).pm:dispatched→pm:queue, assignee cleared. From thedomain:spec @ objectuiseat (objectui#10217), sessionsession_01VhxTqosz7wn54ahqyxgERT, 2026-10-01T14:50Z.Verification
git patch-id --stableequals the PR's net diff (43a7604c1124on both sides).5933628596(PASS) namese20a8cbc6, and nothing was pushed after it.Delivered. The in-surface small sites of objectui#8347's preparation, each measured on its own:
ObjectKanbanSchema.swimlaneFieldon both faces. The TS member is by reference to the 17.5.0object-kanbanrow.DetailViewSchema.showHeaderon both faces. The TS member is by reference torecord:details' ownshowHeader, which is the key's producer (「未声明键随实现」).cli validate'stitleread andObjectMap.tsx's shadowed-flat-key read are typed in place, with no runtime change.typesminor,clipatch,plugin-mappatch.swimlaneFieldzod member is a hand-written twin of the spec's identical member, and the parity gate plus the new pin hold the two faces together. A by-reference tidy is optional.Still on this card, unruled. The next seat decides and re-claims; each needs an edit outside the spent claim's surface. The detail is in ACCEPT
5933364839.location×4, plus one test literal (action:barnodes;ActionBarSchemais off@object-ui/components' entry). Options A, B or C; the dev recommends A.isAnimationActive×5, a host-composed render flag. Options A, B or C; the dev recommends A. The record adds that option A's runtime-only member opens azod-mirror-parityrow by design.ObjectGantt.tsx, plus itspropertiesBag-10859TS2352. It was serial behind objectui#11168 slice 4, whose PR objectui#11386 is now in review.On objectui#8347: this card still blocks it, on items 1 to 3. The record's four out-of-scope findings for #8347 are carried to #8347 by the seat.
Release: the claim is spent. The card goes back to
pm:queue, unassigned, in this lane, in the same act.objectstack-fleet commentedon Oct 2, 2026
Ruled by the seat, not escalated: item 1 = B and item 2 = A. Item 3 needs no ruling and is now unblocked. From the
domain:spec @ objectuiseat (objectui#10217), sessionsession_01VhxTqosz7wn54ahqyxgERT, 2026-10-02T02:27Z. The items are the three handed back in ACCEPT5933364839.Item 1, app-shell
location×4 plus one test literal (action:barnodes) = B. Theaction:barnode type moves into@object-ui/types.AGENTS.md§8, "New component: define schema in@object-ui/types→ map to Shadcn in@object-ui/components", and §3's topology:@object-ui/typesis the protocol package,@object-ui/componentsholds the atoms.components' entry. That is a second home for protocol types, which §3 and §8 rule out.ActionBarSchemais declared in@object-ui/typesby reference to what it already uses (UIActionSchema,ActionLocation).componentsimports it, and the app-shell literals are typed fromtypes.[key: string]: any. Declare the members the renderer reads, and measure that list. The signature on the component's parameter annotation (objectui#4422) stays where it is.action:bargets a closed type from the package it already imports for every other node.Item 2, plugin-charts
isAnimationActive×5 = A. A runtime-only TS member onObjectChartSchema, unmirrored.list.titleruling5927981915and thepageSizeruling5930215326are the precedents.object-chartnodes (DashboardRenderer,DashboardGridLayout,DatasetReportRenderer), andChartRendererhonours it.isAnimationActive?: booleanonObjectChartSchema's TS face, documented as host-composed, with itszod-mirror-parityrow filed as runtime-only. The record noted that this row opens by design, which is the intended cost. ⛔ No zod member, so it is not offered to authors.Item 3, plugin-gantt
ObjectGantt.tsxplus itspropertiesBag-10859TS2352: it was serial behind objectui#11168 slice 4, which landed as8673402a3, so it is unblocked.All three go to one serial dispatch, claimed next.
objectstack-fleet commentedon Oct 2, 2026
Claim: PM loop round 4, serial (round 2 of this card: the three items handed back in ACCEPT
5933364839, as ruled in5944471936)Session:
session_01VhxTqosz7wn54ahqyxgERTAccount:
os-litant(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-11355-small-p1-sites-r2Worktree:
objectui-issue-11355Domain:
domain:specSeat:
domain:spec#1(objectui#10217)File surface: the three remaining P1 sites of objectui#8347's preparation on this card. Each is measured under objectui#8347's P1 mutation before and after.
action:barnode type moves into@object-ui/types.ActionBarSchemais declared there by reference toUIActionSchema/ActionLocation, with the members the renderer reads and ⛔ no index signature.packages/components/src/renderers/action/action-bar.tsximports it; the parameter annotation's signature (objectui#4422) stays.locationliterals (EnvironmentListToolbar×2,InterfaceListPage,ObjectView) anduseOfferedNavRunAction's test literal are typed fromtypes.isAnimationActive?: booleanonObjectChartSchema's TS face, documented as host-composed, with itszod-mirror-parityrow filed as runtime-only. ⛔ No zod member. The five plugin-charts fixtures are typed through it.packages/plugin-gantt/src/ObjectGantt.tsxandObjectGantt.propertiesBag-10859.test.tsx, the TS2352 conversions, done the wayObjectMap.tsxwas in PR fix(types,plugin-detail,plugin-map,cli): small P1 sites of objectui#8347 — swimlaneField and showHeader declared by reference, two reads typed in place (objectui#11355) #11384.⛔ Not this claim:
grouping(objectui#11216) andsort(objectui#8174) on plugin-kanban; the ceiling pins; objectui#8347's own removal. Stop on breach; explain in the report.Container & model:
M,mode:subagent,model: opus(TIER_DEFAULT; no path-derived mandate)Clause-②: yes
Why yes: a new published node type in
@object-ui/typesand a new TS member onObjectChartSchemawiden the published TS surface. The at-tier contract record is owed on the landing head before enqueue.Thread-read: 5944471936
Serial constraints cleared: read 2026-10-02T02:28Z at objectui
origin/mainf9c8c4e45, over all open PRs' file lists and every openpm:dispatchedclaim. The seat is serial (「继续上班,只处理 p0 p1 p2任务,串行派发」), and objectui#7759 closed by census, so nothing else is in flight.zod-mirror-parity.test.ts: PR objectui#11425 (objectui#10859,domain:ui) edits its header andMIRRORS. This claim adds one runtime-only row. Whichever lands second mergesmainand reconciles counts by census.action-bar.tsx, the app-shell toolbars,ObjectGantt.tsx,plugin-chartsortypes/src/objectql.ts.objectstack-fleet commentedon Oct 2, 2026
os-dev-report
{ "issue": 11355, "status": "done", "branch": "claude/issue-11355-small-p1-sites-r2", "pr": "https://github.com/objectstack-ai/objectui/pull/11437", "session": "session_01VhxTqosz7wn54ahqyxgERT (the dispatching seat's session; this is a subagent run)", "premise_still_valid": true, "summary": "Draft PR objectui#11437 (head 3383589ea, which merges origin/main c681b9ff2; never rebased) lands all three items handed back in ACCEPT 5933364839, as ruled in 5944471936. (1) ruling B: ActionBarSchema is declared in @object-ui/types (ui-action.ts, exported from the entry) with actions/systemActions as UIActionSchema[] and location as the spec's ActionLocation by reference, and NO index signature; components' action-bar.tsx imports it (the objectui#4422 parameter-annotation signature stays, no components entry export added, no re-export kept), and app-shell's EnvironmentListToolbar x2, InterfaceListPage, ObjectView and useOfferedNavRunAction's test literal build a typed ActionBarSchema const (satisfies was measured unusable: the literal stays fresh and is excess-checked against BaseSchema at the prop). (2) ruling A: isAnimationActive?: boolean on the TS ObjectChartSchema, documented host-composed, no zod member, filed as a new RuntimeOnlyDeclared entry with its RuntimeOnlyNamedAllowList reason in zod-mirror-parity (header 5 entries / 30 keys; after merging objectui#11425 the cross-ledger union is 13 = 8 + 5); the five plugin-charts fixtures compile as written, no edit. (3) plugin-gantt: warnOnShadowedFlatGanttKeys reads schema[key] typed in place (ObjectGanttSchema declares all 29 GanttConfigSchema keys plus dependencyField), and the propertiesBag-10859 helper converts through unknown with a comment. Under objectui#8347's P1 mutation app-shell 4/5 → 0/0, plugin-charts 0/8 → 0/3 (the three probes), plugin-gantt 1/2 → 0/0. New pin types action-bar-chart-flag-11355.test.ts; docs: types README, plugin-charts.mdx; changeset: types minor, components / app-shell / plugin-gantt patch.", "tests": "CENSUS (each package's tsc --noEmit and tsc -p tsconfig.test.json un-chained, exit read before any pipe; P1 = BaseSchema's index signature removed via objectstack's ablation-replace, types rebuilt, dist count 1; every restore proved blob == HEAD, git diff HEAD empty, dist count back to 2). Base f9c8c4e45 under P1: app-shell 4/5, plugin-charts 0/8, plugin-gantt 1/2, components 0/10, plugin-detail 0/0, types 0/60 (types read in a detached BASE control worktree, removed clean). Head 3383589ea under P1: app-shell 0/0, plugin-charts 0/3 (xAxisKy x2, objectNme: objectui#8347's probes), plugin-gantt 0/0, components 0/10 (identical set to base), plugin-detail 0/0, types 0/60 (identical set to base, line numbers aside). CONTROL at 3383589ea, signature present: 13 programs (types src/examples/test + five packages x2), 0 'error TS'; the five packages' own type-check scripts (types, components, app-shell, plugin-gantt, plugin-charts) each 'type-check: Done', exit 0. H1 MEASUREMENT: components both programs exit 0 with the old ActionBarSchema's own signature removed; positive control (gap also undeclared) → 'error TS2339: Property gap does not exist on type ActionBarSchema' at the renderer's read; AST census: 47 action:bar object literals in tracked TS/TSX, 0 undeclared keys. ABLATION / REVERSE VERIFICATION at 3383589ea, every leg through ablation-replace (anchor x1 → x0, blob changed; restore blob == HEAD, git diff HEAD empty; tree porcelain 0 after): A ActionBarSchema regains [key: string]: any → types test program exit 2, TS2344 x2 on the pin's Expect rows + TS2578 unused @ts-expect-error; B the ObjectChartSchema RuntimeOnlyDeclared entry removed → tsc exit 2 'Type \"objectql.zod.ts#ObjectChartSchema\" is not assignable to type never' + TS2344, vitest 'Tests 2 failed | 35 passed (37)'; C InterfaceListPage location misspelt → app-shell src exit 2 'TS2561 ... locaton does not exist in type ActionBarSchema' against the rebuilt types .d.ts (dist grep 'interface ActionBarSchema' = 1); D a plugin-charts fixture isAnimationActive: 'no' → TS2322 'Type string is not assignable to type boolean | undefined' (dist grep = 1); E under P1, ObjectGanttSchema.dependencyField removed and types rebuilt (dist count 0) → plugin-gantt src TS2551 at the typed read in warnOnShadowedFlatGanttKeys and at getGanttConfig's flat read; restored, rebuilt, dist counts 2 / 1. First P1 attempt was a refused no-op (replacement was a substring of the anchor: 'a rise of 0, not the declared 1'), restored, re-run with a distinct marker; not counted. VITEST (repo-root form, --maxWorkers=2, verify lock) at 3383589ea: packages/types/ 'Test Files 327 passed (327) Tests 8736 passed (8736)'; packages/plugin-gantt/ + 92 targeted files (every components test naming action:bar / ActionBarSchema / action-bar, the forwardRef guard, every app-shell test naming EnvironmentListToolbar / InterfaceListPage / ObjectView / useOfferedNavRunAction, the three ObjectChart fixture files) 'Test Files 189 passed | 1 skipped (190) Tests 1875 passed | 114 skipped (1989)' (the skip is plugin-gantt's describe.runIf time-zone guard). NOT MEASURED, declared to CI: full components and app-shell suites (their src change is a type import and literals hoisted to typed consts). ESLINT narrowed at 3383589ea: 13 changed TS/TSX files, '--format json' count 13, 0 errors, 0 of 354 warnings on the 252 added lines (git diff -U0), no file ignored; invariance: eslint.config.js has 0 hits for projectService / parserOptions / typeChecked (no type-aware linting).", "gates": "At 3383589ea, all exit 0: check-changeset-presence ('16 file(s) changed, 13 of them published source'), check-changeset-no-major, check:control-bytes, check:new-line-citations ('0 new citation(s)'), check:changeset-claims (report-only; 40 pending changesets name edited files, the ledger-figure ones read, none made false), check:pending-changeset-literals, check:spec-symbols, check:handler-key-reads, check:test-path-roots, check:action-forward-parity, check:doc-fences, check:doc-types, check:doc-snippets ('775 of 775 block(s) judged, 0 failed'), check:doc-examples, check:readme-exports ('562 real, 0 wrong-path, 0 fabricated'), check:component-surface-parity (report-only), check:designer-field-key-parity, check:unreferenced-sources; check-governed-queue-guard --test over the 16 paths: 'NOT GOVERNED'. The first doc-snippets / doc-examples runs exited 2 (PRECONDITION NOT MET) and the first readme-exports run exited 1 on unbuilt packages only; after the scoped build the gate itself names (35 turbo tasks) they are green; the first runs are not counted. CI on 3383589ea at report time: 42 check runs, 20 success, 3 skipped, 19 in_progress.", "line_budget": "n/a: no skills/** or governed-surface file touched (+284 / -81 over 16 files against c681b9ff2)", "files_changed": ".changeset/11355-small-p1-sites-r2.md; content/docs/plugins/plugin-charts.mdx; packages/app-shell/src/environment/EnvironmentListToolbar.tsx; packages/app-shell/src/hooks/__tests__/useOfferedNavRunAction.test.tsx; packages/app-shell/src/views/InterfaceListPage.tsx; packages/app-shell/src/views/ObjectView.tsx; packages/components/src/__tests__/action-bar.test.tsx; packages/components/src/renderers/action/action-bar.tsx; packages/plugin-gantt/src/ObjectGantt.propertiesBag-10859.test.tsx; packages/plugin-gantt/src/ObjectGantt.tsx; packages/types/README.md; packages/types/src/__tests__/action-bar-chart-flag-11355.test.ts; packages/types/src/__tests__/zod-mirror-parity.test.ts; packages/types/src/index.ts; packages/types/src/objectql.ts; packages/types/src/ui-action.ts (16 files, +284 / -81 against c681b9ff2)", "deviations": "(1) H3 falsified in count only: four in-code producers write isAnimationActive, not three; DatasetWidget also sets it, on a node handed to the chart registration (the same ObjectChartBlock). (2) The five plugin-charts fixtures in the file surface needed no edit: they compile against the declared member as written. (3) Merged origin/main once (c681b9ff2) because PR objectui#11425 landed first and edits zod-mirror-parity's header, as the dispatch directs; the one conflict was reconciled by census (0 of the 5, union 13 = 8 + 5) and the pinned-figures prose moved to the same digits. (4) A detached control worktree at BASE (objectui-issue-11355-base) was created only to read types' own programs under P1 at base; removed clean (porcelain 0). (5) Declared narrowing: full components and app-shell suites are left to CI. (6) Commit trailers follow AGENTS.md's model-free pair (Claude-Session + Co-authored-by: Claude), not the harness reminder's model-named Co-Authored-By, per that reminder's own precedence sentence. (7) The PR's first line is the Fixes keyword with this card's number (all three items landed) and its second is 'Clause-②: yes (widening)', the arm measured: one new exported type and one new TS member, no zod change, and the components-local ActionBarSchema was never on that package's entry.", "mcp_calls": "0", "api_writes": "3 REST writes + git push: (a) git push of the branch (several pushes, not REST); (b) fleet-write relay pr_create, POST /repos/objectstack-ai/objectui/pulls (run 36961276056, read-back 10790/10790 bytes identical, PR objectui#11437, draft); (c) label-write assign, POST /repos/objectstack-ai/objectui/issues/11437/assignees os-litant (run 36961315389, read-back matches); (d) post-stamped os-dev-report, POST /repos/objectstack-ai/objectui/issues/11355/comments. Zero label writes on the PR (its six labels come from labeler.yml).", "open_questions": [], "out_of_scope_findings": [ "carrier: objectui#8347 · components' tsc -p tsconfig.test.json has 10 error TS under the P1 mutation, identical at base f9c8c4e45 and head 3383589ea (props x4 in alias-precedence-cross-channel, visibility x2 in page-variables, properties x2 in degenerate-config-bag, content in form-renderers, a params typing in action-params-templates-7867); components was outside this card's census population · noted in the PR's Acceptance notes, not filed", "carrier: none (no carrier) · plugin-detail's DetailView and RecordDetailPanel build action:bar nodes through 'as unknown as SchemaNode' or inside an untyped array; they can now be typed ActionBarSchema · noted, not filed", "carrier: none (no carrier) · the authored object-chart node keeps isAnimationActive unjudged both flat and inside properties (safeValidateSchema success, passthrough), as before this PR; whether an authored one reaches ChartRenderer is NOT MEASURED · noted, not filed", "dedupe words: action:bar ActionBarSchema types export; isAnimationActive ObjectChartSchema runtime-only; ObjectGantt shadowed flat key TS2352; components test P1 props visibility properties" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 2, 2026
ACCEPT, round 2: report
5945215716, PR #11437 at3383589ea, ready for the at-tier contract review (Fixes #11355). From thedomain:spec @ objectuiseat (objectui#10217), sessionsession_01VhxTqosz7wn54ahqyxgERT, 2026-10-02T03:46Z. The seat runs serially, and this is its last card before the maintainer's shift end (「当前任务处理完,合并后就下班」).Checked against the PR, not the report's prose
check-governed-mergesreads NOT governed (0 of 16 paths). Size: +284 / -81.git merge-treeagainstmaind8edfe257is clean.Fixes #11355/Clause-②: yes (widening). That arm is right on the diff's face: one new exported type (ActionBarSchema) and one new TS member (ObjectChartSchema.isAnimationActive). No zod member changes. The components-local type was never on that package's entry.5944471936is executed as written:ActionBarSchemalives in@object-ui/types'ui-action.tswith no index signature.componentsadds no export, and objectui#4422's parameter annotation stays.isAnimationActiveis TS-only and filed runtime-only inzod-mirror-parity.ObjectMap.tsxwas.mainpicked up PR objectui#11425's edit to the parity header. The dev reconciled it by census (union 13 = 8 + 5).Prose faces, judged by this seat (objectstack
main8dea55d31,contract-review.md). Each sentence was read against the head:.changeset/11355-small-p1-sites-r2.md:ui-action.ts,UIActionSchema[], the spec'sActionLocation, no index signature, "@object-ui/componentsadds no export");isAnimationActive:DashboardRenderer.tsx:781/807andDashboardGridLayout.tsx:327/346onobject-chart, andDatasetWidget.tsx:1905onchart.ChartRenderer.tsx:244honours it;minorreason.plugin-charts.mdx: the host-composed section, which states the same facts.packages/types/README.md: the two Action Components bullets.All hold. The dev's H3 deviation (four producers, not three) is correctly reflected in both the changeset and the docs.
Carried, not filed:
action:barbuilders, which can now be typedActionBarSchema;isAnimationActive, which is not measured as reachingChartRenderer.objectstack-fleet commentedon Oct 2, 2026
os-dev-report
{ "issue": 11355, "round": 2, "status": "done", "branch": "claude/issue-11355-small-p1-sites-r2", "pr": "https://github.com/objectstack-ai/objectui/pull/11437", "session": "session_01VhxTqosz7wn54ahqyxgERT (the dispatching seat's session; this is a subagent run)", "premise_still_valid": true, "summary": "Answers the at-tier record 5945376323 (FAIL on 3383589ea, two sentences). New head 57f9b7081 = merge of origin/main d8edfe257 (93939cac9; two commits, no file in common, no conflict; never rebased) + one comment/docs commit. Verified first against the registry and the four call sites: plugin-charts' index.tsx registers `chart` to ObjectChartBlock under namespace 'view' with skipFallback (view:chart only) and `chart` to ChartRenderer under namespace 'plugin-charts' without it, so ChartRenderer owns the bare `chart` key (Registry.register writes the bare fallback only when skipFallback is unset); DatasetWidget renders a bare type 'chart' node through SchemaRenderer, DatasetReportRenderer calls useRegistryComponent('chart') (ComponentRegistry.get with no namespace), and the inline-data branches of DashboardRenderer / DashboardGridLayout also build bare `chart` nodes; only the object-provider branches of the two dashboards write it on `object-chart` nodes, which ObjectChart spreads into ChartRenderer's schema. Fixed: (1) the ObjectChartSchema.isAnimationActive docblock in objectql.ts now rests the member on the two object-chart producers plus ObjectChart's spread, and says DatasetWidget / DatasetReportRenderer write onto bare `chart` nodes ChartRenderer renders directly, its own schema prop declaring the flag, not through this type; (2) the record's second sentence, '(the same ObjectChart)', is in the RuntimeOnlyNamedAllowList docblock for objectql.zod.ts#ObjectChartSchema (the RuntimeOnlyDeclared entry comment itself never said it) and is corrected the same way; the reason string is unchanged, as the record judged it true; (3) plugin-charts.mdx implied the chart hosts go through ObjectChart, so its section now separates the object-chart route (ObjectChartSchema) from the bare chart route (ChartRenderer's own schema). The changeset is unchanged: its 'the nodes they hand the chart registration' is literally true per the record. No declaration, ledger key, header figure, pin or semver level moved.", "tests": "Through os-verify-lock at 57f9b7081 (porcelain 0), each exit captured before any pipe: types leg 1 'tsc --noEmit' exit 0, 0 error TS; leg 2 'tsc -p tsconfig.examples.json' exit 0, 0; leg 3 'tsc -p tsconfig.test.json' exit 0, 0; the package script 'pnpm --filter @object-ui/types type-check' (echoed script line 'tsc --noEmit && tsc -p tsconfig.examples.json && tsc -p tsconfig.test.json') exit 0. vitest repo-root form, the pin action-bar-chart-flag-11355.test.ts plus zod-mirror-parity.test.ts (edited in a docblock only): 'Test Files 2 passed (2) Tests 39 passed (39)', exit 0. Not re-run (no code, declaration or ledger key changed since 3383589ea, whose readings the record accepted): the P1 census, the ablation legs, the other packages' programs and suites.", "gates": "At 57f9b7081, all exit 0: check-changeset-presence ('16 file(s) changed, 13 of them published source', against merge-base d8edfe257), check:control-bytes, check:new-line-citations ('0 new citation(s)'), check:doc-fences, check:doc-types, check:changeset-claims (report-only). Control-byte self-scan of the three edited files: 0 hits. CI on 57f9b7081 at report time: 42 check runs, 23 success, 3 skipped, 16 in_progress.", "line_budget": "n/a: no skills/** or governed-surface file touched (round 2b: +16 / -11 over 3 files; net PR +292 / -81 over 16 files against d8edfe257)", "files_changed": "This round: packages/types/src/objectql.ts (the isAnimationActive docblock); packages/types/src/__tests__/zod-mirror-parity.test.ts (the RuntimeOnlyNamedAllowList docblock for objectql.zod.ts#ObjectChartSchema); content/docs/plugins/plugin-charts.mdx (the host-composed section). PR total unchanged at 16 files.", "deviations": "(1) The record locates the second sentence in 'the RuntimeOnlyDeclared entry comment'; it is in the RuntimeOnlyNamedAllowList docblock for the same pair (the RuntimeOnlyDeclared entry comment never named the chart registration). Corrected where it is. (2) PR body NOT patched, zero writes: os-dev.md's standing rule is that the dev writes the PR body once, at creation, and never PATCHes it, with later changes named in the report for the seat to write; the dispatch's 'at most ONE PR-body update' is a ceiling, so zero complies with both. The body does restate the wrong claim, in its Item 2 H3 bullet ('Four hosts write the key' and '... the chart registration, which is the same ObjectChartBlock'). The full corrected body, with only that bullet replaced (10790 → 11097 bytes, first line and Clause-② line unchanged, 0 angle brackets), is at /tmp/claude-0/-home-user/62dd0dea-a2d7-505d-94ba-0d7e2cf622e5/scratchpad/issue-11355/r2b/11355r2b-pr-body-corrected.md; the seat applies it in one issue_patch. (3) Merged origin/main (d8edfe257) as directed, because it had moved by two commits; no overlap.", "mcp_calls": "0", "api_writes": "1 REST write + git push: git push of 93939cac9 and 57f9b7081 (not REST); post-stamped round-2 os-dev-report, POST /repos/objectstack-ai/objectui/issues/11355/comments. No PR-body update, no label or assignee write.", "open_questions": [], "out_of_scope_findings": [ "carrier: the seat (escalated in record 5945376323) · the bare `chart` node's TS face ChartSchema and its zod mirror declare no isAnimationActive, while DatasetWidget, DatasetReportRenderer and the inline-data branches of DashboardRenderer / DashboardGridLayout write it and ChartRenderer honours it · not touched here, not filed", "dedupe words: ChartSchema isAnimationActive bare chart ChartRenderer host-composed flag" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 2, 2026
Landed, round 2: PR objectui#11437 merged through the queue as
31987bd50(Fixes #11355). This card is discharged, so objectui#8347's preparation cards are all landed. From thedomain:spec @ objectuiseat (objectui#10217), sessionsession_01VhxTqosz7wn54ahqyxgERT, 2026-10-02T04:40Z.Verification
git patch-id --stableequals the PR's net diff (1ff901eec5c5on both sides). The landed commit's trailer is the model-freeCo-authored-by: Claude.5945376323FAIL on3383589ea: two provenance sentences said thecharthosts render throughObjectChartSchema.5945558160PASS on57f9b7081.Nothing was pushed after the PASS.
5945231311.plugin-charts.mdxand the PR body were corrected in round 2; the seat applied the body patch.Delivered, per the seat's ruling
5944471936:ActionBarSchema(action:bar) lives in@object-ui/typeswith no index signature. Its members are exactly the keys the renderer reads, andlocationis the spec'sActionLocation.componentsimports it and adds no export, and app-shell's toolbars build typed values.ObjectChartSchema.isAnimationActive?: booleanis on the TS face only: host-composed, filed runtime-only inzod-mirror-parity.Under objectui#8347's P1 mutation: app-shell 4/5 → 0/0, plugin-charts 0/8 → 0/3 (probes), plugin-gantt 1/2 → 0/0.
Carried, not filed:
chartnode's own TS faceChartSchema(and its zod mirror) declares noisAnimationActive, whileDatasetWidget,DatasetReportRendererand the dashboards' inline-data branches write it andChartRendererhonours it. Same class as item 2, on a sibling face. The record escalated it to the seat. It is booked for the next seat, with dedupe words: ChartSchema isAnimationActive bare chart ChartRenderer host-composed flag.ActionBarSchemacannotextends BaseSchemawhile the signature stands, soBaseSchema's cross-cutting members are not writable on a literal typedActionBarSchema(no in-repo site writes one);The leftover
pm:dispatchedis stripped in the same act.fix(plugin-form): type the five form variants' child form nodes as Fo…
fix(types,plugin-detail,plugin-map,cli): small P1 sites of objectui#8…
feat(types,components,app-shell,plugin-gantt): the last small P1 site…