@substrat-run/contract-tests 0.139.0 → 0.140.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/dist/capability-suite.d.ts.map +1 -1
- package/dist/capability-suite.js +5 -0
- package/dist/capability-suite.js.map +1 -1
- package/dist/caused-by-suite.d.ts.map +1 -1
- package/dist/caused-by-suite.js +54 -10
- package/dist/caused-by-suite.js.map +1 -1
- package/dist/connect-link-suite.d.ts +19 -0
- package/dist/connect-link-suite.d.ts.map +1 -0
- package/dist/connect-link-suite.js +215 -0
- package/dist/connect-link-suite.js.map +1 -0
- package/dist/entity-state-migration-suite.d.ts +16 -0
- package/dist/entity-state-migration-suite.d.ts.map +1 -0
- package/dist/entity-state-migration-suite.js +305 -0
- package/dist/entity-state-migration-suite.js.map +1 -0
- package/dist/entity-state-module.d.ts +183 -0
- package/dist/entity-state-module.d.ts.map +1 -1
- package/dist/entity-state-module.js +139 -1
- package/dist/entity-state-module.js.map +1 -1
- package/dist/entity-state-suite.d.ts.map +1 -1
- package/dist/entity-state-suite.js +35 -12
- package/dist/entity-state-suite.js.map +1 -1
- package/dist/entity-trash-module.d.ts +439 -0
- package/dist/entity-trash-module.d.ts.map +1 -0
- package/dist/entity-trash-module.js +287 -0
- package/dist/entity-trash-module.js.map +1 -0
- package/dist/entity-trash-suite.d.ts +59 -0
- package/dist/entity-trash-suite.d.ts.map +1 -0
- package/dist/entity-trash-suite.js +568 -0
- package/dist/entity-trash-suite.js.map +1 -0
- package/dist/erasure-module.d.ts +259 -0
- package/dist/erasure-module.d.ts.map +1 -0
- package/dist/erasure-module.js +251 -0
- package/dist/erasure-module.js.map +1 -0
- package/dist/index.d.ts +13 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/list-suite.d.ts.map +1 -1
- package/dist/list-suite.js +101 -1
- package/dist/list-suite.js.map +1 -1
- package/dist/membership-executor-suite.d.ts.map +1 -1
- package/dist/membership-executor-suite.js +60 -9
- package/dist/membership-executor-suite.js.map +1 -1
- package/dist/migration-comments-suite.d.ts +3 -0
- package/dist/migration-comments-suite.d.ts.map +1 -0
- package/dist/migration-comments-suite.js +92 -0
- package/dist/migration-comments-suite.js.map +1 -0
- package/dist/migration-comments.d.ts +3 -0
- package/dist/migration-comments.d.ts.map +1 -0
- package/dist/migration-comments.js +50 -0
- package/dist/migration-comments.js.map +1 -0
- package/dist/migration-digest-suite.d.ts +3 -0
- package/dist/migration-digest-suite.d.ts.map +1 -0
- package/dist/migration-digest-suite.js +175 -0
- package/dist/migration-digest-suite.js.map +1 -0
- package/dist/modules.d.ts +542 -0
- package/dist/modules.d.ts.map +1 -1
- package/dist/modules.js +155 -7
- package/dist/modules.js.map +1 -1
- package/dist/peer-suite.d.ts +2 -1
- package/dist/peer-suite.d.ts.map +1 -1
- package/dist/peer-suite.js +103 -1
- package/dist/peer-suite.js.map +1 -1
- package/dist/permission-suite.d.ts.map +1 -1
- package/dist/permission-suite.js +515 -2
- package/dist/permission-suite.js.map +1 -1
- package/dist/scope-host-suite.d.ts.map +1 -1
- package/dist/scope-host-suite.js +54 -1
- package/dist/scope-host-suite.js.map +1 -1
- package/dist/split-cases.d.ts +12 -0
- package/dist/split-cases.d.ts.map +1 -0
- package/dist/split-cases.js +59 -0
- package/dist/split-cases.js.map +1 -0
- package/dist/subject-erasure-suite.d.ts +6 -0
- package/dist/subject-erasure-suite.d.ts.map +1 -0
- package/dist/subject-erasure-suite.js +287 -0
- package/dist/subject-erasure-suite.js.map +1 -0
- package/dist/switch-audit-fault.d.ts +48 -0
- package/dist/switch-audit-fault.d.ts.map +1 -0
- package/dist/switch-audit-fault.js +80 -0
- package/dist/switch-audit-fault.js.map +1 -0
- package/dist/system-switch-suite.d.ts +2 -1
- package/dist/system-switch-suite.d.ts.map +1 -1
- package/dist/system-switch-suite.js +90 -0
- package/dist/system-switch-suite.js.map +1 -1
- package/dist/vertical-events-suite.d.ts +41 -0
- package/dist/vertical-events-suite.d.ts.map +1 -1
- package/dist/vertical-events-suite.js +55 -0
- package/dist/vertical-events-suite.js.map +1 -1
- package/package.json +3 -3
package/dist/modules.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../src/modules.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../src/modules.ts"],"names":[],"mappings":"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"}
|
package/dist/modules.js
CHANGED
|
@@ -7,9 +7,12 @@
|
|
|
7
7
|
* validates) draw from this one source. The assertions live in the suites; the
|
|
8
8
|
* artifacts live here.
|
|
9
9
|
*/
|
|
10
|
-
import { dataSubjectId, moduleManifest, operationInputsOf, operationConcurrencyOf, operationIdempotencyOptOutsOf, IDEMPOTENCY_RESULT_LIMIT, permissionKey, principalId, assertTransition, nameRefusedRecord, z, KERNEL_AUTHORED_EVENT_TYPES, substratError, } from '@substrat-run/contracts';
|
|
10
|
+
import { dataSubjectId, moduleManifest, operationInputsOf, operationConcurrencyOf, operationIdempotencyOptOutsOf, IDEMPOTENCY_RESULT_LIMIT, permissionKey, pageVisible, principalId, assertTransition, nameRefusedRecord, z, KERNEL_AUTHORED_EVENT_TYPES, substratError, } from '@substrat-run/contracts';
|
|
11
11
|
import { membershipFixtureMod } from './membership-module.js';
|
|
12
|
-
import { stateMod } from './entity-state-module.js';
|
|
12
|
+
import { rebuildMod, stateMod } from './entity-state-module.js';
|
|
13
|
+
import { trashMod } from './entity-trash-module.js';
|
|
14
|
+
import { erasureMod, erasureOtherMod } from './erasure-module.js';
|
|
15
|
+
import { commentedDdlMod } from './migration-comments.js';
|
|
13
16
|
import { assertAllowed, readAttachmentText, readHistory, readTimeline, readScopeTimeline, readScopeHistory, ulid, } from '@substrat-run/kernel';
|
|
14
17
|
/**
|
|
15
18
|
* #1744: the machine `test/move` walks, in the form `model.json` emits — what the suite
|
|
@@ -586,6 +589,8 @@ export const contractTestBareOps = {
|
|
|
586
589
|
ctx.requestPlatform({ kind: input.kind, payload: { rolled: 'back' } });
|
|
587
590
|
throw new Error('boom after requestPlatform');
|
|
588
591
|
}),
|
|
592
|
+
// #2102: the outcome events a settle wrote, as the spine holds them.
|
|
593
|
+
'platform/outcome-events': ((ctx) => ctx.sql.query("SELECT type, actor, entity_type, entity_id, payload FROM _substrat_outbox WHERE type LIKE 'email.%' ORDER BY id")),
|
|
589
594
|
'platform/read-requests': ((ctx) => ctx.sql.query('SELECT * FROM _substrat_platform_requests ORDER BY id')),
|
|
590
595
|
// #618: the SUPPORTED read of the same rows — what a vertical uses to tell a user its
|
|
591
596
|
// signing request never left, instead of the hand-written SELECT above.
|
|
@@ -766,6 +771,8 @@ const relinkOp = (ctx, input) => {
|
|
|
766
771
|
ctx.relink(input.child, input.from, input.to);
|
|
767
772
|
};
|
|
768
773
|
const probeOp = (ctx, input) => ctx.check(input.permission, input.entity);
|
|
774
|
+
const grantedEntitiesOp = (ctx, input) => ctx.grantedEntities(input.permission, input.entityType, input);
|
|
775
|
+
const revokeGrantOp = (ctx, input) => ctx.revoke(input.principal, input.permission, input.entity);
|
|
769
776
|
// Assert a permission, then emit — the shape a real mutating operation has. Exercises
|
|
770
777
|
// K-34 (the emitted event carries the passed check as `authorization`) and, when the
|
|
771
778
|
// check is refused, K-35 (assertAllowed throws → the host records a denial and rolls back).
|
|
@@ -821,7 +828,7 @@ const requestCheckOp = (ctx, input) => {
|
|
|
821
828
|
};
|
|
822
829
|
const CHECK_LOG_DDL = `CREATE TABLE IF NOT EXISTS perm_check_log (
|
|
823
830
|
event_id TEXT PRIMARY KEY, permission TEXT NOT NULL, allowed INTEGER NOT NULL,
|
|
824
|
-
threw TEXT, grant_threw TEXT)`;
|
|
831
|
+
threw TEXT, grant_threw TEXT, grant_read_kind TEXT)`;
|
|
825
832
|
/**
|
|
826
833
|
* Runs as the system actor, whose `ctx.check` is allowed by construction. With
|
|
827
834
|
* `swallow` it catches the check's throw — and a `ctx.grant` of the same key, which
|
|
@@ -833,10 +840,12 @@ const checkRequestedConsumer = async (ctx, event) => {
|
|
|
833
840
|
const permission = p.permission; // the cast under test
|
|
834
841
|
if (!p.swallow) {
|
|
835
842
|
assertAllowed(await ctx.check(permission));
|
|
843
|
+
const grantRead = await ctx.grantedEntities(permission, 'item');
|
|
836
844
|
ctx.sql.exec(CHECK_LOG_DDL);
|
|
837
|
-
ctx.sql.exec('INSERT INTO perm_check_log (event_id, permission, allowed) VALUES (?, ?, 1)', [
|
|
845
|
+
ctx.sql.exec('INSERT INTO perm_check_log (event_id, permission, allowed, grant_read_kind) VALUES (?, ?, 1, ?)', [
|
|
838
846
|
event.id,
|
|
839
847
|
p.permission,
|
|
848
|
+
grantRead.kind,
|
|
840
849
|
]);
|
|
841
850
|
return;
|
|
842
851
|
}
|
|
@@ -864,7 +873,7 @@ const checkRequestedConsumer = async (ctx, event) => {
|
|
|
864
873
|
const readCheckLogOp = (ctx) => {
|
|
865
874
|
ctx.sql.exec(CHECK_LOG_DDL);
|
|
866
875
|
return {
|
|
867
|
-
log: ctx.sql.query('SELECT event_id, permission, allowed, threw, grant_threw FROM perm_check_log ORDER BY event_id'),
|
|
876
|
+
log: ctx.sql.query('SELECT event_id, permission, allowed, threw, grant_threw, grant_read_kind FROM perm_check_log ORDER BY event_id'),
|
|
868
877
|
deliveries: ctx.sql.query(`SELECT d.event_id, d.error, json_extract(o.payload, '$.permission') AS permission
|
|
869
878
|
FROM _substrat_deliveries d JOIN _substrat_outbox o ON o.id = d.event_id
|
|
870
879
|
WHERE o.type = 'perm.check-requested' ORDER BY d.event_id`),
|
|
@@ -1419,6 +1428,8 @@ export const permMod = {
|
|
|
1419
1428
|
'perm/link': linkOp,
|
|
1420
1429
|
'perm/relink': relinkOp,
|
|
1421
1430
|
'perm/probe': probeOp,
|
|
1431
|
+
'perm/granted-entities': grantedEntitiesOp,
|
|
1432
|
+
'perm/revoke-grant': revokeGrantOp,
|
|
1422
1433
|
'perm/authorized-emit': authorizedEmitOp,
|
|
1423
1434
|
'perm/authorized-read': authorizedReadOp,
|
|
1424
1435
|
'perm/read-outbox': readOutboxOp,
|
|
@@ -1462,6 +1473,27 @@ export const permMod = {
|
|
|
1462
1473
|
'perm/can-assign': (async (ctx, input) => {
|
|
1463
1474
|
return ctx.canAssign(input.roleKey);
|
|
1464
1475
|
}),
|
|
1476
|
+
// #2071: a principal's `granted:` rows, tombstones included — what a revoke LEAVES, which
|
|
1477
|
+
// the checker's answer alone cannot show (a deleted row and a tombstone both deny).
|
|
1478
|
+
'perm/grant-rows': (async (ctx, input) => ctx.sql
|
|
1479
|
+
.query(`SELECT relation, object, revoked_at, expires_at FROM _substrat_tuples
|
|
1480
|
+
WHERE subject = ? AND substr(relation, 1, 8) = 'granted:' ORDER BY relation, object`, [`principal:${input.principal}`])
|
|
1481
|
+
.map((r) => ({ relation: r.relation, object: r.object, revokedAt: r.revoked_at, expiresAt: r.expires_at }))),
|
|
1482
|
+
// #2083: read the bootstrap marker itself, not just whether a later top-up inferred it.
|
|
1483
|
+
'perm/shape-marker': (async (ctx, input) => {
|
|
1484
|
+
const { principal, entity } = input;
|
|
1485
|
+
return ctx.sql.query(`SELECT revoked_at FROM _substrat_tuples WHERE subject = ? AND relation = 'bootstrap' AND object = ?`, [`principal:${principal}`, `${entity.entityType}:${entity.entityId}`]);
|
|
1486
|
+
}),
|
|
1487
|
+
// #2071: the kernel's `entity.grants-topped-up` events on one entity, oldest first — or,
|
|
1488
|
+
// given `type`, its `entity.grants-retired` ones (#2082).
|
|
1489
|
+
'perm/topped-up': (async (ctx, input) => ctx.sql
|
|
1490
|
+
.query(`SELECT payload, actor, operation, authorization FROM _substrat_outbox
|
|
1491
|
+
WHERE type = ? AND entity_type = ? AND entity_id = ? ORDER BY id`, [
|
|
1492
|
+
input.type ?? 'entity.grants-topped-up',
|
|
1493
|
+
input.entityType,
|
|
1494
|
+
input.entityId,
|
|
1495
|
+
])
|
|
1496
|
+
.map((r) => ({ ...r, payload: JSON.parse(r.payload), actor: JSON.parse(r.actor) }))),
|
|
1465
1497
|
'perm/unshare': (async (ctx, input) => {
|
|
1466
1498
|
const i = input;
|
|
1467
1499
|
await ctx.revoke(principalId.parse(i.principal), permissionKey.parse(i.permission), i.entity);
|
|
@@ -1660,6 +1692,36 @@ export const listMod = {
|
|
|
1660
1692
|
]);
|
|
1661
1693
|
return { id: i.id };
|
|
1662
1694
|
}),
|
|
1695
|
+
'list/add-hidden-batch': (async (ctx, input) => {
|
|
1696
|
+
const { first, count } = input;
|
|
1697
|
+
// One bounded SQL statement makes a >2,000-row workerd test affordable.
|
|
1698
|
+
ctx.sql.exec(`WITH RECURSIVE n(x) AS (
|
|
1699
|
+
SELECT ? UNION ALL SELECT x + 1 FROM n WHERE x + 1 < ?
|
|
1700
|
+
) INSERT INTO list_orders (id, number, status, kind, hold)
|
|
1701
|
+
SELECT printf('h%06d', x), printf('%06d', x), 'open', 'k2074', NULL FROM n`, [first, first + count]);
|
|
1702
|
+
}),
|
|
1703
|
+
'list/page-visible': (async (ctx, input) => {
|
|
1704
|
+
const query = input;
|
|
1705
|
+
return pageVisible((params) => ctx.page('listorder', { ...query, ...params }), query, (row) => String(row['id']).startsWith('v'), { continuation: ctx.pageContinuation('listorder:visible', query) });
|
|
1706
|
+
}),
|
|
1707
|
+
'list/continuation-cap': (async (ctx) => {
|
|
1708
|
+
const codec = ctx.pageContinuation('listorder:cap-probe', { filters: { kind: 'cap-probe' } });
|
|
1709
|
+
let first = null;
|
|
1710
|
+
let last = null;
|
|
1711
|
+
for (let i = 0; i < 257; i++) {
|
|
1712
|
+
last = await codec.seal(`hidden ${i}`, true);
|
|
1713
|
+
if (i === 0)
|
|
1714
|
+
first = last;
|
|
1715
|
+
}
|
|
1716
|
+
let oldestRejected = false;
|
|
1717
|
+
try {
|
|
1718
|
+
await codec.open(first);
|
|
1719
|
+
}
|
|
1720
|
+
catch {
|
|
1721
|
+
oldestRejected = true;
|
|
1722
|
+
}
|
|
1723
|
+
return { oldestRejected, lastPosition: await codec.open(last) };
|
|
1724
|
+
}),
|
|
1663
1725
|
// The read under test, passed straight through: the suite asserts on the
|
|
1664
1726
|
// entries, the cursor and the total, which is where a naive keyset is wrong.
|
|
1665
1727
|
'list/page': (async (ctx, input) => {
|
|
@@ -2144,6 +2206,7 @@ export const capMod = {
|
|
|
2144
2206
|
assertAllowed(decision);
|
|
2145
2207
|
return { read: entity, proof: decision.proof };
|
|
2146
2208
|
}),
|
|
2209
|
+
'cap/granted-entities': ((ctx) => ctx.grantedEntities(CAP_READ, 'doc')),
|
|
2147
2210
|
// A node-level read: a capability holds no node-level authority, so this refuses it.
|
|
2148
2211
|
'cap/read-all': (async (ctx) => {
|
|
2149
2212
|
assertAllowed(await ctx.check(CAP_READ));
|
|
@@ -2518,6 +2581,23 @@ export const contractTestModules = [
|
|
|
2518
2581
|
// #119: the archive/trash suite's module. Inert for every other suite — nothing else reads
|
|
2519
2582
|
// its tables or invokes a `state/*` operation.
|
|
2520
2583
|
stateMod,
|
|
2584
|
+
trashMod,
|
|
2585
|
+
// #2068: the subject-erasure suite's modules. Every scope in the kit carries them, so every
|
|
2586
|
+
// `shredSubject` in every suite runs their declared erasure and their hook — which reaches
|
|
2587
|
+
// only `er_*` tables nothing else writes, and misbehaves only for a subject the erasure suite
|
|
2588
|
+
// arms in `er_bombs`. That is deliberate: every other suite's erasure then also proves the
|
|
2589
|
+
// module half is harmless where it holds nothing.
|
|
2590
|
+
erasureMod,
|
|
2591
|
+
erasureOtherMod,
|
|
2592
|
+
// #2068 r5: a module whose migrations comment their DDL and then drop the last column. Every
|
|
2593
|
+
// scope in the kit migrates it, so a regression fails loudly everywhere.
|
|
2594
|
+
commentedDdlMod,
|
|
2595
|
+
// #2090: the authored-rebuild suite's module. Inert for every other suite — its rebuilds run
|
|
2596
|
+
// before the derived state migrations on a fresh scope, and nothing else reads `rb_*`. AFTER the
|
|
2597
|
+
// erasure modules: a dump wipe drops tables and not views, so a wiped scope still holds `er_view`
|
|
2598
|
+
// until `erasureMod` re-creates `er_loose`, and SQLite refuses any `ALTER TABLE … RENAME` while
|
|
2599
|
+
// a view names a missing table.
|
|
2600
|
+
rebuildMod,
|
|
2521
2601
|
parseMod,
|
|
2522
2602
|
concurrencyMod,
|
|
2523
2603
|
idempotencyMod,
|
|
@@ -2585,7 +2665,12 @@ export const liveModManifest = moduleManifest.parse({
|
|
|
2585
2665
|
liveTargets: [{ entityType: 'note', readPermission: 'live:read' }],
|
|
2586
2666
|
// #1853: a note can sit in a folder — sometimes in two — and move between them, which
|
|
2587
2667
|
// is what a feed narrowed `within` a folder walks.
|
|
2588
|
-
|
|
2668
|
+
// #938: a folder sits in a cabinet, so a `checkedWithin(folder)` subscriber's grant on
|
|
2669
|
+
// the cabinet reaches its root, and moving the folder takes the root out of that reach.
|
|
2670
|
+
entityRelations: [
|
|
2671
|
+
{ entityType: 'note', parentType: 'folder' },
|
|
2672
|
+
{ entityType: 'folder', parentType: 'cabinet' },
|
|
2673
|
+
],
|
|
2589
2674
|
entitlementKey: 'live',
|
|
2590
2675
|
});
|
|
2591
2676
|
/** Touch a note — one write, one event about ONE entity, which is what a subscriber hears. */
|
|
@@ -2627,7 +2712,7 @@ const liveTouchLedgerOp = async (ctx, input) => {
|
|
|
2627
2712
|
*/
|
|
2628
2713
|
const liveUnshareOp = async (ctx, input) => {
|
|
2629
2714
|
await ctx.revoke(principalId.parse(input.principal), permissionKey.parse('live:read'), {
|
|
2630
|
-
entityType: 'note',
|
|
2715
|
+
entityType: input.entityType ?? 'note',
|
|
2631
2716
|
entityId: input.noteId,
|
|
2632
2717
|
});
|
|
2633
2718
|
};
|
|
@@ -2641,6 +2726,29 @@ const liveMoveOp = async (ctx, input) => {
|
|
|
2641
2726
|
assertAllowed(await ctx.check(permissionKey.parse('live:write')));
|
|
2642
2727
|
ctx.relink({ entityType: 'note', entityId: input.noteId }, { entityType: 'folder', entityId: input.from }, { entityType: 'folder', entityId: input.to });
|
|
2643
2728
|
};
|
|
2729
|
+
/** Touch several notes in one operation (#938): one pass, several rows. */
|
|
2730
|
+
const liveTouchEachOp = async (ctx, input) => {
|
|
2731
|
+
assertAllowed(await ctx.check(permissionKey.parse('live:write')));
|
|
2732
|
+
for (const noteId of input.noteIds) {
|
|
2733
|
+
ctx.emit({
|
|
2734
|
+
type: 'live.note-touched',
|
|
2735
|
+
schemaVersion: 1,
|
|
2736
|
+
entity: { entityType: 'note', entityId: noteId },
|
|
2737
|
+
piiClass: 'none',
|
|
2738
|
+
payload: {},
|
|
2739
|
+
});
|
|
2740
|
+
}
|
|
2741
|
+
};
|
|
2742
|
+
/** Put a folder in a cabinet (#938). */
|
|
2743
|
+
const liveShelveOp = async (ctx, input) => {
|
|
2744
|
+
assertAllowed(await ctx.check(permissionKey.parse('live:write')));
|
|
2745
|
+
ctx.link({ entityType: 'folder', entityId: input.folderId }, { entityType: 'cabinet', entityId: input.cabinetId });
|
|
2746
|
+
};
|
|
2747
|
+
/** Move a folder to another cabinet (#938): a `checkedWithin(folder)` root moving out of a grant's reach. */
|
|
2748
|
+
const liveReshelveOp = async (ctx, input) => {
|
|
2749
|
+
assertAllowed(await ctx.check(permissionKey.parse('live:write')));
|
|
2750
|
+
ctx.relink({ entityType: 'folder', entityId: input.folderId }, { entityType: 'cabinet', entityId: input.from }, { entityType: 'cabinet', entityId: input.to });
|
|
2751
|
+
};
|
|
2644
2752
|
export const liveMod = {
|
|
2645
2753
|
manifest: liveModManifest,
|
|
2646
2754
|
migrations: [],
|
|
@@ -2650,6 +2758,9 @@ export const liveMod = {
|
|
|
2650
2758
|
'live/unshare': liveUnshareOp,
|
|
2651
2759
|
'live/file': liveFileOp,
|
|
2652
2760
|
'live/move': liveMoveOp,
|
|
2761
|
+
'live/touch-each': liveTouchEachOp,
|
|
2762
|
+
'live/shelve': liveShelveOp,
|
|
2763
|
+
'live/reshelve': liveReshelveOp,
|
|
2653
2764
|
},
|
|
2654
2765
|
};
|
|
2655
2766
|
export const brokenModManifest = moduleManifest.parse({
|
|
@@ -2711,6 +2822,43 @@ export const spineParentMod = {
|
|
|
2711
2822
|
],
|
|
2712
2823
|
operations: {},
|
|
2713
2824
|
};
|
|
2825
|
+
/**
|
|
2826
|
+
* #2066: migrations that reach for the migration journal — one drops its digest fence, one writes
|
|
2827
|
+
* the journal itself. Each would make the digest check say whatever it wrote, so both must be
|
|
2828
|
+
* refused before any of their SQL runs, on every adapter. Hosted apart, like `brokenMod`, and each
|
|
2829
|
+
* migration's first statement is harmless so a refusal that let part of it run leaves `jt` behind.
|
|
2830
|
+
*/
|
|
2831
|
+
export const journalFenceDropMod = {
|
|
2832
|
+
manifest: foreignKeyModManifest('@test/journal-fence-drop'),
|
|
2833
|
+
migrations: [
|
|
2834
|
+
{ version: '0001-init', sql: 'CREATE TABLE jt (id TEXT PRIMARY KEY);\nDROP TRIGGER "_Substrat_Migrations_Digest_Required";' },
|
|
2835
|
+
],
|
|
2836
|
+
operations: {},
|
|
2837
|
+
};
|
|
2838
|
+
export const journalWriteMod = {
|
|
2839
|
+
manifest: foreignKeyModManifest('@test/journal-write'),
|
|
2840
|
+
migrations: [
|
|
2841
|
+
{ version: '0001-init', sql: "CREATE TABLE jt (id TEXT PRIMARY KEY);\nDELETE FROM main._substrat_migrations WHERE module_id = 'x';" },
|
|
2842
|
+
],
|
|
2843
|
+
operations: {},
|
|
2844
|
+
};
|
|
2845
|
+
/**
|
|
2846
|
+
* #2066 r3: authored migrations that reach for the rest of the spine — one shadows
|
|
2847
|
+
* `_substrat_tuples` with a same-named TEMP table (every unqualified kernel read would then see
|
|
2848
|
+
* the empty one), one drops the outbox. Refused before any of their SQL runs, like the two above.
|
|
2849
|
+
*/
|
|
2850
|
+
export const spineShadowMod = {
|
|
2851
|
+
manifest: foreignKeyModManifest('@test/spine-shadow'),
|
|
2852
|
+
migrations: [
|
|
2853
|
+
{ version: '0001-init', sql: 'CREATE TABLE jt (id TEXT PRIMARY KEY);\nCREATE TEMP TABLE "_Substrat_Tuples" (subject TEXT);' },
|
|
2854
|
+
],
|
|
2855
|
+
operations: {},
|
|
2856
|
+
};
|
|
2857
|
+
export const spineDropMod = {
|
|
2858
|
+
manifest: foreignKeyModManifest('@test/spine-drop'),
|
|
2859
|
+
migrations: [{ version: '0001-init', sql: 'CREATE TABLE jt (id TEXT PRIMARY KEY);\nDROP TABLE main._substrat_outbox;' }],
|
|
2860
|
+
operations: {},
|
|
2861
|
+
};
|
|
2714
2862
|
export const ownParentMod = {
|
|
2715
2863
|
manifest: foreignKeyModManifest('@test/own-parent'),
|
|
2716
2864
|
migrations: [
|