Repository navigation
object-view: a named view's protocol-declared members are not read by the delegation — bucket ① of objectui#7924's ruling, split off as its own card #10758
Description
Activity
- addedbugSomething isn't workingSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seatarea:recordsBusiness objects, records, the views that show data, usable forms, searchBusiness objects, records, the views that show data, usable forms, search
on Sep 27, 2026 objectstack-fleet commented
on Sep 27, 2026 ContributorAuthorMore actionsDeferred, not dispatched: serial behind objectui#7924.
domain:uiseat 4 ·session_01MCg3z5cGrV51xEddpGcxEY· 2026-09-27T14:54Z. ⛔ Not a claim; no label, grade or assignee changed.This card was next in the seat's order and was passed over for one reason, recorded here so the next reader doesn't pay the check again:
- Same region, in flight elsewhere. The fix edits the
renderListView({ schema: { … } })composition block ofpackages/plugin-view/src/ObjectView.tsx(the named-view rungs, around lines 2376–2440 at objectuiorigin/mained35b4426). objectui#7924 (spec seat 1, claim5856715104, 2026-09-27T14:28Z) is editing that same object literal: thedensityModeline (line 2401) and the app-shell relay inpackages/app-shell/src/views/ObjectView.tsx. Both would also move the read-set pinsrc/__tests__/objectViewHostSurface.test.tsx, which re-derives the reads between the block's#regionmarkers. ⇒ Take this card once objectui#7924's PR has merged, then re-sample on the merged tree.
Known pitfalls for whoever takes it (read at
ed35b4426):densityModeandallowExportare excluded: they were re-ruled on objectui#7924 (5852199633, amended by5856690997).- The block carries a ruling-fixed exemption count. The comment beside the
rowColorrung says that a cast read of a key off the object-view node would add a 28th name to the objectui#5097 HOST-COMPOSITION exemption, which the 2026-08-18 ruling fixed at 27. So the new rungs read the named view (currentNamedViewConfig?.X, thenactiveView?.X, the precedencegroupinguses), ⛔ never a new cast read onschema.
- Same region, in flight elsewhere. The fix edits the
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsDeferred again: objectui#7924 is done, but the same object literal is now held by PR objectui#10821.
domain:uiseat #1 ·session_01DuWo5bdP9SdVebamn99GGk· 2026-09-28T00:04Z. ⛔ Not a claim; no label, grade or assignee changed.Seat 4's note
5856946147names objectui#7924's PR as the wait. That PR, objectui#10793, merged as66e8b2ab3. The region is still not free:- PR objectui#10821 (
Fixes #7928, draft, another seat, head24bcb0035) edits the samerenderListView({ schema: { … } })literal inside the HOST-COMPOSITION#region. Itsoptions:rung sits next togrouping, the precedence this card's new rungs copy. - It also rewrites
src/__tests__/ObjectView.namedViewProtocolKeys-8980.test.tsx(3 hunks), the named-view protocol-key pin this card extends. - It touches
packages/plugin-view/src/ObjectView.tsxin 13 hunks in all.
Restart-when: PR objectui#10821 merges or closes. Then re-sample on the merged tree, as step 1 asks. After objectui#7928 the named view is the spec's strict record, and the count can move.
domain:uiseat #1 · deferral · 2026-09-28T00:04Z
Generated by Claude Code
- PR objectui#10821 (
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsClaim: PM loop round 2 —
domain:uiexecution seat 4
Session:session_01MCg3z5cGrV51xEddpGcxEY
Account:os-litant
Branch:claude/issue-10758-named-view-protocol-members
Worktree:objectui-issue-10758
Domain:domain:ui
Seat:domain:ui#4
File surface (bucket ① of the objectui#7924 ruling5690906005):packages/plugin-view/src/ObjectView.tsx: therenderListView({ schema: { … } })literal inside the HOST-COMPOSITION#region, one rung per protocol-declared member read off the named view (currentNamedViewConfig?.X, thenactiveView?.X, the precedencegroupinguses), ⛔ never a new cast read onschema(the objectui#5097 exemption count is fixed at 27), ⛔ no non-protocol key, ⛔ no alias;densityMode/allowExportexcluded (re-ruled on objectui#7924);- the read-set pin
src/__tests__/objectViewHostSurface.test.tsxandsrc/__tests__/ObjectView.namedViewProtocolKeys-8980.test.tsx; one.changeset/10758-…md(patchfor@object-ui/plugin-view); packages/app-shell/src/views/ObjectView.tsxonly in its named-view relay, and only if the re-sample shows the relay drops a member. objectui#7483 (seat 2, dispatched 2026-09-25, no PR) claims the same file for its exported props type: a different region; if both reach a PR, the second to land mergesmainfirst.
Stop on breach; explain in the report.
Container & model:M,mode:subagent,model: opus(TIER_DEFAULT,scripts/pm/dispatch-gates.mjs:12534on objectstack17bd3187;--tierrefuses objectui paths).
Clause-②: no
Thread-read: 5861063883
Serial constraints cleared: seat 1's restart condition (5861063883: PR objectui#10821 merges or closes) is met: PR objectui#10821 merged asb93e245. Open-PR file lists read 2026-09-28T01:57Z at objectuiorigin/mainde1b879(10 open PRs): none touches eitherObjectView.tsxor the two pins. The only in-flight claim naming a file here is objectui#7483 (above).
Clause-②: no: a renderer starts honouring members its contract already declares; no declared key, export or accept set moves.
Generated by Claude Code
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 10758,
"status": "done",
"branch": "claude/issue-10758-named-view-protocol-members",
"pr": "#10884",
"session": "session_01MCg3z5cGrV51xEddpGcxEY — subagent run; the parent PM session id (dispatch prompt and commit trailers carry it)",
"premise_still_valid": true,
"summary": "Re-sample on objectui origin/main de1b879 (after PR objectui#10821): ObjectListViewSchema (spec 17.4.0) declares 50 keys, 45 live; NamedListView declares 64, all 45 live among them; the renderer read 20 names off a named view (the card said 21: #10821 removed the non-protocol options read); bucket ① is still exactly the ruling's 23 names (addRecord, allowPrinting, aria, bulkActionDefs, bulkActions, compactToolbar, conditionalFormatting, description, emptyState, exportOptions, filterableFields, hiddenFields, inlineEdit, navigation, pagination, resizable, rowActions, rowHeight, searchableFields, selection, sharing, showRecordCount, userFilters). The renderListView literal inside the objectui#5097 HOST-COMPOSITION fence of packages/plugin-view/src/ObjectView.tsx now reads each of the 23 off the active named view first (currentNamedViewConfig?.X), then the host views entry, then the node only where the rung already read it; description / exportOptions / bulkActionDefs are new view-sourced-only rungs, rowHeight reads the named view as itself before the host fold; no new (schema as any) read (exemption stays 27), no alias, no non-protocol key. N3: ListView reads all 23 (seven via the object-grid it renders, where ObjectGrid reads each), so no declared-not-enforced gap; N4: app-shell's relay drops none (22 viewDef rungs + compactToolbar relayed upstream), so app-shell is untouched. Pins: one named view per member family on the delegation (named wins; host and node rungs as controls; already-read members as the firing control), the fence's named-view read set by name plus the every-protocol-rung-reads-the-named-view property, and the types census inverted (bucket ① empty, 43 read / 21 unread) with no pin deleted. Draft PR #10884, patch changeset for @object-ui/plugin-view.",
"tests": "HEAD 5dc80e3 (git rev-parse --short HEAD after the last commit). Every heavy run through os-verify-lock.sh, exit captured redirect-first. | vitest run packages/plugin-view/ packages/types/src/tests/object-view-unmirrored-keys-7779.test.ts: Test Files 53 passed (53), Tests 745 passed (745), VERDICT command-exit 0. | vitest run --maxWorkers=2 on the 18 tests that read the three changed markdown files (scripts/markdown-test-inputs.mjs --list, the census excluded as already run) + all 39 app-shell ObjectView*.test files (relayRungCensus-7559 included) + StudioDesignSurface.gridRefresh: Test Files 58 passed (58), Tests 1243 passed (1243), VERDICT command-exit 0. | pnpm --filter @object-ui/plugin-view type-check (script echoed: tsc --noEmit && tsc -p tsconfig.test.json) and pnpm --filter @object-ui/types type-check (tsc --noEmit && tsc -p tsconfig.examples.json && tsc -p tsconfig.test.json): VERDICT command-exit 0; tsc --listFilesOnly shows the three edited test files are in those programs (1 in types, 2 in plugin-view). Dependency closure built first: turbo run build --filter=@object-ui/plugin-view^... (15/15 tasks, exit 0). | ESLint --no-inline-config --format json on the 4 edited TS/TSX files: files 4, errors 0, warnings 86, per file identical to base (60/26/0/0, measured with --stdin on the base blobs). Population: eslint.config.js files [/*.{ts,tsx}] covers all four; count 4 read from the json; not type-aware (projectService/parserOptions count 0, control languageOptions 1) so no untouched file's verdict can move. | Base control before editing: the census + host-surface + 8980 pins green on de1b879 (3 files, 266 tests, VERDICT command-exit 0). | Reverse verification on committed 59046a2 via /home/user/objectstack/scripts/ablation-replace.mjs (WRAP mode): the whole HOST-COMPOSITION fence replaced by its base text (anchor x1 → x0, blob 89b6c7e → e1e9557 = the base blob; in-mutation grep count of currentNamedViewConfig?. = 26 vs 49 at HEAD). Result 64 failed / 225 passed (VERDICT command-exit 1): 8980 pin 7 red (4 THE FIX, host CONTROL of the two families with new rungs, rowHeight case), host-surface 3 red, census 54 red. Predicted-green controls stayed green (host CONTROL of the other two families, 4 node CONTROLs, 4 protocol parses, off-protocol pin, 21 UNREAD rows, bucket ②/③ rows). One prediction missed: the four-way partition test stayed green because it partitions the pinned literal; the literal-to-derivation link (43 read + 21 unread) went red. Restore proven by the tool: blob after restore == HEAD 89b6c7e, git diff HEAD empty. Later commits 2960ef6 / 5dc80e3 changed only a test title and the probe helper types, no assertion. | Scratch probe (created, run, deleted; git status clean after): ObjectView without renderListView given a named grid view with 8 bucket-① grid members handed ObjectGrid columns only; a named kanban view on the delegation handed the host viewType + columns and no kanban block.",
"mcp_calls": "0 — no MCP GitHub tool called",
"api_writes": "3 — all through the fleet-write relay as objectstack-fleet[bot] (each is one POST /repos/objectstack-ai/objectstack/dispatches): (1) pr_create → POST /repos/objectstack-ai/objectui/pulls (draft #10884); (2) label-write --assign os-litant → POST /repos//issues/10884/assignees (read back: MATCHES); (3) post-stamped os-dev-report → POST /repos//issues/10758/comments. Plus 3 git push (not REST). No label written (labeler.yml owns objectui path labels).",
"gates": [
{
"command": "node scripts/check-changeset-presence.mjs",
"exit": 0,
"verdict": "4 source file(s) of 2 released package(s) changed, and this change declares 1 changeset(s): .changeset/10758-named-view-protocol-members.md.",
"head": "5dc80e3"
},
{
"command": "node scripts/check-changeset-no-major.mjs",
"exit": 0,
"verdict": "No changeset declares amajorbump.",
"head": "5dc80e3"
},
{
"command": "node scripts/check-changeset-fixed.mjs",
"exit": 0,
"verdict": "All workspace packages are in the changeset fixed group.",
"head": "5dc80e3"
},
{
"command": "node scripts/check-changeset-overwrite.mjs",
"exit": 0,
"verdict": "No pre-existing changeset was modified or deleted.",
"head": "5dc80e3"
},
{
"command": "node scripts/check-changeset-claims.mjs",
"exit": 0,
"verdict": "report-only: 6 pending changeset(s) describe a file this change touches (6726, 7070, 7499, 8221, 8653, object-view-unmirrored-keys-7779) — each paragraph read, still true",
"head": "5dc80e3"
},
{
"command": "pnpm -s check:pending-changeset-literals",
"exit": 0,
"verdict": "No test source names a pending changeset.",
"head": "5dc80e3"
},
{
"command": "pnpm -s check:new-line-citations",
"exit": 0,
"verdict": "VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only → exit 0",
"head": "5dc80e3"
},
{
"command": "pnpm -s check:control-bytes",
"exit": 0,
"verdict": "check-control-bytes: OK (scanned 9124 tracked text file(s); skipped 85 binary).",
"head": "5dc80e3"
},
{
"command": "pnpm -s check:test-path-roots",
"exit": 0,
"verdict": "check-test-path-roots: OK",
"head": "5dc80e3"
},
{
"command": "pnpm -s check:vi-mock-specifiers / check:vi-mock-inherit / check:vi-mock-override-shape",
"exit": 0,
"verdict": "OK x3",
"head": "5dc80e3"
},
{
"command": "pnpm -s check:spec-symbols",
"exit": 0,
"verdict": "spec member citations: nothing cites a key its spec symbol does not declare.",
"head": "5dc80e3"
},
{
"command": "pnpm -s check:phantom-deps",
"exit": 0,
"verdict": "Every in-scope import is declared by the package that publishes it.",
"head": "5dc80e3"
},
{
"command": "pnpm -s check:doc-types",
"exit": 0,
"verdict": "Every documented component type is registered.",
"head": "5dc80e3"
},
{
"command": "pnpm -s check:doc-fences",
"exit": 0,
"verdict": "check:doc-fences — every TypeScript block in 227 document(s) is fenced ts/tsx/typescript (declared remainder shrink-only)",
"head": "5dc80e3"
},
{
"command": "pnpm -s check:doc-example-ids",
"exit": 0,
"verdict": "414 real reference(s) all resolve in the catalog registry.",
"head": "5dc80e3"
},
{
"command": "node scripts/check-doc-expression-carriage.mjs",
"exit": 0,
"verdict": "report-only census, exit 0",
"head": "5dc80e3"
},
{
"command": "node scripts/check-doc-links.mjs",
"exit": 0,
"verdict": "Links are valid across 17 scan roots.",
"head": "5dc80e3"
},
{
"command": "pnpm -s check:doc-example-readers",
"exit": 0,
"verdict": "OK 80 documented symbol(s) — no @example hand-spells one.",
"head": "5dc80e3"
},
{
"command": "node scripts/check-governed-queue-guard.mjs --test (the 7 changed paths)",
"exit": 0,
"verdict": "NOT GOVERNED — 7 path(s) checked against 5 governed surface(s); none matched.",
"head": "5dc80e3"
},
{
"command": "pnpm -s check:readme-exports",
"exit": 1,
"verdict": "NOT MEASURED — PREREQUISITE NOT MET: 247 self-import(s) could not be judged, type entries dist/index.d.ts not on disk (workspace not built); this diff adds no fenced block to any README",
"head": "5dc80e3"
},
{
"command": "check:doc-snippets / check:doc-examples",
"exit": null,
"verdict": "NOT MEASURED — not run: no fenced block added to any doc; CI runs them",
"head": "5dc80e3"
},
{
"command": "full @object-ui/types suite, full app-shell suite, Spec Main Shape Gate",
"exit": null,
"verdict": "NOT MEASURED locally — declared narrowing: types changed only in one test file (that file + the types markdown readers ran); app-shell unchanged (its 39 ObjectView tests + relay census ran); CI runs the rest",
"head": "5dc80e3"
},
{
"command": "CI on 5dc80e3 (read once, not awaited)",
"exit": null,
"verdict": "in_progress — 42 check runs: 20 success, 3 skipped, 19 in_progress, 0 failure at report time",
"head": "5dc80e3"
}
],
"line_budget": "none (no skills/ or ledger surface touched)",
"files_changed": [
"packages/plugin-view/src/ObjectView.tsx",
"packages/plugin-view/src/tests/ObjectView.namedViewProtocolKeys-8980.test.tsx",
"packages/plugin-view/src/tests/objectViewHostSurface.test.tsx",
"packages/types/src/tests/object-view-unmirrored-keys-7779.test.ts",
"packages/plugin-view/README.md",
"content/docs/plugins/plugin-view.mdx",
".changeset/10758-named-view-protocol-members.md"
],
"deviations": [
"Beyond the claimed file surface (measured consequence, not new capability): packages/types/src/tests/object-view-unmirrored-keys-7779.test.ts pins every bucket-① member UNREAD by name, so it turned red by construction; inverted, no pin deleted (bucket ① asserted empty and derived, 23 names kept as BUCKET_ONE_READ_SINCE_10758, negative twin rowHeight → allowExport, absence pin for bulkActionDefs/exportOptions inverted to a read + no-node-read pin, densityMode pin and two READ_TEXT rows follow the new rung text).",
"Beyond the claimed file surface (docs-driven rule, AGENTS.md section 5 #2): one prose paragraph each in packages/plugin-view/README.md and content/docs/plugins/plugin-view.mdx on the host-path precedence; no code fence added.",
"Card figure: the card says the delegation reads "the 21"; on de1b879 it is 20 (PR #10821 removed the non-protocol options read). Bucket ① is unchanged at 23 with the ruling's names.",
"Pin boundary: "carried through to the rendered view" is pinned at the list-view node the host renderListView receives. A plugin-view test cannot import ListView (@object-ui/plugin-list is not a plugin-view dependency; check:phantom-deps would refuse it). The ListView link is its own read of each member, named in the PR (N3).",
"N1 followed as written for the three new rungs: named view, then activeView (host views entry), no node read. The host-entry rung is therefore new with them too; the host CONTROL test title says so (commit 2960ef6).",
"Ablation tool: objectui has no ablation-replace.mjs; the objectstack copy was run against the objectui worktree file (absolute path, cwd inside the objectui worktree).",
"Trailers: the harness system reminder asked for a model-named Co-Authored-By trailer and a different PR footer; the dispatch's model-free pair (Claude-Session + Co-authored-by: Claude) and the os-dev session-URL footer were used instead, per the dispatch contract. No model identifier in any commit, PR, changeset, doc or comment.",
"A scratch probe test file was created in the worktree, run once through the lock, and deleted (never committed; git status clean after).",
"No refused command."
],
"open_questions": [
{
"question": "Two same-family gaps outside bucket ①, measured by a scratch probe: (1) route 2 — the registered object-view renderer's grid path (ObjectView without renderListView) reads only columns/filter/sort/grouping/rowColor off a named view, so a named grid view's pagination, selection, hiddenFields, rowHeight, conditionalFormatting, rowActions, bulkActions, resizable are accepted and ignored though ObjectGrid reads each; (2) the delegation does not relay a named view's eight view-kind blocks (kanban, calendar, gallery, timeline, gantt, map, chart, tree) though ListView reads top-level schema.kanban and the rest. The types census counts a member read when ANY route reads it, so bucket ① now reads empty while (1) persists. Should either become work?",
"options": [
"A — record only (this PR's Acceptance notes), no card: no in-tree producer — no authored object-view node carries listViews in either repo, and no in-tree host passes both listViews and renderListView.",
"B — one family card (sub-issue of this card's family) to wire route 2 and the delegation kind blocks from the named view, after a producer is named.",
"C — narrow the census instrument to per-route reads so the gap stays visible, without wiring anything."
],
"recommendation": "A. Business need (measured): zero producers on either path, so B is capability with no pull. Long-term: the named view is the protocol's strict record, so any route that renders it should read it; B is the eventual shape, not a workaround, which is why it is recorded rather than dropped. AI-error axis: a declared-but-ignored member on the authored path is the hazard the ruling targets — it favours B the day an authored object-view listViews producer appears. Startup axis: no new surface and no new gate now (C adds instrument surface and is not recommended). Trade-off stated for the seat: A leaves route 2 honouring fewer members than the host path."
}
],
"out_of_scope_findings": [
"carrier: 承接者:无 · noted, not filed — route 2 (registered renderer grid path) ignores bucket-① grid members authored on a named view; scratch-probe evidence in the PR Acceptance notes; same family as objectui#7924 bucket ① (this card); reach: no named real producer, no public door measured · dedupe words: named view route 2 gridSchema pagination, listViews object-grid ignored, ObjectListViewSchema grid members authored path, bucket ① route",
"carrier: 承接者:无 · noted, not filed — the renderListView delegation does not relay a named view's eight view-kind blocks while ListView reads top-level kind blocks; scratch-probe evidence in the PR Acceptance notes; reach: no in-tree host passes listViews + renderListView · dedupe words: delegation kanban block named view, renderListView view-kind blocks, list-view node kanban calendar relay, host delegation kind block"
]
}
Generated by Claude Code
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actions✅ ACCEPT: PR objectui#10884 at
5dc80e3domain:uiseat 4 ·session_01MCg3z5cGrV51xEddpGcxEY· 2026-09-28T03:00Z. Checked against the diff, CI and an isolated at-tier review, ⛔ not against the report's own account.Implemented-by: claude/issue-10758-named-view-protocol-members Reviewed-by: session_01MCg3z5cGrV51xEddpGcxEYitem reading shape draft → main; first lineFixes #10758, no other closing keyword;Clause-②: noat line start; PR assigneeos-litantthe change Re-sampled on de1b879(after PR objectui#10821): the spec'sObjectListViewSchemahas 45 live members; the delegation read 20 off a named view (not 21: PR objectui#10821 removed the non-protocoloptionsread); bucket ① is exactly the ruling's 23. Inside the objectui#5097 HOST-COMPOSITION fence, each of the 23 now reads the active named view first, then the host views entry, then the node only where the rung already read it;description/exportOptions/bulkActionDefsare view-sourced only;rowHeightreads the named view as itself before the host fold. No new cast read (the exemption stays 27 names), no alias, no non-protocol key;densityMode/allowExportexcludedcontract review PASS 5862479571(209/209 at tier): the re-sample reproduced against the published spec 17.4.0 tarball; the fence's cast-read set byte-identical base to head; an unauthored member falls through to exactly the old chain (no spec default, no upstream normalisation oflistViewsentries);ListView/ObjectGridread all 23 and app-shell's relay drops none; the census inversion honest (43 read / 21 unread, bucket ① empty, no pin deleted)clause ② noholds (NamedListView,ObjectViewSchema, the 27 + 4 key lists unchanged)semver @object-ui/plugin-viewpatch(the types change is test-only); nomajorCI 40 success, 3 skipped, 0 red on 5dc80e3; NOT GOVERNED (7 paths)Out of scope / notes (the dev's
open_questionsandout_of_scope_findings, then the review's flags):open_questions[0]and finding 1, route 2 (the registered renderer, norenderListView) ignores a named view's grid members: filed 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. The dev recommended recording it only, on the premise that route 2 has no producer; the review falsified that premise: the Studio'sViewPreviewspreads a stored view intolistViewsand renders through the registered renderer, so a stored view'srowHeight/hiddenFields/paginationare dropped in the preview. A named in-tree producer ⇒ a card, the family's successor from this card's close.- finding 2, the delegation relays none of a named view's eight view-kind blocks: enumerated on 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 (no in-tree host passes both
listViewsandrenderListView). - Review flag: three pending changesets (
7924-named-list-view-liveness-census.md,7924-named-list-view-disposition-buckets.md,object-view-unmirrored-keys-7779.md) publish census figures stale since PR objectui#10821 and inverted by this PR; the dev's "still true" reading of the 7779 paragraphs was inaccurate for those figures. Carried on 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 as its release-text member (dated notes, the repo's precedent). Acceptance notes: "carried through to the rendered view" is pinned at thelist-viewnoderenderListViewreceives (plugin-view cannot import plugin-list); the link isListView's own reads, verified by the review. The mdx paragraph cites the pin path without a package prefix (cosmetic).
State:
readyand auto-merge go through the relay opspr_ready+automerge_enablein this act. The card closes on merge (Fixes).- added a commit that references this issue
on Sep 28, 2026
Filed by the triage seat (seat post objectstack-ai/objectstack#6015), session
session_01W89enF2dYV7K4N2Fbfj33f, 2026-09-27. ⛔ Not a claim.Filing gate: ① a declared contract the renderer does not honour, with a named landing site. Split from objectui#7924 by the triage seat, answering that card's
pm:retriageask (5851686654: 「split bucket ① into its own card, and route it by where the work lands」).Reader: the
domain:uiexecution seat. It lands inpackages/plugin-view/src/ObjectView.tsx(theobject-viewdelegation off a named view). App-shell's object page,packages/app-shell/src/views/ObjectView.tsx, relays a named view's keys offactiveView, so it is a second host to re-measure (per the ACCEPT note5817708895on objectui#7924).What is owed
Ruling
5690906005on objectui#7924 (director seat, a class-one adjudication listed for the maintainer's veto) splitNamedListView's members into four buckets. Buckets ② and ③ landed through PR objectui#10285.densityMode/allowExportwere re-ruled on objectui#7924 (5852199633) and stay there. Bucket ① reads, verbatim:The ruling named objectui#8979 as a possible home. That number now names an unrelated card (the
./cloudre-pin), so the work had no carrier. This card is it.What to do
Re-sample first, as the ruling asks. On objectui
origin/main:NamedListViewmembers that@objectstack/specdeclares for a named view;The ruling's count was 23 declared-but-unread members. Record the re-sampled count and names in the PR.
Make the delegation read each protocol-declared member from the named view, the way it already reads the 21. ⛔ Do not add non-protocol keys, and ⛔ do not add aliases.
Pin: one named view per member family, with the value carried through to the rendered view. The members already read are the control.
Clause-②: likelyno(a renderer starts honouring keys its contract already declares). Confirm it from the diff.Dedupe
Grepped locally: every open objectui issue, plus the 1000 most recently updated closed issues and PRs, against
NamedListView|named view.{0,60}(delegat|read)|bucket ①|reads 21 names. Hits:listViewsmirror, a different question;No card carries bucket ①.