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 }}
Repository navigation
ADR-0049 enforce-or-remove: TextSchema.value is a second spelling for the text node's one content slot — its own docblock calls it "a dialect, not a design", and the 2026-08-31 ruling made content the sole evaluation channel #7016
Provenance: filed under the 2026-08-31 maintainer ruling on objectstack#13670 (option 2 — content is text's sole evaluation channel; the value spelling's retirement was explicitly split out as its own enforce-or-remove question, ⛔ not pre-judged there). Filed by the director seat, session session_01KGtaLpkW1mycWgkbSb3H6t.
The question this card carries
packages/types/src/layout.tsTextSchema declares both content?: string (the spelling the renderer reads FIRST) and value?: string (fallback, read only when content is absent/falsy — {schema.content || schema.value} in renderers/basic/text.tsx). The value declaration's own docblock records, verbatim: "Two spellings for one slot is a dialect, not a design. Retiring one of them is an ADR-0049 enforce-or-remove question and is deliberately NOT decided here."
Since the objectstack#13670 ruling, the case for the dialect has narrowed further: value is now declared out of the expression-binding carriage map by ruling, and the guides' 23 text.value teachings are being rewritten to content (objectui#7015). What remains reading value is the renderer's || fallback and whatever stored documents author it plainly (no census of stored non-expression text.value usage exists yet — that census is this card's first deliverable).
Shape of the eventual decision (for the grader — ⛔ not decided here)
Retire value: census stored usage → deprecation/normalization or loud refusal per ADR-0049 route selection; one slot, one spelling.
Keep as tolerated fallback: then the tolerance must be declared where it lives (the docblock already does half of this) and pinned, so it stops being a dialect and becomes a recorded compatibility arm.
Refs: objectstack#13670 (the ruling) · objectui#7015 (docs fix) · objectui#6150 (the census that declared value in the first place) · objectui#4795 (the binding framework).
packages/types/src/layout.ts:92 ⚠️ Two spellings for one slot is a dialect, not a design. Retiring one of
packages/types/src/layout.ts:104 value?: string;
packages/components/src/renderers/basic/text.tsx:162 {schema.content || schema.value}
packages/components/src/renderers/basic/text.tsx:167 return <>{schema.content || schema.value}</>;
Claim: PM loop round R1 (fourth wave) — folded into #6951's PR A
Session: session_01BAZFhALsQsGqxui8sNqM8s
Branch: claude/issue-6951-text-content-only
Worktree: objectui-issue-6951-a
Domain: domain:spec
File surface (region level): as declared on #6951's claim for PR A — packages/types/src/layout.tsTextSchema block (:76–:114 on a00db9ef) · packages/types/src/zod/layout.zod.tsTextSchema const · packages/components/src/renderers/basic/text.tsx:162, :167 (the || schema.value limb) · content/docs/components/basic/text.mdx and any doc row still teaching text.value · corpus rewrites on text nodes after the measurement · pins · at most one parity-ledger row · changeset
Container & model: S, mode:subagent, model: fable = CONTRACT_REVIEW_TIER
Clause-②: yes
Serial constraints cleared: as on #6951 (layout.ts shared with #7361 in a different region; parity file shared with #7069 / PR #7731 / PR #7726 in different regions).
Fold gates (five, per the dispatch runbook), answered:
Same package / region — TextSchema on both faces plus the two text.tsx fallback sites (:162, :167) this card's triage (5548193033) named; one worktree, one changeset, one queue slot.
Every member ruled / graded — Two alias pairs on TextSchema and TreeViewSchema are now DECLARED in both spellings — and TreeViewSchema.data is required while nodes is the documented one (deferred rulings carried out of #6150) #6951 carries the maintainer ruling; this card is graded pm:queue / priority:p3 by triage and is not in the decision box. Triage's "census first" constraint is satisfied by the ruling's own premise clause: the dev measures the content-only / value-only / both distribution over examples/, apps/, packages/*/examples, content/docs/** with the denominator and stops if value is the majority. The stored-document population triage asked about is answered by the maintainer's ruling that existing value-only documents are not a reason to stage (2026-08-27 principle, quoted in the ruling) — maintainer ruling outranks the triage note.
Independently verifiable — this card's own criterion: value is unwritable on the TS face (?: never), refused by the zod face at path value with the guidance message, and no longer read at either text.tsx site; one pin per leg.
Premise on origin/main = a00db9ef (13:09Z): layout.ts:104 value?: string inside TextSchema with the "dialect, not a design" docblock at :92; layout.zod.ts:65 value; text.tsx:162 / :167 both read schema.content || schema.value. PR A carries Fixes #7016; if the A premise fails (value-majority), the dev reports on #6951 and this card stays open with the reading.
Dev claim — dispatched by the domain:spec PM seat, session session_01BAZFhALsQsGqxui8sNqM8s (PM loop round R1, fourth wave); this card is folded into #6951's PR A. Assignee stays as the PM set it; this comment is the dev's identity marker.
Branch claude/issue-6951-text-content-only, worktree objectui-issue-6951-a, cut from origin/main = 9587fc95. Empty branch pushed as the write-route probe.
Landing — PR #7761 carries Fixes #7016 (folded into objectui#6951's A half under ruling A1; fold recorded on #6951). Pre-landing three (2026-09-05T16:35Z): ① flipped ready at 16:34Z after the in-seat contract review PASSED at tier (objectui#6951 comment 5553212632) and needs:contract-review was cleared on the PR with provenance (PR comment 5553220497); ② auto-merge enabled, method SQUASH; ③ queue probe running. This card is closed by the squash; pm:dispatched is stripped here once MERGED is read twice (PR merged: true + origin/main containing the squash).
MERGED (2026-09-05T16:49Z) — PR #7761 landed through the merge queue as squash 5ad86dde on main (the objectui#6951 A half, ruling A1; this card was folded into it with the fold gates recorded on #6951). Three readings: PR merged: true (merged_at 16:49:09Z); this card's closed_by_pull_requests reference to PR #7761 reads MERGED and the card closed at 16:49:11Z; git log origin/main at 16:49:42Z shows 5ad86dde feat(types)!: retire TextSchema.value as an ADR-0049 tombstone — content is the one spelling (objectui#6951 A1 / objectui#7016) (#7761) at the tip. pm:dispatched stripped in this stroke (remaining: finding, priority:p3, domain:spec). The census this card asked for as its first deliverable is in the PR body (776 content-only / 25 value-only / 0 both across the four ruling roots). Residue filed as objectui#7770 (stale prose). Session session_01BAZFhALsQsGqxui8sNqM8s.
Activity
os-zhuang commentedon Sep 5, 2026
分诊 ·
domain:spec/priority:p3/pm:queueAnchor read, not guessed. 声明在
packages/types/src/layout.ts⇒ objectui 的domain:spec(=packages/types)。渲染器的||回退在packages/components里,但两条处置都以类型声明为落点 —— 保留则要在那里把容忍声明并钉住,退役则要从那里删。复核 objectui
origin/maina472b07(2026-09-05T00:48:02Z):⇒ ⭐ docblock 的自陈与⚠️ 任何退役都要同时处理两处,否则会留下一条只在某个渲染分支上还活着的方言。
||回退都在树上,而且回退有两个站点(:162、:167),不是一个 —— 卡面只描述了行为,没点明这一点。layout.ts里value?: string出现 3 次(:66、:104、:414)。只有:104是TextSchema的那一个 —— ⛔ 按符号定位,不要按 grep 命中批量处理,另外两处是别的 schema 的合法成员。定级 p3
没有东西坏掉:
content优先读取,value仅在content缺失/falsy 时兜底,两种写法都能渲染。⇒ p3。⛔ 但这是一张有裁决背书的卡,不是一个可选整理:2026-08-31 维护者对 objectstack#13670 的裁定(选项 2)使
content成为text的唯一求值通道,并明确把value拼写的退役拆出来作为它自己的 enforce-or-remove 问题,⛔ 不在那里预判。⇒ 本卡就是那个被拆出来的问题,它有出处、有边界。⭐ 而且卡面记录了一条重要的趋势:方言的立足面自裁决以来又变窄了 ——
value已被裁定排除在表达式绑定的载体映射之外,而各指南里 23 处text.value教学正在被改写为content(objectui#7015)。⇒ 剩下还在读value的,只有渲染器那个||,以及存量文档里平铺书写它的部分。⛔ 第一项交付是一次普查,不是一次选择 —— 卡面自己说的,本席使其成为硬约束
⇒ ⛔ 在拿到那个数字之前,不要删
value,也不要把回退「声明」下来。 两条处置的成本完全由这个数字决定:||与声明一起删,一条方言消失;text.value是作者写在存储文档里的东西。⇒ 普查的总体是什么、能不能测量,本身要先说清楚 —— ⛔ 一个只扫了examples/**就宣布「零存量」的结论,正是本班次一直在拒绝的「无阳性对照的零」。边界测试 —— 两条处置都动已发布类型
value⇒ 从已发布类型移除一个成员 ⇒ 人工地板之上,契约复审,变更集按 BREAKING 归类。⇒ ⭐ 值得点明的是:「保留」不是「什么都不做」。 今天的状态既不是被退役的、也不是被声明的兼容臂 —— 它是一条自陈为方言的方言。⛔ 两条处置里任何一条落地,都比现状好;⛔ 而普查没做之前,哪条都不该动手。
⛔ 本席不认领、不派发、不代裁。
Generated by Claude Code
os-justin commentedon Sep 5, 2026
Claim: PM loop round R1 (fourth wave) — folded into #6951's PR A
Session:
session_01BAZFhALsQsGqxui8sNqM8sBranch:
claude/issue-6951-text-content-onlyWorktree:
objectui-issue-6951-aDomain:
domain:specFile surface (region level): as declared on #6951's claim for PR A —
packages/types/src/layout.tsTextSchemablock (:76–:114ona00db9ef) ·packages/types/src/zod/layout.zod.tsTextSchemaconst ·packages/components/src/renderers/basic/text.tsx:162,:167(the|| schema.valuelimb) ·content/docs/components/basic/text.mdxand any doc row still teachingtext.value· corpus rewrites ontextnodes after the measurement · pins · at most one parity-ledger row · changesetContainer & model:
S,mode:subagent,model: fable=CONTRACT_REVIEW_TIERClause-②: yes
Serial constraints cleared: as on #6951 (
layout.tsshared with #7361 in a different region; parity file shared with #7069 / PR #7731 / PR #7726 in different regions).Fold gates (five, per the dispatch runbook), answered:
valuespelling's retirement was explicitly split out as its own enforce-or-remove question"; Two alias pairs onTextSchemaandTreeViewSchemaare now DECLARED in both spellings — andTreeViewSchema.datais required whilenodesis the documented one (deferred rulings carried out of #6150) #6951-A is that retirement, ruled A1 by the maintainer on 2026-09-04 (director record 5534412859): retirevalue, keepcontent, immediate, both faces, renderer limb included.TextSchemaon both faces plus the twotext.tsxfallback sites (:162,:167) this card's triage (5548193033) named; one worktree, one changeset, one queue slot.TextSchemaandTreeViewSchemaare now DECLARED in both spellings — andTreeViewSchema.datais required whilenodesis the documented one (deferred rulings carried out of #6150) #6951 carries the maintainer ruling; this card is gradedpm:queue/priority:p3by triage and is not in the decision box. Triage's "census first" constraint is satisfied by the ruling's own premise clause: the dev measures thecontent-only /value-only / both distribution overexamples/,apps/,packages/*/examples,content/docs/**with the denominator and stops ifvalueis the majority. The stored-document population triage asked about is answered by the maintainer's ruling that existingvalue-only documents are not a reason to stage (2026-08-27 principle, quoted in the ruling) — maintainer ruling outranks the triage note.valueis unwritable on the TS face (?: never), refused by the zod face at pathvaluewith the guidance message, and no longer read at eithertext.tsxsite; one pin per leg.TextSchemaandTreeViewSchemaare now DECLARED in both spellings — andTreeViewSchema.datais required whilenodesis the documented one (deferred rulings carried out of #6150) #6951-B (TreeViewSchemanodes/data; separate PR by the ruling's own constraint); docs: expressions/architecture guides teachtext.valuefor expressions — switch all 23 occurrences tocontent, the ruled sole evaluation channel (objectstack#13670 option 2) #7015 (the guides'text.value→contentrewrite — the dev checks whether it landed and only touches rows still teachingvalue); thevalue?: stringmembers atlayout.ts:66and:414(other schemas — triage's warning, carried); objectui#4795 binding framework untouched.Premise on
origin/main=a00db9ef(13:09Z):layout.ts:104 value?: stringinsideTextSchemawith the "dialect, not a design" docblock at:92;layout.zod.ts:65 value;text.tsx:162/:167both readschema.content || schema.value. PR A carriesFixes #7016; if the A premise fails (value-majority), the dev reports on #6951 and this card stays open with the reading.Generated by Claude Code
os-justin commentedon Sep 5, 2026
Dev claim — dispatched by the
domain:specPM seat, sessionsession_01BAZFhALsQsGqxui8sNqM8s(PM loop round R1, fourth wave); this card is folded into #6951's PR A. Assignee stays as the PM set it; this comment is the dev's identity marker.claude/issue-6951-text-content-only, worktreeobjectui-issue-6951-a, cut fromorigin/main=9587fc95. Empty branch pushed as the write-route probe.Fixes #7016andRefs #6951 (A half).textnodes underexamples/,apps/,packages/*/examples,content/docs/**(and separately the in-repo tests/fixtures) bucketedcontent-only /value-only / both / neither, with denominators and commands, in the PR body and the report on Two alias pairs onTextSchemaandTreeViewSchemaare now DECLARED in both spellings — andTreeViewSchema.datais required whilenodesis the documented one (deferred rulings carried out of #6150) #6951. Ifvalue-only is the majority across the four ruling-named roots, no PR A is opened and this card stays open with the reading.Generated by Claude Code
os-justin commentedon Sep 5, 2026
Landing — PR #7761 carries
Fixes #7016(folded into objectui#6951's A half under ruling A1; fold recorded on #6951). Pre-landing three (2026-09-05T16:35Z): ① flipped ready at 16:34Z after the in-seat contract review PASSED at tier (objectui#6951 comment 5553212632) andneeds:contract-reviewwas cleared on the PR with provenance (PR comment 5553220497); ② auto-merge enabled, method SQUASH; ③ queue probe running. This card is closed by the squash;pm:dispatchedis stripped here once MERGED is read twice (PRmerged: true+origin/maincontaining the squash).Generated by Claude Code
os-justin commentedon Sep 5, 2026
MERGED (2026-09-05T16:49Z) — PR #7761 landed through the merge queue as squash
5ad86ddeonmain(the objectui#6951 A half, ruling A1; this card was folded into it with the fold gates recorded on #6951). Three readings: PRmerged: true(merged_at16:49:09Z); this card'sclosed_by_pull_requestsreference to PR #7761 readsMERGEDand the card closed at 16:49:11Z;git log origin/mainat 16:49:42Z shows5ad86dde feat(types)!: retire TextSchema.value as an ADR-0049 tombstone — content is the one spelling (objectui#6951 A1 / objectui#7016) (#7761)at the tip.pm:dispatchedstripped in this stroke (remaining:finding,priority:p3,domain:spec). The census this card asked for as its first deliverable is in the PR body (776content-only / 25value-only / 0 both across the four ruling roots). Residue filed as objectui#7770 (stale prose). Sessionsession_01BAZFhALsQsGqxui8sNqM8s.Generated by Claude Code