@substrat-run/contract-tests 0.116.0 → 0.118.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-expiry-suite.d.ts +8 -0
- package/dist/capability-expiry-suite.d.ts.map +1 -0
- package/dist/capability-expiry-suite.js +131 -0
- package/dist/capability-expiry-suite.js.map +1 -0
- package/dist/capability-suite.d.ts +3 -0
- package/dist/capability-suite.d.ts.map +1 -0
- package/dist/capability-suite.js +498 -0
- package/dist/capability-suite.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/job-run-suite.d.ts.map +1 -1
- package/dist/job-run-suite.js +250 -2
- package/dist/job-run-suite.js.map +1 -1
- package/dist/modules.d.ts +126 -0
- package/dist/modules.d.ts.map +1 -1
- package/dist/modules.js +273 -1
- package/dist/modules.js.map +1 -1
- package/dist/permission-suite.d.ts.map +1 -1
- package/dist/permission-suite.js +150 -2
- package/dist/permission-suite.js.map +1 -1
- package/dist/schedule-suite.d.ts +14 -0
- package/dist/schedule-suite.d.ts.map +1 -1
- package/dist/schedule-suite.js +22 -1
- package/dist/schedule-suite.js.map +1 -1
- package/dist/scope-host-suite.d.ts.map +1 -1
- package/dist/scope-host-suite.js +1032 -12
- package/dist/scope-host-suite.js.map +1 -1
- package/dist/system-switch-suite.d.ts +16 -0
- package/dist/system-switch-suite.d.ts.map +1 -0
- package/dist/system-switch-suite.js +215 -0
- package/dist/system-switch-suite.js.map +1 -0
- package/package.json +5 -4
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ScopeHostFixture } from './scope-host-suite.js';
|
|
2
|
+
/**
|
|
3
|
+
* The schedule kill switch (#1666), against both adapters — `revokeFromSystem` turns one
|
|
4
|
+
* module's scheduled work off on one scope, `restoreToSystem` turns it back on, and the
|
|
5
|
+
* gate both adapters run is the kernel's `systemScheduleState`.
|
|
6
|
+
*
|
|
7
|
+
* Every scope here is NEW and its schedules have never run, so each one is due the moment
|
|
8
|
+
* it exists. That is what makes a `skipped` evidence of the switch rather than of a
|
|
9
|
+
* cadence window, and what lets the restore half assert a fire on the very next pass.
|
|
10
|
+
*
|
|
11
|
+
* `runDueSchedules` is called directly rather than through `runPlatformSweep`: the sweep
|
|
12
|
+
* enumerates every active scope in the directory, and on the Cloudflare mount that is
|
|
13
|
+
* every suite's scope in one shared control plane (#1591).
|
|
14
|
+
*/
|
|
15
|
+
export declare function systemSwitchContractSuite(adapterName: string, makeFixture: () => Promise<ScopeHostFixture>): void;
|
|
16
|
+
//# sourceMappingURL=system-switch-suite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-switch-suite.d.ts","sourceRoot":"","sources":["../src/system-switch-suite.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAQ9D;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAC3C,IAAI,CAyON"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
|
2
|
+
import { errorCodeOf, moduleId, permissionKey, platformActorId, principalId, scopeId, tenantId, } from '@substrat-run/contracts';
|
|
3
|
+
import { ulid } from '@substrat-run/kernel';
|
|
4
|
+
import { jobsMod, scheduleMod } from './modules.js';
|
|
5
|
+
const SCHED = moduleId.parse('@test/sched');
|
|
6
|
+
const JOBS = moduleId.parse('@test/jobs');
|
|
7
|
+
/** Both of `scheduleMod`'s schedules — `sched/tick` and #1288's `freshness:sched.ticked`. */
|
|
8
|
+
const SCHEDULES = 2;
|
|
9
|
+
/**
|
|
10
|
+
* The schedule kill switch (#1666), against both adapters — `revokeFromSystem` turns one
|
|
11
|
+
* module's scheduled work off on one scope, `restoreToSystem` turns it back on, and the
|
|
12
|
+
* gate both adapters run is the kernel's `systemScheduleState`.
|
|
13
|
+
*
|
|
14
|
+
* Every scope here is NEW and its schedules have never run, so each one is due the moment
|
|
15
|
+
* it exists. That is what makes a `skipped` evidence of the switch rather than of a
|
|
16
|
+
* cadence window, and what lets the restore half assert a fire on the very next pass.
|
|
17
|
+
*
|
|
18
|
+
* `runDueSchedules` is called directly rather than through `runPlatformSweep`: the sweep
|
|
19
|
+
* enumerates every active scope in the directory, and on the Cloudflare mount that is
|
|
20
|
+
* every suite's scope in one shared control plane (#1591).
|
|
21
|
+
*/
|
|
22
|
+
export function systemSwitchContractSuite(adapterName, makeFixture) {
|
|
23
|
+
describe(`schedule kill switch (#1666): ${adapterName}`, () => {
|
|
24
|
+
let fixture;
|
|
25
|
+
let host;
|
|
26
|
+
const t = tenantId.parse(ulid());
|
|
27
|
+
const reader = principalId.parse(ulid());
|
|
28
|
+
const staff = platformActorId.parse(ulid());
|
|
29
|
+
const reason = 'incident: runaway tick';
|
|
30
|
+
const newScope = async () => {
|
|
31
|
+
const s = scopeId.parse(ulid());
|
|
32
|
+
await provision(s);
|
|
33
|
+
await host.admin.activateScope(staff, t, s);
|
|
34
|
+
return s;
|
|
35
|
+
};
|
|
36
|
+
// `provisionScope` IS the reconcile on a CP-full host: it seats each schedule's
|
|
37
|
+
// declared `system:` grant (#1659), and a re-run seats again.
|
|
38
|
+
const provision = (s) => host.provisionScope(staff, { tenantId: t, scopeId: s, vertical: 'sched-vertical' });
|
|
39
|
+
const off = (s, module = SCHED) => host.admin.revokeFromSystem(staff, { moduleId: module, node: { tenantId: t, scopeId: s }, reason });
|
|
40
|
+
const on = (s, module = SCHED) => host.admin.restoreToSystem(staff, { moduleId: module, node: { tenantId: t, scopeId: s }, reason: 'resolved' });
|
|
41
|
+
const ticks = async (s) => (await (await host.getScope(reader, t, s)).invoke('sched/count'));
|
|
42
|
+
const grant = (s, key, module = SCHED) => host.admin.grantToSystem(staff, {
|
|
43
|
+
moduleId: module,
|
|
44
|
+
permission: permissionKey.parse(key),
|
|
45
|
+
node: { tenantId: t, scopeId: s },
|
|
46
|
+
grantedBy: staff,
|
|
47
|
+
});
|
|
48
|
+
/** What a switch call answers, less its permissions — the operation id is per call. */
|
|
49
|
+
const moved = (schedules, changed) => ({
|
|
50
|
+
operationId: expect.any(String),
|
|
51
|
+
moduleId: SCHED,
|
|
52
|
+
schedules,
|
|
53
|
+
changed,
|
|
54
|
+
});
|
|
55
|
+
/** The switched-off report: nothing ran, every schedule skipped, and it says why. */
|
|
56
|
+
const switchedOff = {
|
|
57
|
+
fired: 0,
|
|
58
|
+
skipped: SCHEDULES,
|
|
59
|
+
failed: 0,
|
|
60
|
+
errors: [],
|
|
61
|
+
switchedOff: true,
|
|
62
|
+
runs: [
|
|
63
|
+
{ operation: 'sched/tick', outcome: 'skipped' },
|
|
64
|
+
{ operation: 'freshness:sched.ticked', outcome: 'skipped' },
|
|
65
|
+
],
|
|
66
|
+
};
|
|
67
|
+
beforeAll(async () => {
|
|
68
|
+
fixture = await makeFixture();
|
|
69
|
+
host = fixture.host;
|
|
70
|
+
host.registerModule(scheduleMod);
|
|
71
|
+
host.registerModule(jobsMod);
|
|
72
|
+
host.registerJob(JOBS, 'record', async (pass) => {
|
|
73
|
+
const scope = await pass.scope();
|
|
74
|
+
await pass.step('one', () => scope.invoke('jobs/record', { item: 'one' }));
|
|
75
|
+
return { done: true };
|
|
76
|
+
}, { maxAttempts: 3, baseDelayMs: 0 });
|
|
77
|
+
await host.admin.createTenant(staff, { id: t, slug: `kill-${t.slice(-10).toLowerCase()}`, name: 'Kill switch' });
|
|
78
|
+
await host.admin.grantEntitlement(staff, t, 'sched');
|
|
79
|
+
await host.admin.grantEntitlement(staff, t, 'jobs');
|
|
80
|
+
});
|
|
81
|
+
afterAll(async () => {
|
|
82
|
+
await fixture.cleanup();
|
|
83
|
+
});
|
|
84
|
+
it('a switched-off module fires nothing, reports skipped (never failed), and survives a reconcile', async () => {
|
|
85
|
+
const s = await newScope();
|
|
86
|
+
const result = await off(s);
|
|
87
|
+
expect(result).toEqual({ ...moved('off', true), permissions: ['sched:tick'] });
|
|
88
|
+
expect(await host.runDueSchedules(SCHED, t, s)).toEqual(switchedOff);
|
|
89
|
+
expect(await ticks(s)).toBe(0);
|
|
90
|
+
// The reconcile #1659 made safe: it seats, so it leaves the tombstone — and the
|
|
91
|
+
// marker is not a grant, so it has nothing to seat there either.
|
|
92
|
+
await provision(s);
|
|
93
|
+
expect(await host.runDueSchedules(SCHED, t, s)).toEqual(switchedOff);
|
|
94
|
+
expect(await ticks(s)).toBe(0);
|
|
95
|
+
// Restore is the lever. The cadence clock was never touched, so the schedules are
|
|
96
|
+
// due on the very next pass — not an hour after the switch was pulled.
|
|
97
|
+
expect(await on(s)).toEqual({ ...moved('on', true), permissions: ['sched:tick'] });
|
|
98
|
+
const report = await host.runDueSchedules(SCHED, t, s);
|
|
99
|
+
expect(report).toMatchObject({ fired: SCHEDULES, skipped: 0, failed: 0, errors: [] });
|
|
100
|
+
expect(report.switchedOff).toBeUndefined();
|
|
101
|
+
expect(await ticks(s)).toBe(1);
|
|
102
|
+
});
|
|
103
|
+
it('OFF holds: a regrant is refused, a reconcile seats nothing, and an invoke and a job with the authority are denied', async () => {
|
|
104
|
+
const s = await newScope();
|
|
105
|
+
await grant(s, 'jobs:write', JOBS);
|
|
106
|
+
await off(s);
|
|
107
|
+
await off(s, JOBS);
|
|
108
|
+
const refusedGrant = async (key, module = SCHED) => {
|
|
109
|
+
const e = await grant(s, key, module).then(() => null, (err) => err);
|
|
110
|
+
expect(errorCodeOf(e)).toBe('conflict');
|
|
111
|
+
expect(String(e)).toMatch(/switched off .* restore it first/);
|
|
112
|
+
};
|
|
113
|
+
// A grant is not the lever: a stray `grantToSystem` is REFUSED while the switch is
|
|
114
|
+
// off — the revoked permission, a permission the scope never held, and the job
|
|
115
|
+
// module's — rather than handing the system authority back to anything but the
|
|
116
|
+
// schedules. (#1659's re-grant guarantee still holds while the switch is on.)
|
|
117
|
+
await refusedGrant('sched:tick');
|
|
118
|
+
await refusedGrant('sched:admin');
|
|
119
|
+
await refusedGrant('jobs:write', JOBS);
|
|
120
|
+
// A reconcile seats nothing for a switched-off module (its seat checks the marker).
|
|
121
|
+
await provision(s);
|
|
122
|
+
expect(await host.runDueSchedules(SCHED, t, s)).toEqual(switchedOff);
|
|
123
|
+
// Nothing acting with the module's system authority gets through: a direct invoke
|
|
124
|
+
// through the system door, and a resumable job run.
|
|
125
|
+
await expect((await host.getSystemScope(SCHED, t, s)).invoke('sched/tick')).rejects.toThrow(/sched:tick/);
|
|
126
|
+
const run = await host.startJobRun(t, s, { moduleId: JOBS, job: 'record', instance: 'hold', payload: {} });
|
|
127
|
+
expect((await host.runDueJobs(t, s)).completed).toBe(0);
|
|
128
|
+
expect((await host.jobRuns(t, s)).find((r) => r.id === run.id)?.lastError).toMatch(/jobs:write/);
|
|
129
|
+
expect(await ticks(s)).toBe(0);
|
|
130
|
+
// The twin: restored, everything works again — the grant is accepted, the invoke
|
|
131
|
+
// and the job succeed, and the schedules fire.
|
|
132
|
+
await on(s);
|
|
133
|
+
await on(s, JOBS);
|
|
134
|
+
await grant(s, 'sched:admin');
|
|
135
|
+
await (await host.getSystemScope(SCHED, t, s)).invoke('sched/tick');
|
|
136
|
+
expect(await ticks(s)).toBe(1);
|
|
137
|
+
expect((await host.runDueJobs(t, s)).completed).toBe(1);
|
|
138
|
+
expect(await host.runDueSchedules(SCHED, t, s)).toMatchObject({ fired: SCHEDULES, failed: 0 });
|
|
139
|
+
expect(await ticks(s)).toBe(2);
|
|
140
|
+
});
|
|
141
|
+
it('is idempotent both ways, and EVERY attempt is audited — intent first, then outcome — a repeat included', async () => {
|
|
142
|
+
const s = await newScope();
|
|
143
|
+
const calls = [
|
|
144
|
+
await on(s), // a no-op: already on
|
|
145
|
+
await off(s),
|
|
146
|
+
await off(s), // a repeat — the retry after an audit-then-crash looks exactly like this
|
|
147
|
+
await on(s),
|
|
148
|
+
];
|
|
149
|
+
expect(calls.map((r) => [r.schedules, r.changed])).toEqual([
|
|
150
|
+
['on', false],
|
|
151
|
+
['off', true],
|
|
152
|
+
['off', false],
|
|
153
|
+
['on', true],
|
|
154
|
+
]);
|
|
155
|
+
const log = await host.admin.auditLog(staff, {
|
|
156
|
+
tenantId: t,
|
|
157
|
+
scopeId: s,
|
|
158
|
+
action: ['revokeFromSystem', 'restoreToSystem'],
|
|
159
|
+
});
|
|
160
|
+
const rows = log.map((e) => ({ action: e.action, actor: e.actor, ...e.after }));
|
|
161
|
+
// Two rows per call, paired by the operation id the call answered with.
|
|
162
|
+
expect(rows).toEqual(calls.flatMap((r, i) => {
|
|
163
|
+
const action = r.schedules === 'off' ? 'revokeFromSystem' : 'restoreToSystem';
|
|
164
|
+
const common = { action, actor: staff, operationId: r.operationId, moduleId: SCHED, schedules: r.schedules };
|
|
165
|
+
return [
|
|
166
|
+
{ ...common, phase: 'intent', reason: r.schedules === 'off' ? reason : 'resolved' },
|
|
167
|
+
{ ...common, phase: 'applied', changed: r.changed, permissions: i === 1 || i === 3 ? ['sched:tick'] : [] },
|
|
168
|
+
];
|
|
169
|
+
}));
|
|
170
|
+
});
|
|
171
|
+
it('refuses a module the scope never held — and writes nothing, so nothing is left switched off', async () => {
|
|
172
|
+
const s = await newScope();
|
|
173
|
+
const stranger = moduleId.parse('@test/not-held');
|
|
174
|
+
const refused = await off(s, stranger).then(() => null, (e) => e);
|
|
175
|
+
expect(errorCodeOf(refused)).toBe('not_found');
|
|
176
|
+
expect(String(refused)).toMatch(/holds no system grant for module '@test\/not-held'/);
|
|
177
|
+
// Had the refusal written a marker, the scope would now "hold" the module and the
|
|
178
|
+
// restore would answer. It refuses the same way, so nothing was written.
|
|
179
|
+
expect(errorCodeOf(await on(s, stranger).then(() => null, (e) => e))).toBe('not_found');
|
|
180
|
+
// …and the module this scope does run is untouched by the attempt.
|
|
181
|
+
expect(await host.runDueSchedules(SCHED, t, s)).toMatchObject({ fired: SCHEDULES });
|
|
182
|
+
});
|
|
183
|
+
it('refuses a scope of another tenant as unknown', async () => {
|
|
184
|
+
const s = await newScope();
|
|
185
|
+
const refused = await host.admin
|
|
186
|
+
.revokeFromSystem(staff, { moduleId: SCHED, node: { tenantId: tenantId.parse(ulid()), scopeId: s }, reason })
|
|
187
|
+
.then(() => null, (e) => e);
|
|
188
|
+
expect(errorCodeOf(refused)).toBe('not_found');
|
|
189
|
+
expect(await host.runDueSchedules(SCHED, t, s)).toMatchObject({ fired: SCHEDULES });
|
|
190
|
+
});
|
|
191
|
+
it('refuses a switch with no reason', async () => {
|
|
192
|
+
const s = await newScope();
|
|
193
|
+
await expect(host.admin.revokeFromSystem(staff, { moduleId: SCHED, node: { tenantId: t, scopeId: s }, reason: ' ' })).rejects.toThrow();
|
|
194
|
+
expect(await host.runDueSchedules(SCHED, t, s)).toMatchObject({ fired: SCHEDULES });
|
|
195
|
+
});
|
|
196
|
+
it("a job run acting with the module's authority is denied while the switch is off, and proceeds once restored", async () => {
|
|
197
|
+
const s = await newScope();
|
|
198
|
+
await grant(s, 'jobs:write', JOBS);
|
|
199
|
+
await off(s, JOBS);
|
|
200
|
+
const run = await host.startJobRun(t, s, { moduleId: JOBS, job: 'record', instance: 'x', payload: {} });
|
|
201
|
+
const denied = await host.runDueJobs(t, s);
|
|
202
|
+
expect(denied.completed).toBe(0);
|
|
203
|
+
const stalled = (await host.jobRuns(t, s)).find((r) => r.id === run.id);
|
|
204
|
+
expect(stalled?.status).not.toBe('completed');
|
|
205
|
+
expect(stalled?.lastError).toMatch(/jobs:write/);
|
|
206
|
+
expect((await (await host.getScope(reader, t, s)).invoke('jobs/items'))).toEqual([]);
|
|
207
|
+
// The twin: restored, the same run's next pass records its item and completes.
|
|
208
|
+
await on(s, JOBS);
|
|
209
|
+
const resumed = await host.runDueJobs(t, s);
|
|
210
|
+
expect(resumed.completed).toBe(1);
|
|
211
|
+
expect((await (await host.getScope(reader, t, s)).invoke('jobs/items'))).toEqual(['one']);
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=system-switch-suite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-switch-suite.js","sourceRoot":"","sources":["../src/system-switch-suite.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@substrat-run/contract-tests",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.118.0",
|
|
4
4
|
"description": "The suite every scope-host adapter must pass, forever (D-14)",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"repository": {
|
|
@@ -30,19 +30,20 @@
|
|
|
30
30
|
"dist"
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"
|
|
34
|
-
"@substrat-run/
|
|
35
|
-
"@substrat-run/kernel": "^0.116.0"
|
|
33
|
+
"@substrat-run/contracts": "^0.118.0",
|
|
34
|
+
"@substrat-run/kernel": "^0.118.0"
|
|
36
35
|
},
|
|
37
36
|
"devDependencies": {
|
|
38
37
|
"@types/node": "^22.0.0",
|
|
39
38
|
"typescript": "^7.0.0",
|
|
39
|
+
"vitest": "^3.2.7",
|
|
40
40
|
"zod": "^4.4.3"
|
|
41
41
|
},
|
|
42
42
|
"publishConfig": {
|
|
43
43
|
"access": "public"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
|
+
"vitest": "^3.2.7",
|
|
46
47
|
"zod": "^4.4.0"
|
|
47
48
|
},
|
|
48
49
|
"scripts": {
|