Skip to content

chore(sdui-parser): retire the objectui lockstep gate and its vendored record - #26221

Merged
os-zhuang merged 1 commit into
mainfrom
claude/project-thread-hrsgde
Oct 26, 2026
Merged

os-zhuang merged 1 commit into
mainfrom
claude/project-thread-hrsgde

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Tesla · project thread

Part of #25712 (item 3 = 2g, PR 3 of 3: retire the sdui-parser lockstep; lands FIRST by PM ruling; Tier H: .github/workflows/lint.yml).
Part of #25677.

Clause-②: no
Metadata-protocol: none

维护者速读(草稿)

  • 改了什么: 删掉让两份 sdui-parser 保持一致的 lockstep 门禁:scripts/check-sdui-lockstep.mjs(1634 行)、它的记录 packages/sdui-parser/objectui-lockstep.json、check:sdui-lockstep / gen:sdui-lockstep 两个脚本、lint.yml 里的那一步,以及 merge driver 台账和测量分诊表里指向它的两行。其余只改了指向它的注释。
  • 为什么改: 你在 2g 决策卡上裁定只保留 @objectstack/sdui-parser 一份(6418729849)。只剩一份时这个门禁就没有可比的对象了。
  • 为什么先合这个: 现在没有 .objectui-sha,门禁直接拿 ui/packages/sdui-parser/src 做对照。2g PR 1 合并两份实现时会单边改到它比对的区域,PR 2 删掉 ui 那份后它会直接拒绝。先退役它,PR 1 和 PR 2 就不会因为它变红。
  • 风险与代价(含回滚): 本 PR 合并后到 2g PR 1 合并前,两份解析器之间没有门禁守护。PR 1 紧接着合,它把两份合成一份,之后就没有第二份可以漂移了。不影响运行时、不发布任何包。回滚 = revert 本 PR。
  • 你要做的: 批准(Tier H:lint.yml)。

席位核对

(left for the dispatch seat)

Why

Ruling 6418729849 on #25712 (2g decision card 6418466647, letter E + B) keeps @objectstack/sdui-parser as the one parser, deletes ui/packages/sdui-parser, and retires check-sdui-lockstep.mjs with its record. The PM ordered this PR first: with .objectui-sha gone, the gate's oracle is ui/packages/sdui-parser/src read in place (oracleFor, "pin absent, ui/ copy"), and it REFUSES a tree with neither the pin nor that copy. So:

  • 2g PR 1 (unify the body into @objectstack/sdui-parser) reds the gate if it edits the parse region, the diagnostic-code set or validate.ts's containment branch on one side only;
  • 2g PR 2 (rewrite the 122 importers, delete the ui copy) reds it unconditionally.

⚠️ Between this PR and 2g PR 1 the two copies are unguarded. A parser change landing in that window on one side only would not be caught. 2g PR 1 follows directly (4b seat, branch claude/project-thread-6qe56u) and removes the second copy's role; 2g PR 2 then deletes it.

What changes

  • Deleted: scripts/check-sdui-lockstep.mjs, packages/sdui-parser/objectui-lockstep.json (not in the package's files, so nothing published changes).
  • package.json: check:sdui-lockstep and gen:sdui-lockstep removed.
  • .github/workflows/lint.yml: the step sdui-parser-stays-in-lockstep-with-objectui and its comment block removed. No other step or aggregator names that id.
  • scripts/regen-artifacts.mjs: the NOT_DRIVER_MANAGED row for objectui-lockstep.json removed (the file no longer exists). ROOT_OWNER keeps four other rows.
  • scripts/pm/measurement-claim-triage.mjs: the row whose file is the deleted gate removed.
  • Prose that pointed at the gate: scripts/check-sdui-manifest.mjs (3 places), scripts/gen-sdui-manifest-node.mjs, scripts/pm/os-regen-merge.sh.

Left on purpose

  • packages/sdui-parser/src/parse.ts:49, src/validate.ts:53 (the LOCKSTEP: docblock), src/__tests__/html-tier-manifest.test.ts:12, src/__tests__/inert-quick-add.test.ts:19, and the invariant text of scripts/adr-anchors/packages__sdui-parser__src__parse.ts.json: 2g PR 1 rewrites these files (and validate.ts's acceptsChildren docblock ships in the .d.ts), so editing them here would put a published-package change and a changeset into a no-publish PR and collide with PR 1.
  • ui/packages/sdui-parser/src/parse.ts:52: deleted with the package in 2g PR 2.
  • Dated measurements that name the old command as the condition of a reading: scripts/regen-artifacts.mjs:85, scripts/check-regen-pending.mjs:143, the self-test literal in scripts/check-pnpm-flag-spellings.mjs:884, .gitattributes:127, docs/audits/*, and CHANGELOGs (release-owned).

Verification

All readings at head ce348aef (base 365fe5ec).

  • Derived gates: node scripts/pm/dispatch-gates.mjs --commands → 97 families; all 97 run, all exit 0 (four dist-reading gates and the teardown self-test after a full pnpm build and the pinned-sha fetch). --ran reconciliation: 97 derived, 97 run, 0 NOT-MEASURED, 0 UNRUN. List: /mnt/project-files/d1-merge/out/2g-b/pr3-gates-ran-ce348aef.list.
  • Push battery: GITHUB_ACTIONS=true GITHUB_EVENT_NAME=push node scripts/pm/check-dispatch-gates.mjs → ✓ dispatch-gates self-test: 2182 cases pass (fast 1917 in 478 s, slow 265 in 1312 s), exit 0.
  • Governed predicate: node scripts/pm/check-governed-merges.mjs --branch claude/project-thread-hrsgde → GOVERNED (1 of 9 paths: .github/workflows/lint.yml), 1768 changed lines (+10 / −1758), under the 3000 human-merge line. Tier H.
  • Not run locally (CI owns them): the repo-wide pnpm lint and the full Test Core matrix.

Changeset

None: the diff publishes nothing from any released package (objectui-lockstep.json is outside @objectstack/sdui-parser's files). skip-changeset.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Xe3LjBvLrRVA6dmFUEGskm

…d record

One parser is kept (`@objectstack/sdui-parser`), so the gate that held two
copies byte-equal has nothing left to compare once the renderer's copy goes.
Removes `scripts/check-sdui-lockstep.mjs`, `packages/sdui-parser/objectui-lockstep.json`,
the `check:sdui-lockstep` / `gen:sdui-lockstep` scripts, the lint.yml step,
the NOT_DRIVER_MANAGED row and the measurement-triage row, and drops the
prose that pointed at the gate.

Claude-Session: https://claude.ai/code/session_01Xe3LjBvLrRVA6dmFUEGskm
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 26, 2026
@github-actions github-actions Bot added size/xl ci/cd dependencies Pull requests that update a dependency file labels Oct 26, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️ 1 changed file(s) yielded no anchor (packages/sdui-parser/objectui-lockstep.json), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)).

What this run could not see
  • 1 changed file(s) yielded no anchor (packages/sdui-parser/objectui-lockstep.json) — pages documenting those are invisible to this run
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.
  • a key NAME is not a key, so the hand re-read the line above prescribes can land on the wrong schema. The same spelling is authorable on one governed type and a [REMOVED] tombstone on another for each of active, aria, joins, objects, template, tools and version (censused on [finding] tools is a key on BOTH AgentSchema (tombstoned, dead) and SkillSchema (live, cloud-attested), so a name-based search attributes skill examples to the agent key — it produced a false stop-the-line alarm on PR #19059 #19093 over the liveness ledger's governed types, top-level keys); nothing in a search result distinguishes the two, so a grep hit on a LIVE example reads as evidence about the DEAD key. Measured on fix(spec): the agent.tools liveness row says dead — it claimed live on a key the schema tombstoned #19059: content/docs/ai/agents.mdx was reported as contradicting the agent.tools tombstone over its tools: example at :161, which is inside the defineSkill({ block opened at :155 — the page was already correct. Settle ownership by PARSING the value against both schemas, never by the name: that literal PASSES SkillSchema, and as an AgentSchema it FAILS at tools with the tombstone prescription. ⛔ These names are not the whole class — a key retired through a .strict() guidance map leaves no tombstone in the walked shape and none of them here (tool.category, live as AIToolDefinition.category).

Coarse fallback — 3 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json e1aef17e2de02d447211d87821891fdeee77d550 → packageMentionDocs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/cd dependencies Pull requests that update a dependency file size/xl skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants