@substrat-run/kernel 0.148.0 → 0.150.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/attachment-sweep.d.ts +281 -0
  2. package/dist/attachment-sweep.d.ts.map +1 -0
  3. package/dist/attachment-sweep.js +480 -0
  4. package/dist/attachment-sweep.js.map +1 -0
  5. package/dist/index.d.ts +15 -9
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +11 -7
  8. package/dist/index.js.map +1 -1
  9. package/dist/invocation-line.d.ts +85 -0
  10. package/dist/invocation-line.d.ts.map +1 -1
  11. package/dist/invocation-line.js +43 -0
  12. package/dist/invocation-line.js.map +1 -1
  13. package/dist/migration-digest.d.ts +56 -0
  14. package/dist/migration-digest.d.ts.map +1 -1
  15. package/dist/migration-digest.js +92 -0
  16. package/dist/migration-digest.js.map +1 -1
  17. package/dist/migration-fence.d.ts +14 -0
  18. package/dist/migration-fence.d.ts.map +1 -0
  19. package/dist/migration-fence.js +515 -0
  20. package/dist/migration-fence.js.map +1 -0
  21. package/dist/migration-replay.d.ts +52 -0
  22. package/dist/migration-replay.d.ts.map +1 -0
  23. package/dist/migration-replay.js +140 -0
  24. package/dist/migration-replay.js.map +1 -0
  25. package/dist/module-migrations.d.ts +3 -3
  26. package/dist/module-migrations.js +3 -3
  27. package/dist/peer.d.ts +32 -2
  28. package/dist/peer.d.ts.map +1 -1
  29. package/dist/peer.js +99 -3
  30. package/dist/peer.js.map +1 -1
  31. package/dist/permission-eval.d.ts +8 -0
  32. package/dist/permission-eval.d.ts.map +1 -1
  33. package/dist/permission-eval.js +14 -0
  34. package/dist/permission-eval.js.map +1 -1
  35. package/dist/platform-sweep.d.ts +116 -2
  36. package/dist/platform-sweep.d.ts.map +1 -1
  37. package/dist/platform-sweep.js +142 -0
  38. package/dist/platform-sweep.js.map +1 -1
  39. package/dist/promote-review.d.ts +125 -0
  40. package/dist/promote-review.d.ts.map +1 -0
  41. package/dist/promote-review.js +181 -0
  42. package/dist/promote-review.js.map +1 -0
  43. package/dist/scope-host.d.ts +204 -42
  44. package/dist/scope-host.d.ts.map +1 -1
  45. package/dist/scope-host.js.map +1 -1
  46. package/dist/scope-store.d.ts +5 -5
  47. package/dist/scope-store.d.ts.map +1 -1
  48. package/dist/spine-restore.d.ts +2 -0
  49. package/dist/spine-restore.d.ts.map +1 -1
  50. package/dist/spine-restore.js +5 -0
  51. package/dist/spine-restore.js.map +1 -1
  52. package/dist/store-driver-releases.d.ts +306 -0
  53. package/dist/store-driver-releases.d.ts.map +1 -0
  54. package/dist/store-driver-releases.js +581 -0
  55. package/dist/store-driver-releases.js.map +1 -0
  56. package/dist/table-ownership.d.ts +5 -2
  57. package/dist/table-ownership.d.ts.map +1 -1
  58. package/dist/table-ownership.js +19 -10
  59. package/dist/table-ownership.js.map +1 -1
  60. package/dist/testing.d.ts +2 -0
  61. package/dist/testing.d.ts.map +1 -1
  62. package/dist/testing.js +2 -0
  63. package/dist/testing.js.map +1 -1
  64. package/dist/upload-link.d.ts +60 -7
  65. package/dist/upload-link.d.ts.map +1 -1
  66. package/dist/upload-link.js +189 -25
  67. package/dist/upload-link.js.map +1 -1
  68. package/dist/version-migrations.d.ts +63 -1
  69. package/dist/version-migrations.d.ts.map +1 -1
  70. package/dist/version-migrations.js +174 -8
  71. package/dist/version-migrations.js.map +1 -1
  72. package/dist/vertical-scope-stores.d.ts +9 -9
  73. package/dist/vertical-scope-stores.d.ts.map +1 -1
  74. package/dist/vertical-scope-stores.js +29 -29
  75. package/dist/vertical-scope-stores.js.map +1 -1
  76. package/package.json +2 -2
  77. package/dist/store-kind-releases.d.ts +0 -137
  78. package/dist/store-kind-releases.d.ts.map +0 -1
  79. package/dist/store-kind-releases.js +0 -252
  80. package/dist/store-kind-releases.js.map +0 -1
@@ -21,6 +21,10 @@
21
21
  * bounded batch at a time, and until it reaches a version the read falls back to that
22
22
  * version's manifest. The fallback is only for those rows. A version published by this code
23
23
  * is split on the way in.
24
+ * - `migration_digest_derived` (#2339): 1 once `migration_digest` is the one the control plane
25
+ * derives from these rows and the manifest's `doClasses`, never the one the push sent. NULL is
26
+ * a version stored before this, whose digest is still the pushed one: a backfill re-derives
27
+ * those a batch at a time, and a read of one derives it first.
24
28
  */
25
29
  import { type DeclaredMigration } from '@substrat-run/contracts';
26
30
  import type { SwitchSql } from './system-switch.js';
@@ -34,7 +38,7 @@ import type { SwitchSql } from './system-switch.js';
34
38
  * a directory from before #1764 lacks, so the adapters run these statements after their
35
39
  * column additions, not in their DDL loop.
36
40
  */
37
- export declare const VERSION_MIGRATIONS_DDL = "\n CREATE TABLE IF NOT EXISTS vertical_version_migrations (\n version_id TEXT NOT NULL,\n -- The migration's place in the order the host runs them, from 0.\n ordinal INTEGER NOT NULL,\n module_id TEXT NOT NULL,\n -- The module's SqlMigration.version, e.g. 0001-init.\n version TEXT NOT NULL,\n sql TEXT NOT NULL,\n PRIMARY KEY (version_id, ordinal)\n );\n CREATE INDEX IF NOT EXISTS vertical_versions_unsplit\n ON vertical_versions (id) WHERE migrations_split IS NULL;\n";
41
+ export declare const VERSION_MIGRATIONS_DDL = "\n CREATE TABLE IF NOT EXISTS vertical_version_migrations (\n version_id TEXT NOT NULL,\n -- The migration's place in the order the host runs them, from 0.\n ordinal INTEGER NOT NULL,\n module_id TEXT NOT NULL,\n -- The module's SqlMigration.version, e.g. 0001-init.\n version TEXT NOT NULL,\n sql TEXT NOT NULL,\n -- The migration's declared moves and discards (#2322), as JSON { moves?, discards? }.\n -- NULL = it declares none, or was stored before they were carried.\n declarations TEXT,\n PRIMARY KEY (version_id, ordinal)\n );\n CREATE INDEX IF NOT EXISTS vertical_versions_unsplit\n ON vertical_versions (id) WHERE migrations_split IS NULL;\n -- #2339: versions whose migration_digest is still the pushed one, not yet re-derived.\n CREATE INDEX IF NOT EXISTS vertical_versions_underived\n ON vertical_versions (id) WHERE migration_digest_derived IS NULL;\n";
38
42
  /** A manifest with its SQL taken out, and the SQL. */
39
43
  export interface SplitManifest {
40
44
  /** The manifest to store: without `migrations`, or exactly as given when there was nothing to take. */
@@ -105,4 +109,62 @@ export declare function versionMigrationsOf(db: SwitchSql, versionId: string): {
105
109
  verticalSlug: string;
106
110
  migrations: DeclaredMigration[] | null;
107
111
  } | undefined;
112
+ /**
113
+ * The `reason` on a push refused because its `digests.migration` is not the one the control plane
114
+ * derives from the migrations it carries (#2339).
115
+ */
116
+ export declare const MIGRATION_DIGEST_MISMATCH_REASON = "migration_digest_mismatch";
117
+ /**
118
+ * A version's migration digest as the control plane derives it (#2339): `migrationDigestOf`
119
+ * over the manifest's `doClasses` and the migrations the version stores, with what each
120
+ * declares. A version that stores no migrations to derive it from (`migrations` null), or whose
121
+ * `doClasses` do not read, gets `unheldMigrationDigest`, which equals no other version's.
122
+ */
123
+ export declare function derivedMigrationDigest(versionId: string, doClasses: unknown, migrations: readonly DeclaredMigration[] | null): Promise<string>;
124
+ /**
125
+ * The migration digest a publish stores (#2339): the one derived from what it stores, never the
126
+ * one pushed. A push that carries its migrations and pushed another digest is refused
127
+ * (`validation_failed`, reason {@link MIGRATION_DIGEST_MISMATCH_REASON}): either its CLI hashes
128
+ * something other than what it sent, or it hashes less than the platform compares. One that
129
+ * carries none is not refused, since nothing can check it, and stores the unheld digest.
130
+ */
131
+ export declare function publishedMigrationDigest(input: {
132
+ id: string;
133
+ migrationDigest: string;
134
+ manifestJson: string | null;
135
+ migrations: readonly DeclaredMigration[] | null;
136
+ }): Promise<string>;
137
+ /** The two reads that find versions whose digest is not derived yet, answered from `vertical_versions_underived`. */
138
+ export declare const UNDERIVED_IDS_SQL = "SELECT id FROM vertical_versions WHERE migration_digest_derived IS NULL ORDER BY id LIMIT ?";
139
+ export declare const UNDERIVED_PROBE_SQL = "SELECT 1 AS present FROM vertical_versions WHERE migration_digest_derived IS NULL LIMIT 1";
140
+ /**
141
+ * Derive one stored version's migration digest from its stored rows and record it (#2339),
142
+ * unless it is derived already. Returns the digest the version now holds, or undefined when
143
+ * there is no such version.
144
+ *
145
+ * Two statements, not a transaction: the digest is computed between them (Web Crypto is
146
+ * asynchronous), and the write is guarded on the row still being underived, so two derivations
147
+ * racing write once. A version's migrations and `doClasses` never change after it is published,
148
+ * so both derive the same value, and what was read is what is recorded.
149
+ */
150
+ export declare function deriveVersionMigrationDigest(db: SwitchSql, versionId: string): Promise<string | undefined>;
151
+ /**
152
+ * Re-derive the next versions stored before #2339, whose migration digest is still the one their
153
+ * push sent: at most `limit` of them. Returns how many it derived, and whether any are left.
154
+ * Resumable and idempotent on #1764's terms: each version is marked as it is derived, and a
155
+ * derived one is never selected again. Until the backfill reaches a version, a read of it
156
+ * derives it first (`deriveVersionMigrationDigest`), so no gate compares a pushed digest.
157
+ */
158
+ export declare function deriveMigrationDigestsBatch(db: SwitchSql, limit?: number): Promise<{
159
+ derived: number;
160
+ more: boolean;
161
+ }>;
162
+ /** Whether any version's migration digest still waits to be derived. One probe of the partial index. */
163
+ export declare function versionsAwaitDigest(db: SwitchSql): boolean;
164
+ /**
165
+ * The promote gate's refusal when the migration digest moved and the change was not acknowledged.
166
+ * A side whose digest is unheld (#2339) is named with why it always asks, so a vertical whose
167
+ * pushes leave their SQL out of the manifest is not surprised that every promote does.
168
+ */
169
+ export declare function migrationChangeRefusal(outgoing: string, incoming: string): string;
108
170
  //# sourceMappingURL=version-migrations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version-migrations.d.ts","sourceRoot":"","sources":["../src/version-migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAGL,KAAK,iBAAiB,EAEvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,ugBAalC,CAAC;AAEF,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,uGAAuG;IACvG,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,yFAAyF;IACzF,UAAU,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;CACxC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,aAAa,CAkB3G;AAED,0GAA0G;AAC1G,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,SAAS,EACb,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,SAAS,iBAAiB,EAAE,GAAG,IAAI,GAC9C,IAAI,CASN;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,wFAAwF,CAAC;AACrH,eAAO,MAAM,iBAAiB,sFAAsF,CAAC;AAIrH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,QAAkB,CAAC;AAEpD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,SAAS,EACb,KAAK,GAAE,MAAuB,GAC7B;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAiClC;AAED,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,SAAS,EACb,SAAS,EAAE,MAAM,GAChB;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAA;CAAE,GAAG,SAAS,CA4B9E"}
1
+ {"version":3,"file":"version-migrations.d.ts","sourceRoot":"","sources":["../src/version-migrations.ts"],"names":[],"mappings":"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"}
@@ -21,8 +21,12 @@
21
21
  * bounded batch at a time, and until it reaches a version the read falls back to that
22
22
  * version's manifest. The fallback is only for those rows. A version published by this code
23
23
  * is split on the way in.
24
+ * - `migration_digest_derived` (#2339): 1 once `migration_digest` is the one the control plane
25
+ * derives from these rows and the manifest's `doClasses`, never the one the push sent. NULL is
26
+ * a version stored before this, whose digest is still the pushed one: a backfill re-derives
27
+ * those a batch at a time, and a read of one derives it first.
24
28
  */
25
- import { deployManifest, storedDeployManifest, } from '@substrat-run/contracts';
29
+ import { declaredMigrationDeclarations, deployManifest, migrationDigestOf, reviewLine, storedDeployManifest, substratError, UNHELD_MIGRATION_DIGEST_PREFIX, unheldMigrationDigest, } from '@substrat-run/contracts';
26
30
  /**
27
31
  * The table, and the index the backfill walks. Interpolated into both adapters' directory DDL,
28
32
  * so `lint:spine-ddl` sees one spelling on each side. Anything that references this table or
@@ -42,10 +46,16 @@ export const VERSION_MIGRATIONS_DDL = `
42
46
  -- The module's SqlMigration.version, e.g. 0001-init.
43
47
  version TEXT NOT NULL,
44
48
  sql TEXT NOT NULL,
49
+ -- The migration's declared moves and discards (#2322), as JSON { moves?, discards? }.
50
+ -- NULL = it declares none, or was stored before they were carried.
51
+ declarations TEXT,
45
52
  PRIMARY KEY (version_id, ordinal)
46
53
  );
47
54
  CREATE INDEX IF NOT EXISTS vertical_versions_unsplit
48
55
  ON vertical_versions (id) WHERE migrations_split IS NULL;
56
+ -- #2339: versions whose migration_digest is still the pushed one, not yet re-derived.
57
+ CREATE INDEX IF NOT EXISTS vertical_versions_underived
58
+ ON vertical_versions (id) WHERE migration_digest_derived IS NULL;
49
59
  `;
50
60
  /**
51
61
  * Take `migrations` out of a manifest.
@@ -84,12 +94,43 @@ export function splitManifestMigrations(manifestJson, mode) {
84
94
  migrations: result.success && result.data !== undefined ? result.data : null,
85
95
  };
86
96
  }
97
+ /** The `declarations` column of one row: JSON `{ moves?, discards? }`, or NULL when it declares none. */
98
+ function declarationsJson(m) {
99
+ if (!m.moves && !m.discards)
100
+ return null;
101
+ return JSON.stringify({ ...(m.moves ? { moves: m.moves } : {}), ...(m.discards ? { discards: m.discards } : {}) });
102
+ }
103
+ /** What a stored `declarations` column must parse as: the push boundary's own schema, and nothing else. */
104
+ const storedDeclarations = declaredMigrationDeclarations.strict();
105
+ /**
106
+ * One row's declarations as a `DeclaredMigration`'s spread, or null when the column holds
107
+ * something that is not a declaration — which the caller answers as "not available" for the
108
+ * whole version, never as a list that silently lost what a migration may lose.
109
+ */
110
+ function declarationsOf(json) {
111
+ if (json === null)
112
+ return {};
113
+ let parsed;
114
+ try {
115
+ parsed = JSON.parse(json);
116
+ }
117
+ catch {
118
+ return null;
119
+ }
120
+ const result = storedDeclarations.safeParse(parsed);
121
+ if (!result.success || (!result.data.moves && !result.data.discards))
122
+ return null;
123
+ return {
124
+ ...(result.data.moves ? { moves: result.data.moves } : {}),
125
+ ...(result.data.discards ? { discards: result.data.discards } : {}),
126
+ };
127
+ }
87
128
  /** Replace one version's migration rows. The caller sets its `migration_count` and `migrations_split`. */
88
129
  export function writeVersionMigrations(db, versionId, migrations) {
89
130
  db.run('DELETE FROM vertical_version_migrations WHERE version_id = ?', versionId);
90
131
  (migrations ?? []).forEach((m, ordinal) => {
91
- db.run(`INSERT INTO vertical_version_migrations (version_id, ordinal, module_id, version, sql)
92
- VALUES (?, ?, ?, ?, ?)`, versionId, ordinal, m.moduleId, m.version, m.sql);
132
+ db.run(`INSERT INTO vertical_version_migrations (version_id, ordinal, module_id, version, sql, declarations)
133
+ VALUES (?, ?, ?, ?, ?, ?)`, versionId, ordinal, m.moduleId, m.version, m.sql, declarationsJson(m));
93
134
  });
94
135
  }
95
136
  /**
@@ -173,15 +214,140 @@ export function versionMigrationsOf(db, versionId) {
173
214
  }
174
215
  if (row.migration_count === null)
175
216
  return { verticalSlug: row.vertical_slug, migrations: null };
176
- const rows = db.all(`SELECT module_id, version, sql FROM vertical_version_migrations
217
+ const rows = db.all(`SELECT module_id, version, sql, declarations FROM vertical_version_migrations
177
218
  WHERE version_id = ? ORDER BY ordinal`, versionId);
178
219
  // Never a short list: rows that disagree with the count are not the version's migrations.
179
220
  if (rows.length !== row.migration_count)
180
221
  return { verticalSlug: row.vertical_slug, migrations: null };
181
- return {
182
- verticalSlug: row.vertical_slug,
222
+ const migrations = [];
223
+ for (const r of rows) {
224
+ // Never a list without what a migration declares it may lose (#2322): a row whose
225
+ // declarations do not read makes the whole version "not available".
226
+ const declared = declarationsOf(r.declarations);
227
+ if (declared === null)
228
+ return { verticalSlug: row.vertical_slug, migrations: null };
183
229
  // Parsed on the way in (`splitManifestMigrations`), so the brand is the stored value's.
184
- migrations: rows.map((r) => ({ moduleId: r.module_id, version: r.version, sql: r.sql })),
185
- };
230
+ migrations.push({ moduleId: r.module_id, version: r.version, sql: r.sql, ...declared });
231
+ }
232
+ return { verticalSlug: row.vertical_slug, migrations };
233
+ }
234
+ /**
235
+ * The `reason` on a push refused because its `digests.migration` is not the one the control plane
236
+ * derives from the migrations it carries (#2339).
237
+ */
238
+ export const MIGRATION_DIGEST_MISMATCH_REASON = 'migration_digest_mismatch';
239
+ /** The manifest's `doClasses` as the stored parser reads them (absent is `[]`), or null when they do not read. */
240
+ function doClassesOf(raw) {
241
+ const result = storedDeployManifest.shape.doClasses.safeParse(raw);
242
+ return result.success ? result.data : null;
243
+ }
244
+ /**
245
+ * A version's migration digest as the control plane derives it (#2339): `migrationDigestOf`
246
+ * over the manifest's `doClasses` and the migrations the version stores, with what each
247
+ * declares. A version that stores no migrations to derive it from (`migrations` null), or whose
248
+ * `doClasses` do not read, gets `unheldMigrationDigest`, which equals no other version's.
249
+ */
250
+ export async function derivedMigrationDigest(versionId, doClasses, migrations) {
251
+ const classes = doClassesOf(doClasses);
252
+ if (migrations === null || classes === null)
253
+ return unheldMigrationDigest(versionId);
254
+ return migrationDigestOf({ doClasses: classes, migrations });
255
+ }
256
+ /**
257
+ * The migration digest a publish stores (#2339): the one derived from what it stores, never the
258
+ * one pushed. A push that carries its migrations and pushed another digest is refused
259
+ * (`validation_failed`, reason {@link MIGRATION_DIGEST_MISMATCH_REASON}): either its CLI hashes
260
+ * something other than what it sent, or it hashes less than the platform compares. One that
261
+ * carries none is not refused, since nothing can check it, and stores the unheld digest.
262
+ */
263
+ export async function publishedMigrationDigest(input) {
264
+ let doClasses;
265
+ if (input.manifestJson !== null) {
266
+ try {
267
+ doClasses = JSON.parse(input.manifestJson)?.doClasses;
268
+ }
269
+ catch {
270
+ doClasses = null;
271
+ }
272
+ }
273
+ const derived = await derivedMigrationDigest(input.id, input.manifestJson === null ? null : doClasses, input.migrations);
274
+ if (input.migrations !== null && derived !== input.migrationDigest) {
275
+ throw substratError('validation_failed', `the push's migration digest (${input.migrationDigest}) is not the digest of the migrations it carries ` +
276
+ `(${derived}). The platform derives the digest a promote compares from the migrations and their declared ` +
277
+ 'moves and discards itself, so a push must hash exactly those: upgrade to a CLI release whose push digest ' +
278
+ 'covers its SQL migrations and their declarations (npm i -g @substrat-run/cli), and push again', { reason: MIGRATION_DIGEST_MISMATCH_REASON });
279
+ }
280
+ return derived;
281
+ }
282
+ /** The two reads that find versions whose digest is not derived yet, answered from `vertical_versions_underived`. */
283
+ export const UNDERIVED_IDS_SQL = 'SELECT id FROM vertical_versions WHERE migration_digest_derived IS NULL ORDER BY id LIMIT ?';
284
+ export const UNDERIVED_PROBE_SQL = 'SELECT 1 AS present FROM vertical_versions WHERE migration_digest_derived IS NULL LIMIT 1';
285
+ /** How many versions one digest batch derives at most. Each reads at most the push's 512 KiB of SQL. */
286
+ const DIGEST_BATCH_VERSIONS = 10;
287
+ /**
288
+ * Derive one stored version's migration digest from its stored rows and record it (#2339),
289
+ * unless it is derived already. Returns the digest the version now holds, or undefined when
290
+ * there is no such version.
291
+ *
292
+ * Two statements, not a transaction: the digest is computed between them (Web Crypto is
293
+ * asynchronous), and the write is guarded on the row still being underived, so two derivations
294
+ * racing write once. A version's migrations and `doClasses` never change after it is published,
295
+ * so both derive the same value, and what was read is what is recorded.
296
+ */
297
+ export async function deriveVersionMigrationDigest(db, versionId) {
298
+ const row = db.all(`SELECT migration_digest, migration_digest_derived,
299
+ CASE WHEN manifest_json IS NULL THEN 0 ELSE 1 END AS has_manifest,
300
+ CASE WHEN json_valid(manifest_json) THEN json_extract(manifest_json, '$.doClasses') END AS do_classes
301
+ FROM vertical_versions WHERE id = ?`, versionId)[0];
302
+ if (!row)
303
+ return undefined;
304
+ if (row.migration_digest_derived !== null)
305
+ return row.migration_digest;
306
+ let doClasses = null;
307
+ if (row.has_manifest === 1) {
308
+ try {
309
+ // `json_extract` answers an array as its JSON text, and NULL for a manifest without the key.
310
+ doClasses = row.do_classes === null ? undefined : JSON.parse(row.do_classes);
311
+ }
312
+ catch {
313
+ doClasses = null;
314
+ }
315
+ }
316
+ const digest = await derivedMigrationDigest(versionId, doClasses, versionMigrationsOf(db, versionId)?.migrations ?? null);
317
+ db.run('UPDATE vertical_versions SET migration_digest = ?, migration_digest_derived = 1 WHERE id = ? AND migration_digest_derived IS NULL', digest, versionId);
318
+ return digest;
319
+ }
320
+ /**
321
+ * Re-derive the next versions stored before #2339, whose migration digest is still the one their
322
+ * push sent: at most `limit` of them. Returns how many it derived, and whether any are left.
323
+ * Resumable and idempotent on #1764's terms: each version is marked as it is derived, and a
324
+ * derived one is never selected again. Until the backfill reaches a version, a read of it
325
+ * derives it first (`deriveVersionMigrationDigest`), so no gate compares a pushed digest.
326
+ */
327
+ export async function deriveMigrationDigestsBatch(db, limit = DIGEST_BATCH_VERSIONS) {
328
+ const ids = db.all(UNDERIVED_IDS_SQL, limit);
329
+ for (const { id } of ids)
330
+ await deriveVersionMigrationDigest(db, id);
331
+ return { derived: ids.length, more: versionsAwaitDigest(db) };
332
+ }
333
+ /** Whether any version's migration digest still waits to be derived. One probe of the partial index. */
334
+ export function versionsAwaitDigest(db) {
335
+ return db.all(UNDERIVED_PROBE_SQL).length > 0;
336
+ }
337
+ /**
338
+ * The promote gate's refusal when the migration digest moved and the change was not acknowledged.
339
+ * A side whose digest is unheld (#2339) is named with why it always asks, so a vertical whose
340
+ * pushes leave their SQL out of the manifest is not surprised that every promote does.
341
+ */
342
+ export function migrationChangeRefusal(outgoing, incoming) {
343
+ const unheld = [outgoing, incoming]
344
+ .filter((d) => d.startsWith(UNHELD_MIGRATION_DIGEST_PREFIX))
345
+ .map((d) => d.slice(UNHELD_MIGRATION_DIGEST_PREFIX.length));
346
+ return (`promotion changes migrations (${outgoing} → ${incoming}) — acknowledge it explicitly to promote` +
347
+ (unheld.length === 0
348
+ ? ''
349
+ : `. ${unheld.length === 1 ? `Version ${reviewLine(unheld[0])} holds` : `Versions ${unheld.map((id) => reviewLine(id)).join(' and ')} hold`} ` +
350
+ 'no migrations the platform can compare: the push left them out of the manifest (over the size a manifest ' +
351
+ 'carries, or from before manifests carried them), so a promote to or over it always asks for this acknowledgement'));
186
352
  }
187
353
  //# sourceMappingURL=version-migrations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version-migrations.js","sourceRoot":"","sources":["../src/version-migrations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"version-migrations.js","sourceRoot":"","sources":["../src/version-migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EACL,6BAA6B,EAC7B,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,8BAA8B,EAC9B,qBAAqB,GAGtB,MAAM,yBAAyB,CAAC;AAGjC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;CAmBrC,CAAC;AAUF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,uBAAuB,CAAC,YAA2B,EAAE,IAAuB;IAC1F,IAAI,YAAY,KAAK,IAAI;QAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACrE,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,EAAE,CAAC;QACxG,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;IACD,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,MAAiC,CAAC;IAC3E,MAAM,MAAM,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;IAC1F,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO;QACL,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAClC,UAAU,EAAE,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;KAC7E,CAAC;AACJ,CAAC;AAED,yGAAyG;AACzG,SAAS,gBAAgB,CAAC,CAAoB;IAC5C,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACrH,CAAC;AAED,2GAA2G;AAC3G,MAAM,kBAAkB,GAAG,6BAA6B,CAAC,MAAM,EAAE,CAAC;AAElE;;;;GAIG;AACH,SAAS,cAAc,CAAC,IAAmB;IACzC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC7B,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAClF,OAAO;QACL,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpE,CAAC;AACJ,CAAC;AAED,0GAA0G;AAC1G,MAAM,UAAU,sBAAsB,CACpC,EAAa,EACb,SAAiB,EACjB,UAA+C;IAE/C,EAAE,CAAC,GAAG,CAAC,8DAA8D,EAAE,SAAS,CAAC,CAAC;IAClF,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE;QACxC,EAAE,CAAC,GAAG,CACJ;iCAC2B,EAC3B,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,CACtE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,qFAAqF,CAAC;AACrH,MAAM,CAAC,MAAM,iBAAiB,GAAG,mFAAmF,CAAC;AAErH,0DAA0D;AAC1D,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAEpD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,2BAA2B,CACzC,EAAa,EACb,KAAK,GAAW,cAAc;IAE9B,yFAAyF;IACzF,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAqB,CAAC;IAC/D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC;QACzB,yFAAyF;QACzF,2FAA2F;QAC3F,gFAAgF;QAChF,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CACrB,6FAA6F,EAC7F,EAAE,CACH,CAAC,CAAC,CAAqB,CAAC;QACzB,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,GAAG,oBAAoB;YAAE,MAAM;QAC5D,KAAK,IAAI,IAAI,CAAC;QACd,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,0DAA0D,EAAE,EAAE,CAAC,CAAC,CAAC,CAEzG,CAAC;QACF,MAAM,KAAK,GAAG,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACxD,sBAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,IAAI,CAAC;QAC/C,wEAAwE;QACxE,IAAI,KAAK,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;YAClC,EAAE,CAAC,GAAG,CAAC,qFAAqF,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3G,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,GAAG,CACJ,wGAAwG,EACxG,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAC9B,CAAC;QACJ,CAAC;QACD,KAAK,EAAE,CAAC;IACV,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,kBAAkB,CAAC,EAAa;IAC9C,OAAO,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,EAAa,EACb,SAAiB;IAEjB,yFAAyF;IACzF,oFAAoF;IACpF,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAChB;;2CAEuC,EACvC,SAAS,CACV,CAAC,CAAC,CAEU,CAAC;IACd,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,IAAI,GAAG,CAAC,gBAAgB,KAAK,IAAI,EAAE,CAAC;QAClC,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,uBAAuB,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC;IAC1H,CAAC;IACD,IAAI,GAAG,CAAC,eAAe,KAAK,IAAI;QAAE,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC/F,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,CACjB;4CACwC,EACxC,SAAS,CAC4E,CAAC;IACxF,0FAA0F;IAC1F,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC,eAAe;QAAE,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACtG,MAAM,UAAU,GAAwB,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,kFAAkF;QAClF,oEAAoE;QACpE,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAChD,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACpF,wFAAwF;QACxF,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,SAAqB,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;IACtG,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,2BAA2B,CAAC;AAE5E,kHAAkH;AAClH,SAAS,WAAW,CAAC,GAAY;IAC/B,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,SAAiB,EACjB,SAAkB,EAClB,UAA+C;IAE/C,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACrF,OAAO,iBAAiB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,KAK9C;IACC,IAAI,SAAkB,CAAC;IACvB,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,SAAS,GAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAoC,EAAE,SAAS,CAAC;QAC5F,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAC1C,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAC9C,KAAK,CAAC,UAAU,CACjB,CAAC;IACF,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,eAAe,EAAE,CAAC;QACnE,MAAM,aAAa,CACjB,mBAAmB,EACnB,gCAAgC,KAAK,CAAC,eAAe,mDAAmD;YACtG,IAAI,OAAO,+FAA+F;YAC1G,2GAA2G;YAC3G,+FAA+F,EACjG,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAC7C,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,qHAAqH;AACrH,MAAM,CAAC,MAAM,iBAAiB,GAC5B,6FAA6F,CAAC;AAChG,MAAM,CAAC,MAAM,mBAAmB,GAAG,2FAA2F,CAAC;AAE/H,wGAAwG;AACxG,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,EAAa,EAAE,SAAiB;IACjF,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAChB;;;2CAGuC,EACvC,SAAS,CACV,CAAC,CAAC,CAEU,CAAC;IACd,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,IAAI,GAAG,CAAC,wBAAwB,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC,gBAAgB,CAAC;IACvE,IAAI,SAAS,GAAY,IAAI,CAAC;IAC9B,IAAI,GAAG,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,6FAA6F;YAC7F,SAAS,GAAG,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/E,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,SAAS,EAAE,SAAS,EAAE,mBAAmB,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,UAAU,IAAI,IAAI,CAAC,CAAC;IAC1H,EAAE,CAAC,GAAG,CACJ,mIAAmI,EACnI,MAAM,EAAE,SAAS,CAClB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,EAAa,EACb,KAAK,GAAW,qBAAqB;IAErC,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAqB,CAAC;IACjE,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,GAAG;QAAE,MAAM,4BAA4B,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACrE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,mBAAmB,CAAC,EAAa;IAC/C,OAAO,EAAE,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAgB,EAAE,QAAgB;IACvE,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;SAChC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;SAC3D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,OAAO,CACL,iCAAiC,QAAQ,MAAM,QAAQ,0CAA0C;QACjG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAClB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,UAAU,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG;gBAC7I,2GAA2G;gBAC3G,kHAAkH,CAAC,CACxH,CAAC;AACJ,CAAC"}
@@ -1,37 +1,37 @@
1
1
  import type { SwitchSql } from './system-switch.js';
2
2
  /** Interpolated into both adapters' directory DDL, so `lint:spine-ddl` sees one spelling on each side. */
3
- export declare const VERTICAL_SCOPE_STORES_DDL = "\n CREATE TABLE IF NOT EXISTS vertical_scope_stores (\n vertical_slug TEXT NOT NULL,\n binding TEXT NOT NULL,\n kind TEXT NOT NULL,\n -- The version that declared the binding first.\n first_version_id TEXT NOT NULL,\n PRIMARY KEY (vertical_slug, binding)\n );\n CREATE TABLE IF NOT EXISTS vertical_scope_store_versions (\n version_id TEXT PRIMARY KEY,\n vertical_slug TEXT NOT NULL,\n -- 0: the manifest could not be read, so the version may declare a store nobody can name.\n readable INTEGER NOT NULL\n );\n CREATE INDEX IF NOT EXISTS vertical_scope_store_versions_slug\n ON vertical_scope_store_versions (vertical_slug, readable);\n -- A vertical every version of which is indexed above.\n CREATE TABLE IF NOT EXISTS vertical_scope_store_indexed (\n vertical_slug TEXT PRIMARY KEY\n );\n";
3
+ export declare const VERTICAL_SCOPE_STORES_DDL = "\n CREATE TABLE IF NOT EXISTS vertical_scope_stores (\n vertical_slug TEXT NOT NULL,\n binding TEXT NOT NULL,\n driver TEXT NOT NULL,\n -- The version that declared the binding first.\n first_version_id TEXT NOT NULL,\n PRIMARY KEY (vertical_slug, binding)\n );\n CREATE TABLE IF NOT EXISTS vertical_scope_store_versions (\n version_id TEXT PRIMARY KEY,\n vertical_slug TEXT NOT NULL,\n -- 0: the manifest could not be read, so the version may declare a store nobody can name.\n readable INTEGER NOT NULL\n );\n CREATE INDEX IF NOT EXISTS vertical_scope_store_versions_slug\n ON vertical_scope_store_versions (vertical_slug, readable);\n -- A vertical every version of which is indexed above.\n CREATE TABLE IF NOT EXISTS vertical_scope_store_indexed (\n vertical_slug TEXT PRIMARY KEY\n );\n";
4
4
  /** One declared binding. */
5
5
  export interface VerticalScopeStore {
6
6
  readonly binding: string;
7
- readonly kind: string;
7
+ readonly driver: string;
8
8
  }
9
9
  /**
10
10
  * Index a version `publishVersion` is inserting, in the insert's transaction, after its row. The
11
- * vertical's older versions are indexed first when it is not marked yet, so a re-kind is judged
11
+ * vertical's older versions are indexed first when it is not marked yet, so a driver change is judged
12
12
  * against every version, not only those a read reached. Refuses (`conflict`) a binding the vertical
13
- * already declared as another kind, or one declared twice, and then nothing is written.
13
+ * already declared as another driver, or one declared twice, and then nothing is written.
14
14
  */
15
15
  export declare function indexVersionScopeStores(db: SwitchSql, verticalSlug: string, versionId: string, manifestJson: string | null): void;
16
16
  /**
17
17
  * Every binding any version of the vertical declared, in binding order. An unmarked vertical is
18
18
  * indexed first (the caller runs this in one transaction). Refuses (`unavailable`) when a version's
19
- * manifest cannot be read, or when versions stored before the record re-kinded a binding: the
19
+ * manifest cannot be read, or when versions stored before the record moved a binding to another driver: the
20
20
  * lifecycle cannot name every store the vertical may hold.
21
21
  */
22
22
  export declare function verticalScopeStoresOf(db: SwitchSql, verticalSlug: string): VerticalScopeStore[];
23
23
  /**
24
- * Every vertical whose any version declared a binding of `kind`, with those bindings (#2300): the
25
- * store scripts a release rollout of the kind reaches, including a vertical whose serving version
24
+ * Every vertical whose any version declared a binding of `driver`, with those bindings (#2300): the
25
+ * store scripts a release rollout of the driver reaches, including a vertical whose serving version
26
26
  * dropped the store while a pinned or preview scope still runs one that declares it. Every vertical
27
27
  * not indexed yet is indexed first (the caller runs this in one transaction).
28
28
  *
29
29
  * `unreadable` names the verticals that cannot say: a version whose manifest cannot be read, or
30
- * versions stored before the record that re-kinded a binding. Any of them may declare the kind, so
30
+ * versions stored before the record that moved a binding to another driver. Any of them may declare the driver, so
31
31
  * a caller that must reach every script (a rollout) refuses while the list is not empty, rather
32
32
  * than leave a script on another release without saying so.
33
33
  */
34
- export declare function kindDeclarationsOf(db: SwitchSql, kind: string): {
34
+ export declare function driverDeclarationsOf(db: SwitchSql, driver: string): {
35
35
  verticals: {
36
36
  vertical: string;
37
37
  stores: VerticalScopeStore[];
@@ -1 +1 @@
1
- {"version":3,"file":"vertical-scope-stores.d.ts","sourceRoot":"","sources":["../src/vertical-scope-stores.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,0GAA0G;AAC1G,eAAO,MAAM,yBAAyB,u2BAqBrC,CAAC;AAEF,4BAA4B;AAC5B,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAiFD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,SAAS,EACb,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GAAG,IAAI,GAC1B,IAAI,CAGN;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAa/F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,MAAM,GACX;IAAE,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,kBAAkB,EAAE,CAAA;KAAE,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CA6B3F;AAED,uGAAuG;AACvG,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAInF"}
1
+ {"version":3,"file":"vertical-scope-stores.d.ts","sourceRoot":"","sources":["../src/vertical-scope-stores.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,0GAA0G;AAC1G,eAAO,MAAM,yBAAyB,u2BAqBrC,CAAC;AAEF,4BAA4B;AAC5B,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAiFD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,SAAS,EACb,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GAAG,IAAI,GAC1B,IAAI,CAGN;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAa/F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,GACb;IAAE,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,kBAAkB,EAAE,CAAA;KAAE,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CA6B3F;AAED,uGAAuG;AACvG,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAInF"}
@@ -7,8 +7,8 @@
7
7
  * erasure, the meter) reaches the union of every binding any version declared, which this keeps as
8
8
  * a directory table, read by its keys, instead of reading every version's manifest per call.
9
9
  *
10
- * A binding keeps its kind for the life of its vertical. The kind names the store script, so a
11
- * re-kinded binding would point the same name at another script's object, and the union would have
10
+ * A binding keeps its driver for the life of its vertical. The driver names the store script, so a
11
+ * binding moved to another driver would point the same name at another script's object, and the union would have
12
12
  * to hold both. `publishVersion` refuses it instead (`conflict`), in the transaction that inserts
13
13
  * the version: one door, where the push can still be told to pick a new binding name. A manifest
14
14
  * that declares one binding twice is refused there too.
@@ -19,7 +19,7 @@
19
19
  * directory restore from an older dump, leaves its vertical unmarked. Whichever comes first, a read
20
20
  * or a publish, then indexes all of the vertical's versions, oldest first, in its own transaction:
21
21
  * nothing runs on a constructor's path, a restore needs no backfill of its own, and a publish judges
22
- * a re-kind against every older version, not only those indexed so far. A version whose manifest
22
+ * a driver change against every older version, not only those indexed so far. A version whose manifest
23
23
  * cannot be read is marked unreadable, and a read of its vertical refuses: it may declare a store
24
24
  * nobody can name.
25
25
  *
@@ -32,7 +32,7 @@ export const VERTICAL_SCOPE_STORES_DDL = `
32
32
  CREATE TABLE IF NOT EXISTS vertical_scope_stores (
33
33
  vertical_slug TEXT NOT NULL,
34
34
  binding TEXT NOT NULL,
35
- kind TEXT NOT NULL,
35
+ driver TEXT NOT NULL,
36
36
  -- The version that declared the binding first.
37
37
  first_version_id TEXT NOT NULL,
38
38
  PRIMARY KEY (vertical_slug, binding)
@@ -52,9 +52,9 @@ export const VERTICAL_SCOPE_STORES_DDL = `
52
52
  `;
53
53
  /**
54
54
  * The bindings a stored manifest declares, or null when the manifest cannot be read. No manifest
55
- * declares none. Read for its shape only, `{ binding, kind }` strings as the router reads them:
56
- * whether a kind is one the platform runs is the push's question, and a record that refused to
57
- * hold a kind it did not know could not refuse that kind's re-kind either.
55
+ * declares none. Read for its shape only, `{ binding, driver }` strings as the router reads them:
56
+ * whether a driver is one the platform runs is the push's question, and a record that refused to
57
+ * hold a driver it did not know could not refuse a move away from that driver either.
58
58
  */
59
59
  function declaredIn(manifestJson) {
60
60
  if (manifestJson === null)
@@ -75,10 +75,10 @@ function declaredIn(manifestJson) {
75
75
  return null;
76
76
  const declared = [];
77
77
  for (const store of stores) {
78
- const { binding, kind } = (store ?? {});
79
- if (typeof binding !== 'string' || typeof kind !== 'string')
78
+ const { binding, driver } = (store ?? {});
79
+ if (typeof binding !== 'string' || typeof driver !== 'string')
80
80
  return null;
81
- declared.push({ binding, kind });
81
+ declared.push({ binding, driver });
82
82
  }
83
83
  return declared;
84
84
  }
@@ -90,22 +90,22 @@ function indexOne(db, verticalSlug, versionId, manifestJson) {
90
90
  // Every binding is judged before any is written, so a refusal writes nothing.
91
91
  const fresh = [];
92
92
  const seen = new Set();
93
- for (const { binding, kind } of declared ?? []) {
93
+ for (const { binding, driver } of declared ?? []) {
94
94
  if (seen.has(binding)) {
95
95
  throw substratError('conflict', `a version of '${verticalSlug}' declares scope store '${binding}' twice`);
96
96
  }
97
97
  seen.add(binding);
98
- const [held] = db.all('SELECT kind FROM vertical_scope_stores WHERE vertical_slug = ? AND binding = ?', verticalSlug, binding);
99
- if (held && held.kind !== kind) {
100
- throw substratError('conflict', `scope store '${binding}' of '${verticalSlug}' is a '${held.kind}', and a binding keeps its kind for ` +
101
- `the life of its vertical: objects of the old kind may still hold data under that name. ` +
102
- `Declare the '${kind}' store under a new binding name`);
98
+ const [held] = db.all('SELECT driver FROM vertical_scope_stores WHERE vertical_slug = ? AND binding = ?', verticalSlug, binding);
99
+ if (held && held.driver !== driver) {
100
+ throw substratError('conflict', `scope store '${binding}' of '${verticalSlug}' is a '${held.driver}', and a binding keeps its driver for ` +
101
+ `the life of its vertical: objects of the old driver may still hold data under that name. ` +
102
+ `Declare the '${driver}' store under a new binding name`);
103
103
  }
104
104
  if (!held)
105
- fresh.push({ binding, kind });
105
+ fresh.push({ binding, driver });
106
106
  }
107
- for (const { binding, kind } of fresh) {
108
- db.run('INSERT INTO vertical_scope_stores (vertical_slug, binding, kind, first_version_id) VALUES (?, ?, ?, ?)', verticalSlug, binding, kind, versionId);
107
+ for (const { binding, driver } of fresh) {
108
+ db.run('INSERT INTO vertical_scope_stores (vertical_slug, binding, driver, first_version_id) VALUES (?, ?, ?, ?)', verticalSlug, binding, driver, versionId);
109
109
  }
110
110
  db.run('INSERT INTO vertical_scope_store_versions (version_id, vertical_slug, readable) VALUES (?, ?, ?)', versionId, verticalSlug, declared === null ? 0 : 1);
111
111
  }
@@ -123,9 +123,9 @@ function indexVertical(db, verticalSlug) {
123
123
  }
124
124
  /**
125
125
  * Index a version `publishVersion` is inserting, in the insert's transaction, after its row. The
126
- * vertical's older versions are indexed first when it is not marked yet, so a re-kind is judged
126
+ * vertical's older versions are indexed first when it is not marked yet, so a driver change is judged
127
127
  * against every version, not only those a read reached. Refuses (`conflict`) a binding the vertical
128
- * already declared as another kind, or one declared twice, and then nothing is written.
128
+ * already declared as another driver, or one declared twice, and then nothing is written.
129
129
  */
130
130
  export function indexVersionScopeStores(db, verticalSlug, versionId, manifestJson) {
131
131
  indexVertical(db, verticalSlug);
@@ -134,7 +134,7 @@ export function indexVersionScopeStores(db, verticalSlug, versionId, manifestJso
134
134
  /**
135
135
  * Every binding any version of the vertical declared, in binding order. An unmarked vertical is
136
136
  * indexed first (the caller runs this in one transaction). Refuses (`unavailable`) when a version's
137
- * manifest cannot be read, or when versions stored before the record re-kinded a binding: the
137
+ * manifest cannot be read, or when versions stored before the record moved a binding to another driver: the
138
138
  * lifecycle cannot name every store the vertical may hold.
139
139
  */
140
140
  export function verticalScopeStoresOf(db, verticalSlug) {
@@ -147,20 +147,20 @@ export function verticalScopeStoresOf(db, verticalSlug) {
147
147
  if (db.all('SELECT 1 AS present FROM vertical_scope_store_versions WHERE vertical_slug = ? AND readable = 0 LIMIT 1', verticalSlug).length > 0) {
148
148
  throw substratError('unavailable', `a version of '${verticalSlug}' has a manifest that cannot be read, so its scope stores cannot be named`);
149
149
  }
150
- return db.all('SELECT binding, kind FROM vertical_scope_stores WHERE vertical_slug = ? ORDER BY binding', verticalSlug).map(({ binding, kind }) => ({ binding, kind }));
150
+ return db.all('SELECT binding, driver FROM vertical_scope_stores WHERE vertical_slug = ? ORDER BY binding', verticalSlug).map(({ binding, driver }) => ({ binding, driver }));
151
151
  }
152
152
  /**
153
- * Every vertical whose any version declared a binding of `kind`, with those bindings (#2300): the
154
- * store scripts a release rollout of the kind reaches, including a vertical whose serving version
153
+ * Every vertical whose any version declared a binding of `driver`, with those bindings (#2300): the
154
+ * store scripts a release rollout of the driver reaches, including a vertical whose serving version
155
155
  * dropped the store while a pinned or preview scope still runs one that declares it. Every vertical
156
156
  * not indexed yet is indexed first (the caller runs this in one transaction).
157
157
  *
158
158
  * `unreadable` names the verticals that cannot say: a version whose manifest cannot be read, or
159
- * versions stored before the record that re-kinded a binding. Any of them may declare the kind, so
159
+ * versions stored before the record that moved a binding to another driver. Any of them may declare the driver, so
160
160
  * a caller that must reach every script (a rollout) refuses while the list is not empty, rather
161
161
  * than leave a script on another release without saying so.
162
162
  */
163
- export function kindDeclarationsOf(db, kind) {
163
+ export function driverDeclarationsOf(db, driver) {
164
164
  const slugs = db.all('SELECT DISTINCT vertical_slug FROM vertical_versions ORDER BY vertical_slug');
165
165
  const unreadable = new Set();
166
166
  for (const { vertical_slug } of slugs) {
@@ -174,11 +174,11 @@ export function kindDeclarationsOf(db, kind) {
174
174
  for (const { vertical_slug } of db.all('SELECT DISTINCT vertical_slug FROM vertical_scope_store_versions WHERE readable = 0')) {
175
175
  unreadable.add(vertical_slug);
176
176
  }
177
- const rows = db.all('SELECT vertical_slug, binding FROM vertical_scope_stores WHERE kind = ? ORDER BY vertical_slug, binding', kind);
177
+ const rows = db.all('SELECT vertical_slug, binding FROM vertical_scope_stores WHERE driver = ? ORDER BY vertical_slug, binding', driver);
178
178
  const byVertical = new Map();
179
179
  for (const { vertical_slug, binding } of rows) {
180
180
  const stores = byVertical.get(vertical_slug) ?? [];
181
- stores.push({ binding, kind });
181
+ stores.push({ binding, driver });
182
182
  byVertical.set(vertical_slug, stores);
183
183
  }
184
184
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"vertical-scope-stores.js","sourceRoot":"","sources":["../src/vertical-scope-stores.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vertical-scope-stores.js","sourceRoot":"","sources":["../src/vertical-scope-stores.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@substrat-run/kernel",
3
- "version": "0.148.0",
3
+ "version": "0.150.0",
4
4
  "description": "Substrat kernel contracts and services — pure TypeScript, no platform imports (D-14)",
5
5
  "license": "AGPL-3.0-only",
6
6
  "repository": {
@@ -34,7 +34,7 @@
34
34
  "dist"
35
35
  ],
36
36
  "dependencies": {
37
- "@substrat-run/contracts": "^0.148.0"
37
+ "@substrat-run/contracts": "^0.150.0"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "^22.20.5",