@proteinjs/db-driver-spanner 1.20.2 → 1.21.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,33 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [1.21.0](https://github.com/proteinjs/db/compare/@proteinjs/db-driver-spanner@1.20.3...@proteinjs/db-driver-spanner@1.21.0) (2026-08-17)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **db-driver-spanner:** root test.js/test.d.ts shims for the ./test subpath — paths-mapped consumers resolve built dist, not sources ([d51556f](https://github.com/proteinjs/db/commit/d51556f07affcdbd80d80d19ed41d1257cc9a0cc))
12
+
13
+
14
+ ### Features
15
+
16
+ * **db:** retired-migration flag — the deploy series stamps source-less ledger rows and never auto-runs retired rows ([f468125](https://github.com/proteinjs/db/commit/f4681257439e2e7e031f9d7f4d90b7463cc46456))
17
+
18
+
19
+
20
+
21
+
22
+ ## [1.20.3](https://github.com/proteinjs/db/compare/@proteinjs/db-driver-spanner@1.20.2...@proteinjs/db-driver-spanner@1.20.3) (2026-08-15)
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * reconcile re-read rides out brief INFORMATION_SCHEMA propagation (bounded retry) ([0f4739b](https://github.com/proteinjs/db/commit/0f4739bb2f233d9dff462cf7ec74777f53ea0de6))
28
+
29
+
30
+
31
+
32
+
6
33
  ## [1.20.2](https://github.com/proteinjs/db/compare/@proteinjs/db-driver-spanner@1.20.1...@proteinjs/db-driver-spanner@1.20.2) (2026-08-15)
7
34
 
8
35
 
@@ -284,8 +284,59 @@ describe('Concurrent schema reconcile', function () {
284
284
  }
285
285
  });
286
286
  }); }, 60000);
287
+ test('PROPAGATION LAG: a briefly-stale re-read retries and succeeds instead of false-negative re-throwing', function () { return __awaiter(void 0, void 0, void 0, function () {
288
+ var duplicateError, error_1;
289
+ return __generator(this, function (_a) {
290
+ switch (_a.label) {
291
+ case 0: return [4 /*yield*/, tableManager.loadTable(baseTable())];
292
+ case 1:
293
+ _a.sent();
294
+ _a.label = 2;
295
+ case 2:
296
+ _a.trys.push([2, 4, , 5]);
297
+ return [4 /*yield*/, spannerDriver.runUpdateSchema('ALTER TABLE `db_test_reconcile` ADD COLUMN `name` STRING(255)')];
298
+ case 3:
299
+ _a.sent();
300
+ return [3 /*break*/, 5];
301
+ case 4:
302
+ error_1 = _a.sent();
303
+ duplicateError = error_1;
304
+ return [3 /*break*/, 5];
305
+ case 5:
306
+ expect(duplicateError).toBeDefined();
307
+ expect(classifier(tableManager).isAlreadyExistsError(duplicateError)).toBe(true);
308
+ // Simulate brief INFORMATION_SCHEMA propagation lag on this connection: the FIRST re-read
309
+ // misses the table; the next sees the true schema. ALREADY_EXISTS guarantees the conflicting
310
+ // DDL committed — the object EXISTS — so the reconcile must ride out the stale read (bounded
311
+ // retry), not false-negative re-throw: a re-throw here IS the boot crash this fix closes.
312
+ jest.spyOn(tableManager.schemaMetadata, 'tableExists').mockImplementationOnce(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
313
+ return [2 /*return*/, false];
314
+ }); }); });
315
+ return [4 /*yield*/, expect(internals(tableManager).reconcileConcurrentSchemaChange([baseTable()], duplicateError)).resolves.toBeUndefined()];
316
+ case 6:
317
+ _a.sent();
318
+ return [2 /*return*/];
319
+ }
320
+ });
321
+ }); }, 60000);
322
+ test('BOUNDED RETRY: a definition that never becomes visible exhausts the retries and re-throws', function () { return __awaiter(void 0, void 0, void 0, function () {
323
+ var ghostDuplicate;
324
+ return __generator(this, function (_a) {
325
+ switch (_a.label) {
326
+ case 0:
327
+ ghostDuplicate = {
328
+ code: 9,
329
+ message: '9 FAILED_PRECONDITION: Duplicate name in schema: db_test_reconcile.',
330
+ };
331
+ return [4 /*yield*/, expect(internals(tableManager).reconcileConcurrentSchemaChange([baseTable()], ghostDuplicate)).rejects.toBe(ghostDuplicate)];
332
+ case 1:
333
+ _a.sent();
334
+ return [2 /*return*/];
335
+ }
336
+ });
337
+ }); }, 60000);
287
338
  test('GENUINE CONFLICT: an already-exists error whose live definition differs from intent STILL throws', function () { return __awaiter(void 0, void 0, void 0, function () {
288
- var duplicateError, error_1, warnSpy, conflictWarn;
339
+ var duplicateError, error_2, warnSpy, conflictWarn;
289
340
  return __generator(this, function (_a) {
290
341
  switch (_a.label) {
291
342
  case 0:
@@ -302,8 +353,8 @@ describe('Concurrent schema reconcile', function () {
302
353
  _a.sent();
303
354
  return [3 /*break*/, 5];
304
355
  case 4:
305
- error_1 = _a.sent();
306
- duplicateError = error_1;
356
+ error_2 = _a.sent();
357
+ duplicateError = error_2;
307
358
  return [3 /*break*/, 5];
308
359
  case 5:
309
360
  expect(duplicateError).toBeDefined();
@@ -323,7 +374,7 @@ describe('Concurrent schema reconcile', function () {
323
374
  });
324
375
  }); }, 60000);
325
376
  test('UNRELATED ERROR CLASS: a non-already-exists DDL error propagates unchanged', function () { return __awaiter(void 0, void 0, void 0, function () {
326
- var unrelatedError, error_2;
377
+ var unrelatedError, error_3;
327
378
  return __generator(this, function (_a) {
328
379
  switch (_a.label) {
329
380
  case 0:
@@ -340,8 +391,8 @@ describe('Concurrent schema reconcile', function () {
340
391
  _a.sent();
341
392
  return [3 /*break*/, 5];
342
393
  case 4:
343
- error_2 = _a.sent();
344
- unrelatedError = error_2;
394
+ error_3 = _a.sent();
395
+ unrelatedError = error_3;
345
396
  return [3 /*break*/, 5];
346
397
  case 5:
347
398
  expect(unrelatedError).toBeDefined();
@@ -1 +1 @@
1
- {"version":3,"file":"ConcurrentSchemaReconcile.test.js","sourceRoot":"","sources":["../../test/ConcurrentSchemaReconcile.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConcurrentSchemaReconcile.test.js","sourceRoot":"","sources":["../../test/ConcurrentSchemaReconcile.test.ts"],"names":[],"mappings":"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"}
@@ -71,7 +71,9 @@ require("../generated/test/index");
71
71
  * are reported so the Job can fail the deploy; a later series retries the failed row and
72
72
  * finishes the tail.
73
73
  * - HISTORY HONESTY: ledger rows whose source loader is gone (the table keeps history) are
74
- * skipped and reported as unresolved, never crash the series.
74
+ * skipped and reported as unresolved, never crash the series — and STAMPED `retired: true`.
75
+ * - RETIREMENT: a retired row is never auto-run, even when its source class ships again in a
76
+ * later build; only un-retiring it (the Migrations-page toggle) re-arms the series.
75
77
  *
76
78
  * All series runs execute SESSIONLESS (no test user registered) — the deploy Job has no user
77
79
  * session, and UserAuth is fail-closed: these tests passing IS the pin that the series records
@@ -316,15 +318,15 @@ describe('MigrationRunner.runPendingMigrations (spanner)', function () {
316
318
  }
317
319
  });
318
320
  }); }, 60000);
319
- test('ledger rows without a source record are history — skipped, reported, untouched', function () { return __awaiter(void 0, void 0, void 0, function () {
320
- var live, summary, _a;
321
- return __generator(this, function (_b) {
322
- switch (_b.label) {
321
+ test('ledger rows without a source record are stamped retired — skipped, reported, never run', function () { return __awaiter(void 0, void 0, void 0, function () {
322
+ var live, summary, ghostRow;
323
+ return __generator(this, function (_a) {
324
+ switch (_a.label) {
323
325
  case 0:
324
326
  live = plantMigration('live-beside-history');
325
327
  return [4 /*yield*/, insertLedgerRow(live, 1)];
326
328
  case 1:
327
- _b.sent();
329
+ _a.sent();
328
330
  // A row whose loader was deleted after it ran in some past release
329
331
  // (doNotDeleteSourceRecordsFromDb keeps it in the ledger forever).
330
332
  return [4 /*yield*/, (0, db_1.getDbAsSystem)().insert(migrationTable, {
@@ -335,17 +337,93 @@ describe('MigrationRunner.runPendingMigrations (spanner)', function () {
335
337
  case 2:
336
338
  // A row whose loader was deleted after it ran in some past release
337
339
  // (doNotDeleteSourceRecordsFromDb keeps it in the ledger forever).
338
- _b.sent();
340
+ _a.sent();
339
341
  return [4 /*yield*/, new db_1.MigrationRunner().runPendingMigrations()];
340
342
  case 3:
341
- summary = _b.sent();
343
+ summary = _a.sent();
342
344
  expect(summary.unresolved).toEqual(['ghost-history']);
345
+ expect(summary.retired).toEqual([]);
343
346
  expect(summary.applied).toEqual(['live-beside-history']);
344
347
  expect(summary.failed).toBeUndefined();
345
- _a = expect;
346
348
  return [4 /*yield*/, (0, db_1.getDbAsSystem)().get(migrationTable, { id: 'ghost-history' })];
347
349
  case 4:
348
- _a.apply(void 0, [(_b.sent()).status]).toBe('proposed');
350
+ ghostRow = _a.sent();
351
+ expect(ghostRow.status).toBe('proposed');
352
+ // The stamp: an unresolved row is retired on sight, so a returning source class can never
353
+ // silently re-arm it (the pin for that refusal is the next test).
354
+ expect(ghostRow.retired).toBe(true);
355
+ return [2 /*return*/];
356
+ }
357
+ });
358
+ }); }, 60000);
359
+ test('a stamped row is refused even when its source class ships again — the flag outlives the gap', function () { return __awaiter(void 0, void 0, void 0, function () {
360
+ var stampingRun, laterRun, row;
361
+ return __generator(this, function (_a) {
362
+ switch (_a.label) {
363
+ case 0:
364
+ // Gate run over a build where the row's loader no longer ships: the run stamps it retired.
365
+ return [4 /*yield*/, (0, db_1.getDbAsSystem)().insert(migrationTable, {
366
+ id: 'returning-loader',
367
+ description: 'loader missing from this build',
368
+ created: (0, moment_1.default)(base),
369
+ })];
370
+ case 1:
371
+ // Gate run over a build where the row's loader no longer ships: the run stamps it retired.
372
+ _a.sent();
373
+ return [4 /*yield*/, new db_1.MigrationRunner().runPendingMigrations()];
374
+ case 2:
375
+ stampingRun = _a.sent();
376
+ expect(stampingRun.unresolved).toEqual(['returning-loader']);
377
+ // The source class RETURNS in a later build. Its id resolving again is not consent to
378
+ // auto-run: the row stays excluded until a human un-retires it on the Migrations page.
379
+ plantMigration('returning-loader');
380
+ return [4 /*yield*/, new db_1.MigrationRunner().runPendingMigrations()];
381
+ case 3:
382
+ laterRun = _a.sent();
383
+ expect(runLog).toEqual([]);
384
+ expect(laterRun.retired).toEqual(['returning-loader']);
385
+ expect(laterRun.unresolved).toEqual([]);
386
+ expect(laterRun.applied).toEqual([]);
387
+ return [4 /*yield*/, (0, db_1.getDbAsSystem)().get(migrationTable, { id: 'returning-loader' })];
388
+ case 4:
389
+ row = _a.sent();
390
+ expect(row.retired).toBe(true);
391
+ expect(row.status).toBe('proposed');
392
+ return [2 /*return*/];
393
+ }
394
+ });
395
+ }); }, 60000);
396
+ test('un-retiring a retired row re-arms the series — it runs to success', function () { return __awaiter(void 0, void 0, void 0, function () {
397
+ var migration, refusedRun, rearmedRun, row;
398
+ return __generator(this, function (_a) {
399
+ switch (_a.label) {
400
+ case 0:
401
+ migration = plantMigration('unretired-comeback');
402
+ return [4 /*yield*/, (0, db_1.getDbAsSystem)().insert(migrationTable, __assign(__assign({}, migration), { retired: true, created: (0, moment_1.default)(base) }))];
403
+ case 1:
404
+ _a.sent();
405
+ return [4 /*yield*/, new db_1.MigrationRunner().runPendingMigrations()];
406
+ case 2:
407
+ refusedRun = _a.sent();
408
+ expect(runLog).toEqual([]);
409
+ expect(refusedRun.retired).toEqual(['unretired-comeback']);
410
+ // The Migrations-page Un-retire button issues exactly this write.
411
+ return [4 /*yield*/, (0, db_1.getDbAsSystem)().update(migrationTable, { id: 'unretired-comeback', retired: false })];
412
+ case 3:
413
+ // The Migrations-page Un-retire button issues exactly this write.
414
+ _a.sent();
415
+ return [4 /*yield*/, new db_1.MigrationRunner().runPendingMigrations()];
416
+ case 4:
417
+ rearmedRun = _a.sent();
418
+ expect(runLog).toEqual(['unretired-comeback']);
419
+ expect(rearmedRun.applied).toEqual(['unretired-comeback']);
420
+ expect(rearmedRun.retired).toEqual([]);
421
+ return [4 /*yield*/, (0, db_1.getDbAsSystem)().get(migrationTable, { id: 'unretired-comeback' })];
422
+ case 5:
423
+ row = _a.sent();
424
+ expect(row.status).toBe('success');
425
+ expect(row.output).toBe('unretired-comeback output');
426
+ expect(row.retired).toBe(false);
349
427
  return [2 /*return*/];
350
428
  }
351
429
  });
@@ -1 +1 @@
1
- {"version":3,"file":"RunPendingMigrations.test.js","sourceRoot":"","sources":["../../test/RunPendingMigrations.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RunPendingMigrations.test.js","sourceRoot":"","sources":["../../test/RunPendingMigrations.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kEAA6D;AAC7D,oCAAmH;AACnH,2CAAqE;AACrE,kDAA4B;AAC5B,4DAA2D;AAC3D,gFAA+E;AAC/E,mCAAiC;AAEjC;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,IAAM,aAAa,GAAG,IAAI,iCAAa,CAAC;IACtC,SAAS,EAAE,gBAAgB;IAC3B,YAAY,EAAE,gBAAgB;IAC9B,YAAY,EAAE,MAAM;CACrB,CAAC,CAAC;AAEH,QAAQ,CAAC,gDAAgD,EAAE;IACzD,IAAM,cAAc,GAAG,IAAI,mBAAc,EAAsB,CAAC;IAChE,IAAM,SAAS,GAAG,IAAA,mCAAgB,EAAC,aAAa,CAAC,CAAC;IAClD,IAAM,gBAAgB,GAAG,IAAI,qBAAgB,EAAE,CAAC;IAChD,IAAM,IAAI,GAAG,IAAA,gBAAM,EAAC,sBAAsB,CAAC,CAAC;IAC5C,IAAI,MAAM,GAAa,EAAE,CAAC;IAE1B,uFAAuF;IACvF,IAAM,cAAc,GAAG,UAAC,EAAU,EAAE,SAAkC;QAAlC,0BAAA,EAAA,cAAkC;QACpE,IAAM,SAAS,GAAG,WAChB,EAAE,IAAA,EACF,WAAW,EAAE,wCAAiC,EAAE,CAAE,EAClD,GAAG,EAAE;;oBACH,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAChB,sBAAO,UAAG,EAAE,YAAS,EAAC;;iBACvB,IACE,SAAS,CACW,CAAC;QAC1B,gBAAgB,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAClE,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,2FAA2F;IAC3F,IAAM,eAAe,GAAG,UAAO,SAAoB,EAAE,oBAA4B;;;wBAC/E,qBAAM,IAAA,kBAAa,GAAE,CAAC,MAAM,CAAC,cAAc,EAAE,sBACxC,SAAS,KACZ,OAAO,EAAE,IAAA,gBAAM,EAAC,IAAI,CAAC,CAAC,GAAG,CAAC,oBAAoB,EAAE,SAAS,CAAC,GACpD,CAAC,EAAA;;oBAHT,SAGS,CAAC;;;;SACX,CAAC;IAEF,SAAS,CAAC;;;wBACR,qBAAM,uDAA0B,CAAC,iBAAiB,CAAC;wBACjD,SAAS,EAAE,gBAAgB;wBAC3B,YAAY,EAAE,gBAAgB;wBAC9B,YAAY,EAAE,MAAM;qBACrB,CAAC,EAAA;;oBAJF,SAIE,CAAC;;;;SACJ,EAAE,KAAK,CAAC,CAAC;IAEV,UAAU,CAAC;;;;oBACT,4FAA4F;oBAC5F,6FAA6F;oBAC7F,0EAA0E;oBAC1E,MAAM,GAAG,EAAE,CAAC;oBACZ,qBAAM,SAAS,CAAC,cAAc,CAAC,EAAA;;oBAA/B,SAA+B,CAAC;oBAChC,qBAAM,aAAa,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,EAAA;;oBAA/D,SAA+D,CAAC;;;;SACjE,EAAE,KAAK,CAAC,CAAC;IAEV,QAAQ,CAAC;;;wBACP,qBAAM,SAAS,CAAC,cAAc,CAAC,EAAA;;oBAA/B,SAA+B,CAAC;oBAChC,uDAA0B,CAAC,OAAO,EAAE,CAAC;;;;SACtC,EAAE,KAAK,CAAC,CAAC;IAEV,IAAI,CAAC,gFAAgF,EAAE;;;;;oBAC/E,MAAM,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAC;oBAC3C,MAAM,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAC;oBAC3C,MAAM,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAC;oBAC3C,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;oBAC/B,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;oBACrC,wFAAwF;oBACxF,qBAAM,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,EAAA;;oBADhC,wFAAwF;oBACxF,SAAgC,CAAC;oBACjC,qBAAM,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,EAAA;;oBAA9B,SAA8B,CAAC;oBAC/B,qBAAM,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,EAAA;;oBAAhC,SAAgC,CAAC;oBACjC,qBAAM,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,EAAA;;oBAA9B,SAA8B,CAAC;oBAC/B,qBAAM,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,EAAA;;oBAAhC,SAAgC,CAAC;oBAEjB,qBAAM,IAAI,oBAAe,EAAE,CAAC,oBAAoB,EAAE,EAAA;;oBAA5D,OAAO,GAAG,SAAkD;oBAElE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;oBACpG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBACxC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;oBACvC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;0BACT,EAAf,KAAA,OAAO,CAAC,OAAO;;;yBAAf,CAAA,cAAe,CAAA;oBAArB,EAAE;oBACC,qBAAM,IAAA,kBAAa,GAAE,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,EAAE,IAAA,EAAE,CAAC,EAAA;;oBAAvD,GAAG,GAAG,SAAiD;oBAC7D,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACnC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAG,EAAE,YAAS,CAAC,CAAC;;;oBAHzB,IAAe,CAAA;;;;;SAKjC,EAAE,KAAK,CAAC,CAAC;IAEV,IAAI,CAAC,mFAAmF,EAAE;;;;;oBAElF,MAAM,GAAG,cAAc,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAwB,CAAC,CAAC;oBACnF,SAAS,GAAG,cAAc,CAAC,wBAAwB,CAAC,CAAC;oBAC3D,qBAAM,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,EAAA;;oBAAhC,SAAgC,CAAC;oBACjC,qBAAM,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC,EAAA;;oBAAnC,SAAmC,CAAC;oBAEpB,qBAAM,IAAI,oBAAe,EAAE,CAAC,oBAAoB,EAAE,EAAA;;oBAA5D,OAAO,GAAG,SAAkD;oBAElE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;oBACnD,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;oBAC3D,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;oBAC1C,qBAAM,IAAA,kBAAa,GAAE,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,CAAC,EAAA;;oBAAhF,SAAS,GAAG,SAAoE;oBACtF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAE1C,4FAA4F;oBAC5F,IAAA,uBAAgB,GAAE,CAAC;;;;oBAEjB,qBAAM,IAAI,oBAAe,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAA;;oBAA3D,SAA2D,CAAC;;;oBAE5D,IAAA,oBAAa,GAAE,CAAC;;;oBAElB,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAAC,CAAC;oBACjD,qBAAM,IAAA,kBAAa,GAAE,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,CAAC,EAAA;;oBAAnF,YAAY,GAAG,SAAoE;oBACzF,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;;;SAC7C,EAAE,KAAK,CAAC,CAAC;IAEV,IAAI,CAAC,sFAAsF,EAAE;;;;;oBACvF,MAAM,GAAG,KAAK,CAAC;oBACb,CAAC,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;oBAChC,CAAC,GAAG,cAAc,CAAC,aAAa,EAAE;wBACtC,GAAG,EAAE;;gCACH,IAAI,CAAC,MAAM,EAAE;oCACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;iCACtC;gCACD,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gCAC3B,sBAAO,gBAAgB,EAAC;;6BACzB;qBACoB,CAAC,CAAC;oBACnB,CAAC,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;oBACzC,qBAAM,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EAAA;;oBAA3B,SAA2B,CAAC;oBAC5B,qBAAM,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EAAA;;oBAA3B,SAA2B,CAAC;oBAC5B,qBAAM,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EAAA;;oBAA3B,SAA2B,CAAC;oBAER,qBAAM,IAAI,oBAAe,EAAE,CAAC,oBAAoB,EAAE,EAAA;;oBAAhE,WAAW,GAAG,SAAkD;oBAEtE,wEAAwE;oBACxE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;oBACtC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;oBACnD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;wBACjC,EAAE,EAAE,aAAa;wBACjB,WAAW,EAAE,2CAA2C;wBACxD,cAAc,EAAE,mBAAmB;qBACpC,CAAC,CAAC;oBACH,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;oBAC3D,KAAA,MAAM,CAAA;oBAAE,qBAAM,IAAA,kBAAa,GAAE,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAA;;oBAAxE,kBAAO,CAAC,SAAgE,CAAC,CAAC,MAAM,EAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAClG,KAAA,MAAM,CAAA;oBAAE,qBAAM,IAAA,kBAAa,GAAE,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAA;;oBAAzE,kBAAO,CAAC,SAAiE,CAAC,CAAC,MAAM,EAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAEpG,0FAA0F;oBAC1F,MAAM,GAAG,IAAI,CAAC;oBACO,qBAAM,IAAI,oBAAe,EAAE,CAAC,oBAAoB,EAAE,EAAA;;oBAAjE,YAAY,GAAG,SAAkD;oBAEvE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;oBACrE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;oBACtE,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;oBAC3D,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;oBAC5C,KAAA,MAAM,CAAA;oBAAE,qBAAM,IAAA,kBAAa,GAAE,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAA;;oBAAzE,kBAAO,CAAC,SAAiE,CAAC,CAAC,MAAM,EAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;;;SACpG,EAAE,KAAK,CAAC,CAAC;IAEV,IAAI,CAAC,wFAAwF,EAAE;;;;;oBACvF,IAAI,GAAG,cAAc,CAAC,qBAAqB,CAAC,CAAC;oBACnD,qBAAM,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,EAAA;;oBAA9B,SAA8B,CAAC;oBAC/B,mEAAmE;oBACnE,mEAAmE;oBACnE,qBAAM,IAAA,kBAAa,GAAE,CAAC,MAAM,CAAC,cAAc,EAAE;4BAC3C,EAAE,EAAE,eAAe;4BACnB,WAAW,EAAE,4CAA4C;4BACzD,OAAO,EAAE,IAAA,gBAAM,EAAC,IAAI,CAAC;yBACf,CAAC,EAAA;;oBANT,mEAAmE;oBACnE,mEAAmE;oBACnE,SAIS,CAAC;oBAEM,qBAAM,IAAI,oBAAe,EAAE,CAAC,oBAAoB,EAAE,EAAA;;oBAA5D,OAAO,GAAG,SAAkD;oBAElE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;oBACtD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBACpC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;oBACzD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;oBACtB,qBAAM,IAAA,kBAAa,GAAE,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAA;;oBAA7E,QAAQ,GAAG,SAAkE;oBACnF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACzC,0FAA0F;oBAC1F,kEAAkE;oBAClE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;;;SACrC,EAAE,KAAK,CAAC,CAAC;IAEV,IAAI,CAAC,6FAA6F,EAAE;;;;;gBAClG,2FAA2F;gBAC3F,qBAAM,IAAA,kBAAa,GAAE,CAAC,MAAM,CAAC,cAAc,EAAE;wBAC3C,EAAE,EAAE,kBAAkB;wBACtB,WAAW,EAAE,gCAAgC;wBAC7C,OAAO,EAAE,IAAA,gBAAM,EAAC,IAAI,CAAC;qBACf,CAAC,EAAA;;oBALT,2FAA2F;oBAC3F,SAIS,CAAC;oBACU,qBAAM,IAAI,oBAAe,EAAE,CAAC,oBAAoB,EAAE,EAAA;;oBAAhE,WAAW,GAAG,SAAkD;oBACtE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;oBAE7D,sFAAsF;oBACtF,uFAAuF;oBACvF,cAAc,CAAC,kBAAkB,CAAC,CAAC;oBAClB,qBAAM,IAAI,oBAAe,EAAE,CAAC,oBAAoB,EAAE,EAAA;;oBAA7D,QAAQ,GAAG,SAAkD;oBAEnE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC3B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;oBACvD,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBACxC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBACzB,qBAAM,IAAA,kBAAa,GAAE,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAA;;oBAA3E,GAAG,GAAG,SAAqE;oBACjF,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC/B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;;;SACrC,EAAE,KAAK,CAAC,CAAC;IAEV,IAAI,CAAC,mEAAmE,EAAE;;;;;oBAClE,SAAS,GAAG,cAAc,CAAC,oBAAoB,CAAC,CAAC;oBACvD,qBAAM,IAAA,kBAAa,GAAE,CAAC,MAAM,CAAC,cAAc,EAAE,sBACxC,SAAS,KACZ,OAAO,EAAE,IAAI,EACb,OAAO,EAAE,IAAA,gBAAM,EAAC,IAAI,CAAC,GACf,CAAC,EAAA;;oBAJT,SAIS,CAAC;oBAES,qBAAM,IAAI,oBAAe,EAAE,CAAC,oBAAoB,EAAE,EAAA;;oBAA/D,UAAU,GAAG,SAAkD;oBACrE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC3B,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;oBAE3D,kEAAkE;oBAClE,qBAAM,IAAA,kBAAa,GAAE,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,oBAAoB,EAAE,OAAO,EAAE,KAAK,EAAS,CAAC,EAAA;;oBADjG,kEAAkE;oBAClE,SAAiG,CAAC;oBAC/E,qBAAM,IAAI,oBAAe,EAAE,CAAC,oBAAoB,EAAE,EAAA;;oBAA/D,UAAU,GAAG,SAAkD;oBAErE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;oBAC/C,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;oBAC3D,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC3B,qBAAM,IAAA,kBAAa,GAAE,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC,EAAA;;oBAA7E,GAAG,GAAG,SAAuE;oBACnF,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACnC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;oBACrD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;;;SACjC,EAAE,KAAK,CAAC,CAAC;AACZ,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proteinjs/db-driver-spanner",
3
- "version": "1.20.2",
3
+ "version": "1.21.0",
4
4
  "main": "./dist/generated/index.js",
5
5
  "types": "./dist/generated/index.d.ts",
6
6
  "exports": {
@@ -42,10 +42,10 @@
42
42
  },
43
43
  "dependencies": {
44
44
  "@google-cloud/spanner": "7.5.0",
45
- "@proteinjs/db": "^1.32.2",
45
+ "@proteinjs/db": "^1.33.0",
46
46
  "@proteinjs/db-query": "^1.7.0",
47
- "@proteinjs/db-spanner-common": "^1.3.10",
48
- "@proteinjs/db-transaction-context": "^0.5.10",
47
+ "@proteinjs/db-spanner-common": "^1.3.12",
48
+ "@proteinjs/db-transaction-context": "^0.5.12",
49
49
  "@proteinjs/logger": "^1.0.21",
50
50
  "@proteinjs/reflection": "^1.1.12",
51
51
  "@proteinjs/util": "^1.6.1"
@@ -63,5 +63,5 @@
63
63
  "ts-jest": "29.1.1",
64
64
  "typescript": "5.2.2"
65
65
  },
66
- "gitHead": "744307f0dc93bb03bf9cecb76251a6848511b327"
66
+ "gitHead": "23b168ca8f82ba392500b545230adc6e8c761b4e"
67
67
  }
@@ -184,6 +184,43 @@ describe('Concurrent schema reconcile', () => {
184
184
  expect(await tableManager.tableExists(baseTable())).toBe(true);
185
185
  }, 60000);
186
186
 
187
+ test('PROPAGATION LAG: a briefly-stale re-read retries and succeeds instead of false-negative re-throwing', async () => {
188
+ await tableManager.loadTable(baseTable());
189
+
190
+ // A REAL duplicate error — replaying an add of the already-present `name` column.
191
+ let duplicateError: unknown;
192
+ try {
193
+ await spannerDriver.runUpdateSchema('ALTER TABLE `db_test_reconcile` ADD COLUMN `name` STRING(255)');
194
+ } catch (error) {
195
+ duplicateError = error;
196
+ }
197
+ expect(duplicateError).toBeDefined();
198
+ expect(classifier(tableManager).isAlreadyExistsError(duplicateError)).toBe(true);
199
+
200
+ // Simulate brief INFORMATION_SCHEMA propagation lag on this connection: the FIRST re-read
201
+ // misses the table; the next sees the true schema. ALREADY_EXISTS guarantees the conflicting
202
+ // DDL committed — the object EXISTS — so the reconcile must ride out the stale read (bounded
203
+ // retry), not false-negative re-throw: a re-throw here IS the boot crash this fix closes.
204
+ jest.spyOn(tableManager.schemaMetadata, 'tableExists').mockImplementationOnce(async () => false);
205
+
206
+ await expect(
207
+ internals(tableManager).reconcileConcurrentSchemaChange([baseTable()], duplicateError)
208
+ ).resolves.toBeUndefined();
209
+ }, 60000);
210
+
211
+ test('BOUNDED RETRY: a definition that never becomes visible exhausts the retries and re-throws', async () => {
212
+ // `db_test_reconcile` is dropped in beforeEach and never created here — the claimed duplicate
213
+ // can never verify. The reconcile must give up after its bounded re-reads (not hang, not
214
+ // swallow) and surface the original error. (Bite: an unbounded retry would time this test out.)
215
+ const ghostDuplicate = {
216
+ code: 9,
217
+ message: '9 FAILED_PRECONDITION: Duplicate name in schema: db_test_reconcile.',
218
+ };
219
+ await expect(internals(tableManager).reconcileConcurrentSchemaChange([baseTable()], ghostDuplicate)).rejects.toBe(
220
+ ghostDuplicate
221
+ );
222
+ }, 60000);
223
+
187
224
  test('GENUINE CONFLICT: an already-exists error whose live definition differs from intent STILL throws', async () => {
188
225
  // Winner landed `qty` as STRING(MAX).
189
226
  await tableManager.loadTable(conflictStringTable());
@@ -20,7 +20,9 @@ import '../generated/test/index';
20
20
  * are reported so the Job can fail the deploy; a later series retries the failed row and
21
21
  * finishes the tail.
22
22
  * - HISTORY HONESTY: ledger rows whose source loader is gone (the table keeps history) are
23
- * skipped and reported as unresolved, never crash the series.
23
+ * skipped and reported as unresolved, never crash the series — and STAMPED `retired: true`.
24
+ * - RETIREMENT: a retired row is never auto-run, even when its source class ships again in a
25
+ * later build; only un-retiring it (the Migrations-page toggle) re-arms the series.
24
26
  *
25
27
  * All series runs execute SESSIONLESS (no test user registered) — the deploy Job has no user
26
28
  * session, and UserAuth is fail-closed: these tests passing IS the pin that the series records
@@ -180,7 +182,7 @@ describe('MigrationRunner.runPendingMigrations (spanner)', () => {
180
182
  expect((await getDbAsSystem().get(migrationTable, { id: 'fail-c-after' })).status).toBe('success');
181
183
  }, 60000);
182
184
 
183
- test('ledger rows without a source record are history — skipped, reported, untouched', async () => {
185
+ test('ledger rows without a source record are stamped retired — skipped, reported, never run', async () => {
184
186
  const live = plantMigration('live-beside-history');
185
187
  await insertLedgerRow(live, 1);
186
188
  // A row whose loader was deleted after it ran in some past release
@@ -194,8 +196,62 @@ describe('MigrationRunner.runPendingMigrations (spanner)', () => {
194
196
  const summary = await new MigrationRunner().runPendingMigrations();
195
197
 
196
198
  expect(summary.unresolved).toEqual(['ghost-history']);
199
+ expect(summary.retired).toEqual([]);
197
200
  expect(summary.applied).toEqual(['live-beside-history']);
198
201
  expect(summary.failed).toBeUndefined();
199
- expect((await getDbAsSystem().get(migrationTable, { id: 'ghost-history' })).status).toBe('proposed');
202
+ const ghostRow = await getDbAsSystem().get(migrationTable, { id: 'ghost-history' });
203
+ expect(ghostRow.status).toBe('proposed');
204
+ // The stamp: an unresolved row is retired on sight, so a returning source class can never
205
+ // silently re-arm it (the pin for that refusal is the next test).
206
+ expect(ghostRow.retired).toBe(true);
207
+ }, 60000);
208
+
209
+ test('a stamped row is refused even when its source class ships again — the flag outlives the gap', async () => {
210
+ // Gate run over a build where the row's loader no longer ships: the run stamps it retired.
211
+ await getDbAsSystem().insert(migrationTable, {
212
+ id: 'returning-loader',
213
+ description: 'loader missing from this build',
214
+ created: moment(base),
215
+ } as any);
216
+ const stampingRun = await new MigrationRunner().runPendingMigrations();
217
+ expect(stampingRun.unresolved).toEqual(['returning-loader']);
218
+
219
+ // The source class RETURNS in a later build. Its id resolving again is not consent to
220
+ // auto-run: the row stays excluded until a human un-retires it on the Migrations page.
221
+ plantMigration('returning-loader');
222
+ const laterRun = await new MigrationRunner().runPendingMigrations();
223
+
224
+ expect(runLog).toEqual([]);
225
+ expect(laterRun.retired).toEqual(['returning-loader']);
226
+ expect(laterRun.unresolved).toEqual([]);
227
+ expect(laterRun.applied).toEqual([]);
228
+ const row = await getDbAsSystem().get(migrationTable, { id: 'returning-loader' });
229
+ expect(row.retired).toBe(true);
230
+ expect(row.status).toBe('proposed');
231
+ }, 60000);
232
+
233
+ test('un-retiring a retired row re-arms the series — it runs to success', async () => {
234
+ const migration = plantMigration('unretired-comeback');
235
+ await getDbAsSystem().insert(migrationTable, {
236
+ ...migration,
237
+ retired: true,
238
+ created: moment(base),
239
+ } as any);
240
+
241
+ const refusedRun = await new MigrationRunner().runPendingMigrations();
242
+ expect(runLog).toEqual([]);
243
+ expect(refusedRun.retired).toEqual(['unretired-comeback']);
244
+
245
+ // The Migrations-page Un-retire button issues exactly this write.
246
+ await getDbAsSystem().update(migrationTable, { id: 'unretired-comeback', retired: false } as any);
247
+ const rearmedRun = await new MigrationRunner().runPendingMigrations();
248
+
249
+ expect(runLog).toEqual(['unretired-comeback']);
250
+ expect(rearmedRun.applied).toEqual(['unretired-comeback']);
251
+ expect(rearmedRun.retired).toEqual([]);
252
+ const row = await getDbAsSystem().get(migrationTable, { id: 'unretired-comeback' });
253
+ expect(row.status).toBe('success');
254
+ expect(row.output).toBe('unretired-comeback output');
255
+ expect(row.retired).toBe(false);
200
256
  }, 60000);
201
257
  });
package/test.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ // Types counterpart of test.js — see that file for why this shim exists.
2
+ export * from './dist/generated/test/index';
package/test.js ADDED
@@ -0,0 +1,10 @@
1
+ // Node10/classic-resolution shim for the `./test` subpath (thought-common's test.js convention).
2
+ // Consumers compiled with `module: commonjs` + default (node10) resolution AND a
3
+ // `@proteinjs/*` tsconfig paths mapping resolve this subpath as a mapped FILE PATH, which
4
+ // bypasses the `exports`/`typesVersions` maps entirely and — in workspace-symlinked installs,
5
+ // where the source tree is present — lands on `test/index.ts` SOURCE. TypeScript then realpaths
6
+ // the sources outside the consumer's rootDir (TS6059) and `noEmitOnError` blocks the consumer's
7
+ // own emit (the ts-jest "Unable to process TestEnvironment.ts" cold-cache failure class,
8
+ // 2026-08-17). This root stub wins the mapped-path lookup before directory resolution, so every
9
+ // install shape resolves to the built dist instead.
10
+ module.exports = require('./dist/generated/test/index.js');
package/tsconfig.json CHANGED
@@ -22,5 +22,6 @@
22
22
  "@proteinjs/db-driver-spanner/*": ["src/*"],
23
23
  "@proteinjs/db-driver-spanner/test": ["test/index.ts"]
24
24
  }
25
- }
25
+ },
26
+ "exclude": ["node_modules", "test.js", "test.d.ts"]
26
27
  }