Skip to content

Commit 5c60be7

Browse files
committed
fix(spec): anchor the four dead tracker citations to their landing commits; the census pin says what to add
Four new D3 entries carried issue numbers that no longer resolve on the board (deleted, not transferred). Each now names the commit in this repository's history that retired its family, and says what that commit decided. The pin's assertion message names the unnamed conversions and the remedy; its logic and scope are unchanged. Claude-Session: https://claude.ai/code/session_01CiCTczDo7tGhafXjf61dUJ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 3197fce commit 5c60be7

6 files changed

Lines changed: 54 additions & 31 deletions

‎packages/spec/src/migrations/entries/semantic/18.connector-error-mapping-retired.ts‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
import type { SemanticMigration } from '../../types.js';
44

5-
// #14676 (ADR-0049 enforce-or-remove) — the D3 entry of the
6-
// `connector-error-mapping-removed` family (ruling B on #17152: one D3 entry
7-
// per retirement family, even when D2 is lossless). The family is the key on
8-
// both carriers (`integration/Connector:errorMapping`,
5+
// ADR-0049 enforce-or-remove — the D3 entry of the
6+
// `connector-error-mapping-removed` family, which landed in commit 13c48c2a5:
7+
// eleven inert authorable keys, one of them spelled like the live
8+
// `userMessage` channel. One D3 entry per retirement family, even when D2 is
9+
// lossless (ruling B on #17152). The family is the key on both carriers
10+
// (`integration/Connector:errorMapping`,
911
// `integration/DeclarativeConnectorEntry:errorMapping`) and the shape that
1012
// leaves with it — `integration/ErrorMappingConfig`,
1113
// `integration/ErrorMappingRule` and `integration/ConnectorErrorCategory` in

‎packages/spec/src/migrations/entries/semantic/18.form-view-option-default-retired.ts‎

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
import type { SemanticMigration } from '../../types.js';
44

5-
// #12868 (maintainer-ruled narrowing on the objectui#6263 analysis) — the D3
6-
// entry of the `form-view-option-default-removed` family (ruling B on #17152:
7-
// one D3 entry per retirement family, even when D2 is lossless). The strip
8-
// changes no form; the prescribed replacement changes MORE than one form, and
9-
// that difference is the author's call.
5+
// The D3 entry of the `form-view-option-default-removed` family, which landed
6+
// in commit c459da6bc: a maintainer-ruled narrowing on the objectui#6263
7+
// analysis that took per-option `default` out of the form-view vocabulary and
8+
// left the object-field face enforcing it. One D3 entry per retirement family,
9+
// even when D2 is lossless (ruling B on #17152). The strip changes no form;
10+
// the prescribed replacement changes MORE than one form, and that difference
11+
// is the author's call.
1012
export const entry: SemanticMigration = {
1113
id: 'form-view-option-default-retired',
1214
surface: 'view.form.sections[].fields[].options[].default — the per-option pre-selection on a '

‎packages/spec/src/migrations/entries/semantic/18.mapping-lookup-params-retired.ts‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
import type { SemanticMigration } from '../../types.js';
44

5-
// #10329 (ADR-0049 enforce-or-remove) — the D3 entry of the
6-
// `mapping-lookup-params-removed` family (ruling B on #17152: one D3 entry per
7-
// retirement family, even when D2 is lossless). The strip preserves observed
5+
// ADR-0049 enforce-or-remove — the D3 entry of the
6+
// `mapping-lookup-params-removed` family, which landed in commit 15d58dbf1:
7+
// the import path never read the four lookup steering params, so they were
8+
// retired and the conversion strips them. One D3 entry per retirement family,
9+
// even when D2 is lossless (ruling B on #17152). The strip preserves observed
810
// import behaviour exactly; the judgment it leaves is whether the author's
911
// import was ever doing what the four keys said.
1012
export const entry: SemanticMigration = {

‎packages/spec/src/migrations/entries/semantic/18.translation-component-submit-label-retired.ts‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
import type { SemanticMigration } from '../../types.js';
44

5-
// #10926 — the D3 entry of the `translation-component-submit-label-removed`
6-
// family (ruling B on #17152: one D3 entry per retirement family, even when D2
7-
// is lossless). The strip deletes a string nothing has read since its carrier
5+
// The D3 entry of the `translation-component-submit-label-removed` family,
6+
// which landed in commit d173125fb: the component-copy key left with its only
7+
// declarer, `element:form`, rather than being re-anchored on `object-form`.
8+
// One D3 entry per retirement family, even when D2 is lossless (ruling B on
9+
// #17152). The strip deletes a string nothing has read since its carrier
810
// retired; where the translator's work should go instead is not something the
911
// conversion can decide.
1012
export const entry: SemanticMigration = {

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,14 @@ describe('migration chain (ADR-0087 D3)', () => {
114114
else pairs++;
115115
}
116116
}
117-
expect(unnamed).toEqual([]);
117+
expect(
118+
unnamed,
119+
`graduated D2 conversion(s) named by no D3 entry of their own step: ${unnamed.join(', ')}. `
120+
+ 'Remedy: add a D3 `semantic` entry of that step — a file under `entries/semantic/` '
121+
+ 'prefixed with its protocol major, then `gen:migration-registry` — whose text names the '
122+
+ 'conversion id as a whole word and says what judgment the consumer still owes after D2 '
123+
+ 'repaired the data (one D3 entry per retirement family, even when D2 is lossless).',
124+
).toEqual([]);
118125
expect(pairs).toBeGreaterThan(0);
119126
});
120127

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

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6950,10 +6950,12 @@ const step18: MigrationStep = {
69506950
+ 'fail tsc on upgrade; the fix is choosing a shipped driver, never '
69516951
+ 'widening a local mirror of the enum.',
69526952
},
6953-
// #14676 (ADR-0049 enforce-or-remove) — the D3 entry of the
6954-
// `connector-error-mapping-removed` family (ruling B on #17152: one D3 entry
6955-
// per retirement family, even when D2 is lossless). The family is the key on
6956-
// both carriers (`integration/Connector:errorMapping`,
6953+
// ADR-0049 enforce-or-remove — the D3 entry of the
6954+
// `connector-error-mapping-removed` family, which landed in commit 13c48c2a5:
6955+
// eleven inert authorable keys, one of them spelled like the live
6956+
// `userMessage` channel. One D3 entry per retirement family, even when D2 is
6957+
// lossless (ruling B on #17152). The family is the key on both carriers
6958+
// (`integration/Connector:errorMapping`,
69576959
// `integration/DeclarativeConnectorEntry:errorMapping`) and the shape that
69586960
// leaves with it — `integration/ErrorMappingConfig`,
69596961
// `integration/ErrorMappingRule` and `integration/ConnectorErrorCategory` in
@@ -10119,11 +10121,13 @@ const step18: MigrationStep = {
1011910121
+ 'predicate parses and registers byte-identically to before, and a non-string in these '
1012010122
+ 'slots keeps its own earlier refusal (at `registerFlow` and `objectstack validate`).',
1012110123
},
10122-
// #12868 (maintainer-ruled narrowing on the objectui#6263 analysis) — the D3
10123-
// entry of the `form-view-option-default-removed` family (ruling B on #17152:
10124-
// one D3 entry per retirement family, even when D2 is lossless). The strip
10125-
// changes no form; the prescribed replacement changes MORE than one form, and
10126-
// that difference is the author's call.
10124+
// The D3 entry of the `form-view-option-default-removed` family, which landed
10125+
// in commit c459da6bc: a maintainer-ruled narrowing on the objectui#6263
10126+
// analysis that took per-option `default` out of the form-view vocabulary and
10127+
// left the object-field face enforcing it. One D3 entry per retirement family,
10128+
// even when D2 is lossless (ruling B on #17152). The strip changes no form;
10129+
// the prescribed replacement changes MORE than one form, and that difference
10130+
// is the author's call.
1012710131
{
1012810132
id: 'form-view-option-default-retired',
1012910133
surface: 'view.form.sections[].fields[].options[].default — the per-option pre-selection on a '
@@ -11285,9 +11289,11 @@ const step18: MigrationStep = {
1128511289
+ 'Prove the widening separately and cheaply: a prerelease version that used to be '
1128611290
+ 'refused at build time now builds.',
1128711291
},
11288-
// #10329 (ADR-0049 enforce-or-remove) — the D3 entry of the
11289-
// `mapping-lookup-params-removed` family (ruling B on #17152: one D3 entry per
11290-
// retirement family, even when D2 is lossless). The strip preserves observed
11292+
// ADR-0049 enforce-or-remove — the D3 entry of the
11293+
// `mapping-lookup-params-removed` family, which landed in commit 15d58dbf1:
11294+
// the import path never read the four lookup steering params, so they were
11295+
// retired and the conversion strips them. One D3 entry per retirement family,
11296+
// even when D2 is lossless (ruling B on #17152). The strip preserves observed
1129111297
// import behaviour exactly; the judgment it leaves is whether the author's
1129211298
// import was ever doing what the four keys said.
1129311299
{
@@ -14668,9 +14674,11 @@ const step18: MigrationStep = {
1466814674
+ 'and must be verified as such: nothing ever parsed or read these shapes, so removing '
1466914675
+ 'them removes no behaviour.',
1467014676
},
14671-
// #10926 — the D3 entry of the `translation-component-submit-label-removed`
14672-
// family (ruling B on #17152: one D3 entry per retirement family, even when D2
14673-
// is lossless). The strip deletes a string nothing has read since its carrier
14677+
// The D3 entry of the `translation-component-submit-label-removed` family,
14678+
// which landed in commit d173125fb: the component-copy key left with its only
14679+
// declarer, `element:form`, rather than being re-anchored on `object-form`.
14680+
// One D3 entry per retirement family, even when D2 is lossless (ruling B on
14681+
// #17152). The strip deletes a string nothing has read since its carrier
1467414682
// retired; where the translator's work should go instead is not something the
1467514683
// conversion can decide.
1467614684
{

0 commit comments

Comments
 (0)