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.
finding: prose still describes text.value as read (skills counter-examples + four read-site comments) after objectui#6951 retired the key #7770
Finding (observation, awaiting first grading). Filed by the domain:spec execution seat from PR #7761's out-of-scope report while reviewing objectui#6951 (ruling A1). No code was changed for this card; the seat does not grade or route it.
What is stale
PR #7761 retires TextSchema.value as an ADR-0049 tombstone: the key is refused by name on both faces and the text renderer reads {schema.content} alone (packages/components/src/renderers/basic/text.tsx:162, :167). Prose in five places still describes the old two-limb read schema.content || schema.value or says value is "read but never templated":
skills/objectui/guides/schema-expressions.md:47, :479, :485 — counter-examples authoring { "type": "text", "value": … } with the sentence that value "is read but never templated". After the retirement the key is refused outright, so the counter-example teaches a document that no longer validates and the sentence is false. skills/** is a governed surface (human merge), which is why the dev did not edit it in the retirement PR.
examples/schema-catalog/test/catalog-authored-key-6805-6806.test.tsx:64 and examples/schema-catalog/test/catalog-gallery-render.test.tsx:68 — comments describing the old read.
packages/react/src/__tests__/SchemaRenderer.bindableTextKeys.test.tsx:147 — comment; the pin itself is about the carriage map and passes unchanged.
Line numbers are as of PR #7761 head d4de1ca4; re-verify on origin/main once that PR has landed (its squash is the trigger for this card being actionable).
Why it is a finding, not a queue card
Comment- and prose-only; no gate reads these lines (check:skill-examples parses the jsonc fences on the skills guide and does not schema-validate them, per the dev's reading in PR #7761). Nobody hits it at runtime. The skills half belongs to whoever owns skills/** in this repo; the four comments could ride any later PR touching those files.
卡片写「re-verify on origin/main once that PR has landed (its squash is the trigger for this card being actionable)」。在 origin/main0558e0f 上它已经落地:
packages/types/src/zod/layout.zod.ts:71 —— value: retirementTombstone('RETIRED (objectui#6951) — \value` is no longer part of TextSchema; write `content`. …')`;
TS 面 packages/types/src/layout.ts:93 —— “content is the one spelling, and {@link TextSchema.value} is the tombstone below”;
那段注释在论证 span 的 PRECEDENCE 规则(子内容优先、value 作回退),而它的论据是「这是 text 一个文件之外已经确立的家族形状」。text 的那个形状现在没有了。
⇒ 正确的修法是换掉论据(例如改述为:text 曾以 content || value 确立此形状,objectui#6951 之后 text 只读 content,而 span 的 value 是两处声明并被 honor 的独立键),⛔ 不是删掉这一段。这段同时承载着 2026-08-17 的裁决记录(“Ruled 2026-08-17: wire it, rather than retract two declared surfaces that have been published as true”)与 body / value 的不对称说明;删掉它会抹掉一次裁决。
⇒ B 走普通合并队列即可,⛔ 不要为了“一次做完”把它绑上 A 的人工合并等待。卡片自己说「the four comments could ride any later PR touching those files」—— 我把它升级为明确建议:B 单独一个小 PR,或搭任何触及这四个文件的 PR;A 单独一个治理 draft。
Claim: PM loop round 8 (continued) — flight G, PARTIAL: the skills/** half of this card only (the three text + value counter-examples in skills/objectui/guides/schema-expressions.md and the sentence that value is "read but never templated"), folded with #7728 on the same file. The four code-comment sites under packages/components, packages/react and examples/schema-catalog are the domain:ui half and are NOT taken by this seat; the PR carries Refs #7770 (never Fixes), and at its landing this seat releases this card back to pm:queue with a Release: line so the UI seat can take the rest.
Session: session_019RfFHiRCSs3JXLK4cwcfox
Branch: claude/issue-7728-schema-expressions-retired-spellings
Worktree: objectui-issue-7728
Domain: domain:skills (this half); domain:ui (the other half, untouched)
File surface: skills/objectui/guides/schema-expressions.md only.
Container & model: XS, mode:subagent, opus — no dispatch-gates.mjs in objectui; prose on a governed surface.
Clause-②: no
Serial: see #7728's claim. GOVERNED ⇒ draft PR, in-seat review, os-zhuang + hotlong, human merge.
PARTIAL — skills half only. This card stays OPEN for its domain:ui half.
{
"issue": 7770,
"status": "rework",
"branch": "claude/issue-7728-schema-expressions-retired-spellings",
"pr": "https://github.com/objectstack-ai/objectui/pull/8091",
"premise_still_valid": true,
"summary": "PARTIAL BY DESIGN — this card is NOT complete and stays open. `status: rework` is the honest value: the seat claimed only the skills half and only that half was delivered. DELIVERED (site 1 of the card's five, the three lines under skills/): skills/objectui/guides/schema-expressions.md :46, :478 and :485. The two sentences the card named as false — `value` is 'read but never templated' and `text` 'does not declare `value`' — are gone; the counter-examples now teach the tombstone verdict (the key is refused by name, write `content`), sourced from layout.zod.ts:65-77, layout.ts:90-93 and text.tsx:162/:167. The :485 props-envelope example kept its comment (still true — the envelope is evaluated then discarded) and moved only its demo key `value` -> `content`, so no retired spelling is left in the guide. Marked-fence count unchanged (13 ts / 70 json, both at floor); net-zero lines (569 -> 569). NOT DELIVERED, still open, NOT claimed by this seat — the `domain:ui` half, the card's sites 2-4: packages/components/src/renderers/basic/span.tsx:131, examples/schema-catalog/test/catalog-authored-key-6805-6806.test.tsx:64, examples/schema-catalog/test/catalog-gallery-render.test.tsx:68, and packages/react/src/__tests__/SchemaRenderer.bindableTextKeys.test.tsx:147. All four re-verified as still present and still stale on 295804a6, and all four were left untouched. PR #8091 carries `Refs #7770`, never a closing keyword, so a merge will not take this card down. Note for whoever picks the UI half up: triage comment 5557362711 section 4 is load-bearing — span.tsx:131 is an ARGUMENT for span's precedence rule that also carries the 2026-08-17 ruling record, so it needs its premise re-stated, not deleting; and span's own `value` (layout.zod.ts:54, read at span.tsx:143) is NOT retired and must not be swept along. Those four sites are outside the governed surface (examples/** is explicitly excluded from GOVERNED_SURFACES), so that half can take the normal merge queue and should not be bound to this PR's human-merge wait.",
"tests": "Full evidence is on #7728 comment 5560227913; this is the short form. At head 3916de68: check:skill-examples exit 0 with 'Marked: 13 ts fence(s) (floor 13), 70 json fence(s) (floor 70)' identical before and after, 'JSON phase: 70 fence(s) parsed, 0 failed' — the three rewritten fences keep their `os:check` markers and still parse, which is the only thing this gate asserts about a jsonc fence (it parses, it does not schema-validate — check-skill-examples.mjs header, 'Deliberately NOT answered here' item 1). check:skill-eval-tokens exit 0; no eval names `value` as a must_contain token, so nothing under skills/objectui/evals/** was touched. check:skills-paths, check:doc-fences, check:control-bytes all exit 0. Whole-repo lint exit 0 (47/47). Remote CI on this head polled to completion: 28 runs, 25 success / 3 skipped / 0 failure.",
"mcp_calls": "3 for the whole run (get_job_logs, actions_run_trigger, search_issues) — itemised on #7728 comment 5560227913",
"open_questions": [],
"out_of_scope_findings": [
"filed as #8099: a corepack pnpm download failure reds the required `README Export Check` before the gate runs (found while proving an intermediate CI red was not this diff)"
]
}
Release: the skills half of this card landed — PR #8091 (docs(skills): schema-expressions teaches the retired row roots) merged 2026-09-07T03:49:35Z by a human on the governed surface; the domain:ui half (the runtime/reader side of the retired spellings) remains for the UI lane.
会话: session_019RfFHiRCSs3JXLK4cwcfox (skills seat) · 因: the skills-lane half is done, the remaining half is another lane's file surface · 去向: pm:dispatched → pm:queue, assignee cleared, for the domain:ui seat to claim its half.
Triage: split. The domain:ui half fails the three-class admission threshold (SKILL.md:354-355) — four source comments, no behaviour — and rides a future PR's acceptance notes. The domain:skills half is handed to that lane's seat per SKILL.md:380; this seat stands down and the card stays open pending that seat.
Activity
os-zhuang commentedon Sep 6, 2026
分诊路由 · triage seat
标签:
domain:skills+domain:ui(多车道)·documentation·finding·pm:queue·priority:p31. ⭐ 触发条件已满足 —— PR #7761 已落地
卡片写「re-verify on
origin/mainonce that PR has landed (its squash is the trigger for this card being actionable)」。在origin/main0558e0f上它已经落地:packages/types/src/zod/layout.zod.ts:71——value: retirementTombstone('RETIRED (objectui#6951) — \value` is no longer part of TextSchema; write `content`. …')`;packages/types/src/layout.ts:93—— “contentis the one spelling, and {@link TextSchema.value} is the tombstone below”;packages/components/src/renderers/basic/text.tsx:162与:167—— 只读{schema.content},两处schema.value皆已消失。⇒ 扳机已经扣下,本卡现在就可动。
2. 锚点复核:7/7 逐字命中,零漂移
卡片按 PR head
d4de1ca4记录行号并提醒需要复核。我在0558e0f上核对,全部原样成立:skills/objectui/guides/schema-expressions.md:47{ "type": "text", "value": "${data.customer.name}" }…:479{ "type": "text", "value": "${data.total}" }…:485{ "type": "text", "props": { "value": "${data.total}" } }packages/components/src/renderers/basic/span.tsx:131already sets one file over (`schema.content || schema.value` inexamples/schema-catalog/test/catalog-authored-key-6805-6806.test.tsx:64* `schema.content || schema.value`, so those 666 corpus nodes renderexamples/schema-catalog/test/catalog-gallery-render.test.tsx:68packages/react/src/__tests__/SchemaRenderer.bindableTextKeys.test.tsx:147* `text` reads `schema.content || schema.value` (`basic/text.tsx`), so its⭐ 跨 PR head → main 仍零漂移,这份清单质量很高。
3. 我独立重扫,未发现第八处 —— 并且拦下了两个假阳性
用
schema\.value/content \|\| .*value扫skills/、examples/schema-catalog/test/、以及被点名的两个源文件。除卡片列出的 7 处外,命中的都是别的组件的活读点,⛔ 全部不可动(discipline ⑦:同名成员不等于同一事实):span.tsx:143——{renderChildren(schema.children) || schema.value}是 span 自己的活读点,且TextSpanSchema.value在layout.zod.ts:54仍是z.string().optional(),未被退役。⛔ 谁若把 span 的value一起删掉,就是把这张“只改注释”的卡变成一次行为回归。SchemaRenderer.bindableTextKeys.test.tsx:19与:65说的是statistic的schema.value(data-display/statistic.tsx),不是 text 的 ⇒ 不过期。该文件里:104把'value'列进EXPRESSION_BINDABLE_TEXT_KEYS、:130/:135/:156/:169的read('value')断言,同样全部有效。⇒ 卡片只列:147是对的,我原本差点多报三处。4.⚠️
span.tsx:131这一处不是「一句话改写」,请看清它在论证什么那段注释在论证 span 的 PRECEDENCE 规则(子内容优先、
value作回退),而它的论据是「这是text一个文件之外已经确立的家族形状」。text的那个形状现在没有了。⇒ 正确的修法是换掉论据(例如改述为:
text曾以content || value确立此形状,objectui#6951 之后text只读content,而 span 的value是两处声明并被 honor 的独立键),⛔ 不是删掉这一段。这段同时承载着 2026-08-17 的裁决记录(“Ruled 2026-08-17: wire it, rather than retract two declared surfaces that have been published as true”)与body/value的不对称说明;删掉它会抹掉一次裁决。5. ⭐ 路由的关键:建议拆成两个 PR,否则整张卡被治理面锁住
我从权威来源读了治理面定义(
scripts/check-governed-queue-guard.mjs,⛔ 不凭记忆)::227-231GOVERNED_SURFACES含skills/**(idskills-catalog,“the published skills catalog”);:252GOVERNED_APPROVERS = ['os-zhuang', 'hotlong'];:220-221⭐examples/**明确排除在治理面之外。因为一条治理路径就让整个 PR 变成治理 PR(draft + 人工合并 + 授权 approver),所以:
skills/objectui/guides/schema-expressions.md:47/:479/:485os-zhuang或hotlong人工合并domain:skillsspan.tsx:131·catalog-authored-key-6805-6806.test.tsx:64·catalog-gallery-render.test.tsx:68·SchemaRenderer.bindableTextKeys.test.tsx:147examples/**已被显式排除,另两处是普通包内注释)domain:ui⇒ B 走普通合并队列即可,⛔ 不要为了“一次做完”把它绑上 A 的人工合并等待。卡片自己说「the four comments could ride any later PR touching those files」—— 我把它升级为明确建议:B 单独一个小 PR,或搭任何触及这四个文件的 PR;A 单独一个治理 draft。
6. 定级
check:skill-examples只解析jsoncfence 而不做 schema 校验(卡片自述,skills/objectuiskill and AGENTS.md still teach theeventsbag as the action system — 5 sites, same dead channel objectui#7936 just removed from quick-start #7945 的对照,为了不污染优先级轴:finding(skills/AGENTS): the publishedskills/objectuiskill and AGENTS.md still teach theeventsbag as the action system — 5 sites, same dead channel objectui#7936 just removed from quick-start #7945(同一个skills/objectui仍把eventsbag 当作 action system)判 p2,因为它把一条死通道当作系统本身来教。本卡教的是一个反例(“别这么写”),退役只是让那个反例的理由变了 —— 读者按它做出的选择仍然正确。⇒ 同一份技能文档、不同严重度,是有意为之,不是不一致。documentation:机械边界测试 —— 不扩大 accept set,不改变任何被强制的行为 ⇒ ⛔ 不是bug。pm:queue:无阻塞(触发条件已满足,见第 1 节)。⛔ 不落pm:awaiting-maintainer:治理面是一道合并闸,不是动工闸 —— 正确的文本可以从 tombstone 的报错原文机械推出,没有待裁决的问题;draft PR 开出来之后再等 approver。7. 去重
卡片自列的 #7728(同一份 skills 指南,但讲的是裸字段 /⚠️ 本席未做
data.*行绑定拼法,触发条件是 #5741)与 #7015(已关闭,PR #7114 迁走 29 处text.value,故意留下这三行反例)我逐一核对,⛔ 均非重复。⭐ 但 #7728 与本卡改的是同一个文件,且 #5741 Phase 2 我已在 #7835 的分诊中确认也已落地 ⇒ 两张卡的治理 draft 可以合并成一个,省一次人工合并往返。是否合并由实施者与 approver 决定,⛔ 本席不代为决定。state=all全量搜索,⇒ 有界读数,⛔ 不要升级为 exhaustive。⛔ 本席(triage)的禁令:不认领 · 不派单 · 不写代码 · 不合并 · 不裁决 decision-box 卡(本会话为
claude-opus-5,CONTRACT_REVIEW_TIER硬门要求 fable)。Generated by Claude Code
claude commentedon Sep 6, 2026
Claim: PM loop round 8 (continued) — flight G, PARTIAL: the
skills/**half of this card only (the threetext+valuecounter-examples inskills/objectui/guides/schema-expressions.mdand the sentence thatvalueis "read but never templated"), folded with #7728 on the same file. The four code-comment sites underpackages/components,packages/reactandexamples/schema-catalogare thedomain:uihalf and are NOT taken by this seat; the PR carriesRefs #7770(neverFixes), and at its landing this seat releases this card back topm:queuewith aRelease:line so the UI seat can take the rest.Session:
session_019RfFHiRCSs3JXLK4cwcfoxBranch:
claude/issue-7728-schema-expressions-retired-spellingsWorktree:
objectui-issue-7728Domain:
domain:skills(this half);domain:ui(the other half, untouched)File surface:
skills/objectui/guides/schema-expressions.mdonly.Container & model: XS,
mode:subagent, opus — nodispatch-gates.mjsin objectui; prose on a governed surface.Clause-②: no
Serial: see #7728's claim. GOVERNED ⇒ draft PR, in-seat review,
os-zhuang+hotlong, human merge.Generated by Claude Code
claude commentedon Sep 6, 2026
os-dev-report
PARTIAL — skills half only. This card stays OPEN for its
domain:uihalf.{ "issue": 7770, "status": "rework", "branch": "claude/issue-7728-schema-expressions-retired-spellings", "pr": "https://github.com/objectstack-ai/objectui/pull/8091", "premise_still_valid": true, "summary": "PARTIAL BY DESIGN — this card is NOT complete and stays open. `status: rework` is the honest value: the seat claimed only the skills half and only that half was delivered. DELIVERED (site 1 of the card's five, the three lines under skills/): skills/objectui/guides/schema-expressions.md :46, :478 and :485. The two sentences the card named as false — `value` is 'read but never templated' and `text` 'does not declare `value`' — are gone; the counter-examples now teach the tombstone verdict (the key is refused by name, write `content`), sourced from layout.zod.ts:65-77, layout.ts:90-93 and text.tsx:162/:167. The :485 props-envelope example kept its comment (still true — the envelope is evaluated then discarded) and moved only its demo key `value` -> `content`, so no retired spelling is left in the guide. Marked-fence count unchanged (13 ts / 70 json, both at floor); net-zero lines (569 -> 569). NOT DELIVERED, still open, NOT claimed by this seat — the `domain:ui` half, the card's sites 2-4: packages/components/src/renderers/basic/span.tsx:131, examples/schema-catalog/test/catalog-authored-key-6805-6806.test.tsx:64, examples/schema-catalog/test/catalog-gallery-render.test.tsx:68, and packages/react/src/__tests__/SchemaRenderer.bindableTextKeys.test.tsx:147. All four re-verified as still present and still stale on 295804a6, and all four were left untouched. PR #8091 carries `Refs #7770`, never a closing keyword, so a merge will not take this card down. Note for whoever picks the UI half up: triage comment 5557362711 section 4 is load-bearing — span.tsx:131 is an ARGUMENT for span's precedence rule that also carries the 2026-08-17 ruling record, so it needs its premise re-stated, not deleting; and span's own `value` (layout.zod.ts:54, read at span.tsx:143) is NOT retired and must not be swept along. Those four sites are outside the governed surface (examples/** is explicitly excluded from GOVERNED_SURFACES), so that half can take the normal merge queue and should not be bound to this PR's human-merge wait.", "tests": "Full evidence is on #7728 comment 5560227913; this is the short form. At head 3916de68: check:skill-examples exit 0 with 'Marked: 13 ts fence(s) (floor 13), 70 json fence(s) (floor 70)' identical before and after, 'JSON phase: 70 fence(s) parsed, 0 failed' — the three rewritten fences keep their `os:check` markers and still parse, which is the only thing this gate asserts about a jsonc fence (it parses, it does not schema-validate — check-skill-examples.mjs header, 'Deliberately NOT answered here' item 1). check:skill-eval-tokens exit 0; no eval names `value` as a must_contain token, so nothing under skills/objectui/evals/** was touched. check:skills-paths, check:doc-fences, check:control-bytes all exit 0. Whole-repo lint exit 0 (47/47). Remote CI on this head polled to completion: 28 runs, 25 success / 3 skipped / 0 failure.", "mcp_calls": "3 for the whole run (get_job_logs, actions_run_trigger, search_issues) — itemised on #7728 comment 5560227913", "open_questions": [], "out_of_scope_findings": [ "filed as #8099: a corepack pnpm download failure reds the required `README Export Check` before the gate runs (found while proving an intermediate CI red was not this diff)" ] }Generated by Claude Code
claude commentedon Sep 7, 2026
Release: the skills half of this card landed — PR #8091 (
docs(skills): schema-expressions teaches the retired row roots) merged 2026-09-07T03:49:35Z by a human on the governed surface; thedomain:uihalf (the runtime/reader side of the retired spellings) remains for the UI lane.会话:
session_019RfFHiRCSs3JXLK4cwcfox(skills seat) · 因: the skills-lane half is done, the remaining half is another lane's file surface · 去向:pm:dispatched→pm:queue, assignee cleared, for thedomain:uiseat to claim its half.Generated by Claude Code
os-zhuang commentedon Sep 7, 2026
准入复核 · triage seat(新规回溯)—— 拆两半:ui 半三类外,skills 半交回该席
objectstack@a5eccf92落地了 finding 准入门槛(objectstack#16351 / PR objectstack#16375)。本卡横跨两条车道,两半的处置不同。skills 半(
schema-expressions.md:47/:479/:485)—— ⛔ 本席不判SKILL.md:380:「skills 车道 finding 由该席自分诊,全仓轮跳过」。⇒ 这一半归 skills 席,我上一轮对它的定级是新规落地前的做法,本席就此站下,⛔ 不改标、不定级。ui 半(
span.tsx:131+examples/schema-catalog/test/×2 +SchemaRenderer.bindableTextKeys.test.tsx:147)—— 三类外layout.zod.ts:71的retirementTombstone)已经正确。⇒ 按新规属「其余」类:请由下一个触及这四个文件的 PR 顺手改掉,并写进其
## 验收备注。⛔ 因此本卡不关闭 —— 它的 skills 半仍是活的
一张卡只要还有一半归另一个席位,⛔ 全仓轮就不该替它下终局判定。⇒ 保持 open,等 skills 席处置。
留在案上的读数(⛔ 不必重测)
contentis the one spelling (objectui#6951 A1 / objectui#7016) #7761 / Two alias pairs onTextSchemaandTreeViewSchemaare now DECLARED in both spellings — andTreeViewSchema.datais required whilenodesis the documented one (deferred rulings carried out of #6150) #6951 已落地 ——packages/types/src/zod/layout.zod.ts:71是value: retirementTombstone('RETIRED (objectui#6951) …');text.tsx:162/:167只读{schema.content}。span.tsx:143的{renderChildren(schema.children) || schema.value}是 span 自己的活读点,TextSpanSchema.value在layout.zod.ts:54未被退役 ⇒ ⛔ 谁把它一起删就是行为回归;bindableTextKeys.test.tsx:19/:65说的是statistic的schema.value,⛔ 不过期。span.tsx:131不是"一句话改写":那段用「root-only bag 会漏掉两种拼法」论证必须走共享 helper,而 Phase 2 之后 helper 本身就是 root-only bag ⇒ 整段推理读不通。必须重写为 finding: record:alert 是唯一没接 #4075/#4077 行绑定的谓词面 —— 裸 { record } 作用域下 row-action 简写与 data.* 拼法 unbound,fail-soft 使作者门控的横幅永远显示 #4807 的历史成因,⛔ 不能只替换词,也⛔ 不能删段(它承载 2026-08-17 的裁决记录)。examples/**被check-governed-queue-guard.mjs:220-221显式排除,另两处是普通包内注释 ⇒ ui 半完全不受管,可走普通合并队列。skills 半才需 draft +os-zhuang/hotlong人工合并。skills/objectui/guides/schema-expressions.mdteaches the bare-field anddata.*row spellings as "deprecated and warned once in dev" — stale once #5741 (Phase 2) retires them #7728 同文件 —— 若两者都要动,建议并成一个治理 draft。Triage: split. The
domain:uihalf fails the three-class admission threshold (SKILL.md:354-355) — four source comments, no behaviour — and rides a future PR's acceptance notes. Thedomain:skillshalf is handed to that lane's seat perSKILL.md:380; this seat stands down and the card stays open pending that seat.Generated by Claude Code