Skip to content

Commit a4e7143

Browse files
committed
wip(spec): regenerate the migration registry from its entries
Claude-Session: https://claude.ai/code/session_01Sfe5YjBLwB9J3y8fvm2xq1 Co-authored-by: Claude <noreply@anthropic.com>
1 parent 9b6f85a commit a4e7143

1 file changed

Lines changed: 28 additions & 19 deletions

File tree

‎packages/spec/src/migrations/registry.ts‎

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11871,11 +11871,12 @@ const step18: MigrationStep = {
1187111871
// was `z.array(z.any())` while the other carrier, a relationship field's
1187211872
// `inlineColumns`, has been the strict `InlineGridColumnSchema` since #9227; the
1187311873
// carrier now REFERENCES that schema, so both carriers are judged by one
11874-
// contract. D3 only, deliberately: the one mechanical respelling the family
11875-
// had (`field` → `name`, conversion `field-column-lists-canonicalized`) is
11876-
// already retired from the load path, and every other refused shape is a
11877-
// judgment only the author can make. A stored view whose column fails is
11878-
// refused with the column schema's own prescription, never stripped.
11874+
// contract. The one mechanical respelling, `field` → `name`, is the D2
11875+
// conversion `form-view-subform-columns-canonicalized` (the respelling
11876+
// `field-column-lists-canonicalized` makes on `inlineColumns`); every other
11877+
// refused shape is a judgment only the author can make. A view saved with a
11878+
// failing column is refused with the column schema's own prescription, and a
11879+
// stored row carrying one is diagnosed at rehydration; neither is stripped.
1187911880
{
1188011881
id: 'form-view-subform-columns-closed',
1188111882
surface: 'view.form.subforms[].columns[] and view.formViews.<key>.subforms[].columns[] — the '
@@ -11892,10 +11893,12 @@ const step18: MigrationStep = {
1189211893
+ '(option B, `scale` retired from the currency type) and the remedy ruled on 2026-09-24 '
1189311894
+ '(option 乙 — a currency\'s ISO 4217 minor unit decides its display) — published green here. '
1189411895
+ 'The carrier now references the column schema, so every rule it holds applies here too, with '
11895-
+ 'its own prescription. NOT mechanically converted: the `field` → `name` respelling this family '
11896-
+ 'had is already retired from the load path, and which column an unknown key or a mixed '
11897-
+ '`field`/`name` entry meant is the author\'s call — a conversion that dropped the key would '
11898-
+ 'accept on every load what the parse now refuses. Population measured at the change, on '
11896+
+ 'its own prescription. Only the `field` spelling is converted mechanically — by the conversion '
11897+
+ '`form-view-subform-columns-canonicalized`, which rewrites stored rows and assembled artifacts '
11898+
+ 'and lists the edit under `os migrate meta`, while an author writing `field` meets the refusal. '
11899+
+ 'Which column an unknown key or a mixed `field`/`name` entry meant is the author\'s call — a '
11900+
+ 'conversion that dropped the key would accept on every load what the parse now refuses. '
11901+
+ 'Population measured at the change, on '
1189911902
+ 'origin/main cb4c31dd52: zero authored `subforms` in the repository (the showcase derives its '
1190011903
+ 'master-detail grids from the data model instead), against one authored `inlineColumns` block '
1190111904
+ 'as the control. Deployed metadata NOT MEASURED.',
@@ -12308,7 +12311,9 @@ const step18: MigrationStep = {
1230812311
id: 'inline-grid-column-currency-scale-refused',
1230912312
surface: 'object.fields.<name>.inlineColumns[].scale on an inline grid column that declares '
1231012313
+ '`type: \'currency\'` — any declared value, `scale: 0` included, computed or not. `scale` on a '
12311-
+ '`number` column, and on a column that declares no `type`, is untouched',
12314+
+ '`number` column is untouched. A column that declares no `type` is judged as the type it '
12315+
+ 'renders as: over a `currency` field of the child object it is entry '
12316+
+ '`inline-grid-column-identity-only-currency-scale-refused`',
1231212317
replacement: 'no `scale` on a currency inline grid column. DELETE the key — that is the whole '
1231312318
+ 'migration: a currency amount\'s decimal places are its currency\'s, not a column setting. The '
1231412319
+ 'currency\'s ISO 4217 minor unit decides how the cell displays the amount and the width a '
@@ -12327,19 +12332,23 @@ const step18: MigrationStep = {
1232712332
+ 'every load, which is the grace window the ruling refused; the refusal names the key and its '
1232812333
+ 'one-line fix instead. The same change rewords the column\'s `prefix` description: it replaces '
1232912334
+ 'the resolved currency\'s symbol and has no default (the grid no longer falls back to a fixed '
12330-
+ 'yen sign). Reach: only a DECLARED column `type` is judged — a column that declares none takes '
12331-
+ 'its type from the child field when the console hydrates it, which the column schema cannot '
12332-
+ 'see. Population measured at the change, on origin/main 1c8b320a89: one authored '
12333-
+ '`inlineColumns` block in the tree (the showcase invoice, seven identity-only columns, none '
12334-
+ 'declaring `type` or `scale`), no platform object, skill, documentation example or JSON fixture '
12335-
+ 'declaring an inline grid column at all, and one test fixture carrying `scale: 2` on a currency '
12336-
+ 'column, re-judged in the same change. Deployed metadata NOT MEASURED.',
12335+
+ 'yen sign). Reach: the column schema judges only a DECLARED column `type` — a column that '
12336+
+ 'declares none takes its type from the child field when the console hydrates it, which the '
12337+
+ 'schema cannot see; `defineStack` judges that column instead (entry '
12338+
+ '`inline-grid-column-identity-only-currency-scale-refused`). Population measured at the '
12339+
+ 'change, on origin/main 1c8b320a89: one authored `inlineColumns` block in the tree (the '
12340+
+ 'showcase invoice, seven identity-only columns, none declaring `type` or `scale`), no platform '
12341+
+ 'object, skill, documentation example or JSON fixture declaring an inline grid column at all, '
12342+
+ 'and one test fixture carrying `scale: 2` on a currency column, re-judged in the same change. '
12343+
+ 'Deployed metadata NOT MEASURED.',
1233712344
acceptanceCriteria:
1233812345
'Every field in the stack parses: an `ObjectSchema` parse and `objectstack validate` report no '
1233912346
+ 'issue on an `inlineColumns[].scale` path of a column declaring `type: \'currency\'`. A '
1234012347
+ 'currency column that carried `scale` no longer declares it, and a diff of the column shows '
12341-
+ 'that one line deleted and no key added. `number` columns, and columns declaring no `type`, '
12342-
+ 'keep their `scale`; a column\'s `prefix` is still accepted on a currency column.',
12348+
+ 'that one line deleted and no key added. `number` columns keep their `scale`, and so does a '
12349+
+ 'column declaring no `type` unless it names a `currency` field of the child object (entry '
12350+
+ '`inline-grid-column-identity-only-currency-scale-refused`); a column\'s `prefix` is still '
12351+
+ 'accepted on a currency column.',
1234312352
},
1234412353
// #20901 — the reach of `inline-grid-column-currency-scale-refused`, extended to
1234512354
// the column that declares no `type`. The column schema judges only a DECLARED

0 commit comments

Comments
 (0)