Skip to content

Commit 5bc4d56

Browse files
committed
docs(spec): re-point the migration registry's positional cross-references at entry ids (#7297)
Twelve notes in the split-out entries located a sibling by POSITION — "the entry above", "the notification pair above", "the trio at the top of this list", "`etl-pipeline-layer-retired` below". Position was a fact about append order, and append order is exactly what the split replaced with a derived sort, so each of these is now either wrong or about to be. Each is rewritten to name what it means: the sibling's id, the table it lives in, or — for the three copies of the "no backticks in `surface`" note, which pointed at whichever entry happened to carry the long form — the reason itself, inline. Content-only; the id set, every table's membership and the public API are untouched. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Py3V8MDCEEYhZrR3NvNVu5
1 parent 03d2bc8 commit 5bc4d56

14 files changed

Lines changed: 52 additions & 44 deletions

docs/protocol-upgrade-guide.md

Lines changed: 4 additions & 4 deletions
Large diffs are not rendered by default.

packages/spec/spec-changes.json

Lines changed: 8 additions & 8 deletions
Large diffs are not rendered by default.

packages/spec/src/migrations/entries/retired-defs/17.kernel__PluginCaching.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
// #4914 — the plugin manifest's `loading` block (ADR-0049 enforce-or-remove,
44
// maintainer ruling 2026-08-04). `PluginLoadingConfig` was reachable from
55
// authored metadata ONLY through `Manifest.loading`, and the ten members
6-
// below were embedded only by it, so retiring the carrier key unpublishes
7-
// the whole closure. The carrier itself is a `retiredKey()` tombstone
6+
// registered with it were embedded only by it, so retiring the carrier key
7+
// unpublishes the whole closure. The carrier itself is a `retiredKey()` tombstone
88
// registered one level up in `RETIRED_KEYS_BY_MAJOR`.
99
//
1010
// ⚠️ `kernel/PluginLoadingEvent` and `kernel/PluginLoadingState` are

packages/spec/src/migrations/entries/retired-keys/17.data__AggregationNode__distinct.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@
66
// `QuerySchema.aggregations` and `EngineAggregateOptionsSchema.
77
// aggregations` are both `z.array(AggregationNodeSchema)`, so the walked
88
// shape has a single `data/AggregationNode` def and the baseline marks one
9-
// line `[RETIRED]`. Contrast the `shared/FieldMapping:transform` trio at
10-
// the top of this list, where two `.extend()`s copied the property into
11-
// three walked shapes and each needed its own registration.
9+
// line `[RETIRED]`. Contrast the `shared/FieldMapping:transform` trio in
10+
// this same table, where two `.extend()`s copied the property into three
11+
// walked shapes and each needed its own registration.
1212
//
1313
// Registered here but NOT in `src/conversions/registry.ts`, for the same
14-
// reason as the notification pair above: `QueryAST` is a REQUEST surface —
14+
// reason as the `api/ListNotifications{Request,Response}:cursor` pair:
15+
// `QueryAST` is a REQUEST surface —
1516
// the client SDK builder's output and the `POST /data/:object/query` body
1617
// — never stored in stack metadata, so there is no authored source or
1718
// `sys_metadata` row for a D2 conversion to rewrite. The prescription

packages/spec/src/migrations/entries/retired-keys/17.kernel__Manifest__loading.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
// `RETIRED_DEFS_BY_MAJOR` below, not as ~27 individual key entries.
99
//
1010
// Registered here but NOT in `src/conversions/registry.ts`, for the reason
11-
// `automation/ActionDescriptor:isAsync` above gives: the conversion chain
11+
// `automation/ActionDescriptor:isAsync` gives: the conversion chain
1212
// walks a normalized STACK (`mapCollection(stack, 'objects' | 'views' | …)`)
1313
// and `applyConversionsToStoredItem` maps a metadata type onto one of those
1414
// collections. A package manifest is neither — there is no `packages` /

packages/spec/src/migrations/entries/semantic/17.action-session-roles-to-positions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export const entry: SemanticMigration = {
77
surface: 'ui.actionSession.roles',
88
replacement: 'ui.actionSession.positions (an action body reads `ctx.session.positions`)',
99
reason:
10-
'The MIRROR-IMAGE neighbour of the entry above, and the reason both are in this '
10+
'The MIRROR-IMAGE sibling of `actor-user-roles-to-positions`, and the reason both are in this '
1111
+ 'step: the hook `ctx.session` carried `roles` declared-and-never-produced (removed '
1212
+ 'outright, #5050), while the ACTION body\'s `ctx.session` carries it '
1313
+ 'produced-and-really-populated. `buildActionSession()` '

packages/spec/src/migrations/entries/semantic/17.actor-user-roles-to-positions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export const entry: SemanticMigration = {
1919
+ 'published straight into author-written code. The maintainer ruled it closed IMMEDIATELY '
2020
+ '(2026-08-06 14:49Z, #6011): no deprecation window, no dual-emit, the alias simply gone '
2121
+ 'in 17 (PR #6048). '
22-
+ '⚠️ Do not read this entry across to its neighbour above: '
22+
+ '⚠️ Do not read this entry across to its sibling `action-session-roles-to-positions`: '
2323
+ '`action-session-roles-to-positions` governs `ctx.session`, a DIFFERENT object reached '
2424
+ 'through the same `ctx`, and that one KEEPS its one-window dual-emit (#5613). Same word, '
2525
+ 'same dispatch, two faces, two schedules — `ctx.user.roles` is absent in 17 while '

packages/spec/src/migrations/entries/semantic/17.data-field-changed-event-retired.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ export const entry: SemanticMigration = {
2626
+ 'trimmed to producers that exist, #3196) — so there is no source for the chain to '
2727
+ 'rewrite, and deliberately no schema tombstone: a removed ENUM MEMBER cannot carry a '
2828
+ 'retiredKey() fix-it error the way an authorable object key can (the same limit the '
29-
+ 'sharing-rule `full` retirement hit above). The enforced channels are tsc, which '
29+
+ 'sharing-rule `full` retirement `owd-full-alias-removed` hit). The enforced channels are tsc, '
30+
+ 'which '
3031
+ 'fails any consumer still naming the value in a `DataEventType` position, and the '
3132
+ 'enum parse, which now rejects the name instead of accepting an event that never '
3233
+ 'arrives. A genuine per-field stream, if one is ever wanted, gets its own honest '

packages/spec/src/migrations/entries/semantic/17.driver-sql-distinct-bare-filter-typed.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import type { SemanticMigration } from '../../types.js';
44

55
export const entry: SemanticMigration = {
66
id: 'driver-sql-distinct-bare-filter-typed',
7-
// No backticks in `surface` — see the note on the entry above.
7+
// No backticks in `surface` — build-upgrade-guide.ts renders it inside a
8+
// code span already, and a nested backtick would close it.
89
surface: 'SqlDriver.distinct() third argument — any value',
910
replacement:
1011
'a bare FilterCondition (@objectstack/spec/data) — the same value find() carries '

packages/spec/src/migrations/entries/semantic/17.filter-regex-options-retired.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import type { SemanticMigration } from '../../types.js';
44

55
export const entry: SemanticMigration = {
66
id: 'filter-regex-options-retired',
7-
// No backticks in `surface` — see the note two entries above.
7+
// No backticks in `surface` — build-upgrade-guide.ts renders it inside a
8+
// code span already, and a nested backtick would close it.
89
surface:
910
'data.filter $regex / $options — in a STORED filter (dashboard widget filter and '
1011
+ 'globalFilters, report runtimeFilter, page and component filter, solution-blueprint '

0 commit comments

Comments
 (0)