Filed by the os-dev seat implementing objectui#9308 (PR #9369). ⛔ Not fixed there: skills/** is a governed surface (AGENTS.md §受管面, GOVERNED_SURFACES skills-catalog), and a single path from it would move that whole PR into the draft-and-wait lane — while that PR is the one turning Doc Snippet Type Check green on main.
What is now false
The maintainer ruling of 2026-09-13 on objectui#9308 (option B) did two things:
- b1 —
SchemaRenderer no longer publishes the injected DataSource adapter as the expression root data.
- b2 —
useDataScope, which is what a node's bind resolves through, now reads the ambient scope a host publishes via PredicateScopeProvider instead of walking the adapter.
The published skill package still teaches both retired halves. Measured on claude/issue-9308-unbind-data-root:
skills/objectui/guides/schema-expressions.md
| line |
text |
why it is now false |
| 112 |
a scope-source table row mapping "Top-level data fields" to SchemaRendererProvider dataSource |
the provider's dataSource publishes no expression root at all |
| 113 |
a row reading `` |
data |
| 302-303 |
"dataSource = { customerNames: [...] }, list calls useDataScope("customerNames") and renders one entry per array element" |
useDataScope no longer walks dataSource |
| 305 |
"Nested paths work: "bind": "app.settings.users" resolves dataSource.app.settings.users" |
it resolves scope.app.settings.users |
| 393 |
a comment introducing a bound example as dataSource = { rows: [...] } |
same |
Roughly two dozen further ${data.…} examples on that page (lines 35-232, 403-406) are not wrong per se — data is still readable if a host publishes it — but every one of them is now unreachable for a reader following the wiring the same page teaches, so they read as a working example and produce the raw source text.
skills/objectui/guides/data-integration.md and skills/objectui/rules/protocol.md carry the same bind teaching (both are in skill-guide-data-table-binding.test.tsx's GUIDE_PATHS, and all three failed that test's list leg before the harness moved).
The behaviour change a reader has to be told about
Not just a renaming. Measured on the built evaluator, a missing root and a present-but-undefined root are different:
| scope |
data.status == 'draft' |
{ data: undefined } |
false |
no data key |
true (unevaluable, fail-soft), and objectui#5454's reporter warns |
So a data.* gate authored from these guides used to hide its node on every row and now shows it on every row. The correct runtime-layer row root is record (ADR-0089 D3).
What PR #9369 did instead, and what that leaves
The six pins in packages/components that READ these guides and render their examples now publish the host values through PredicateScopeProvider, so each still measures its own subject (the JSON example, the registry claim, the diagnostic line). ⚠️ That means those pins are green while the prose beside the examples they read is wrong — the coverage hole this card exists to close. No assertion was weakened and nothing was skipped.
Suggested shape
Move the three files to the scope channel exactly as content/docs/guide/schema-rendering.md and packages/react/README.md did in PR #9369 — publish under a real name, read it by that name, and state that dataSource is the adapter and not a root. The reader-list paragraph (the plugin packages register (...)) and the data-table bind pothole are unaffected and should not move.
⚠️ Governed surface: an agent drafts, a human merges. ⛔ No ready-flip, no queue, no auto-merge.
Filed by an agent seat while implementing objectui#9308; dedup was run over the 281 open issues this repository's issue-list endpoint returns, with objectui#9308 and objectui#9346 as the known-hit control — no existing card covers this surface (objectui#7945 is the same tree, a different teaching).
Filed by the
os-devseat implementing objectui#9308 (PR #9369). ⛔ Not fixed there:skills/**is a governed surface (AGENTS.md §受管面,GOVERNED_SURFACESskills-catalog), and a single path from it would move that whole PR into the draft-and-wait lane — while that PR is the one turningDoc Snippet Type Checkgreen onmain.What is now false
The maintainer ruling of 2026-09-13 on objectui#9308 (option B) did two things:
SchemaRendererno longer publishes the injectedDataSourceadapter as the expression rootdata.useDataScope, which is what a node'sbindresolves through, now reads the ambient scope a host publishes viaPredicateScopeProviderinstead of walking the adapter.The published skill package still teaches both retired halves. Measured on
claude/issue-9308-unbind-data-root:skills/objectui/guides/schema-expressions.mdSchemaRendererProvider dataSourcedataSourcepublishes no expression root at alldatadataSource = { customerNames: [...] },listcallsuseDataScope("customerNames")and renders one entry per array element"useDataScopeno longer walksdataSource"bind": "app.settings.users"resolvesdataSource.app.settings.users"scope.app.settings.usersdataSource = { rows: [...] }Roughly two dozen further
${data.…}examples on that page (lines 35-232, 403-406) are not wrong per se —datais still readable if a host publishes it — but every one of them is now unreachable for a reader following the wiring the same page teaches, so they read as a working example and produce the raw source text.skills/objectui/guides/data-integration.mdandskills/objectui/rules/protocol.mdcarry the samebindteaching (both are inskill-guide-data-table-binding.test.tsx'sGUIDE_PATHS, and all three failed that test'slistleg before the harness moved).The behaviour change a reader has to be told about
Not just a renaming. Measured on the built evaluator, a missing root and a present-but-undefined root are different:
data.status == 'draft'{ data: undefined }falsedatakeytrue(unevaluable, fail-soft), and objectui#5454's reporter warnsSo a
data.*gate authored from these guides used to hide its node on every row and now shows it on every row. The correct runtime-layer row root isrecord(ADR-0089 D3).What PR #9369 did instead, and what that leaves
The six pins in⚠️ That means those pins are green while the prose beside the examples they read is wrong — the coverage hole this card exists to close. No assertion was weakened and nothing was skipped.
packages/componentsthat READ these guides and render their examples now publish the host values throughPredicateScopeProvider, so each still measures its own subject (the JSON example, the registry claim, the diagnostic line).Suggested shape
Move the three files to the scope channel exactly as
content/docs/guide/schema-rendering.mdandpackages/react/README.mddid in PR #9369 — publish under a real name, read it by that name, and state thatdataSourceis the adapter and not a root. The reader-list paragraph (the plugin packages register (...)) and thedata-tablebindpothole are unaffected and should not move.Filed by an agent seat while implementing objectui#9308; dedup was run over the 281 open issues this repository's issue-list endpoint returns, with objectui#9308 and objectui#9346 as the known-hit control — no existing card covers this surface (objectui#7945 is the same tree, a different teaching).