Repository navigation
Commit 0ea90c7
<!-- claude-projects-attribution: {"github_login":"os-tesla"} -->
_Requested by **Tesla** · [project
thread](https://claude.ai/code/project/chan_01AXsQkLFKRdQCqQ3RTr6Jao?thread=cmsg_01AXsQkLFKRdQCqQ3RTr6Jao2fSEGAKhWxTZd1rVNTsfqL)_
Part of #25753 (the cleanup leftovers that #25712's closing record
6432294556 moved there: F18, F19, F20, F23, F27 and the 2h list, plus
its own item 3, the import tooling). Part of #25677. One PR, because the
2h list edits `.claude/**` and so the whole diff is Tier S either way.
Clause-②: no
Metadata-protocol: none
## 维护者速读
- **改了什么:** objectui 并入 `ui/` 之后剩下的小件清理,一个 PR:
- 删掉两个已无人调用的 objectui 遗留脚本(F19 `workflow-checks.ts` 解析器、F20 跨仓 closer
的结果测试),`--changed` 模式随它唯一的调用方退役,账本本身保留作审计(F18)。
- `field.externalId` 在 liveness 账本里由 `live` 改判 `dead`(F23):`packages/**`
与 `ui/**` 里没有任何读取方,upsert 都按别的键匹配。作者写 `externalId: true` 时 `os lint`
会提示,附一个 patch changeset。
- spec 源码注释里 `objectui: packages/…` 的渲染器引用改写为 `ui/packages/…`(F27)。
- 车队的 playbook(pm-dispatch
references、os-dev、checklist-test、dogfood-verification)不再把 objectui
当兄弟仓,settings 去掉 5 条 objectui 写权限(2h 清单)。
- 删掉只在切换时跑过一次的 `scripts/ui-import/` 锁文件拼接工具,`pnpm-workspace.yaml`
里引用它的注释改为指向保留该说明的提交。
- **为什么改:** objectui 已归档,这些文字和脚本描述的是不存在的仓和流程,会误导执行席。
- **风险与回滚:** 无运行时改动;唯一面向作者的变化是 `externalId: true` 的 lint 警告。回滚 = revert
本 PR。
- **你要做的:** 无。`.claude/**` 是 Tier S,由席位在达档复核 PASS
且全绿后经队列落地。F12(`ui/.github/labeler.yml`)等你在项目线程里选;F14(CI 文档页重写)单独开 PR。
## What changes
**F20.** `ui/scripts/check-cross-repo-closer-outcome.mjs` is deleted.
Its subject was objectui's `cross-repo-issue-closer.yml`, which left
with `ui/.github/workflows/`, and only objectui's `lint.yml` ran it.
`scripts/check-closing-keyword-parity.mjs` drops its `NON_PARSERS` row
(the comment above the list now records all three imported rows as
gone).
**F19.** `ui/scripts/__tests__/workflow-checks.ts` is deleted. Its
parser (`readWorkflows`, `triggerBlock`, `producedCheckNames`) had no
caller since 2d-3. Its last export, `repoRoot`, had two importers
(`check-lockfile-dedupe.test.ts`, `check-lockfile-integrity.test.ts`);
each now computes the same
`path.resolve(dirname(fileURLToPath(import.meta.url)), '../..')` itself.
Two retirement notes that named the file now say it was deleted, and
`check-test-shard-results.mjs`'s header no longer points at it.
**F18.** The `markdown-test-inputs` ledger stays, as an audit:
`markdown-test-inputs.test.ts` holds the adjudicated class equal to what
the scanner derives, and `check-pending-changeset-literals.mjs` resolves
markdown literals through its `deriveCandidates()`. Its `--changed` mode
retires. Its only caller was objectui's `ci.yml` decision step, and the
root `Test UI` job starts on any `ui/**` change, so no CI step asks that
question any more. The header says so; the history sections below it
stay.
**F23.** `liveness/field.json` re-grades `field.externalId` from `live`
to `dead`. The `live` grade rested on objectui console
`metadataConverters.ts`, which objectui dc14bcb deleted for having zero
importers. Re-measured at 1c63231 across `packages/**` and `ui/**`,
nothing outside `packages/spec` reads a field's `externalId`:
- The Studio field inspector (`ObjectFieldInspector`) edits it, and
`MetadataService.ts` copies it into a field summary. Neither shows it to
a person as a preview, so the designer-preview ruling does not apply.
- Upserts match on other keys: a seed dataset's `externalId`
(`seed-loader.ts`, default `name`) and an import mapping's `upsertKey`
(`import-prepare.ts`).
The row carries `verifiedAt`, `evidenceScope: in-repo` and an
`authorHint` that names those two keys. The flag's `.describe()` ("Is
external ID for upsert operations") now says it is not read and names
the same two keys; the generated reference pages
(`references/data/field.mdx`, `object.mdx`, `system/migration.mdx`) are
regenerated from it, and the three hand-written field tables
(`fields.mdx`, `field-types.mdx`, `validation-rules.mdx`) say the same.
`@objectstack/lint`'s pin on the set of warned field keys gains
`externalId`. It is a boolean `default(false)`, so the lint warns only
on an authored `true`. The changeset is a `patch` on
`@objectstack/spec`, because the ledger ships in the package and the
advisory warning is what an author sees.
**F27.** In `ui/page.zod.ts` and `ui/component.zod.ts`, the six renderer
citations spelled `objectui: packages/…` become `ui/packages/…`. Each
cited file exists under `ui/`, and each named symbol is still in it:
`useElementApiDataSource` and `PredicateScopeProvider` in
`SchemaRenderer.tsx`, `parentDataSource` and `ParentRecordBinding` in
`record-related-list.tsx`, `BoundRecordProvider` in `recordBinding.tsx`.
The one pin on that spelling
(`expression-scope-data-root.pin.test.ts:194`) moves with it. The other
24 lines of the F27 count are `objectui @<sha>` measurement records,
mostly in `migrations/entries/retired-keys/18.*`. They say where and
when something was measured, so they stay as written, the same rule 2e
applied to the liveness ledger.
**2h list** (#26216's follow-up section):
- `.claude/skills/pm-dispatch/references/`:
- `triage.md`, `hotcrm.md` and `decision-analysis.md` name `ui/` instead
of the objectui repo.
- `director.md` drops the objectui pin-chain rule. `dispatch-runbook.md`
drops objectui's release-PR title.
- `filing-gate.md` drops the "objectui cards waiting for `next.N`" line,
because `ui/` consumes the spec through the workspace now, and renames
the consumer follow-up line.
- `platform-readings.md` drops objectui's labeler and
`os-verify-lock.sh` readings. `rest-channel.md` drops objectui's nine
required contexts. `review-checklist.md` drops objectui's
`skip-changeset` exception.
- `seat-post-protocol.md`: two board producers, two queries, two boards.
The console-pin release precondition goes, because there is no pin any
more (`console.ts`, "Unstamped dist").
- `lanes/director.md` drops the pin chain from its duty heading, daily
summary and pointer; `lanes/triage.md` no longer alternates two repos;
`dispatch-runbook.md` and `platform-readings.md` drop "两仓" (both words
meant objectstack and objectui).
- `true-green.md`: the objectui section becomes `ui/`, with `pnpm --dir
ui test`.
- `.claude/agents/os-dev.md`: the force-push, `type-check` spelling and
dispatch-gates lines no longer name objectui. Its objectui labeler and
`skip-changeset` rows go.
- `.claude/skills/checklist-test/SKILL.md`: the console build is `pnpm
console:build` from `ui/apps/console`, and the environment fingerprint
has no `.objectui-sha`.
- `.claude/skills/dogfood-verification/SKILL.md`: the `/_console`
section describes the in-workspace Console build. The pin-drift bullet
is replaced, because `pnpm console:build` stamps no SHA and `os dev` has
no drift to judge (`packages/cli/src/utils/console.ts`, "Unstamped
dist").
- `.claude/settings.json`: the five objectui write rows (labels POST,
pulls and issues PATCH, ready-for-review, auto-merge) go. The repo is
archived and refuses writes. Its read rows stay, because the history is
still read there.
- `scripts/pm/check-skill-line-ratchet.mjs`: eight ceilings fall to the
landed counts (each with a one-line note). No line was added anywhere,
and no YAML was re-wrapped.
**Import tooling** (#25753 item 3). `scripts/ui-import/` (the README
recipe and `splice-lockfile.mjs`) ran once, at the cutover, and nothing
calls it. It is deleted. The one comment that cited its step 6, in
`pnpm-workspace.yaml`'s happy-dom override note, now says the recipe
retired here and names the commit to read it at (1c63231).
Provenance-only mentions stay as they are: the `objectui#N` citations,
`cross-repo-coordination.md`'s merge note, and the hook comments that
cite objectui incidents.
## Not in this PR
- **F12** (`ui/.github/labeler.yml`) is waiting on the maintainer's
choice, which was asked in the project thread.
- The Studio field form's help text for `externalId` (`field.form.ts`,
"Mark as external ID for upsert operations") and its generated
translations still describe the old meaning, and the designer still
offers the toggle. Filed as #26674 (a `ui/` lane change plus the
metadata-forms translation pipeline).
- **F14** (`ui/content/docs/guide/ci-cd-pipeline.md`, 3,243 lines that
describe objectui's deleted workflows, read by about a dozen tests) gets
its own PR.
## Verification
`node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` derives 142 commands for this diff. All of
them ran locally on this branch, and all exit 0 on the head:
- `check-plugin-teardown-shape --self-test` first exited 3: its fixture
commit was outside the shallow clone. After fetching it, exit 0.
- `check:liveness` first exited 1: the generated
`liveness/state-counts/field.md` shard still counted `externalId` as
live. `gen:liveness-counts` rewrote that one shard (live 100 → 99, dead
1 → 2), and it is committed. No README Notes cell names the field set.
- `check:entry-nameability`, `check:exported-any`, `check:dts-closure`,
`check:dual-build-cjs-loads`, `check:generated` and
`check:skill-examples` refused at first (no declarations on disk). After
`env -u OS_SKIP_DTS pnpm build` and a spec rebuild, all exit 0.
- `pnpm --dir ui exec vitest run scripts/`: 5,055 of 5,059 pass.
`unit-registry-absence-collision` needed `@objectstack/client`'s dist
(15/15 once built), and two `check-i18n-call-site-keys` cases timed out
at 15 s while other gates loaded the machine (137/137 alone).
Main moved twice while this was open. #26536 and #26569 edited three of
the same skill files (main's root-run `console:build` wording and its
ninth required context kept). #26599 retired `conditionalRequired`, so
the lint pin is now `['externalId']` alone, and the regenerated field
shard reads 99 / 0 / 0 / 1 / 6 / 106. After each merge, the
touched-surface gates, `check:generated` (after a spec rebuild) and the
lint suite (7,389 tests) pass.
Main moved a third time while the PR sat in the queue, and the queue
dropped it for a conflict at 14:25Z. #26693 rewrote the director lane's
governed-draft lines, the same lines this PR had edited to drop "本仓".
Main's version is taken whole, because it no longer names a second repo.
`lanes/director.md` now reads 86 lines, so its ceiling falls 88 → 86
(`6f64f2a7`). On the merged tree (`03c8cf2b`), `gen:schema`, `gen:docs`
and `gen:liveness-counts` produce no diff. `check:generated` (after a
spec rebuild), `check:liveness`, the skill line ratchet with its
self-test (164 cases), `check-settings-deny-roster`,
`check-closing-keyword-parity` and the lint liveness test (109) all
pass.
The delta review on `6f64f2a7` (FAIL 6447375373) named one must-fix.
#26765 had landed on main and pinned `lanes/director.md` at 87, on the
same ratchet line this PR moves to 86. `d8d03efd` merges `origin/main`
`83c4bd29` and resolves that row to 86. Its comment now reads 88 → 87
(#26765) → 86 (#25753). `fab4534b` takes should-fix 1: the triage
charter's ratchet note no longer says pickup alternates between two
repos. No ceiling moves. On the merged tree, the regen produces no diff,
and the ratchet with its self-test, `check:generated`, `check:liveness`
and the lint liveness test pass.
The first contract review (FAIL on 434b014) named those conflicts and
three playbook files the objectui edits had left self-contradictory;
both are fixed above. Its should-fixes are in too: the `externalId`
ledger row names every `ui/` carrier and the preview search, `os-dev.md`
says plainly that hotcrm has no `dispatch-gates.mjs`, and the Studio
follow-up is #26674.
CI's first run caught one thing the derivation does not list:
`@objectstack/lint`'s `lint-liveness-properties.test.ts` pins the set of
field keys the shipped ledger warns on. It now expects the shipped
warned set; the package suite passes (7,389 tests).
Also run by hand: the skill line ratchet and its self-test (164 cases),
`check-settings-deny-roster`, `check-harness-current`,
`check-closing-keyword-parity` with their self-tests,
`markdown-test-inputs --audit`, and the ui vitest files the diff touches
(118 tests).
---
_Generated by [Claude
Code](https://claude.ai/code/session_01L9qibvE77Ed7MKdzPxJTQQ)_
---------
Co-authored-by: Claude <noreply@anthropic.com>
1 parent 59441b6 commit 0ea90c7
42 files changed
Lines changed: 131 additions & 1965 deletions
File tree
- .changeset
- .claude
- agents
- skills
- checklist-test
- dogfood-verification
- pm-dispatch/references
- lanes
- content/docs
- data-modeling
- references
- data
- system
- packages
- lint/src
- spec
- liveness
- state-counts
- src
- data
- ui
- scripts
- pm
- ui-import
- ui/scripts
- __tests__
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
70 | 70 | | |
71 | 71 | | |
72 | 72 | | |
73 | | - | |
| 73 | + | |
74 | 74 | | |
75 | 75 | | |
76 | 76 | | |
| |||
122 | 122 | | |
123 | 123 | | |
124 | 124 | | |
125 | | - | |
| 125 | + | |
126 | 126 | | |
127 | 127 | | |
128 | 128 | | |
| |||
154 | 154 | | |
155 | 155 | | |
156 | 156 | | |
157 | | - | |
| 157 | + | |
158 | 158 | | |
159 | 159 | | |
160 | 160 | | |
| |||
306 | 306 | | |
307 | 307 | | |
308 | 308 | | |
309 | | - | |
310 | | - | |
311 | 309 | | |
312 | 310 | | |
313 | 311 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
32 | | - | |
33 | 32 | | |
34 | 33 | | |
35 | 34 | | |
| |||
57 | 56 | | |
58 | 57 | | |
59 | 58 | | |
60 | | - | |
61 | 59 | | |
62 | 60 | | |
63 | 61 | | |
64 | | - | |
65 | 62 | | |
66 | | - | |
67 | 63 | | |
68 | 64 | | |
69 | 65 | | |
| |||
78 | 74 | | |
79 | 75 | | |
80 | 76 | | |
81 | | - | |
82 | 77 | | |
83 | 78 | | |
84 | 79 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
137 | 137 | | |
138 | 138 | | |
139 | 139 | | |
140 | | - | |
| 140 | + | |
141 | 141 | | |
142 | 142 | | |
143 | 143 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
73 | 73 | | |
74 | 74 | | |
75 | 75 | | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | | - | |
80 | | - | |
81 | | - | |
82 | | - | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
83 | 82 | | |
84 | 83 | | |
85 | | - | |
86 | | - | |
87 | | - | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
94 | 87 | | |
95 | 88 | | |
96 | 89 | | |
| |||
104 | 97 | | |
105 | 98 | | |
106 | 99 | | |
107 | | - | |
108 | | - | |
| 100 | + | |
109 | 101 | | |
110 | 102 | | |
111 | 103 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
43 | 43 | | |
44 | 44 | | |
45 | 45 | | |
46 | | - | |
| 46 | + | |
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
66 | 66 | | |
67 | 67 | | |
68 | 68 | | |
69 | | - | |
| 69 | + | |
70 | 70 | | |
71 | 71 | | |
72 | 72 | | |
| |||
86 | 86 | | |
87 | 87 | | |
88 | 88 | | |
89 | | - | |
| 89 | + | |
90 | 90 | | |
91 | 91 | | |
92 | 92 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
39 | 39 | | |
40 | 40 | | |
41 | 41 | | |
42 | | - | |
43 | | - | |
| 42 | + | |
44 | 43 | | |
45 | 44 | | |
46 | 45 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
68 | 68 | | |
69 | 69 | | |
70 | 70 | | |
71 | | - | |
| 71 | + | |
72 | 72 | | |
73 | | - | |
| 73 | + | |
74 | 74 | | |
75 | 75 | | |
76 | 76 | | |
77 | 77 | | |
78 | 78 | | |
79 | | - | |
80 | | - | |
| 79 | + | |
81 | 80 | | |
82 | 81 | | |
83 | 82 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
| 15 | + | |
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| |||
0 commit comments