Skip to content

feat(spec): retire inert targetVariable on element:text_input / element:record_picker (ADR-0049) - #9221

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-9198-targetvariable-enforce-or-remove
Aug 17, 2026
Merged

feat(spec): retire inert targetVariable on element:text_input / element:record_picker (ADR-0049)#9221
os-zhuang merged 1 commit into
mainfrom
claude/issue-9198-targetvariable-enforce-or-remove

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes#9198

Ledger verdict: dead (re-established, not inherited from the card)

Measured at retirement time, against sources:

  • objectui (origin/main 372d9f9b4): zero production readers. The only repo-wide hits are the reverse-parity gate's exemption block (apps/console/src/__tests__/registry-inputs-spec-parity.test.ts:545-556, citing objectui#3834) and CHANGELOG lines. The live binding runs the other direction — usePageVariableBinding(schema?.id) reverse-looks-up the page variable whose source names the component id — exactly as the key's own describe text admitted ("Declarative hint; the live binding resolves via the variable whose source equals this component id").
  • framework (this repo): only spec's own accept tests authored the key (component.test.ts, page.test.ts); no runtime, metadata-protocol, lint, dogfood, example, skill or hand-written-docs reader.
  • cloud (origin/main d8c3c44): zero hits.
  • Liveness ledger: no row exists and none is owed — element props schemas are outside the walked metadata-type shapes (the SDUI props 声明与 renderer 不一致:6 处「renderer 兑现但 ComponentPropsMap 未声明」+ 2 处「声明了没人读」(#5068 error 升级的 spec 侧前置) #5775 record-picker retirements likewise carry no rows; check:liveness is green in both directions on this change). The verdict is recorded in the retired-key entry files instead.

Disposition inherited from the settled sibling (objectui#3829 → objectui PR #4794, retirement route), per the card.

What this does

Verification (all at head e4204118b, after the final commit)

  • pnpm --filter @objectstack/spec test — 407 files, 10832 passed.
  • pnpm --filter @objectstack/spec typecheck — green (incl. check:test-typecheck self-test).
  • check:generated — all 13 artifact gates ✓; source audits check:liveness / check:empty-state / check:skill-examples / check:variant-docs PASS.
  • check:adr-0087-registration, check:nul-bytes — green.
  • Consumer sweep, downstream direction: @objectstack/lint (the SDUI 组件 props 没有解析闸门:PageComponent.properties 是开放 record,ComponentPropsMap 的 29 个站点从不被 parse(#4001 批 17 的 no gate 判定) #5068 authoring gate that dispatches these schemas) — 2061 tests passed against the rebuilt spec; @objectstack/dogfoodexpression-conformance — 3 passed (after building the dependency closure; no expression surface touched).
  • Derived gate union (scripts/pm/dispatch-gates.mjs on the real changed paths): all named local gates PASS, including check:changeset-gate-self-tests, check:cross-package-test-inputs, check:merge-driver, check:spec-parsed-alias, check:type-check-coverage, check:type-check-debt (after full workspace build), check:engine-double-contract, check:where-matcher, check:dev-prereqs.
  • Reverse verification (direction decided beforehand: red): fix committed first, then component.zod.ts restored to origin/main tree-only — exactly the 2 refusal pins went red (183 others green); restored from the branch commit, 185/185 green, git status clean.

Not in this PR


Generated by Claude Code

…nt:record_picker (#9198, ADR-0049)
A declarative hint with zero readers in any repo — the live binding resolves
from the page variable whose source names the component id (PageVariableSchema).
Tombstoned with retiredKey(), registered under protocol 18 (retired-key entries
+ D2 conversion element-input-target-variable-removed wired into step 18),
pin tests, regenerated authorable-surface/docs, minor changeset per the
post-17.0.0 launch-window convention.
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

106 hand-written doc(s) reference the affected code — list omitted above 15 rows. Re-derive: node scripts/docs-audit/affected-docs.mjs --json origin/main.

7 release-owned page(s) also affected — read-only, see AGENTS.md Documentation Guardrails.

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation tests protocol:ui tooling labels Aug 17, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review August 17, 2026 03:49
@os-zhuang
os-zhuang added this pull request to the merge queueAug 17, 2026
Merged via the queue into main with commit 7ea1372Aug 17, 2026
27 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-9198-targetvariable-enforce-or-remove branch August 17, 2026 04:08
os-steve pushed a commit that referenced this pull request Aug 17, 2026
…istColumns (#9227)
inlineColumns: strict name-keyed InlineGridColumnSchema mirroring the objectui
grid renderer's measured reads (GridField.tsx GridColumn, #3951); the retired
field spelling is refused with the prescription naming name. relatedListColumns:
child field-name strings only (the only authored form in-repo; the renderer
hydrates strings fully). Liveness ledger drilled for the 20 column child keys;
showcase invoice fixture respelled field -> name; regenerated api-surface,
export-origins, authorable-surface, json-schema.manifest, references docs,
strictness-ledger counts, liveness counts; minor changeset per the #9221
launch-window convention.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fs18A2DdXLVN2h8PaaFBcP
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationprotocol:uisize/mteststooling

Projects

None yet

2 participants

@os-zhuang@claude