Repository navigation
Commit b15b2fc
test(cli): migrate-meta e2e replays only the conversions step 17 still registers (#27132)
Part of #27114
Clause-②: no
Metadata-protocol: none
## 维护者速读
- **改了什么:** 只改了 `packages/cli/test/migrate-meta.e2e.test.ts` 这一个夜间 e2e
测试文件。fixture 换成第 17 步仍注册的 12 个 conversion 各一处写法;#9418
那组用例改用仍会被拒并被转换的退役写法:`structuredOutput.format:
'regex'`(`agent-structured-output-refused-members-removed`)和
`dashboard.refreshInterval`;不用 `agent.lifecycle`,因为它的退役测试钉死该键在全树不得出现。
- **为什么改:** #26599 让 16.x 的 45 个 conversion 随退役套件老化离开第 17 步,`--from 16`
不再改写这些写法,快照里留下未知键,夜间 tiers 因此 6 个用例变红;PR 和合并队列不跑 e2e 层,所以只在夜间暴露。
- **风险与回滚:** 只动测试,不动产品代码,不发布任何东西。用例数不变(19 个),没有跳过、改名或换层。回滚就是 revert 本
PR。
- **先看:** ① 该文件里的 `PRE17_CONFIG` 和 `EXPECTED_CONVERSIONS`;②
新增的注册表钉子(`EXPECTED_CONVERSIONS` 必须等于
`MIGRATIONS_BY_MAJOR[17].conversionIds`);③ #9418 那组的 fixture 和 `os
validate` 断言。
- **两分钟验证:** 先建好 cli 的依赖闭包,再跑 `OS_TEST_TIERS=nightly pnpm --filter
@objectstack/cli exec vitest run test/migrate-meta.e2e.test.ts`,预期 19
个全部通过。
- **需要你做的:** 无,席位落地。
## What changes
#26599 (`dbf7e04adf`, ruling 6434038284 on #25767) removed the 45
conversions retired at 16.1.0 from step 17's `conversionIds`. It
re-pointed the unit-tier cli pins but not this file, which runs only
under `OS_TEST_TIERS=nightly`. The 2026-10-28 nightly (run 40638682260)
went red on six of its cases.
All six failures come from that narrowing:
- The main fixture carried one shape per 16.x conversion family. Nine of
the ten families it expected are no longer registered, and `--from 16`
leaves those shapes as written. So the run attributes nothing to them,
and the snapshot keeps `responsive`, `performance`, `aria` and
`defaultSort` as unknown keys. That breaks `schemaValid`, the per-family
attribution, the `--out` re-parse and idempotence.
- The #9418 fixture carried `agent.knowledge` and
`skill.triggerPhrases`. Their tombstones and conversions left the spec
with the 16.x kits, so the load no longer converts them, and `os
validate` answers with the strict unknown-key refusal that names the
protocol upgrade guide, not the retired-key prescription.
The fix is in this one file. No case is added, removed, renamed or
skipped, so the count stays at 19.
- **Main fixture:** the aged-out shapes are dropped (option (a) on the
claim). The fixture now carries one shape for each of the 12 conversions
step 17 still registers: the sharing-rule `full` → `edit` rename, the
seven flow-node aliases and lifts (crud `object`, notify, wait,
connector, map, subflow, script), `mongo` → `mongodb`, the converged
retry policy (`retryDelayMs` → `backoffMs`), the page-header
`description` → `subtitle` alias and the inline api action's object-form
`params` → `bodyExtra`. The list was read from `registry.ts.template`
step 17, not from memory, and every id was checked against
`conversions/registry.ts`. The `required` / no-`storage` assertions
(#16693), the canonical `delete_record` pass-through and the #4247
`maxRetries` TODO stay.
- **Registry pin:** the attribution case first asserts that
`EXPECTED_CONVERSIONS` equals `MIGRATIONS_BY_MAJOR[17].conversionIds`
(imported from `@objectstack/spec/migrations`, as
`migrate-meta-default-range-window.test.ts` does). The next family that
leaves or joins the step then reds here by name, not as a missing
rewrite.
- **#9418 fixture:** re-pointed to retired spellings whose refusal and
conversion still stand. `defineAgent` carries `structuredOutput: {
format: 'regex' }`, a retired member refused at parse
(`agent-structured-output-refused-members-removed`), and
`Dashboard.create` from `@objectstack/spec/ui` carries `refreshInterval`
(`dashboard-refresh-interval-to-refresh-interval-seconds`). Both are
protocol 18, which `--from 16` replays into. `agent.lifecycle` is not
used, because its retirement pins the key absent from the tree. There
are still two per-artifact helpers from spec subpaths, so a tolerance
scoped to `defineStack` alone still fails it. The `os validate` half now
matches the refusal's own prescription, `--from 17`.
## Acceptance notes
1. **Option (a), not (b).** If an aged-out shape were kept, the replayed
snapshot would be schema-invalid by design. That would break the
`schemaValid`, re-parse and idempotence cases that the 12 surviving
families need, and asserting the refusal instead would need a separate
fixture and a new case. The ruled refusal itself, the unknown-key
message naming the upgrade guide, was observed while reproducing this
failure (the nightly log's `os validate` output). The spec owns the unit
pins for it.
2. **Wider family coverage than before.** Before the narrowing, the file
covered one step-17 family that still survives: sharing-rule. It now
covers all 12 that step 17 registers, which restores the docblock's
stated purpose: "one key from every v17 conversion family in a single
pass".
## Tests
At head `e3006f2bd` (the patch that moved the #9418 fixture off
`agent.lifecycle`; addendum 6464184183 on #27114): `packages/spec`
`test:repo` 81/81 files, 1324 tests
(`agent-lifecycle-retirement.test.ts` 14/14); the nightly e2e 19/19; the
cli unit project 343/343 files; derived gates 47 at exit 0, 1
NOT-MEASURED (`check:dual-build-cjs-loads`, dist absent). The readings
below are the first head's.
At head `f73c11c8` (this branch, merged with `origin/main` `6817bf1ea`):
- `OS_TEST_TIERS=nightly pnpm --filter @objectstack/cli exec vitest run
test/migrate-meta.e2e.test.ts`: before the fix, at `d90657b2`, `Tests 6
failed | 13 passed (19)`, the same six the nightly names. After: `Tests
19 passed (19)`, lock `VERDICT command-exit 0`.
- `pnpm --filter @objectstack/cli exec vitest run --project unit`: 341
of 343 files and 4929 tests passed, 29 skipped. The two remaining files
(`published-subpath-console.pin`, `published-subpath-hook-body.pin`)
refused before any test because cli's own `dist/` was not built. After
`pnpm --filter @objectstack/cli build` both passed (29 tests).
## Verification
<details><summary>Derived gates (dispatch-gates --commands, 48
families)</summary>
- 47 exited 0.
- `node scripts/check-plugin-teardown-shape.mjs --self-test` first
exited 3 (prerequisite: its pinned positive-control commit was outside
the shallow clone). After fetching that commit, it exited 0 (48 cases).
- `pnpm check:dual-build-cjs-loads` exited 3, `PREREQUISITE NOT MET`: it
reads every package's `dist/`, and only the cli closure was built.
Recorded as NOT MEASURED; CI's Lint and Repo Gates runs it.
- `dispatch-gates --ran`: 48 derived, 47 run, 1 NOT-MEASURED (derived
from the recorded exit 3), 0 UNRUN.
</details>
---
_Generated by [Claude
Code](https://claude.ai/code/session_01QSeKYnN7X5PL1HWYjGfKJY)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 3346da2 commit b15b2fc
1 file changed
Lines changed: 111 additions & 106 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
| 27 | + | |
27 | 28 | | |
28 | 29 | | |
29 | 30 | | |
| |||
33 | 34 | | |
34 | 35 | | |
35 | 36 | | |
36 | | - | |
37 | | - | |
38 | | - | |
39 | | - | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
40 | 50 | | |
41 | 51 | | |
42 | 52 | | |
| |||
51 | 61 | | |
52 | 62 | | |
53 | 63 | | |
54 | | - | |
55 | | - | |
56 | | - | |
57 | | - | |
58 | | - | |
59 | | - | |
60 | | - | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
61 | 69 | | |
62 | 70 | | |
63 | 71 | | |
64 | 72 | | |
65 | 73 | | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
72 | 78 | | |
73 | | - | |
| 79 | + | |
74 | 80 | | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
75 | 88 | | |
76 | 89 | | |
77 | 90 | | |
78 | | - | |
79 | | - | |
80 | | - | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
108 | | - | |
109 | | - | |
110 | | - | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | | - | |
116 | | - | |
117 | | - | |
118 | | - | |
119 | | - | |
120 | | - | |
121 | | - | |
122 | | - | |
123 | | - | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
124 | 101 | | |
125 | 102 | | |
126 | 103 | | |
| |||
135 | 112 | | |
136 | 113 | | |
137 | 114 | | |
138 | | - | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
139 | 121 | | |
140 | | - | |
141 | | - | |
142 | | - | |
143 | | - | |
144 | | - | |
145 | | - | |
146 | | - | |
147 | | - | |
148 | | - | |
149 | 122 | | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
150 | 134 | | |
151 | 135 | | |
152 | 136 | | |
| |||
179 | 163 | | |
180 | 164 | | |
181 | 165 | | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
182 | 171 | | |
183 | 172 | | |
184 | 173 | | |
| |||
215 | 204 | | |
216 | 205 | | |
217 | 206 | | |
218 | | - | |
219 | | - | |
220 | | - | |
221 | | - | |
222 | | - | |
223 | | - | |
224 | | - | |
225 | | - | |
226 | | - | |
227 | | - | |
228 | | - | |
229 | | - | |
230 | | - | |
231 | | - | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
232 | 227 | | |
233 | 228 | | |
234 | 229 | | |
| |||
358 | 353 | | |
359 | 354 | | |
360 | 355 | | |
361 | | - | |
362 | | - | |
363 | | - | |
364 | | - | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
365 | 369 | | |
366 | 370 | | |
367 | 371 | | |
| |||
379 | 383 | | |
380 | 384 | | |
381 | 385 | | |
382 | | - | |
| 386 | + | |
| 387 | + | |
383 | 388 | | |
384 | 389 | | |
385 | 390 | | |
| |||
393 | 398 | | |
394 | 399 | | |
395 | 400 | | |
396 | | - | |
| 401 | + | |
397 | 402 | | |
398 | | - | |
399 | | - | |
400 | | - | |
401 | | - | |
402 | | - | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
403 | 408 | | |
404 | 409 | | |
405 | 410 | | |
| |||
434 | 439 | | |
435 | 440 | | |
436 | 441 | | |
437 | | - | |
438 | | - | |
| 442 | + | |
| 443 | + | |
439 | 444 | | |
440 | 445 | | |
441 | 446 | | |
442 | | - | |
443 | | - | |
| 447 | + | |
| 448 | + | |
444 | 449 | | |
445 | 450 | | |
446 | 451 | | |
447 | | - | |
| 452 | + | |
448 | 453 | | |
449 | 454 | | |
450 | 455 | | |
| |||
458 | 463 | | |
459 | 464 | | |
460 | 465 | | |
461 | | - | |
462 | | - | |
| 466 | + | |
| 467 | + | |
463 | 468 | | |
464 | 469 | | |
465 | 470 | | |
| |||
0 commit comments