docs(skills): schema-expressions teaches the retired row roots and the text.value tombstone - #8091
Conversation
…e `text.value` tombstone The row-predicate bullet said the bare-field and `data.*` spellings were "deprecated and warned once in dev". On `main` both are retired: a runtime record surface binds `record.*` alone, the other two fault on the engine (`Unknown variable`) under each surface's existing error policy, and the Phase-1 warning was removed with them. `data` stays canonical one layer over, on the metadata-editing form. The sentence that the authoring oracle still accepts `data.*` silently is kept — it is still true and is why the bullet exists. The three `text` + `value` counter-examples said `value` is "read but never templated" / that `text` "does not declare `value`". `TextSchema.value` is now an ADR-0049 retirement tombstone refused by name, and the renderer reads `schema.content` alone, so the counter-examples now teach that verdict. The `props`-envelope counter-example keeps its lesson on the live key. Net-zero lines (569 before and after); every `os:check` marker kept, so the marked population is unchanged at 13 ts / 70 json. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
|
ACCEPT — governed in-seat review of PR #8091, head Implemented-by: Verified in a detached compare worktree at the PR head, not from the report:
Landing regime: governed ( Generated by Claude Code |
维护者速读事情:对外发布的 objectui 技能文档 第一处,行谓词的根:文档说「裸字段和 第二处, 没动什么: 要请您留意的:CI 中途一次红是 corepack 下载 pnpm 失败(门禁没跑就红),同一提交重跑即绿,dev 已立 #8099 给 CI 车道。 席位意见:建议合并。受管面( Generated by Claude Code |
Fixes #7728
Refs #7770 — skills half ONLY. The four code-comment sites under
packages/components,packages/reactandexamples/schema-catalogare thedomain:uihalf and are untouched here; that card stays open for them.What this is
One file,
skills/objectui/guides/schema-expressions.md, net-zero lines (569 before, 569 after; 9 insertions / 9 deletions). Two cards land together because they are the same file, the same rules-only register and the same governed merge gate — the triage seat suggested folding them on both cards (comment 5557462199 §5, comment 5557362711 §7) so the approver merges this file once rather than twice.Every
os:checkmarker is kept, so the marked fence population is unchanged.改前 → 改后
:277-282(#7728)record.status(canonical), barestatusanddata.status, the last two deprecated and warned once in dev"record.*; a barestatusordata.statusis retired there and faults on the runtime engine (Unknown variable), under each surface's existing error policy;datastays canonical only on the metadata-editing layer"packages/core/src/evaluator/rowPredicateCanon.ts:23-28("Phase 2 … retired them … and the Phase-1 warning went with them"), the spelling table at:36-40, the fault-policy sentence at:42-51, and the layer scoping at:60-69(CANONICAL_ROOT_BY_LAYER={ runtime: 'record', metadata: 'data' }):46(#7770)textdoes not declarevalue— renders the literal${data.customer.name}"valueis RETIRED fromtext— refused by name; writecontent"packages/types/src/zod/layout.zod.ts:65-77(ADR-0049 retirement tombstone, "valueis no longer part of TextSchema; writecontent"),packages/types/src/layout.ts:90-93:478(#7770)valueis read but never templated"valueis RETIRED fromtext; writecontent"{schema.content}alone atpackages/components/src/renderers/basic/text.tsx:162and:167— thevaluelimb is gone, so "read but never templated" is false in both halves:485(#7770){ "type": "text", "props": { "value": "${data.total}" } }{ "type": "text", "props": { "content": "${data.total}" } }propsenvelope is evaluated then discarded, exactly as thecardfence at:34-35teaches). Only the demo key moved to the live one: leaving a retired spelling directly under a counter-example that has just saidvalueis refused invites the reading "valueis the key, just not inprops".The sentence #7728 asked to KEEP is kept: the authoring oracle still accepts
data.*silently, and that is still why the bullet exists.What is deliberately NOT changed
valuestays in the closed evaluated set sentence at:56-58and:564— it is template-evaluated onstatisticand is not retired there. The retirement isTextSchema.valueonly. Verified per-type, not per-key:expressionBindableTextKeysFor('text')has length 0 while the set itself is['title','label','value','description'](packages/react/src/__tests__/SchemaRenderer.bindableTextKeys.test.tsx:104,:153-157).Gates — every exit code captured before any pipe
Run at
3916de68, the head of this PR. Prerequisite: the scoped build the gate prints,pnpm exec turbo run build $(node scripts/check-skill-examples.mjs --build-filter) --concurrency=2— 29/29 tasks successful.pnpm check:skill-examplespnpm check:skill-eval-tokenspnpm check:skills-pathspnpm check:doc-fencespnpm check:control-bytesnode scripts/check-governed-queue-guard.mjs --test skills/objectui/guides/schema-expressions.mdskills/**x1 — the published skills catalog"node scripts/pm/check-half-states.mjs --self-testnode scripts/check-changeset-presence.mjspnpm exec turbo run lint --concurrency=2(whole repo)@object-ui/collaborationand untouched by this diffTwo readings the dispatch asked for
skills/**line or token budget. Searchedscripts/and.github/workflows/for a budget of either kind: zero matches. The three skills gates arecheck-skill-examples(a SHRINK-ONLY floor on the marked fence population, not on lines),check-skill-eval-tokensandcheck-skills-paths. The net-zero constraint honoured here is the triage seat's instruction, not a mechanical one — so nothing would have gone red had it been missed, which is the reason to state it rather than assume it.scripts/check-half-states.mjsdoes not exist at that path; the script is atscripts/pm/check-half-states.mjs, and that is what was run.Governed surface
skills/**isGOVERNED_SURFACES'skills-catalogentry, so this PR stays a draft for a human merge byos-zhuangorhotlong. Not flipped ready, not enqueued, no auto-merge armed, and no approval left by this seat.维护者速读(草稿)
这份已发布技能文档在教两条已经死掉的写法。 它是我们交付给使用者(以及使用者的 AI)的官方指南,读者照着写,写出来的元数据在今天的运行时是坏的。这次只改一个文件、只改措辞,行数净零。
第一处关于行谓词的根。 文档说「裸字段和
data.*只是不推荐,开发模式下会警告一次」。树上已经不是这样了:运行期记录面现在只认record.*一个根,另外两种拼法直接报错,而那条警告本身也已经随之删掉。读者读到「只是不推荐」,会合理地继续用data.status—— 这是把一条死通道当活通道教,是本次两处里更贵的一处。第二处关于
text组件的value键。 这个键已经按 ADR-0049 退役,schema 会指名拒绝它,渲染器也只读content了。文档里三个反例还在说它「被读取但不做模板求值」。反例本身没错(本来就不该那么写),但它给出的理由已经过期,而且示例里那份 JSON 现在根本通不过校验。对业务的影响,以及为什么现在做。 两张卡的触发条件都已经落地(退役的两个 PR 都已合并到
main),所以这不是提前量,是补一笔欠账。影响面是编写者体验:错误的文档会让人写出跑不起来的页面,再来提工单;而这份文档正是我们对外宣称「照着它写就对」的那一份。改完之后,读者拿到的是当前真实的判定 —— 一个根、一个拼写,写错会响亮报错而不是静默出空白。这次没有做什么。
value在statistic上仍然是合法且会求值的键,没有动;#7770 还剩四处代码注释在packages/与examples/下,属于 UI 车道,本 PR 不碰,那张卡继续开着。因为落点是受管的已发布技能目录,本 PR 停在 draft,等维护者合并。席位意见
(留空 — 待席位评审填写)
Generated by Claude Code