|
1 | 1 | { |
2 | 2 | "$comment": "GENERATED (ADR-0087 D4) — do not edit. Regenerate with: pnpm --filter @objectstack/spec gen:spec-changes. A projection of the D2 conversion table + D3 migration chain; the upgrade guide and the MCP spec_changes tool derive from this same data.", |
3 | | - "protocolVersion": "15.0.0", |
| 3 | + "protocolVersion": "16.0.0", |
4 | 4 | "supportFloor": 10, |
5 | 5 | "migrateCommand": "objectstack migrate meta --from <N> (N >= 10)", |
6 | 6 | "aggregate": { |
7 | 7 | "from": 10, |
8 | | - "to": 15, |
| 8 | + "to": 16, |
9 | 9 | "added": [], |
10 | 10 | "converted": [ |
11 | 11 | { |
|
132 | 132 | "migrationId": "ui-schemas-strict-unknown-keys", |
133 | 133 | "toMajor": 15, |
134 | 134 | "rationale": "The `.strict()` flip (ADR-0089 D3a) turns a previously silently-stripped unknown key into a parse error. There is no mapping target for an arbitrary unknown key — auto-deleting it would be exactly the silent data loss ADR-0078 bans — so each occurrence needs the author to decide: fix the typo, move it to the right layer, or delete dead metadata." |
| 135 | + }, |
| 136 | + { |
| 137 | + "surface": "dashboard widgets (undeclared top-level keys — legacy inline analytics, objectui-internal `component`/`data`, or typos)", |
| 138 | + "replacement": "declared keys only (`dataset` + `dimensions` + `values` for analytics; `options` for renderer-specific extras)", |
| 139 | + "migrationId": "dashboard-widget-strict-unknown-keys", |
| 140 | + "toMajor": 16, |
| 141 | + "rationale": "The `.strict()` flip turns a previously silently-stripped unknown key into a parse error. There is no mapping target for an arbitrary unknown key — auto-deleting it would be exactly the silent data loss ADR-0078 bans — so each occurrence needs the author to decide: bind a `dataset` and select `dimensions`/`values`, move a renderer setting under `options`, or delete the dead key." |
135 | 142 | } |
136 | 143 | ], |
137 | 144 | "removed": [] |
|
307 | 314 | } |
308 | 315 | ], |
309 | 316 | "removed": [] |
| 317 | + }, |
| 318 | + { |
| 319 | + "from": 15, |
| 320 | + "to": 16, |
| 321 | + "added": [], |
| 322 | + "converted": [], |
| 323 | + "migrated": [ |
| 324 | + { |
| 325 | + "surface": "dashboard widgets (undeclared top-level keys — legacy inline analytics, objectui-internal `component`/`data`, or typos)", |
| 326 | + "replacement": "declared keys only (`dataset` + `dimensions` + `values` for analytics; `options` for renderer-specific extras)", |
| 327 | + "migrationId": "dashboard-widget-strict-unknown-keys", |
| 328 | + "toMajor": 16, |
| 329 | + "rationale": "The `.strict()` flip turns a previously silently-stripped unknown key into a parse error. There is no mapping target for an arbitrary unknown key — auto-deleting it would be exactly the silent data loss ADR-0078 bans — so each occurrence needs the author to decide: bind a `dataset` and select `dimensions`/`values`, move a renderer setting under `options`, or delete the dead key." |
| 330 | + } |
| 331 | + ], |
| 332 | + "removed": [] |
310 | 333 | } |
311 | 334 | ] |
312 | 335 | } |
0 commit comments