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] form-view.ts's spec bridge still reads spec.aria, a key FormViewSchema retired — a dormant read that can never fire #3901
Observation-class finding. Nothing breaks today — filed so it is recorded rather than rediscovered. Unassigned and unlabelled for triage to grade.
Surfaced during objectstack PR #6854 (the aria tombstone re-aim, objectstack#6756) by a dev working the spec side; it had no worktree in this repo, so it reported the observation upward rather than opening a cross-repo PR. Verified independently here before filing.
FormViewSchema.aria is a retiredKey() tombstone — objectstackpackages/spec/src/ui/view.zod.ts:1807 — so a form view carrying aria no longer parses. The guard can never be true for any spec that passed validation, and the assignment is unreachable.
Why it is dormant rather than broken
retiredKey() returns z.never({ error: … }).optional(), so the key is rejected at the parse rather than stripped. A FormView reaching this bridge has therefore already been validated without an aria, and spec.aria is always undefined. No renderer output changes, and no test can distinguish the branch from its absence — which is exactly why it survived the retirement.
So this is not "ARIA support was removed"; it is one carrier among several, and the bridge kept a read for the one that went away.
Suggested direction
Non-binding: delete the line. If instead it is kept deliberately — e.g. as tolerance for pre-17 stored documents that bypass validation on some path — that intent should be written down at the site, because as it stands the code reads as live support for an authoring key the contract refuses.
⚠️ Worth measuring before deleting: whether any path feeds this bridge a non-validated object (a stored document read straight from persistence, a fixture, or a test double). If one exists, the line is load-bearing for that path and the fix is different. I did not measure that here.
Other spec.* reads in this bridge; only aria was measured.
Provenance
objectuiorigin/main: git grep -n "spec.aria" -- packages/react/src/spec-bridge/bridges/form-view.ts → single hit at :193.
objectstackorigin/main: git grep -n "aria:" -- packages/spec/src/ui/view.zod.ts → :1280 live (list view), :1807retiredKey( (form view). Both read at their respective origin/main, not a working tree.
Control against a false reading: the same query distinguishes the live list-view carrier from the retired form-view one in the same file, so the instrument is not simply matching any aria.
Triage: finding (held for the findings round, as the filing itself requests).
Classification: observation-class by the book — a dormant, unreachable read (spec.aria can never be truthy for any validated FormView), nothing a user hits today, and the card itself flags an unmeasured precondition (whether any path feeds the bridge a non-validated object) that must be answered before the one-line delete is safe.
Anchors verified on origin/main (objectui @ 50fa376, objectstack @ 41610f6): packages/react/src/spec-bridge/bridges/form-view.ts:193 carries the guard; objectstack packages/spec/src/ui/view.zod.ts:1807 is the retiredKey() tombstone for form-view aria while :1280 keeps list-view aria live — the same split the card documents. Control: list-view.ts:118 has the same guard shape over a LIVE carrier, so the instrument distinguishes the two.
Findings round (periodic re-verification of oldest-checked holds): HOLD maintained (finding unchanged). Re-checked @ origin/main6b6721c: packages/react/src/spec-bridge/bridges/form-view.ts still carries the dead if (spec.aria) node.aria = spec.aria; guard (~:193). The unmeasured precondition (can any path feed the bridge a non-validated object?) is still unanswered on the card, so the one-line delete stays gated on that measurement.
Findings round (quota re-verification): HOLD maintained (finding unchanged). Re-checked @ origin/main2b94283: the dead guard is live verbatim — if (spec.aria) node.aria = spec.aria; at packages/react/src/spec-bridge/bridges/form-view.ts:193 — and FormViewSchema.aria remains retired upstream, so the branch is still unreachable for any validated spec. The gating measurement (can any path feed the bridge a non-validated object?) is still unanswered. Pairing note from the 16:20Z round stands: grade together with ui#3974 (defaultSort bridge read) — same spec-bridge-reads-retired-key family, one measurement approach serves both. Held.
Maintainer ruling — 2026-08-11. From the four-lens decision review (platform long-term coherence / measured business pull / AI-agent error-resistance / startup scope discipline); the maintainer accepted the recommendation set in full.
Ruling: enforce-or-remove. First verify the ledger's dead verdict for this key per the spec-property-retirement discipline (producer-side check against current objectstack main), then remove the bridge read (and the local mirror declaration). One PR together with its pair card objectui#3974 (Fixes both) — one ruling decides both keys, and the diverged dead read is an imitation trap for future agents reading this bridge. State: finding → pm:queue.
Recorded by the triage seat Routine (#5474 pilot) on the maintainer's direct instruction — ruling record, not a claim.
Activity
os-zhuang commentedon Aug 9, 2026
Triage:
finding(held for the findings round, as the filing itself requests).spec.ariacan never be truthy for any validated FormView), nothing a user hits today, and the card itself flags an unmeasured precondition (whether any path feeds the bridge a non-validated object) that must be answered before the one-line delete is safe.origin/main(objectui @50fa376, objectstack @41610f6):packages/react/src/spec-bridge/bridges/form-view.ts:193carries the guard; objectstackpackages/spec/src/ui/view.zod.ts:1807is theretiredKey()tombstone for form-viewariawhile:1280keeps list-viewarialive — the same split the card documents. Control:list-view.ts:118has the same guard shape over a LIVE carrier, so the instrument distinguishes the two.AppAction.itemsbe re-typed to the overlayMenuItem? — the runner reads two overlay fields throughas anytoday #6854 / finding(process): agent seats can PUSH branches but cannot DELETE them — the proxy 403s every ref-deletion push, so every probe branch is permanent litter #6756 are the spec-side siblings, correct as filed.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
claude commentedon Aug 10, 2026
Findings round (periodic re-verification of oldest-checked holds): HOLD maintained (
findingunchanged). Re-checked @origin/main6b6721c:packages/react/src/spec-bridge/bridges/form-view.tsstill carries the deadif (spec.aria) node.aria = spec.aria;guard (~:193). The unmeasured precondition (can any path feed the bridge a non-validated object?) is still unanswered on the card, so the one-line delete stays gated on that measurement.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
claude commentedon Aug 10, 2026
Findings round (quota re-verification): HOLD maintained (
findingunchanged). Re-checked @origin/main2b94283: the dead guard is live verbatim —if (spec.aria) node.aria = spec.aria;atpackages/react/src/spec-bridge/bridges/form-view.ts:193— andFormViewSchema.ariaremains retired upstream, so the branch is still unreachable for any validated spec. The gating measurement (can any path feed the bridge a non-validated object?) is still unanswered. Pairing note from the 16:20Z round stands: grade together with ui#3974 (defaultSortbridge read) — same spec-bridge-reads-retired-key family, one measurement approach serves both. Held.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
claude commentedon Aug 11, 2026
Maintainer ruling — 2026-08-11. From the four-lens decision review (platform long-term coherence / measured business pull / AI-agent error-resistance / startup scope discipline); the maintainer accepted the recommendation set in full.
Ruling: enforce-or-remove. First verify the ledger's
deadverdict for this key per the spec-property-retirement discipline (producer-side check against current objectstack main), then remove the bridge read (and the local mirror declaration). One PR together with its pair card objectui#3974 (Fixesboth) — one ruling decides both keys, and the diverged dead read is an imitation trap for future agents reading this bridge. State:finding→pm:queue.Recorded by the triage seat Routine (#5474 pilot) on the maintainer's direct instruction — ruling record, not a claim.
Generated by Claude Code
yinlianghui commentedon Aug 16, 2026
【认领】objectui 分片 PM(session_01GTRjn8xBqp75dk7kFupVRt)批次 11 派发,与 #3974 一 PR 双关(维护者 2026-08-11 裁定 enforce-or-remove)。分支:
claude/issue-3901-form-view-dormant-reads。执行序:先量非验证输入路径(裁定的前置门 —— 存证 fixture / 持久化直读 / 测试替身是否喂过这个 bridge),量到 load-bearing 路径即零代码停手回报;确认 dead 后删form-view.ts:193(aria)与:188(defaultSort)两条读 + 本地 mirror 声明,Fixes 双卡。Generated by Claude Code
fix(react): drop form-view bridge reads of spec-retired defaultSort/a…
ci(release): drop the duplicate test run and stop concurrency discard…
ci(release): drop the duplicate test run and stop concurrency discard…