Skip to content

Commit e761a2b

Browse files
chore(sdui-parser): retire the objectui lockstep gate and its vendored record (#26221)
<!-- claude-projects-attribution: {"github_login":"os-tesla"} --> _Requested by **Tesla** · [project thread](https://claude.ai/code/project/chan_01AXsQkLFKRdQCqQ3RTr6Jao?thread=cmsg_01AXsQkLFKRdQCqQ3RTr6Jao7EJRrpBukNTDcMt2XiXQX1)_ 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.com/claude-code) https://claude.ai/code/session_01Xe3LjBvLrRVA6dmFUEGskm Co-authored-by: Claude <noreply@anthropic.com>
1 parent 3d50a43 commit e761a2b

9 files changed

Lines changed: 10 additions & 1758 deletions

File tree

‎.github/workflows/lint.yml‎

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -984,29 +984,6 @@ jobs:
984984
continue-on-error: true
985985
run: pnpm check:widget-option-census
986986

987-
# The sdui-parser LOCKSTEP invariant (#12719 / #13150). Two copies of the
988-
# constrained-JSX parser exist: objectui's runs in the RENDERER, this one
989-
# runs in the SAVE GATE, and #12719 states that they must byte-agree on
990-
# the accepted grammar and on the diagnostic codes — an invariant that had
991-
# been enforced by NOTHING through three manual ports, two of which landed
992-
# only because someone happened to file a card naming the drift.
993-
#
994-
# Compared against a VENDORED RECORD of objectui's side, so this step
995-
# needs no network, no build and no objectui checkout. Read the gate's
996-
# header for what that buys and what it costs: it sees this copy moving
997-
# away from the recorded objectui state; it does NOT see objectui moving
998-
# afterwards, and only a `.objectui-sha` bump — the moment a divergence
999-
# starts SHIPPING — brings that direction back into view.
1000-
#
1001-
# Unfiltered on purpose. The record lives under packages/sdui-parser/, the
1002-
# pin is a root dotfile, and this workflow declares no paths: filtering it
1003-
# to the parser subtree would go dormant on exactly the PR that moves the
1004-
# pin. Cost is one TypeScript parse of seven small files, ~0.4 s.
1005-
- name: sdui-parser stays in lockstep with objectui's copy
1006-
id: sdui-parser-stays-in-lockstep-with-objectui
1007-
continue-on-error: true
1008-
run: pnpm check:sdui-lockstep
1009-
1010987
# The checked-in SDUI public-tier manifest (#12924, ruled 2026-08-29: wire
1011988
# it). `resolveSduiManifest()` degrades to parse-only SILENTLY when the
1012989
# repo-root `sdui.manifest.json` is absent or unreadable, so nothing in

‎package.json‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
"docs:start": "pnpm --filter @objectstack/docs start",
2525
"os": "node packages/cli/bin/run.js",
2626
"console:build": "turbo run build:dist --filter=@objectstack/console",
27-
"gen:sdui-lockstep": "node scripts/check-sdui-lockstep.mjs --update",
2827
"lint": "node --stack-size=4000 node_modules/eslint/bin/eslint.js . --no-inline-config",
2928
"i18n:extract": "tsx packages/cli/bin/run-dev.js i18n extract packages/platform-objects/scripts/i18n-extract.config.ts --locales=zh-CN,ja-JP,es-ES --fill=default --source-hashes --out=packages/platform-objects/src/apps/translations",
3029
"check:i18n": "node scripts/check-i18n-bundles.mjs --self-test && node scripts/check-i18n-bundles.mjs",
@@ -39,7 +38,6 @@
3938
"check:bash32-floor": "node scripts/check-bash32-floor.mjs --self-test && node scripts/check-bash32-floor.mjs",
4039
"check:stack-collection-maps": "node scripts/check-stack-collection-maps.mjs --self-test && node scripts/check-stack-collection-maps.mjs",
4140
"check:widget-option-census": "node scripts/check-widget-option-census.mjs --self-test && node scripts/check-widget-option-census.mjs",
42-
"check:sdui-lockstep": "node scripts/check-sdui-lockstep.mjs --self-test && node scripts/check-sdui-lockstep.mjs",
4341
"check:doc-authoring": "node scripts/check-doc-authoring.mjs --self-test && node scripts/check-doc-authoring.mjs",
4442
"check:doc-anchors": "node scripts/check-doc-anchors.mjs --self-test && node scripts/check-doc-anchors.mjs",
4543
"check:docs-single-h1": "node scripts/check-docs-single-h1.mjs --self-test && node scripts/check-docs-single-h1.mjs",

‎packages/sdui-parser/objectui-lockstep.json‎

Lines changed: 0 additions & 68 deletions
This file was deleted.

0 commit comments

Comments
 (0)