You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Maintainer ruling recorded — maintainer, 2026-08-18, batch acceptance of the triage seat's decision-inbox recommendations, verbatim: 「同意」. Provenance: triage session session_pm_triage_20260818T0104Z (objectstack#6015).
Ruled: the 27 keys are HOST surface, exempted with reasons — not authored surface. Basis: measured reachability — the renderListView delegation branch is entered only when a host supplies the prop, the registered renderer does not, and the sole in-tree supplier is app-shell; the schema-registration path documented to authors cannot reach these keys, so declaring them on ObjectViewSchema would promise authors a surface that does nothing on their path.
This card's work: record the exemption where the next sweep looks — a comment block at the forwarding site enumerating the 27 keys as host-composition surface with this ruling's date, and the docs guidance that they are ⛔ not to be taught as schema keys. The structural follow-through (typing the forwarding block as an explicit host-side prop contract so host surface and authored surface are separated in types, retiring the (schema as any) reads) belongs to the #5043 family track, not this card.
Label needs-user-decision → pm:queue in the same stroke.
Claim: PM loop round 6
Session: session_01RV6yuVCxymHYE16PL9vQkE
Branch: claude/issue-5097-objectview-host-surface-exemption
Worktree: objectui-issue-5097
Domain: repo:objectui (execution seat)
File surface: packages/plugin-view/src/ObjectView.tsx (the renderListView forwarding block), plus a packages/plugin-view test. ⛔ OUT: packages/types/** (the ruling forecloses declaring these keys), packages/plugin-grid/** (#5091 — see the trap below), content/docs/** (#5229 in flight), packages/cli (#5237), examples/hello-world (#5236), packages/auth + app-shell/providers (#5198, PR5242 open).
Container & model: M, mode:subagent, model: opus — mechanical shape, but 27 keys and a neighbouring unresolved decision make the boundaries the hard part.
Clause-②: no — it records an existing state in comments and a test. Nothing declared, nothing removed, no accept-set change.
Serial constraints cleared: plugin-view is FREE as of this round — #5177's PR5231 merged. Nothing else open touches it. Re-verify at your claim.
Zone 1 — ruled, and the ruling also bounds the card
> Ruled: the 27 keys are HOST surface, exempted with reasons — not authored surface. Basis: measured reachability — the renderListView delegation branch is entered only when a host supplies the prop, the registered renderer does not, and the sole in-tree supplier is app-shell; the schema-registration path documented to authors cannot reach these keys, so declaring them on ObjectViewSchema would promise authors a surface that does nothing on their path.
>
> This card's work: record the exemption where the next sweep looks — a comment block at the forwarding site enumerating the 27 keys as host-composition surface with this ruling's date, and the docs guidance that they are ⛔ not to be taught as schema keys. The structural follow-through (typing the forwarding block as an explicit host-side prop contract so host surface and authored surface are separated in types, retiring the (schema as any) reads) belongs to the #5043 family track, not this card.
Two things follow, both binding:
⛔ Do not declare any of the 27 on ObjectViewSchema, and ⛔ do not remove any read. The ruling is "exempt with reasons", not "fix".
⛔ Do not retire the (schema as any) reads or introduce a host-side prop contract. That is explicitly assigned to the finding: 没有门禁核对包内 README 的自包导入名 vs 真实导出面 —— #5002 家族 7 个包的漂移全靠人工巡查发现(附已验证的检查器原型) #5043 family track, not here. It will be tempting — it is the "real" fix — and taking it would put this card in conflict with a track that owns it.
⛔ Re-verify the ruling's own basis before you rely on it
The ruling rests on a measured reachability claim: the registered renderer ObjectViewRenderer (src/index.tsx:58-66) does not pass renderListView, and the only non-test in-tree supplier is packages/app-shell/src/views/ObjectView.tsx:1618.
Re-run that enumeration on current main before writing a word of the comment block. If a second supplier now exists, the ruling's basis has moved and you must stop and report rather than recording a rationale that is no longer true.
This is not hypothetical caution. Earlier today the ruling on the sibling card #5091 was found to rest on a falsified premise — it asserted rowActionDefs was the symmetric partner of a declared bulkActionDefs, and measurement showed the spec rejects it by name and the host derives it. That half is back with the maintainer. A ruling's premises go stale exactly like a card body's, and read more authoritative while doing it.
Same for the key list: the card enumerates 31 reads (4 declared, 27 not) at base 9fbb9b52f. Re-derive the list yourself — the count and the membership are the substance of the comment block, and plugin-view has changed since (PR5231 landed in this file's package today). Report any difference from the card's 27.
⛔ The trap — rowActionDefs appears in BOTH cards and they are NOT the same question
rowActionDefs is in this card's 27-key list and is the one unresolved key on #5091.
They are different questions about different components, and the answers may legitimately differ:
Here: a key on the ObjectView node forwarded to a host-supplied renderer — ruled host surface by the ruling above, along with the other 26.
⛔ Do not let #5091's open state block this card, and ⛔ do not import a conclusion from here to there. Treat rowActionDefs as one of the 27, exactly like its neighbours, and say in your report that you did.
The pattern to copy — it already exists, merged, today
PR5241 landed the sibling exemption for plugin-grid about an hour ago and its body writes out the reusable pattern explicitly, for this card by name. Read it. In particular:
The comment carries four elements: the verdict in words a sweep from the manifest side will land on; the ruling that made it deliberate (maintainer, date, issue); who supplies the key, as file:line — that is what makes "host surface" checkable rather than an opinion; and the contract's verdict plus a pointer to the test.
The test's fourth assertion per key is the one that matters most: the renderer still reads it. Deleting a read is the one move that silently blanks a stored document, and it is what a future reader of "not authored surface" will think is the tidy finish.
Nothing is owed to the repo-wide registry-inputs-spec-parity gate for a key the spec does not declare — that gate derives expectations from ComponentPropsMap, so it never demands them in reverse.
Adapt, do not transcribe.#5091's keys were non-author because they are user-state or host switches; these 27 are host surface because the authored registration path cannot reach the branch at all. The rationale differs even though the shape matches, and the comment must state this card's reason.
Tests
27 keys is too many for four assertions each without the suite becoming noise. Pin the property, not the enumeration:
The forwarded key set equals the documented 27 (derive from one exported constant so the list has a single home, and the test fails by name when a read is added or removed without touching it).
The delegation branch is unreachable through the registered renderer — i.e. ObjectViewRenderer does not supply renderListView. This is the ruling's basis; pin it so a future change that starts supplying it fails loudly instead of silently promoting 27 keys to the authored path.
The reads still happen: at least a representative sample forwards through to the host renderer.
Reverse-verify: predict which assertions go red before running, and report predicted vs observed.
Gates
Derive from your diff. scripts/pm/dispatch-gates.mjs is objectstack-only — here derive from .github/workflows and package.json. If the change is comments plus a test only, an empty-frontmatter changeset is the precedent PR5241 set — run check-changeset-presence.mjs and follow its verdict. ⛔ Never major.
⛔ Do not background a long check and end your turn. Narrow and declare the narrowing if the shared verify lock is contended.
Deliver
Draft PR against main, first body line Fixes #5097. Push the branch early. Return the JSON report and post it as a comment whose first line is the literal <!-- os-dev-report --> marker.
{
"issue": 5097,
"status": "done",
"branch": "claude/issue-5097-objectview-host-surface-exemption",
"pr": "https://github.com/objectstack-ai/objectui/pull/5252",
"premise_still_valid": true,
"summary": "Recorded the 2026-08-18 ruling as an exemption block at the forwarding site in packages/plugin-view/src/ObjectView.tsx: OBJECT_VIEW_HOST_COMPOSITION_KEYS (the 27) plus OBJECT_VIEW_DECLARED_FORWARDED_KEYS (the 4 declared), carrying the verdict, the ruling with date and issue, both supplier file:line values, the contract's verdict, and the docs guidance that these are not schema keys; a #region fence around the delegation branch; a note at the second conditionalFormatting read; and src/__tests__/objectViewHostSurface.test.tsx (9 assertions). Nothing declared, no read removed, no runtime path touched — the ObjectView.tsx diff is 154 insertions, 0 deletions, every line a comment or one of the two constants (not re-exported from the entry point, so the published API is unchanged). Empty-frontmatter changeset per the PR5241 precedent; objectui has no skip-changeset label and none was created. I re-derived the key list rather than trusting the card: 31 distinct cast reads, 42 declared members across ObjectViewSchema + BaseSchema, 4 declared (data, navigation, searchableFields, filterableFields), 27 not — an exact match with the card at base 9fbb9b52f. rowActionDefs was treated as one of the 27 exactly like its neighbours; no conclusion was imported to or from #5091, which stays open on its own terms. TWO corrections to the ruling's own basis, both measured on main at e03dfa5ea and both recorded in the block and the PR rather than smoothed over. (1) The ruling names app-shell/src/views/ObjectView.tsx:1618 as the SOLE renderListView supplier. There are two: that callback is now at :1718 (passed at :2481 and :2524), and packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx:2575 supplies it as well — `git show 9fbb9b52f:` puts it at the same line at the ruling's own base, so it was missed, not newly added. I did not stop, because the ruling's substance survives independent measurement: both suppliers are React hosts inside @object-ui/app-shell, neither is the schema-registration path, and ObjectViewRenderer (plugin-view/src/index.tsx:58) passes schema and dataSource only under both tags it registers (object-view :66, alias view :100). The corrected two-supplier enumeration is what the block records. (2) conditionalFormatting is NOT purely host surface: it has a second read at ObjectView.tsx:768, in generateViewSchema's kanban branch, which runs precisely when no host supplied renderListView — i.e. on the author-reachable path the registered renderer takes. For that one key the ruling's 'the authored path cannot reach it' basis is narrower than for its 26 neighbours. Recorded, not acted on (the exemption preserves the status quo either way), and filed as #5248 for the maintainer. The pin asserts conditionalFormatting is the ONLY exempt key read outside the fence, so a second cannot appear unnoticed.",
"tests": "All at head 3ef093d4a, the final commit, tree clean. Heavy runs serialized under flock -E 99 -w 540 /tmp/os-heavy-verify.lock; never contended. `pnpm --filter '@object-ui/plugin-view^...' build` was run FIRST (dependency closure), which is what turned type-check's 17 'Cannot find module @object-ui/core' style errors into a real verdict. `pnpm exec vitest run packages/plugin-view/ apps/console/src/__tests__/registry-inputs-spec-parity.test.ts --maxWorkers=2` -> 'Test Files 14 passed (14) / Tests 192 passed (192)'. `pnpm --filter @object-ui/plugin-view type-check` -> 'tsc --noEmit && tsc -p tsconfig.test.json', exit 0 (script name echoed, so not a zero-match silent pass). `pnpm --filter @object-ui/plugin-view lint` -> 0 errors, 142 warnings all pre-existing. check-control-bytes / check-changeset-presence / check-changeset-no-major / check-changeset-fixed / check-lint-coverage / check-type-check-coverage / check-package-self-import / check-phantom-dependencies -> all OK. Changeset gate verdict was followed, not assumed: it reported the missing changeset first, then '✅ ... Every one of them has an EMPTY frontmatter'. Also self-scanned the touched files for control bytes (grep -naP, no matches). NOT run locally, declared: check:published-dist (builds every published package; the new file is under src/__tests__/, already excluded by packages/plugin-view/tsconfig.json for that gate) — CI runs it. NOTE for future runs in this repo: `pnpm --filter @object-ui/plugin-view test` is NOT valid local evidence — the package-local vitest.config.ts carries no workspace aliases and fails to resolve @object-ui/i18n etc. against unbuilt dist; that failure is pre-existing on main and on files this PR does not touch. The root invocation above is what CI and PR5241 use. REVERSE VERIFICATION — three ablations, direction predicted before each run, all three matched exactly. (A) delete the pagination read inside the fence: predicted 3 red (set-equality, by-name subtraction, forwarding), observed '3 failed | 6 passed', exactly those three. (B) make ObjectViewRenderer supply renderListView: predicted exactly 1 red (the reachability pin), observed '1 failed | 8 passed', that test. (C) publish pagination on the object-view registry inputs: predicted exactly 1 red (the not-published pin), observed '1 failed | 8 passed' with \"expected [ 'objectName', 'title', …(14) ] to not include 'pagination'\". REBUILD LEG: none is owed, and the reason is structural rather than asserted — the root vitest.config.mts aliases every @object-ui/* specifier to that package's src (:246+), and both mutated files (plugin-view/src/ObjectView.tsx, plugin-view/src/index.tsx) are reached by the suite through RELATIVE imports (../ObjectView, ../index), so no dist sits in the resolution path of the subject under test and a mutation takes effect without a build. Each ablation was taken from the COMMITTED state and restored with `git checkout branch -- path`; git status clean and the suite green afterwards. One incidental finding worth recording: the pin's first run failed by reporting a host key named 'K', read out of the exemption block's own prose spelling the `(schema as any).K` form — comments are now stripped before any read is derived, since a derivation that reads its own documentation is not a derivation.",
"open_questions": [],
"out_of_scope_findings": [
"filed as #5248: `conditionalFormatting` on the object-view node has a SECOND read at ObjectView.tsx:768 on the author-reachable kanban path, so the #5097 host-surface exemption rests on a narrower basis for that one key than for the other 26 — three routes offered (declare it, narrow the kanban read, or keep both and record the edge), no code change made"
]
}
Activity
yinlianghui commentedon Aug 17, 2026
(正文末尾的署名脚注被 issues 端点剥掉了,按纪律用评论补回。)
Generated by Claude Code
yinlianghui commentedon Aug 17, 2026
PM 分诊(session_01GTRjn8xBqp75dk7kFupVRt,objectui 分片):挂
bug+needs-user-decision,入决策箱 —— 与 #5091(ObjectGrid 同形)同族同判:31 键经(schema as any)转发、其中 27 键非声明成员,收敛方向(声明进 ObjectViewSchema / 收紧转发 / 维持现状)是公开契约题,由维护者裁定。两点边界记录:
pagination落table.pagination规范位 —— 该裁定不预断本卡任何方向(A/B/C 之下 README 教声明面都成立)。(schema as any)读的 4 个键不在GRID_QUERY_INPUTS里 —— #4648 要消除的「渲染器读得到、声明面否认」在这些键上仍然存在 #5091 键集与组件均不同,独立成卡正确;裁定时宜两卡同读,机制相同。Generated by Claude Code
os-zhuang commentedon Aug 18, 2026
Maintainer ruling recorded — maintainer, 2026-08-18, batch acceptance of the triage seat's decision-inbox recommendations, verbatim: 「同意」. Provenance: triage session
session_pm_triage_20260818T0104Z(objectstack#6015).Ruled: the 27 keys are HOST surface, exempted with reasons — not authored surface. Basis: measured reachability — the
renderListViewdelegation branch is entered only when a host supplies the prop, the registered renderer does not, and the sole in-tree supplier is app-shell; the schema-registration path documented to authors cannot reach these keys, so declaring them onObjectViewSchemawould promise authors a surface that does nothing on their path.This card's work: record the exemption where the next sweep looks — a comment block at the forwarding site enumerating the 27 keys as host-composition surface with this ruling's date, and the docs guidance that they are ⛔ not to be taught as schema keys. The structural follow-through (typing the forwarding block as an explicit host-side prop contract so host surface and authored surface are separated in types, retiring the
(schema as any)reads) belongs to the #5043 family track, not this card.Label
needs-user-decision→pm:queuein the same stroke.Generated by Claude Code
os-support-ai commentedon Aug 18, 2026
Claim: PM loop round 6
Session:
session_01RV6yuVCxymHYE16PL9vQkEBranch:
claude/issue-5097-objectview-host-surface-exemptionWorktree:
objectui-issue-5097Domain:
repo:objectui(execution seat)File surface:
packages/plugin-view/src/ObjectView.tsx(therenderListViewforwarding block), plus apackages/plugin-viewtest. ⛔ OUT:packages/types/**(the ruling forecloses declaring these keys),packages/plugin-grid/**(#5091 — see the trap below),content/docs/**(#5229 in flight),packages/cli(#5237),examples/hello-world(#5236),packages/auth+app-shell/providers(#5198, PR5242 open).Container & model:
M,mode:subagent,model: opus— mechanical shape, but 27 keys and a neighbouring unresolved decision make the boundaries the hard part.Clause-②: no — it records an existing state in comments and a test. Nothing declared, nothing removed, no accept-set change.
Serial constraints cleared:
plugin-viewis FREE as of this round — #5177's PR5231 merged. Nothing else open touches it. Re-verify at your claim.Zone 1 — ruled, and the ruling also bounds the card
Maintainer, 2026-08-18, batch acceptance, verbatim 「同意」:
> Ruled: the 27 keys are HOST surface, exempted with reasons — not authored surface. Basis: measured reachability — the
renderListViewdelegation branch is entered only when a host supplies the prop, the registered renderer does not, and the sole in-tree supplier is app-shell; the schema-registration path documented to authors cannot reach these keys, so declaring them onObjectViewSchemawould promise authors a surface that does nothing on their path.>
> This card's work: record the exemption where the next sweep looks — a comment block at the forwarding site enumerating the 27 keys as host-composition surface with this ruling's date, and the docs guidance that they are ⛔ not to be taught as schema keys. The structural follow-through (typing the forwarding block as an explicit host-side prop contract so host surface and authored surface are separated in types, retiring the
(schema as any)reads) belongs to the #5043 family track, not this card.Two things follow, both binding:
ObjectViewSchema, and ⛔ do not remove any read. The ruling is "exempt with reasons", not "fix".(schema as any)reads or introduce a host-side prop contract. That is explicitly assigned to the finding: 没有门禁核对包内 README 的自包导入名 vs 真实导出面 —— #5002 家族 7 个包的漂移全靠人工巡查发现(附已验证的检查器原型) #5043 family track, not here. It will be tempting — it is the "real" fix — and taking it would put this card in conflict with a track that owns it.⛔ Re-verify the ruling's own basis before you rely on it
The ruling rests on a measured reachability claim: the registered renderer
ObjectViewRenderer(src/index.tsx:58-66) does not passrenderListView, and the only non-test in-tree supplier ispackages/app-shell/src/views/ObjectView.tsx:1618.Re-run that enumeration on current
mainbefore writing a word of the comment block. If a second supplier now exists, the ruling's basis has moved and you must stop and report rather than recording a rationale that is no longer true.This is not hypothetical caution. Earlier today the ruling on the sibling card #5091 was found to rest on a falsified premise — it asserted
rowActionDefswas the symmetric partner of a declaredbulkActionDefs, and measurement showed the spec rejects it by name and the host derives it. That half is back with the maintainer. A ruling's premises go stale exactly like a card body's, and read more authoritative while doing it.Same for the key list: the card enumerates 31 reads (4 declared, 27 not) at base
9fbb9b52f. Re-derive the list yourself — the count and the membership are the substance of the comment block, andplugin-viewhas changed since (PR5231 landed in this file's package today). Report any difference from the card's 27.⛔ The trap —
rowActionDefsappears in BOTH cards and they are NOT the same questionrowActionDefsis in this card's 27-key list and is the one unresolved key on #5091.They are different questions about different components, and the answers may legitimately differ:
(schema as any)读的 4 个键不在GRID_QUERY_INPUTS里 —— #4648 要消除的「渲染器读得到、声明面否认」在这些键上仍然存在 #5091: a key on the ObjectGrid node, where the question is whether it entersGRID_QUERY_INPUTS. Still open with the maintainer.⛔ Do not let #5091's open state block this card, and ⛔ do not import a conclusion from here to there. Treat
rowActionDefsas one of the 27, exactly like its neighbours, and say in your report that you did.The pattern to copy — it already exists, merged, today
PR5241 landed the sibling exemption for
plugin-gridabout an hour ago and its body writes out the reusable pattern explicitly, for this card by name. Read it. In particular:file:line— that is what makes "host surface" checkable rather than an opinion; and the contract's verdict plus a pointer to the test.registry-inputs-spec-paritygate for a key the spec does not declare — that gate derives expectations fromComponentPropsMap, so it never demands them in reverse.Adapt, do not transcribe. #5091's keys were non-author because they are user-state or host switches; these 27 are host surface because the authored registration path cannot reach the branch at all. The rationale differs even though the shape matches, and the comment must state this card's reason.
Tests
27 keys is too many for four assertions each without the suite becoming noise. Pin the property, not the enumeration:
ObjectViewRendererdoes not supplyrenderListView. This is the ruling's basis; pin it so a future change that starts supplying it fails loudly instead of silently promoting 27 keys to the authored path.Reverse-verify: predict which assertions go red before running, and report predicted vs observed.
Gates
Derive from your diff.
scripts/pm/dispatch-gates.mjsis objectstack-only — here derive from.github/workflowsandpackage.json. If the change is comments plus a test only, an empty-frontmatter changeset is the precedent PR5241 set — runcheck-changeset-presence.mjsand follow its verdict. ⛔ Nevermajor.⛔ Do not background a long check and end your turn. Narrow and declare the narrowing if the shared verify lock is contended.
Deliver
Draft PR against
main, first body lineFixes #5097. Push the branch early. Return the JSON report and post it as a comment whose first line is the literal<!-- os-dev-report -->marker.Generated by Claude Code
test(plugin-view): record the 27 object-view keys ruled host surface (#…
os-support-ai commentedon Aug 18, 2026
{ "issue": 5097, "status": "done", "branch": "claude/issue-5097-objectview-host-surface-exemption", "pr": "https://github.com/objectstack-ai/objectui/pull/5252", "premise_still_valid": true, "summary": "Recorded the 2026-08-18 ruling as an exemption block at the forwarding site in packages/plugin-view/src/ObjectView.tsx: OBJECT_VIEW_HOST_COMPOSITION_KEYS (the 27) plus OBJECT_VIEW_DECLARED_FORWARDED_KEYS (the 4 declared), carrying the verdict, the ruling with date and issue, both supplier file:line values, the contract's verdict, and the docs guidance that these are not schema keys; a #region fence around the delegation branch; a note at the second conditionalFormatting read; and src/__tests__/objectViewHostSurface.test.tsx (9 assertions). Nothing declared, no read removed, no runtime path touched — the ObjectView.tsx diff is 154 insertions, 0 deletions, every line a comment or one of the two constants (not re-exported from the entry point, so the published API is unchanged). Empty-frontmatter changeset per the PR5241 precedent; objectui has no skip-changeset label and none was created. I re-derived the key list rather than trusting the card: 31 distinct cast reads, 42 declared members across ObjectViewSchema + BaseSchema, 4 declared (data, navigation, searchableFields, filterableFields), 27 not — an exact match with the card at base 9fbb9b52f. rowActionDefs was treated as one of the 27 exactly like its neighbours; no conclusion was imported to or from #5091, which stays open on its own terms. TWO corrections to the ruling's own basis, both measured on main at e03dfa5ea and both recorded in the block and the PR rather than smoothed over. (1) The ruling names app-shell/src/views/ObjectView.tsx:1618 as the SOLE renderListView supplier. There are two: that callback is now at :1718 (passed at :2481 and :2524), and packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx:2575 supplies it as well — `git show 9fbb9b52f:` puts it at the same line at the ruling's own base, so it was missed, not newly added. I did not stop, because the ruling's substance survives independent measurement: both suppliers are React hosts inside @object-ui/app-shell, neither is the schema-registration path, and ObjectViewRenderer (plugin-view/src/index.tsx:58) passes schema and dataSource only under both tags it registers (object-view :66, alias view :100). The corrected two-supplier enumeration is what the block records. (2) conditionalFormatting is NOT purely host surface: it has a second read at ObjectView.tsx:768, in generateViewSchema's kanban branch, which runs precisely when no host supplied renderListView — i.e. on the author-reachable path the registered renderer takes. For that one key the ruling's 'the authored path cannot reach it' basis is narrower than for its 26 neighbours. Recorded, not acted on (the exemption preserves the status quo either way), and filed as #5248 for the maintainer. The pin asserts conditionalFormatting is the ONLY exempt key read outside the fence, so a second cannot appear unnoticed.", "tests": "All at head 3ef093d4a, the final commit, tree clean. Heavy runs serialized under flock -E 99 -w 540 /tmp/os-heavy-verify.lock; never contended. `pnpm --filter '@object-ui/plugin-view^...' build` was run FIRST (dependency closure), which is what turned type-check's 17 'Cannot find module @object-ui/core' style errors into a real verdict. `pnpm exec vitest run packages/plugin-view/ apps/console/src/__tests__/registry-inputs-spec-parity.test.ts --maxWorkers=2` -> 'Test Files 14 passed (14) / Tests 192 passed (192)'. `pnpm --filter @object-ui/plugin-view type-check` -> 'tsc --noEmit && tsc -p tsconfig.test.json', exit 0 (script name echoed, so not a zero-match silent pass). `pnpm --filter @object-ui/plugin-view lint` -> 0 errors, 142 warnings all pre-existing. check-control-bytes / check-changeset-presence / check-changeset-no-major / check-changeset-fixed / check-lint-coverage / check-type-check-coverage / check-package-self-import / check-phantom-dependencies -> all OK. Changeset gate verdict was followed, not assumed: it reported the missing changeset first, then '✅ ... Every one of them has an EMPTY frontmatter'. Also self-scanned the touched files for control bytes (grep -naP, no matches). NOT run locally, declared: check:published-dist (builds every published package; the new file is under src/__tests__/, already excluded by packages/plugin-view/tsconfig.json for that gate) — CI runs it. NOTE for future runs in this repo: `pnpm --filter @object-ui/plugin-view test` is NOT valid local evidence — the package-local vitest.config.ts carries no workspace aliases and fails to resolve @object-ui/i18n etc. against unbuilt dist; that failure is pre-existing on main and on files this PR does not touch. The root invocation above is what CI and PR5241 use. REVERSE VERIFICATION — three ablations, direction predicted before each run, all three matched exactly. (A) delete the pagination read inside the fence: predicted 3 red (set-equality, by-name subtraction, forwarding), observed '3 failed | 6 passed', exactly those three. (B) make ObjectViewRenderer supply renderListView: predicted exactly 1 red (the reachability pin), observed '1 failed | 8 passed', that test. (C) publish pagination on the object-view registry inputs: predicted exactly 1 red (the not-published pin), observed '1 failed | 8 passed' with \"expected [ 'objectName', 'title', …(14) ] to not include 'pagination'\". REBUILD LEG: none is owed, and the reason is structural rather than asserted — the root vitest.config.mts aliases every @object-ui/* specifier to that package's src (:246+), and both mutated files (plugin-view/src/ObjectView.tsx, plugin-view/src/index.tsx) are reached by the suite through RELATIVE imports (../ObjectView, ../index), so no dist sits in the resolution path of the subject under test and a mutation takes effect without a build. Each ablation was taken from the COMMITTED state and restored with `git checkout branch -- path`; git status clean and the suite green afterwards. One incidental finding worth recording: the pin's first run failed by reporting a host key named 'K', read out of the exemption block's own prose spelling the `(schema as any).K` form — comments are now stripped before any read is derived, since a derivation that reads its own documentation is not a derivation.", "open_questions": [], "out_of_scope_findings": [ "filed as #5248: `conditionalFormatting` on the object-view node has a SECOND read at ObjectView.tsx:768 on the author-reachable kanban path, so the #5097 host-surface exemption rests on a narrower basis for that one key than for the other 26 — three routes offered (declare it, narrow the kanban read, or keep both and record the edge), no code change made" ] }Generated by Claude Code
Record tree/chart as host-composition-only view types, and give tree …
test(plugin-view): record the 27 object-view keys ruled host-composit…
Record tree/chart as host-composition-only view types, and give tree …