Measured while implementing objectui#8021, whose triage promoted "one look at whether the
sibling guides teach the same prop" into a required pre-step. The look was run before any
writing, and it came back positive: the same defect sits on three more teaching surfaces. It
is filed here rather than swept into that card's pull request, for the reason in the last
section.
Measured on origin/main ee5ef7748.
⚠️ JSX tag shapes are spelled out in words below: a tag-shaped fragment does not survive this
field, and the passages this card is about are exactly JSX elements.
The mechanism (unchanged from objectui#8021)
SchemaRendererProps declares exactly one prop, schema
(packages/react/src/SchemaRenderer.tsx). The docblock beside it names the consequence: the
renderer "passes every prop it does not itself read straight through to the component the
schema names". So a data={data} written on a SchemaRenderer element is not ignored and not
refused — it is forwarded, and nothing throws and nothing warns.
The evaluator's scope is built from usePredicateScope() plus current_user, an optional
record, data: dataSource and page: pageVariables, where dataSource comes from
SchemaRendererProvider. Four names, and a host's own values live under data. only.
user / current_user is the AMBIENT signed-in user an ExpressionProvider publishes — a
real name, but never the object the page handed over.
The census, measured with a lit control
The scan matched SchemaRenderer elements with a word boundary after the name, so
SchemaRendererProvider (the correct carrier) is excluded by construction. Control: the
scan found 18 elements across the five surfaces, so an empty offender list would have been a
reading rather than a silent zero.
| surface |
SchemaRenderer elements |
carrying a forwarded look-alike |
${…} openings whose head name no scope holds |
content/docs/guide/schema-rendering.md |
5 |
2 |
— (repaired on objectui#8021) |
packages/react/README.md |
4 |
1 |
— (repaired on objectui#8021) |
content/docs/guide/expressions.md |
6 |
3 |
26 |
content/docs/guide/architecture.md |
1 |
1 |
4 |
README.md (repo root) |
2 |
2 |
7 |
"Forwarded look-alike" is one of three props none of which SchemaRenderer reads: data,
dataSource, and debug — the last is read off the same provider context
(context?.debug || context?.debugFlags?.enabled), so
content/docs/guide/expressions.md's Debug Mode block is wrong on two props at once. The
root README.md carries one of each: a data={data} element in the quick-start and a
dataSource={dataSource} element in the ObjectStack data-integration section.
The head names the scope does not hold, by surface:
content/docs/guide/expressions.md — users×8, form×3, price×2, status×2, task×2,
score, count, settings, items, total, formatCurrency, adultUsersScore, x,
isAdmin
content/docs/guide/architecture.md — form×2, orders×2
README.md — stats×7
⚠️ That column is a population, not a verdict. Some of those are legitimately about a
custom evaluation context the page is teaching on purpose (formatCurrency sits in the
"Custom Functions" section, which hands the evaluator its own context), and item / index
were excluded up front because list renderers publish them through a different mechanism.
Deciding which of the remainder are wrong is the work this card is asking for.
Why this is not folded into objectui#8021's pull request
That card's central fence is that the page teaches two independent errors and that both
coordinates move or neither does — its leg D measures that correcting the wiring while
leaving the bare prefix still puts the raw source on screen.
On these three surfaces the element is only half the defect, and the other half is
page-wide rather than a passage. Moving only the wiring would produce exactly leg D at
scale: three pages that read as repaired and still print the characters the author typed.
Moving both halves means rewriting the expression spelling of a whole guide, several times
over, with a judgement on each site about whether it means the ambient user or the data
scope — a judgement objectui#8021 does not settle and its dispatch explicitly refused to let
a claimant invent.
So objectui#8021 repaired, in full, the two surfaces where every site in the passage moves
together, and this card carries the population where it does not.
What a repair would decide
Per surface, whether the page is teaching the data scope (then the wiring becomes a
SchemaRendererProvider mount and every reference takes the data. prefix) or the
ambient host scope (then the bare name is right and the page should say which provider
publishes it). The two answers are different documents, which is why this is not a
find-and-replace.
⛔ Deliberately unassigned and unlabelled, for triage.
Generated by Claude Code in session session_01UzHd6hDYatoDn17BuwKxnZ — attribution written
as prose here because the footer block does not survive issue creation.
Generated by Claude Code
Measured while implementing objectui#8021, whose triage promoted "one look at whether the
sibling guides teach the same prop" into a required pre-step. The look was run before any
writing, and it came back positive: the same defect sits on three more teaching surfaces. It
is filed here rather than swept into that card's pull request, for the reason in the last
section.
Measured on
origin/mainee5ef7748.field, and the passages this card is about are exactly JSX elements.
The mechanism (unchanged from objectui#8021)
SchemaRendererPropsdeclares exactly one prop,schema(
packages/react/src/SchemaRenderer.tsx). The docblock beside it names the consequence: therenderer "passes every prop it does not itself read straight through to the component the
schema names". So a
data={data}written on a SchemaRenderer element is not ignored and notrefused — it is forwarded, and nothing throws and nothing warns.
The evaluator's scope is built from
usePredicateScope()pluscurrent_user, an optionalrecord,data: dataSourceandpage: pageVariables, wheredataSourcecomes fromSchemaRendererProvider. Four names, and a host's own values live underdata.only.user/current_useris the AMBIENT signed-in user anExpressionProviderpublishes — areal name, but never the object the page handed over.
The census, measured with a lit control
The scan matched SchemaRenderer elements with a word boundary after the name, so
SchemaRendererProvider(the correct carrier) is excluded by construction. Control: thescan found 18 elements across the five surfaces, so an empty offender list would have been a
reading rather than a silent zero.
${…}openings whose head name no scope holdscontent/docs/guide/schema-rendering.mdpackages/react/README.mdcontent/docs/guide/expressions.mdcontent/docs/guide/architecture.mdREADME.md(repo root)"Forwarded look-alike" is one of three props none of which
SchemaRendererreads:data,dataSource, anddebug— the last is read off the same provider context(
context?.debug || context?.debugFlags?.enabled), socontent/docs/guide/expressions.md's Debug Mode block is wrong on two props at once. Theroot
README.mdcarries one of each: adata={data}element in the quick-start and adataSource={dataSource}element in the ObjectStack data-integration section.The head names the scope does not hold, by surface:
content/docs/guide/expressions.md—users×8,form×3,price×2,status×2,task×2,score,count,settings,items,total,formatCurrency,adultUsersScore,x,isAdmincontent/docs/guide/architecture.md—form×2,orders×2README.md—stats×7custom evaluation context the page is teaching on purpose (
formatCurrencysits in the"Custom Functions" section, which hands the evaluator its own context), and
item/indexwere excluded up front because list renderers publish them through a different mechanism.
Deciding which of the remainder are wrong is the work this card is asking for.
Why this is not folded into objectui#8021's pull request
That card's central fence is that the page teaches two independent errors and that both
coordinates move or neither does — its leg D measures that correcting the wiring while
leaving the bare prefix still puts the raw source on screen.
On these three surfaces the element is only half the defect, and the other half is
page-wide rather than a passage. Moving only the wiring would produce exactly leg D at
scale: three pages that read as repaired and still print the characters the author typed.
Moving both halves means rewriting the expression spelling of a whole guide, several times
over, with a judgement on each site about whether it means the ambient user or the data
scope — a judgement objectui#8021 does not settle and its dispatch explicitly refused to let
a claimant invent.
So objectui#8021 repaired, in full, the two surfaces where every site in the passage moves
together, and this card carries the population where it does not.
What a repair would decide
Per surface, whether the page is teaching the data scope (then the wiring becomes a
SchemaRendererProvidermount and every reference takes thedata.prefix) or theambient host scope (then the bare name is right and the page should say which provider
publishes it). The two answers are different documents, which is why this is not a
find-and-replace.
⛔ Deliberately unassigned and unlabelled, for triage.
Generated by Claude Code in session
session_01UzHd6hDYatoDn17BuwKxnZ— attribution writtenas prose here because the footer block does not survive issue creation.
Generated by Claude Code