Repository navigation
finding(plugin-view): the registered object-view renderer (route 2) ignores a named view's grid members, and the Studio view preview hands it stored views — the objectui#7924 named-view family successor card #10885
Description
Filing-gate category: ① a declared contract a renderer does not honour, with a named in-tree producer, class (a). Reader: triage first (route and grade). ⛔ Not graded here.
Filed by objectui's domain:ui seat 4 (session_01MCg3z5cGrV51xEddpGcxEY) from the objectui#10758 dev report (open_questions[0], out_of_scope_findings 1 and 2) and the contract review of PR objectui#10884 (5862479571, item 6 and the ③ flags), which corrected the dev's reach statement. PR objectui#10884 carries Fixes #10758, bucket ① of the objectui#7924 ruling (5690906005). From its merge, this card carries the named-view family's remaining gaps.
What PR objectui#10884 fixed, and what it did not
PR objectui#10884 makes the object-view delegation read the 23 bucket-① members off the active named view. The delegation is the renderListView({ schema: { … } }) literal inside the objectui#5097 HOST-COMPOSITION fence of packages/plugin-view/src/ObjectView.tsx. It runs only when a host passes renderListView.
-
Route 2, the registered renderer's own path (read at source).
packages/plugin-view/src/index.tsxregistersobject-viewas‹ObjectView schema dataSource›with norenderListView. Off a named view, that path reads onlycolumns,filter,sort,grouping,rowColorand the eight kind blocks. A named grid view'spagination,selection,hiddenFields,rowHeight,conditionalFormatting,rowActions,bulkActionsandresizableare accepted and ignored, althoughObjectGridreads each of them.- In-tree producer (the review's correction):
packages/app-shell/src/views/metadata-admin/previews/ViewPreview.tsxspreads the whole stored view body (...foldStoredListOptions(body)) intolistViews[id]and renders throughSchemaRenderer, which is the registered renderer, route 2. A stored view carryingrowHeight,hiddenFields,inlineEditorpaginationshows without them in the Studio's view preview. The console persists these keys per view, by app-shell's own comments. - Also on route 2:
examples/byo-backend-console/src/App.tsxauthorslistViewson anobject-viewnode, though that named view authors no bucket-① member.
- In-tree producer (the review's correction):
-
The delegation does not relay a named view's eight view-kind blocks (
kanban,calendar,gallery,timeline,gantt,map,chart,tree), whileListViewreads the top-level blocks. There is no rung for them in the fence; onlyoptions: activeViewgoes down. Reach: no in-tree host passes bothlistViewsandrenderListView, so this member is enumerated here and not graded on its own. -
Release text. Three pending changesets publish census figures that were stale before PR objectui#10884 and are now inverted by it:
.changeset/7924-named-list-view-liveness-census.md("21 read and 43 unread of 64 today");.changeset/7924-named-list-view-disposition-buckets.md("43 unread … 23 + 8 + 10 + 2");.changeset/object-view-unmirrored-keys-7779.md("renderer reads 21 off a named view", "43 unread members", and "listViewsstays unmirrored", false since PR objectui#10821).
At
de1b879the partition was 20 / 44; after PR objectui#10884 it is 43 read / 21 unread, bucket ① empty. The repo's precedent is a dated note appended in place to each (see the⚠️ **Dated note, …**blocks in.changeset/10156…,10167…,7189-grouped-grid-partial-disclosure.md), frontmatter byte-identical, judged sentence by sentence (landing-operations' DELIBERATE CORRECTION).
Why it matters
The spec declares these members on a named view, and the grid honours them. The Studio shows an author a preview of their stored view that silently drops rowHeight, hiddenFields and pagination. That is declared ≠ enforced on the authoring surface, which is where an author (or an AI) checks their work.
Direction (for triage to confirm)
- Member 1 first (a named producer): route 2 reads each grid member ObjectGrid honours off the active named view, the way the delegation now does (named view first, then the node where the node is read today). ⛔ No non-protocol key, ⛔ no alias;
densityMode/allowExportstay excluded (re-ruled on objectui#7924). Pin throughViewPreviewwith a stored view carryingrowHeightandhiddenFields. - Member 2: enumerated; take it with member 1 only if the same rung pattern covers it without a new host path.
- Member 3: one prose-only PR appending the three dated notes, with a same-head at-tier record naming each note.
Re-check
git -C objectui show origin/main:packages/plugin-view/src/index.tsx | grep -n "renderListView"still answers nothing.git -C objectui grep -n "foldStoredListOptions(body)" origin/main -- packages/app-shell/src/views/metadata-admin/previews/ViewPreview.tsxstill answers.- The three changesets above still carry the quoted figures.
Activity
objectstack-fleet commentedon Sep 28, 2026
os-dev-report
{
"issue": 10885,
"status": "done",
"branch": "claude/issue-10885-object-view-route2-named-grid",
"pr": "#10937",
"session": "session_014mXUNuFomfj24w7s1pZzhN — mode:subagent, so the parent PM session id (dispatch order line 1 and every commit trailer)",
"premise_still_valid": true,
"summary": "Member 1 is implemented. Route 2 is the registered object-view renderer's gridSchema, the object-grid node ObjectView hands ObjectGrid. It now reads off the active named view first each bucket-1 member the installed spec declares under the same name on a named view and on object-grid, and that ObjectGrid reads: pagination and selection (still falling back to table.pagination / table.selection), and rowHeight, resizable, searchableFields, conditionalFormatting, rowActions, bulkActions, bulkActionDefs and exportOptions (named-view only; a bare-array exportOptions is lifted to { formats }, the protocol's own parse lift). A named view's hiddenFields is subtracted from the resolved column projection. The premise holds, with one correction measured at source: ObjectGrid has no hiddenFields read and object-grid does not declare it, so 7 of the card's 8 are grid reads and hiddenFields is applied as the protocol composes it. navigation and inlineEdit are excluded with reasons; member 2 is not taken, because it would move the delegation's pinned fence; member 3 is untouched. The objectui#5097 fence (the delegation) is byte-identical: region sha1 40bc2292 on the base and the head. The census does not move (43 read / 21 unread of 64, bucket 1 empty). Draft PR #10937 is Part of #10885, and its assignee os-elon-musk is set and read back. The card's assignee was already os-elon-musk at dispatch; this run did not write it.",
"tests": "H1 on base 733fd5a, through the real ViewPreview, SchemaRenderer, registered object-view renderer and ObjectGrid (DOM): a stored view {type grid, columns [name, amount, stage], hiddenFields [amount]} still draws the header span "Budget Amount" ("expected SPAN to be null"). With rowHeight compact it draws no row-height control ("Unable to find an element with the title: Row height: compact."). The lit control (columns [name, stage]) is green on base: "Pipeline Stage" is drawn and "Record Owner" is not. NEW PINS, red on base, green on head: packages/plugin-view/src/tests/ObjectView.routeTwoNamedGridMembers-10885.test.tsx (11 tests, through SchemaRenderer, ObjectGrid mocked as sink) and packages/app-shell/src/views/metadata-admin/previews/ViewPreview.routeTwoGridMembers-10885.test.tsx (4 tests, real stack, DOM). Base 733fd5a with the two files copied onto an untouched worktree (plugin-view file at its 695a6ce blob 38c4a0ef89, which differs from head only in a header comment): "Tests 8 failed | 7 passed (15)", VERDICT command-exit 1. The 8 red: THE FIX members ("
paginationdid not arrive from the named view: expected { pageSize: 100 } to deeply equal { pageSize: 5, …(1) }"), the bare-array exportOptions lift, 4 hiddenFields rows, and the ViewPreview hiddenFields and rowHeight rows. The 7 green: 3 member-set rows, the node control, hiddenFields-with-no-projection, the ViewPreview lit control and the neither-declared control. Head 56ad7e8: "Tests 15 passed (15)", VERDICT command-exit 0. ABLATION on committed head 695a6ce with objectstack scripts/ablation-replace.mjs; the directions were predicted before the run. Leg A (--hold) put the base's two table rungs back for the ten member rungs: anchor 1 → 0, blob dcce880456e3 → 57515b34b699. Leg B (wrap) neutralised the hiddenFields read: anchor 1 → 0, blob → a01a7bdbbcf4. On disk, named rowHeight reads 2 → 1 (the fence keeps its own) and gridExportOptions 1 → 0. The run covered packages/plugin-view/ whole, both ViewPreview pin files and the census files 7779, 7923 and 7928: "Tests 8 failed | 789 passed (797)", 59 files, exactly the 8 new rows. Restore proven: blob == HEAD dcce880456e3, git diff HEAD empty. No build is needed for this ablation: vitest resolves @object-ui/* to src through the vitest.config.mts aliases. CONSUMER SWEEP at 695a6ce, under os-verify-lock: batch A "Test Files 75 passed (75) Tests 1882 passed (1882)" (plugin-view whole, 10 types tests including the census object-view-unmirrored-keys-7779, schema-reference-named-list-view-keys-7923 and object-view-listviews-by-reference-7928, plugin-map, plugin-list, plugin-grid, core, react, examples, scripts). Batch B "Test Files 38 passed (38) Tests 350 passed (350)" (app-shell ViewPreview, StudioDesignSurface, ResourceEditPage and AppContent tests, 18 ObjectView.* tests including relayRungCensus-7559, and 5 apps/console tests). The 18 markdown readers: "Tests 829 passed". No census number moved and no census test was edited. TYPE-CHECK at 695a6ce, exit 0: @object-ui/plugin-view and @object-ui/app-shell (tsc --noEmit && tsc -p tsconfig.test.json), each after its dependency closure was built by turbo. --listFilesOnly shows each new pin in its test program (1 and 1). ESLINT --no-inline-config on the 3 edited TS/TSX files, the whole population (eslint.config.js files **/*.{ts,tsx}; --format json reports 3 files): 0 errors. ObjectView.tsx has 60 warnings, per rule identical to base (no-explicit-any 53, only-export-components 4, exhaustive-deps 3). The new pins have 6 and 1 no-explicit-any warnings. Not type-aware (projectService/parserOptions 0 hits vs languageOptions 1), so no untouched file's verdict can move.","gates": "At head 56ad7e8, exit 0 each: check-changeset-presence ("3 source file(s) of 2 released package(s) changed, and this change declares 1 changeset(s)"), check-changeset-no-major, check-changeset-fixed, check-changeset-overwrite, check-changeset-claims (6 pending paragraphs name a touched file; each read, none made false), check:pending-changeset-literals, check:new-line-citations ("0 new citation(s)"), check:control-bytes ("OK (scanned 9183 tracked text file(s)"), check:test-path-roots, check:vi-mock-specifiers, check:vi-mock-inherit, check:vi-mock-override-shape, check:spec-symbols, check:phantom-deps ("Every in-scope import is declared"), check:handler-key-reads, check:doc-types, check:doc-fences, check:doc-example-ids, check:doc-example-readers, check-doc-expression-carriage, check-doc-links ("Links are valid across 17 scan roots"), check-governed-queue-guard --test on the 6 paths ("An ordinary pull request"). Merge-tree proofs: git merge-tree --write-tree is clean against PR objectui#10914 head 2b3d206 (tree 4a03a230b6) and against fresh origin/main 733fd5a (tree 749f02ef74). NOT MEASURED: check:readme-exports, reason: prerequisite not met (86 self-imports unjudged; workspace dists not all built); this diff adds no fenced block to any README. NOT MEASURED: check:doc-snippets / check:doc-examples, reason: no fenced block added. Full app-shell and types suites and repo-wide lint: declared to CI. CI on PR #10937 at report time: 42 check runs, 20 success, 3 skipped, 19 in_progress, 0 failure. It was not waited on.",
"files_changed": [
"packages/plugin-view/src/ObjectView.tsx (gridSchema member rungs; helpers withoutHiddenFields and gridExportOptions)",
"packages/plugin-view/src/tests/ObjectView.routeTwoNamedGridMembers-10885.test.tsx (new)",
"packages/app-shell/src/views/metadata-admin/previews/ViewPreview.routeTwoGridMembers-10885.test.tsx (new)",
".changeset/10885-object-view-route2-named-grid.md (new; @object-ui/plugin-view patch; Clause-② no)",
"packages/plugin-view/README.md (one prose paragraph)",
"content/docs/plugins/plugin-view.mdx (one prose paragraph)"
],
"deviations": [
"Beyond the claimed file surface: one prose paragraph each in packages/plugin-view/README.md and content/docs/plugins/plugin-view.mdx, under the docs-driven rule of objectui AGENTS.md section 5. No code fence; the 18 tests that read those files are green.",
"Not in the order, needed for the type-check and for a correct shape: exportOptions is narrowed to the object-grid slot (a bare format array is lifted to { formats }, as the protocol's parse and ListView do). conditionalFormatting and bulkActionDefs carry a type assertion to ObjectGridSchema's element type (the spec's expression wire is wider; the runtime evaluator reads it). The same PR pins the lift.",
"No shared helper for the delegation and route 2. objectViewHostSurface.test.tsx section 1b derives the fence's named-view read set and rung walk from the fence text, so moving the reads out would require editing the delegation's pins, which the order forbids.",
"Measurement split across two heads. The union sweeps, type-checks and ablation ran at 695a6ce. The final commit 56ad7e8 changes only two lines of the plugin-view pin's header comment, and the gate batch and both pin files were re-run on 56ad7e8.",
"The app-shell type-check ran with NODE_OPTIONS=--max-old-space-size=6144, because its test program is the repo's largest.",
"Seven consecutive Bash calls met a transient auto-mode classifier outage (no verdict), mid-run. Read-only work continued in the meantime, the calls were re-issued once it cleared, and no write was rerouted.",
"The os-dev role file was read at objectstack origin/main (df3ba164a5), as the order directs. Where it differs from the copy injected into this session, origin/main governed."
],
"mcp_calls": "0 — no MCP GitHub tool was called",
"api_writes": "3 REST writes, all through the scripts/pm write tools (fleet-write relay, as objectstack-fleet[bot]). (1) pr_create via with-fleet.sh --via dispatch: request fw-20260928T081543Z-030e48, relay run 36396312563 success, POST /repos/objectstack-ai/objectui/pulls (draft) opened #10937, and the body was read back byte-identical (16085 bytes). (2) label-write.mjs --assign os-elon-musk: request fw-20260928T081647Z-4789c4, run 36396421798 success, POST /repos//issues/10937/assignees, read back MATCHES. (3) This os-dev-report comment via post-stamped.mjs: POST /repos//issues/10885/comments. Plus git push (not REST): the empty-branch probe and 4 commit pushes.",
"open_questions": [
{
"question": "Route 2 still leaves four named-view members unhonoured that the delegation reads. navigation: ObjectView's row click reads only the node's navigation, and ObjectGrid obeys the onRowClick it is handed. inlineEdit: ObjectGrid reads editable, which ListView derives under its objectui#4647 grant gate. fieldOrder: the composition's third key. label: the grid caption and export filename. Should these become a further member of objectui#10885 (the family successor card, open for member 3), or be ruled out for route 2?",
"options": [
"A: add them to objectui#10885 as member 4 and dispatch after member 3. navigation needs ObjectView's navigationConfig to read the named view, which also moves the delegation's click path; inlineEdit needs the grant gate on route 2.",
"B: rule them out for route 2 and record the ruling on objectui#10885.",
"C: take only fieldOrder and label (pure data, no permission or click contract) as member 4, and leave navigation and inlineEdit for a ruling."
],
"recommendation": "C. Real need: ViewPreview relays stored view bodies, and fieldOrder and label are protocol members a stored grid view carries. Long-term fit: both are named-view-first reads into slots the grid already has, with no new host path. AI-error resistance: an author who writes fieldOrder and sees it ignored in the Studio preview is the declared-not-enforced trap this card exists for. Startup focus: navigation and inlineEdit each carry a contract (click ownership, the grant gate) and deserve a ruling, not a rung. These readings are from source, not a measured render, so the seat should re-measure before dispatch."
}
],
"out_of_scope_findings": [
"carrier: objectui#10885 (the named-view family successor card, open for member 3) · route 2 does not honour a named view's navigation, inlineEdit, fieldOrder or label (see open_questions[0]) · noted in PR #10937 Acceptance notes, not filed; a source reading, not a measured render · dedupe words: route 2 named view navigation, object-view grid fieldOrder named view, ViewPreview inlineEdit stored view, handleRowClick navigationConfig",
"carrier: none (承接者:无) · ObjectGridSchema in @object-ui/types is narrower than the spec's object-grid: a conditionalFormatting rule condition in the { dialect, source } wire, and a bulkActionDefs visible wire with ast and no source, both fail tsc, measured by the plugin-view type-check before the assertions; the runtime shared evaluator reads both · Acceptance notes only · dedupe words: ObjectGridSchema conditionalFormatting expression wire, BulkActionDef visible ast, object-grid type narrower than spec",
"carrier: PR objectui#10278 (parked, holds packages/plugin-grid/src/ObjectGrid.tsx) · the spec's object-grid accepts exportOptions as a bare format array and keeps it an array at parse, while ObjectGrid reads only exportOptions.formats (source reading; the named-view path is lifted in this PR) · noted, not filed · dedupe words: ObjectGrid exportOptions bare array, object-grid exportOptions formats array, grid export legacy spelling"
]
}
Generated by Claude Code
objectstack-fleet commentedon Sep 28, 2026
✅ ACCEPT: PR objectui#10937 (
Part of, member 1) ata27d51bdfe(the reviewed097ba79141plus a base merge ofmain29c76e573c, objectui#10916's fix); ready and auto-merge follow this ACCEPTdomain:uiseat #2,session_014mXUNuFomfj24w7s1pZzhN. I checked this against the diff and CI, not against the reports' own account.5865109811.5863041098and the unlock5864381642.5866198033, plus the fix-round report relayed in-session.object-viewrenderer, which the StudioViewPreviewuses) reads ten grid members off the active named view first (pagination/selectionstill fall back totable), subtracts a named view'shiddenFieldsfrom the projection, and lifts a bare-arrayexportOptions. The objectui#5097 fence is byte-identical; the census is unmoved (43 read / 21 unread)5866387245FAIL (wording: the ten presented as the whole set), then fix round 1, then the in-seat delta record PASS at097ba79141'@object-ui/plugin-view': patchgit merge-treeclean againstmainand against PR objectui#10914's heada27d51bdfe: every check final and green before ready,Spec Main Shape Gateincluded. The base merge changed none of this PR's own files (diff identical before and after)Part of #10885. The card stays open for member 3 (the three stale census changesets) and member 4 (fieldOrder,label,data,navigation,inlineEditon route 2)objectstack-fleet commentedon Sep 28, 2026
Member 1 merged ⇒ released to
pm:queuefor members 3 and 4 ·domain:uiseat 2 · 2026-09-28T09:5xZsession_014mXUNuFomfj24w7s1pZzhN. PR objectui#10937 merged through the queue asb73e15bf7. I verified it by content onorigin/main:a27d51bdf.packages/plugin-view/src/ObjectView.tsx, differs by exactly one comment line: PR objectui#10914's citation edit, which merged first. This PR's own hunks are intact.Claude.Release:
session_014mXUNuFomfj24w7s1pZzhN· cause: member 1 (route 2 reads a named grid view's ten grid members and subtracts itshiddenFields) is closed. The card stays open for members 3 and 4 · destination:pm:queue. The claim5865109811is spent, and the next dispatch re-claims.What the next claims carry:
5863041098, execution note 3): one prose-only PR appending dated notes to the three stale census changesets,7924-named-list-view-liveness-census.md,7924-named-list-view-disposition-buckets.mdandobject-view-unmirrored-keys-7779.md.mainnow reads 43 read / 21 unread of 64, with bucket ① empty. Member 1 moved no census figure.data, per contract review5866387245): route 2 also readsfieldOrder,label,data,navigationandinlineEditoff the active named view.navigation:ObjectView'snavigationConfigreads only the node today, so route-2 and delegation row clicks both ignore a named view'snavigation. One named-view-first read outside the objectui#5097 fence fixes both, and the fence stays byte-identical.inlineEdit:ObjectGridgateseditableitself (schema.editable ?? falseAND the object's inline-edit grant), so relaying it cannot widen editing past a grant. It needs pins, not a ruling.fieldOrder(the composition's third key),label(the grid caption and export filename) anddata(ObjectGrid's fetch source throughresolveRecordSourceConfig): named-view-first reads into slots the grid already has.ObjectGridSchema's rulecondition/visibletypes are narrower than the named view's wire (the casts in member 1). It is a type-onlyClause-②move and its own card, not this one's.domain:uiseat 2 · partial landing · 2026-09-28T09:5xZobjectstack-fleet commentedon Sep 28, 2026
Claim: PM loop round 11 (serial) —
domain:uiexecution seat 2Session:
session_014mXUNuFomfj24w7s1pZzhNBranch:
claude/issue-10885-census-changeset-notesWorktree:
objectui-issue-10885-m3Domain:
domain:uiSeat:
domain:ui#2File surface (member 3,
Part of #10885), per triage5863041098execution note 3 and the release5867513786:.changeset/7924-named-list-view-liveness-census.md,.changeset/7924-named-list-view-disposition-buckets.mdand.changeset/object-view-unmirrored-keys-7779.md.mainthe partition is 43 read / 21 unread of 64, with bucket ① empty.listViewsis no longer unmirrored (PR objectui#10821).fieldOrder,label,data,navigation,inlineEdit) is a later dispatch.Container & model:
S,mode:subagent,model: opus(default judgment tier)Clause-②: no
Why no: release-text corrections only. No declared type, accepted key or published surface moves.
Thread-read: 5867513786
Serial constraints cleared:
origin/main5c94589f0(10 open PRs). None touches these three changesets.objectstack-fleet commentedon Sep 28, 2026
os-dev-report
{
"issue": 10885,
"status": "done",
"branch": "claude/issue-10885-census-changeset-notes",
"pr": "#10955",
"session": "session_014mXUNuFomfj24w7s1pZzhN — mode:subagent, so the parent PM session id (dispatch order line 1 and the commit's Claude-Session trailer)",
"premise_still_valid": true,
"summary": "Member 3 is delivered as draft PR objectui#10955 (head 4ee1232, base 5c94589). It is prose only: two pending changesets each get one dated note in the objectui#10533 form, 34 insertions, 0 deletions, frontmatter byte-identical. 7924-named-list-view-liveness-census.md: '21 read and 43 unread of 64 today' becomes 43 read / 21 unread of 64 (moved by objectui#7928 / PR objectui#10821, then objectui#10758 / PR objectui#10884), and 'the disposition ... stays with objectui#7928' is corrected (ruled on objectui#7924 and landed). 7924-named-list-view-disposition-buckets.md: '43 unread ... 23 + 8 + 10 + 2' becomes 21 unread, 0 + 8 + 11 + 2. PARTIAL PREMISE: the third entry, object-view-unmirrored-keys-7779.md, is left byte-identical, because PR objectui#10891 (objectui#10877, 733fd5a, merged 06:38Z) already appended a dated note that supersedes every phrase the dispatch quotes and names objectui#10758. The card's census reading (43 / 21 of 64, bucket 1 empty) is confirmed on main, and PR objectui#10937 moved no figure. The card assignee was not touched; the PR assignee is os-elon-musk.",
"files_changed": [
".changeset/7924-named-list-view-liveness-census.md (+19 -0: one dated note after the last paragraph, covering the two adjacent false paragraphs)",
".changeset/7924-named-list-view-disposition-buckets.md (+15 -0: one dated note after the last paragraph)"
],
"deviations": [
"Zone 1 item 1: .changeset/object-view-unmirrored-keys-7779.md is NOT edited (whole-file md5 e6871b2c128737ee66b94ee8d0ecd07d at base and head). All three quoted phrases ('renderer reads 21 off a named view', '43 unread members', '
listViewsstays unmirrored') already carry PR objectui#10891's note 'Dated note, 2026-09-28 — the value type has since been decided, andlistViewsis mirrored by reference — objectui#7928'. After that PR's patch round 2 (REWORK 5864543090), the note says 'the split is no longer the 21 and 43 this entry counted' and names objectui#7928 and objectui#10758. Under Zone 1 item 2 (judge each sentence; a note corrects only a sentence false for the release), no uncorrected false sentence remains there. The triage's '#10891 touches none of these three' (5863041098, 03:54Z) predates #10891's patch round 1.","Zone 3 title: 'date the two named-view census entries' instead of 'three', to match the diff; otherwise verbatim.",
"Zone 1 item 2 vs AGENTS.md commandment 9: the order asks each note to state the figure. Each note states it dated ('at this note's date') and names the pin that re-derives it (object-view-unmirrored-keys-7779.test.ts). The #10891 seat chose the no-figure option for the 7779 note, citing drift before release PR objectui#5400; this conflict is recorded in the PR's Acceptance notes.",
"Harness attribution: the harness offered a commit trailer with a model name and a PR footer in another form. The commit uses the model-free pair (Claude-Session URL plus 'Co-authored-by: Claude'), per AGENTS.md and the role file. The PR body ends with the role file's session-URL footer."
],
"gates": [
"pnpm check:changeset-claims — '✅ No pending changeset names a file this change touches.' (corpus 2, 0 declaring a package) — exit 0",
"pnpm check:pending-changeset-literals — '✅ No test source names a pending changeset.' — exit 0",
"node scripts/check-changeset-overwrite.mjs — report-only; 2 modified, each 'declared at base: nothing (no frontmatter entries)' and 'declares now: nothing' = case 2 (prose correction) — exit 0",
"node scripts/check-changeset-presence.mjs — '✅ No source or published contract of a released package changed in this range, so no changeset is owed.' — exit 0",
"node scripts/check-changeset-no-major.mjs — '✅ No changeset declares a
majorbump.' — exit 0","node scripts/check-changeset-fixed.mjs — '✅ All workspace packages are in the changeset fixed group.' — exit 0",
"pnpm check:control-bytes — '✅ check-control-bytes: OK (scanned 9228 tracked text file(s); skipped 85 binary).' — exit 0",
"pnpm check:new-line-citations — 'VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only' — exit 0",
"pnpm check:spec-symbols — '✅ spec member citations: 1421 sources + 184 documentation pages; nothing cites a key its spec symbol does not declare.' — exit 0",
"node scripts/check-doc-links.mjs — 'Links are valid across 17 scan roots.' — exit 0",
"node scripts/check-governed-queue-guard.mjs --test (the 2 paths) — '✅ NOT GOVERNED — 2 path(s) checked against 5 governed surface(s); none matched.' — exit 0",
"git merge-tree --write-tree against a fresh origin/main 5c94589 (fetched into a private ref) — clean, tree 99f8c55412 — exit 0",
"CI at head 4ee1232, one read at 2026-09-28T10:40:40Z: 40 check runs, 24 success, 3 skipped, 13 in_progress, 0 failures — in_progress"
],
"tests": "All gates and tests ran at head 4ee1232, after the final commit; exits were captured by redirect-then-status. (1) Census on main, base 5c94589, under os-verify-lock (slot issue-10885-m3): 'pnpm exec vitest run packages/types/src/tests/object-view-unmirrored-keys-7779.test.ts packages/types/src/tests/schema-reference-named-list-view-keys-7923.test.ts --reporter=verbose' gave 'Test Files 2 passed (2)', 'Tests 237 passed (237)' and 'os-verify-lock: VERDICT command-exit 0'. Quoted census lines: '✓ … the census partitions the declaration exactly: 43 read + 21 unread = 64, disjoint and exhaustive'; '✓ … the renderer reads exactly forty-three names off a named view — every one of them declared'; '✓ … the 21 unread members partition FOUR ways — 0 + 8 + 11 + 2 since objectui#10758 (23 + 8 + 11 + 2 before it) — disjoint and exhaustive'; '✓ … the protocol declares 50 keys for a named list view, and the instrument that reads them fires'; '✓ … objectui declares every LIVE protocol key on this surface — the narrower-than-protocol direction is EMPTY today'. (2) Member 1 moved no figure: 'git merge-base --is-ancestor b73e15b HEAD' exits 0, and the census test's last commit is 35d68c4 (PR objectui#10884). (3) Tests that read changesets, at head 4ee1232 under the verify lock: all 33 test files that 'git grep -l .changeset' finds over '/tests/' and '/.test.' (the one .md fixture excluded), plus the 7923 pin. They gave 'Test Files 34 passed (34)', 'Tests 1293 passed (1293)' and 'VERDICT command-exit 0'. 'scripts/markdown-test-inputs.mjs --list' maps '.changeset/' to check-changeset-no-major.test.ts and dollar-dialect-alias-census.test.ts, both among the 34. (4) Frontmatter md5, before and after: census 2ee28f1e1b449ccc2dd97fdcc6c2bc1f to 2ee28f1e1b449ccc2dd97fdcc6c2bc1f; buckets 2ee28f1e1b449ccc2dd97fdcc6c2bc1f to 2ee28f1e1b449ccc2dd97fdcc6c2bc1f; 7779 ecedb10c5189b2c8841ea736b67c3cc6 to ecedb10c5189b2c8841ea736b67c3cc6 (whole file unchanged, e6871b2c128737ee66b94ee8d0ecd07d). 'git diff -U0' shows 0 deleted lines, and numstat is 19/0 and 15/0. (5) No new pin was added, so red-then-green evidence is N/A. No ablation, because nothing executable changed. Package type-check and package tests are N/A: no package source was touched.",
"mcp_calls": "0 — no MCP GitHub tool was called",
"api_writes": "3 — each went through the fleet-write relay (POST /repos/objectstack-ai/objectstack/dispatches, landing as objectstack-fleet[bot]): (1) pr_create, POST /repos/objectstack-ai/objectui/pulls (draft), request fw-20260928T103839Z-d884fb, run 36410927978 success, giving PR 10955; (2) label-write --assign os-elon-musk, POST /repos//issues/10955/assignees, request fw-20260928T104005Z-1b488e, run 36411065131 success, read-back MATCHES; (3) this os-dev-report comment, via post-stamped.mjs, POST /repos//issues/10885/comments. There were also 2 git pushes (not REST): the empty-branch probe and 4ee1232.",
"open_questions": [
{
"question": "object-view-unmirrored-keys-7779.md was left byte-identical, because PR objectui#10891's dated note already supersedes every phrase the dispatch quoted. Should a second dated note add the 43 / 21 figure there and say that pageName and tabs (protocol members declared inert) stay unread? The existing note says objectui#10758 read 'a named view's remaining protocol members'.",
"options": [
"A: leave it. The existing note is true for the release on every phrase the card names, and it passed after the at-tier FAIL whose remedy allowed 'drop the two numbers'. The census pin re-derives the figure.",
"B: append a second dated note in a patch round on PR objectui#10955, stating 43 read / 21 unread of 64 and naming pageName and tabs as the unread protocol members."
],
"recommendation": "A. B would be a second correction of the same sentences, and it would reverse the #10891 seat's recorded choice (REWORK 5864543090). 'Remaining protocol members' echoes PR objectui#10884's own title and is recorded as an Acceptance note."
}
],
"out_of_scope_findings": [
"class: a · reach: exception: release-text · .changeset/7947-named-list-view-figures.md (pending, no dated note) states present-tense figures that are false for the release. It says 'The declaration has 47 top-level members' (64 since objectui#8980, PR objectui#9534), 'The derived "unread" figure is 41' (21 on main), 'The seventh,
data, is not declared onNamedListViewat all' (declared since objectui#8980) and 'It is now an exacttoBe(47)' (the pin asserts toBe(64)). This is the same family as member 3, so fold it into objectui#10885 member 3 by a seat surface addendum and a patch round on PR objectui#10955 (the PR objectui#10891 patch-round-1 route), not a new card. · dedupe words: 7947-named-list-view-figures, NamedListView 47 top-level members, named list view figures dated note, toBe(47) changeset","carrier: none · .changeset/8355-retire-calendar-date-aliases.md says 'or enforcing 43 unread members' (21 on main), inside a paragraph whose premise PR objectui#10891's dated note already supersedes ('
listViewshas since been mirrored') · noted, not filed","carrier: none · in object-view-unmirrored-keys-7779.test.ts, the member-count assertion's failure message still says to update the '64 declared / 43 unread' figures, in a three-file list · test prose, fires only on failure · noted, not filed",
"carrier: none · the existing 7779 dated note says objectui#10758 read 'a named view's remaining protocol members'; pageName and tabs, protocol members ruled inert, stay unread · noted, not filed (see open_questions[0])"
]
}
Generated by Claude Code
objectstack-fleet commentedon Sep 28, 2026
✅ ACCEPT: PR objectui#10955 (
Part of, member 3) atacf69b7835; ready and auto-merge follow this ACCEPTdomain:uiseat #2,session_014mXUNuFomfj24w7s1pZzhN. I checked this against the diff and CI, not against the reports' own account.5868038577.5868316648, plus the patch-round report relayed in-session.toBe(64). Each names the pin that re-derives them. 0 lines deleted, and every frontmatter block is byte-identical.changeset/object-view-unmirrored-keys-7779.mdstays byte-identical, because PR objectui#10891's note already covers it. The first out-of-scope finding, the 7947 entry, was folded in as patch round 1acf69b7835(prose only,Clause-②: no)git merge-treeclean againstmain06a96e9480. PR objectui#10908 touches none of these filesacf69b7835: every check final and green before readyPart of #10885. The card stays open for member 4: route 2 readingfieldOrder,label,data,navigationandinlineEditoff the active named viewobjectstack-fleet commentedon Sep 28, 2026
Claim: PM loop round 12 (serial) —
domain:uiexecution seat 2Session:
session_014mXUNuFomfj24w7s1pZzhNBranch:
claude/issue-10885-route2-named-view-restWorktree:
objectui-issue-10885-m4Domain:
domain:uiSeat:
domain:ui#2File surface (member 4, the card's last graded member, so
Fixes #10885. Member 2 was enumerated, not graded, and goes to the PR's Acceptance notes per triage execution note 2), per the seat ruling recorded in the release5867513786(option A widened bydata, contract review5866387245):packages/plugin-view/src/ObjectView.tsx, outside the objectui#5097 fence, which stays byte-identical:fieldOrder,label,dataandinlineEditoff the active named view first;navigationConfigreads the named view'snavigationfirst, which fixes route-2 and delegation row clicks alike.packages/plugin-view/src/__tests__/.'@object-ui/plugin-view': patchchangeset.packages/plugin-view/README.mdandcontent/docs/plugins/plugin-view.mdx: the member-1 sentence "label,dataandnavigation… are not read off the named view on this path" becomes false and is rewritten..changeset/10885-object-view-route2-named-grid.mdfor the same sentence.Container & model:
M,mode:subagent,model: opus(default judgment tier)Clause-②: no
Why no: no declared type, accepted key or export moves. Route 2 reads five members the named view already declares into slots the grid already has, and the census read set is unchanged (all five are already read by the delegation).
Thread-read: 5868568636
Serial constraints cleared:
5868038577; ACCEPT5868568636) is in the merge queue, which does not count. It touches no file on this surface.origin/main06a96e9480(16 open PRs). None touchespackages/plugin-view/. Parked draft PR objectui#10278 touchesObjectGrid.tsx, which this member does not edit.objectstack-fleet commentedon Sep 28, 2026
os-dev-report
{
"issue": 10885,
"status": "needs_decision",
"branch": "claude/issue-10885-route2-named-view-rest",
"pr": "#10967",
"session": "session_014mXUNuFomfj24w7s1pZzhN — mode:subagent, so this is the parent seat's session id",
"premise_still_valid": true,
"summary": "Draft PR objectui#10967 (head 600cf89, base 06a96e9, 3 commits, 9 files) lands three of member 4's five reads, all in ObjectView.tsx outside both fences. (1) navigationConfig = currentNamedViewConfig?.navigation ?? schema.navigation: whole object, no activeView rung. The row click on route 2 and on the renderListView delegation (one shared handler), formLayout and the drawer width now follow the named view. (2) gridSchema.editable = currentNamedViewConfig?.inlineEdit. Route 2 passed no editable at base (0 occurrences in the gridSchema memo), and ObjectGrid still ANDs it with the object's inline-edit verdict and the update grant. (3) A module-private inFieldOrder applies fieldOrder to both projection slots after withoutHiddenFields, copying ListView.effectiveFields. label and data are NOT landed, because each hit its stop condition in the dispatch order (open_questions). label: relaying paints a caption element that repeats the tab-strip label, which the delegation never paints. data: ListView and ObjectGrid disagree on the object provider. So the PR says
Part of #10885rather than a closing line. Both fences are byte-identical and the census is unmoved at 43 read / 21 unread of 64. The objectui#7779 READ_TEXT pin was updated, because it pins the exact navigationConfig line.","files_changed": [
"packages/plugin-view/src/ObjectView.tsx (+49/-12)",
"packages/plugin-view/src/tests/ObjectView.namedViewNavigation-10885.test.tsx (new, 7 tests)",
"packages/plugin-view/src/tests/ObjectView.namedViewInlineEdit-10885.test.tsx (new, 3 tests)",
"packages/app-shell/src/tests/objectViewRouteParity.fieldOrder-10885.test.tsx (new, 6 tests)",
"packages/types/src/tests/object-view-unmirrored-keys-7779.test.ts (READ_TEXT.navigation string follows the new navigationConfig line)",
"packages/plugin-view/README.md and content/docs/plugins/plugin-view.mdx (the member-1 sentence rewritten; one sentence in Opening a record)",
".changeset/10885-object-view-route2-named-grid.md (one dated note appended: +2/-0; frontmatter md5 4d3ab4fd127d2f0feaabd7840d888656 before and after)",
".changeset/10885-object-view-route2-named-view-rest.md (new, '@object-ui/plugin-view': patch)"
],
"fence": "HOST-COMPOSITION SURFACE (objectui#5097), #region line through #endregion line, 186 lines: sha1 40bc22920811a42b0284f478746ff5a5f6b18d10 at base 06a96e9 and at head 600cf89. VIEW-TYPE BRANCHES: a140d0421c41a4401a8b96f6f356b9e8daa9b168 at base and at head.",
"census": "object-view-unmirrored-keys-7779 and schema-reference-named-list-view-keys-7923. Base (ObjectView.tsx swapped to base blob 34f0656469): 237 passed of 237. Head 600cf89: all passed in a 5-file run (315 tests). Both sides carry the 43 read / 21 unread = 64 partition pins ('the renderer reads exactly forty-three names off a named view', 'the census partitions the declaration exactly: 43 read + 21 unread = 64'). readSites.label is still 2, because no label read was added. Before the pin update the head run was 236 passed, 1 failed; the failure was the READ_TEXT exact-text pin for navigation, and no figure moved.",
"tests": "RED ON BASE / GREEN ON HEAD. Each leg starts from HEAD, proves its mutation on disk with a grep count or blob hash, runs the 3 new pin files (16 tests), and restores with git checkout HEAD plus a blob-hash check (git diff HEAD empty after each). base (ObjectView.tsx = base blob): 7 passed, 9 failed. The 9 red rows are every non-control row; the 7 green rows are the controls. Failures are assertions, e.g.
expected [ 'a', 'b', 'c', 'd' ] to deeply equal [ 'c', 'a', 'b', 'd' ], onNavigate not called with r1/view, andthe record form is not inside a container of the named width. head: 16 passed. PER-MEMBER ABLATION: navigation (navigationConfig back to schema.navigation; named read 0, node-only 1): 12 passed, 4 failed, exactly the 4 navigation fix rows. inlineEdit (editable line removed, 0 hits): 15 passed, 1 failed, exactly the inlineEdit fix row. fieldOrder (fieldOrder forced undefined; read 0, ablated 1): 12 passed, 4 failed, exactly the 4 parity rows. grant can-fail proof (ObjectGrid inlineEditable without objectInlineEditable): 2 passed, 1 failed, exactly 'THE GRANT STILL WINS'. The grant row is a control on base by construction, since base never edits. SUITES at head 600cf89: plugin-view type-check exit 0 (both new pins in tsconfig.test.json by --listFilesOnly); vitest run packages/plugin-view/: Test Files 56 passed (56), Tests 549 passed (549). types type-check exit 0, and its 5 ObjectView readers: 315 passed. app-shell type-check exit 0 (the parity pin is in the program). ObjectView readers in other packages: 34 files, Tests 1218 passed (1218); the set is 21 app-shell files that import plugin-view or read its source, react 9357, plugin-map x2, plugin-list 4024, 4 script tests, schema-catalog gallery, 3 console tests and cli app-generator. DECLARED NARROWING: the rest of app-shell's 858 test files were not run locally and belong to CI; no published export or type moved (inFieldOrder is module-private). No ablation-replace.mjs exists in objectui, so each mutation was a python replace that asserts exactly one anchor, then a grep -c on disk. Vitest resolves @object-ui/* to src by alias, so no dist rebuild was needed for the ablations.","gates": [
"check-changeset-presence exit 0: '1 changeset(s) added' / '5 source file(s) of 3 released package(s) changed, and this change declares 1 changeset(s)'",
"check-changeset-overwrite exit 0 (report-only): 1 modified, case 2 dated note, declared at base and now '@object-ui/plugin-view: patch'",
"check:changeset-claims exit 0 (report-only): 6 pending entries name touched files (6726, 7070, 7499, 8221, 8653, object-view-unmirrored-keys-7779); each was read and still holds",
"check:pending-changeset-literals exit 0: 'No test source names a pending changeset.'",
"check-changeset-no-major exit 0: 'No changeset declares a major bump.'",
"check:new-line-citations exit 0: 'VERDICT new-cross-file-line-citations: 0 new citation(s)'",
"check:control-bytes exit 0: 'check-control-bytes: OK (scanned 9238 tracked text file(s))'",
"check-doc-links exit 0: 'Links are valid across 17 scan roots.'",
"check:spec-symbols exit 0: 'spec member citations: 1422 sources + 184 documentation pages; nothing cites a key its spec symbol does not declare.'",
"check-doc-component-types, check-prompt-component-keys, check-doc-example-ids, check:doc-fences, check-doc-snippet-types, check-doc-example-types, check:doc-example-readers, check:docs-route-closure: all exit 0",
"check:readme-exports: exit 1 at first as PREREQUISITE NOT MET (cli and plugin-ai unbuilt; plugin-view judged clean); after building those two, exit 0: '549 real, 0 wrong-path, 0 fabricated'",
"check:phantom-deps, check:vi-mock-specifiers, check:vi-mock-inherit, check:vi-mock-override-shape, check:test-path-roots: all exit 0",
"check:eager-closure after vite build of apps/console. Base: 'Console eager closure is 3102.9 KB gzipped across 330 of 2446 chunks (budget: 3104.5 KB, headroom: 1.6 KB)', eagerGzipBytes 3177396, plugin-view chunk gzip 18798. Head: '3103.0 KB ... headroom: 1.5 KB', eagerGzipBytes 3177460, plugin-view chunk gzip 18866. Delta +64 bytes gzip; the plugin-view chunk is eager.",
"git merge-tree --write-tree clean against fresh main 95a7c8d (tree bffa22dd6a) and against PR objectui#10955 head acf69b7 (tree 22d3cf4ecc). PR objectui#10955 merged as 462c858. Its head is not an ancestor of main (exit 1; control leg: base 06a96e9 is an ancestor, exit 0; not shallow). None of the 5 commits since base touches this PR's files.",
"ESLint on the 5 changed TS files: 0 errors. This diff adds no 'any' to ObjectView.tsx. Repo-wide pnpm lint is CI-owned: NOT MEASURED locally.",
"check-governed-queue-guard --test over the 9 paths: 'NOT GOVERNED'",
"PR body read back: 11894 bytes sent, 11894 stored, byte-identical, session-URL footer intact"
],
"deviations": [
"PR line 1 is
Part of #10885, not the ordered closing line. label and data go back as needs_decision, and the role file forbids a closing keyword on a card headed for a decision. Line 2 isClause-②: noas ordered. If the seat splits label and data onto a new card, the seat can supply the closing line as a body replacement.","PR title names the three landed members (fieldOrder, navigation, inlineEdit), not the five in the ordered title, so the title stays true.",
"Two files outside the claim's surface. packages/types/src/tests/object-view-unmirrored-keys-7779.test.ts: READ_TEXT pins the exact navigationConfig line; it was red at head and is updated to the new line. packages/app-shell/src/tests/objectViewRouteParity.fieldOrder-10885.test.tsx: the parity pin needs ListView, which plugin-view cannot import without a phantom dependency.",
"The data provider table and the label caption were measured with scratch-only relays and a scratch probe that imported @object-ui/plugin-list from a plugin-view test. The probe was restored by blob hash and is not in the branch.",
"One verify-lock batch (the doc snippet/example/readers run) chained parts with ';'. Its VERDICT line is batch-last-exit, so each part's exit was echoed separately (all 0)."
],
"mcp_calls": "0 — no MCP GitHub tool was called",
"api_writes": "3 — all through scripts/pm write tools on the fleet-write relay, each a POST /repos/objectstack-ai/objectstack/dispatches that the relay executed as objectstack-fleet[bot]: (1) pr_create, POST /repos/objectstack-ai/objectui/pulls (draft, PR 10967); (2) label-write --assign, POST /repos//issues/10967/assignees ['os-elon-musk'], read back MATCHES; (3) post-stamped os-dev-report comment, POST /repos//issues/10885/comments. git push is not REST. Zero label writes.",
"open_questions": [
{
"question": "label (member 4). Should route 2 hand ObjectGrid the active named view's label? Measured with a scratch relay and the real ObjectGrid: with two named views the tab strip shows LABEL_ALL and the table gains a caption element reading LABEL_ALL (a second visible title). With one named view (no tab strip, which is the Studio ViewPreview's case) the caption is the only label. The delegation paints no caption, because ListView hands its grid no label. Relaying also moves the objectui#7779 pin readSites.label from 2 to 3. Today route 2 already reads label as the tab strip's text.",
"options": [
"A: relay label: currentNamedViewConfig?.label into gridSchema. The export filename and the record-detail heading follow the view, but a caption repeats the label under the table on route 2 only, and one pin changes.",
"B: keep label off the grid on route 2 (status quo; the docs already say so). The export filename falls back to table.title.",
"C: relay it to the export filename only, through a new grid key or a caption switch. That is a declared-type move in @object-ui/types and plugin-grid (Clause-② yes)."
],
"axes": "Real need (measured): every in-tree named view authors label (byo-backend-console 'All', the schema-catalog named-views JSON, the README and docs examples), and route 2 shows it in the tab strip when there are 2+ views. No card or consumer asks for the view label in route 2's export filename, and stored-view usage is not measured. Long-term: A creates a new route divergence, a caption that ListView never paints. C adds surface for one filename. B keeps both routes visually alike. AI error: under B, label is not a dropped key, since route 2 reads it for the tab strip, so it is not the declared-not-enforced trap; A shows an authored label twice. Startup focus: B costs nothing; C expands surface; A changes visible UI on the authoring preview.",
"recommendation": "B. label is already read on route 2, as the tab text. Relaying paints a duplicate caption that the delegation never shows, and the only thing gained is an export filename nobody measured a need for."
},
{
"question": "data (member 4). The dispatch order says to stop if ListView and ObjectGrid disagree on a provider, and they do. Measured on the same named view with node objectName probe_task. value: both draw the items. object (other_obj): the delegation's ListView fetches probe_task, because the objectui#7477 ruling B gap-fill lets an objectName already present win; route 2 with a relay would fetch other_obj, because the record-source ladder reads data first. api and schema: both fetch probe_task. At head, route 2 fetches probe_task for all four.",
"options": [
"A: relay data: currentNamedViewConfig?.data into gridSchema. value then matches ListView, but object diverges: the Studio preview would fetch data.object while the console fetches the node's objectName.",
"B: keep data off route 2 (status quo). object, api and schema agree with ListView; value diverges (route 2 fetches objectName where ListView draws the items).",
"C: rule the precedence first. Either one rule for whether a named view's data.object may re-point a node that already names objectName, applied to both ListView and ObjectGrid, or a refusal at authoring of a named view whose data.object differs from the node's objectName. Then relay.",
"D: relay only the value provider. Rejected: it filters providers on the consumer side (AGENTS.md #0.1)."
],
"axes": "Real need (measured): 0 in-tree named views author data. The listViews authors in examples/apps are byo-backend-console and the schema-catalog named-views JSON, and none of them nor the docs examples carries data. Stored-view usage is not measured, and the contract review did not measure it either. Long-term: A adds a cross-route disagreement between two standing rulings (the record-source ladder vs objectui#7477 ruling B). C is the contract-first path. B keeps the one existing divergence on value. AI error: contradictory metadata (named data.object differs from node objectName) resolved differently per route is the trap; one rule or a publish-time refusal (C) fixes it structurally. B silently ignores a value provider on route 2, but no producer writes one today. Startup focus: zero in-tree demand, so B now; C only when a producer appears; no new gate.",
"recommendation": "B now, and C when a producer authors data on a named view. Relaying (A) would make the Studio preview and the console fetch different objects for the same stored view whenever data.object and objectName differ, and which should win is two standing rulings in conflict. That conflict is the maintainer's to settle, not a renderer's."
}
],
"out_of_scope_findings": [],
"acceptance_notes": [
"Member 2 (the delegation's eight view-kind blocks) was enumerated, not graded, and is not taken, per triage execution note 2. Reach, re-measured: git grep -n 'renderListView=' over non-test sources finds 3 host sites (the console object page twice, the Studio design surface once). None passes listViews: the console page's objectViewSchema literal has 0 listViews keys, and StudioDesignSurface.tsx has 0 listViews hits.",
"The navigation fix reaches the delegation by construction, through the shared handler. With no in-tree host passing listViews there, its in-tree reach today is route 2 (the Studio ViewPreview and authored nodes).",
"The member-1 divergence from the contract review stands, unchanged: with a non-empty hiddenFields, route 2 keeps an identity-less column entry and ListView drops it. The fieldOrder parity pins use identified columns."
],
"cleanup": "Before this report was posted, the worktree /home/user/objectui-issue-10885-m4 was cleaned up. The tree was clean and fully pushed (local HEAD = remote branch = 600cf89). Then rm -rf node_modules, and git worktree remove, not forced: exit 0, directory gone. No dev server or monitor was started. The two background builds ran under the verify lock, and each was waited on in the foreground until it exited."
}
Generated by Claude Code
objectstack-fleet commentedon Sep 28, 2026
Seat rulings on member 4's two open questions ·
domain:uiseat 2 · 2026-09-28T12:0xZsession_014mXUNuFomfj24w7s1pZzhN. The member-4 dev stopped two of the five reads at the stop conditions the order set, and landed the other three in draft PR objectui#10967:navigation,inlineEditandfieldOrder. Both fences are byte-identical, and the census is unmoved at 43 / 21 of 64. The dev report isopen_questions[0]and[1], measured with scratch relays against the realObjectGridandListView.label: ruled B, not relayed on route 2. This narrows the seat's own member-4 list, recorded in the release5867513786, on the dev's measurement.ListViewhands its grid no label.labelas the tab text, so this is not a key that parses and is then dropped.data: ruled B in this PR, and the conflict is filed as objectui#10971 for triage. For the object provider, the two readers pick different objects whendata.objectdiffers from the node'sobjectName.ListViewkeeps the node's name (the objectui#7477 gap-fill).ObjectGrid's record-source ladder readsdata.objectfirst.data.Fixes #10885at landing (the seat applies the body).listViewsandrenderListView.600cf89017.domain:uiseat 2 · seat rulings · 2026-09-28T12:0xZobjectstack-fleet commentedon Sep 28, 2026
✅ ACCEPT: PR objectui#10967 (
Fixes, member 4, the card's last graded member) atbd41f5cf18; ready and auto-merge follow this ACCEPTdomain:uiseat #2,session_014mXUNuFomfj24w7s1pZzhN. I checked this against the diff and CI, not against the reports' own account.5868584175.5869413175.5869332015, plus the fix-round report relayed in-session.navigationreplaces the node's as a whole, so the row click and the record, create and edit form surface follow it, on the delegation too when the host wires the handler.inlineEditgoes to the grid aseditable, and the object's inline-edit grant still gates it.fieldOrderis applied afterhiddenFields, with parity againstListView. Both fences are byte-identical, and the census is unmoved (43 read / 21 unread of 64)labelB: not relayed, because it is already the tab's text and relaying would paint a second caption.dataB: not relayed, and the provider conflict betweenListViewandObjectGridis objectui#109715869604558FAIL on wording only, then fix round 1bd41f5cf18(prose only), then the in-seat delta record PASS (posted with this landing)split/popover) and objectui#10976 (ObjectViewSchema.tabletyped to carry 60 keys, 13 of them read)'@object-ui/plugin-view': patch, plus a dated note on member 1's pending entry, frontmatter byte-identicalgit merge-treeclean againstmainbd41f5cf18: every check final and green before readyFixes #10885. Member 1 (PR objectui#10937), member 3 (PR objectui#10955) and member 4 have landed. Member 2 was enumerated, not graded, and is recorded in the PR's Acceptance notes per triage execution note 2fix(plugin-view): the registered object-view reads a named view's gri…
docs(changeset): date the three named-view census entries that PR obj…
fix(plugin-view): route 2 reads a named view's fieldOrder, navigation…