@substrat-run/contract-tests 0.159.0 → 0.161.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 (75) hide show
  1. package/dist/attachment-bytes-suite.d.ts +9 -0
  2. package/dist/attachment-bytes-suite.d.ts.map +1 -0
  3. package/dist/attachment-bytes-suite.js +97 -0
  4. package/dist/attachment-bytes-suite.js.map +1 -0
  5. package/dist/connector-fixture.d.ts +2 -2
  6. package/dist/connector-fixture.d.ts.map +1 -1
  7. package/dist/directory-audit-suite.d.ts +23 -0
  8. package/dist/directory-audit-suite.d.ts.map +1 -0
  9. package/dist/directory-audit-suite.js +560 -0
  10. package/dist/directory-audit-suite.js.map +1 -0
  11. package/dist/directory-restore-suite.d.ts.map +1 -1
  12. package/dist/directory-restore-suite.js +99 -0
  13. package/dist/directory-restore-suite.js.map +1 -1
  14. package/dist/index.d.ts +11 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +14 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/introspection-reads-suite.d.ts +35 -0
  19. package/dist/introspection-reads-suite.d.ts.map +1 -0
  20. package/dist/introspection-reads-suite.js +114 -0
  21. package/dist/introspection-reads-suite.js.map +1 -0
  22. package/dist/many-migrations-suite.d.ts +9 -0
  23. package/dist/many-migrations-suite.d.ts.map +1 -0
  24. package/dist/many-migrations-suite.js +76 -0
  25. package/dist/many-migrations-suite.js.map +1 -0
  26. package/dist/many-migrations.d.ts +16 -0
  27. package/dist/many-migrations.d.ts.map +1 -0
  28. package/dist/many-migrations.js +50 -0
  29. package/dist/many-migrations.js.map +1 -0
  30. package/dist/membership-executor-suite.d.ts.map +1 -1
  31. package/dist/membership-executor-suite.js +8 -5
  32. package/dist/membership-executor-suite.js.map +1 -1
  33. package/dist/modules.d.ts.map +1 -1
  34. package/dist/modules.js +10 -0
  35. package/dist/modules.js.map +1 -1
  36. package/dist/reserved-role-suite.d.ts +6 -0
  37. package/dist/reserved-role-suite.d.ts.map +1 -1
  38. package/dist/reserved-role-suite.js +176 -8
  39. package/dist/reserved-role-suite.js.map +1 -1
  40. package/dist/restore-role-suite.d.ts +17 -0
  41. package/dist/restore-role-suite.d.ts.map +1 -0
  42. package/dist/restore-role-suite.js +107 -0
  43. package/dist/restore-role-suite.js.map +1 -0
  44. package/dist/role-state-suite.d.ts +17 -0
  45. package/dist/role-state-suite.d.ts.map +1 -0
  46. package/dist/role-state-suite.js +80 -0
  47. package/dist/role-state-suite.js.map +1 -0
  48. package/dist/schedule-platform-requests-suite.d.ts +7 -1
  49. package/dist/schedule-platform-requests-suite.d.ts.map +1 -1
  50. package/dist/schedule-platform-requests-suite.js +349 -2
  51. package/dist/schedule-platform-requests-suite.js.map +1 -1
  52. package/dist/schedule-purge-request-module.d.ts +88 -0
  53. package/dist/schedule-purge-request-module.d.ts.map +1 -0
  54. package/dist/schedule-purge-request-module.js +114 -0
  55. package/dist/schedule-purge-request-module.js.map +1 -0
  56. package/dist/schedule-purge-two-module.d.ts +141 -0
  57. package/dist/schedule-purge-two-module.d.ts.map +1 -0
  58. package/dist/schedule-purge-two-module.js +153 -0
  59. package/dist/schedule-purge-two-module.js.map +1 -0
  60. package/dist/scope-host-suite.d.ts.map +1 -1
  61. package/dist/scope-host-suite.js +1329 -8
  62. package/dist/scope-host-suite.js.map +1 -1
  63. package/dist/size-reads-suite.d.ts +20 -0
  64. package/dist/size-reads-suite.d.ts.map +1 -0
  65. package/dist/size-reads-suite.js +77 -0
  66. package/dist/size-reads-suite.js.map +1 -0
  67. package/dist/stored-vertical-copy-suite.d.ts +15 -0
  68. package/dist/stored-vertical-copy-suite.d.ts.map +1 -0
  69. package/dist/stored-vertical-copy-suite.js +68 -0
  70. package/dist/stored-vertical-copy-suite.js.map +1 -0
  71. package/dist/unreadable-scope-row-suite.d.ts +16 -0
  72. package/dist/unreadable-scope-row-suite.d.ts.map +1 -0
  73. package/dist/unreadable-scope-row-suite.js +152 -0
  74. package/dist/unreadable-scope-row-suite.js.map +1 -0
  75. package/package.json +3 -3
@@ -20,6 +20,12 @@ import { RSV_RUN, RSV_USE, reservedRoleMod, unmarkedReservedRoleMod } from './re
20
20
  * - So is a connection grant (`grantToConnection`), at either node: a connection acts for the
21
21
  * external provider holding its token. Nothing is recorded for a later provision to deliver.
22
22
  * - Each refusal writes nothing: the principal holds nothing afterwards.
23
+ * - A role DEFINITION is judged too (#2447): `defineRole` refuses a person's role carrying a
24
+ * reserved key and a system-held role carrying a person's key, so a role cannot be widened after
25
+ * it was assigned; a seat holding a key reserved after it was seated keeps working, through a
26
+ * refused redefinition and a fan-out. A host that registers no reserving module learns the
27
+ * reservation from the tenant's system-held roles, admits a key it knows nothing about
28
+ * (fail-open), and its person's doors refuse a role stored `holder: 'system'`.
23
29
  *
24
30
  * And the host option `permissions`: a host given its declared surface refuses to register a
25
31
  * module the surface leaves out, and holds the reservations the surface declares whatever is
@@ -33,11 +39,16 @@ export function reservedRoleContractSuite(adapterName, makeFixture) {
33
39
  const s1 = scopeId.parse(ulid());
34
40
  const staff = platformActorId.parse(ulid());
35
41
  const alice = principalId.parse(ulid()); // holds rsv:use tenant-wide, and rsv:run through a reserved-only role
42
+ const legacy = principalId.parse(ulid()); // seated in `mixed` before rsv:run was reserved here (#2447)
43
+ /** A key no module here declares: a host admits it (fail-open), so it fills out a role's list. */
44
+ const RSV_EXTRA = 'rsv:extra';
36
45
  const person = () => principalId.parse(ulid());
37
46
  const entity = () => ({ entityType: 'rsvdoc', entityId: ulid() });
38
47
  const RSV = moduleId.parse('@test/reserved-role');
39
48
  /** How a person's door refuses: worded for `canAssign`'s removal bound as well as for an assignment. */
40
49
  const NO_BOUND = "no person's bound covers it, to give the role or to take it back";
50
+ /** A person's door on `roleKey`: for the reserved key it holds, or (#2447) for its stored `holder: 'system'`. */
51
+ const personRefusal = (roleKey) => new RegExp(`role '${roleKey}' (holds rsv:run, reserved to a system principal|is declared holder: 'system', a role for a system principal): ${NO_BOUND}`);
41
52
  const holds = async (who, permission, on) => {
42
53
  const stub = await host.getScope(who, t1, s1);
43
54
  return (await stub.invoke('perm/probe', { permission, entity: on })).allowed;
@@ -45,17 +56,22 @@ export function reservedRoleContractSuite(adapterName, makeFixture) {
45
56
  beforeAll(async () => {
46
57
  fixture = await makeFixture();
47
58
  host = fixture.host;
48
- host.registerModule(reservedRoleMod);
49
59
  host.registerModule(permMod); // its `perm/probe` reports what a principal holds
50
60
  await host.admin.createTenant(staff, { id: t1, slug: 'reserved-role-tenant', name: 'Reserved' });
61
+ // #2447: a role definition is judged when it is written, so the roles below that a person may
62
+ // not hold exist the one way they still can: defined before the module reserving rsv:run was
63
+ // registered here (a key an engine reserves in a later version). `legacy` is seated then too.
64
+ await host.admin.defineRole(staff, t1, { key: 'mixed', permissions: [RSV_USE, RSV_RUN], source: 'vertical' });
65
+ await host.admin.defineRole(staff, t1, { key: 'person-runner', permissions: [RSV_RUN], source: 'vertical' });
66
+ await host.admin.defineRole(staff, t1, { key: 'wide', permissions: [RSV_USE, RSV_RUN, RSV_EXTRA], source: 'vertical' });
67
+ await host.admin.assignRole(staff, { principalId: legacy, roleKey: 'mixed', node: { tenantId: t1, scopeId: null } });
68
+ host.registerModule(reservedRoleMod);
51
69
  await host.admin.grantEntitlement(staff, t1, 'perm');
52
70
  await host.admin.grantEntitlement(staff, t1, 'rsv');
53
71
  await host.provisionScope(staff, { tenantId: t1, scopeId: s1, vertical: 'rsv-vertical' });
54
72
  await host.admin.activateScope(staff, t1, s1);
55
73
  await host.admin.defineRole(staff, t1, { key: 'member', permissions: [RSV_USE], source: 'vertical' });
56
- await host.admin.defineRole(staff, t1, { key: 'mixed', permissions: [RSV_USE, RSV_RUN], source: 'vertical' });
57
74
  await host.admin.defineRole(staff, t1, { key: 'runner', permissions: [RSV_RUN], source: 'vertical', holder: 'system' });
58
- await host.admin.defineRole(staff, t1, { key: 'person-runner', permissions: [RSV_RUN], source: 'vertical' });
59
75
  await host.admin.grant(staff, { principalId: alice, permission: RSV_USE, node: { tenantId: t1, scopeId: null }, grantedBy: alice });
60
76
  // The platform door admits a role made only of reserved keys, so alice can hold rsv:run.
61
77
  await host.admin.assignRole(staff, { principalId: alice, roleKey: 'runner', node: { tenantId: t1, scopeId: null } });
@@ -103,7 +119,7 @@ export function reservedRoleContractSuite(adapterName, makeFixture) {
103
119
  describe('a person’s doors', () => {
104
120
  it.each(['runner', 'mixed'])('assignScopeRoleBounded refuses %s to a caller who holds it, and writes nothing', async (roleKey) => {
105
121
  const who = person();
106
- await expectRefusal(host.assignScopeRoleBounded(t1, s1, alice, who, roleKey), 'forbidden', new RegExp(`role '${roleKey}' holds rsv:run, reserved to a system principal: ${NO_BOUND}`));
122
+ await expectRefusal(host.assignScopeRoleBounded(t1, s1, alice, who, roleKey), 'forbidden', personRefusal(roleKey));
107
123
  expect(await host.listScopeRoleHolders(t1, s1, who)).toEqual([]);
108
124
  expect(await holds(who, RSV_RUN)).toBe(false);
109
125
  });
@@ -115,7 +131,7 @@ export function reservedRoleContractSuite(adapterName, makeFixture) {
115
131
  it.each(['runner', 'mixed'])('changeScopeRoleBounded refuses moving someone into %s, and leaves the role they held', async (roleKey) => {
116
132
  const who = person();
117
133
  await host.assignScopeRoleBounded(t1, s1, alice, who, 'member');
118
- await expectRefusal(host.changeScopeRoleBounded(t1, s1, alice, who, 'member', roleKey), 'forbidden', new RegExp(`role '${roleKey}' holds rsv:run.*${NO_BOUND}`));
134
+ await expectRefusal(host.changeScopeRoleBounded(t1, s1, alice, who, 'member', roleKey), 'forbidden', personRefusal(roleKey));
119
135
  expect(await host.listScopeRoleHolders(t1, s1, who)).toEqual([{ principal: who, roleKey: 'member' }]);
120
136
  });
121
137
  it('canAssign answers as the door does: a reserved role is refused, a person’s role is covered', async () => {
@@ -125,7 +141,7 @@ export function reservedRoleContractSuite(adapterName, makeFixture) {
125
141
  it('…and so does ctx.canAssign, inside an operation, for a caller who holds every key of the role', async () => {
126
142
  const as = await host.getScope(alice, t1, s1);
127
143
  await expectRefusal(as.invoke('perm/can-assign', { roleKey: 'mixed' }), 'forbidden', new RegExp(`role 'mixed' holds rsv:run.*${NO_BOUND}`));
128
- await expectRefusal(as.invoke('perm/can-assign', { roleKey: 'runner' }), 'forbidden', new RegExp(`role 'runner' holds rsv:run.*${NO_BOUND}`));
144
+ await expectRefusal(as.invoke('perm/can-assign', { roleKey: 'runner' }), 'forbidden', personRefusal('runner'));
129
145
  expect(await as.invoke('perm/can-assign', { roleKey: 'member' })).toEqual({ covered: true, missing: [] });
130
146
  });
131
147
  it('a membership add of a reserved role applies nothing, and says why; its twin applies', async () => {
@@ -223,6 +239,158 @@ export function reservedRoleContractSuite(adapterName, makeFixture) {
223
239
  expect(await holds(who, RSV_USE, on)).toBe(true);
224
240
  });
225
241
  });
242
+ describe('role definitions (#2447)', () => {
243
+ const stored = async (key) => (await host.admin.listRoles(staff, { tenantId: t1 })).find((r) => r.key === key)?.permissions;
244
+ it('refuses defining a person’s role carrying a reserved key, and writes nothing; its twin is defined', async () => {
245
+ await expectRefusal(host.admin.defineRole(staff, t1, { key: 'crew', permissions: [RSV_USE, RSV_RUN], source: 'vertical' }), 'forbidden', /role 'crew' is a person's role and would hold rsv:run \(a module this host registers/);
246
+ expect(await stored('crew')).toBeUndefined();
247
+ await host.admin.defineRole(staff, t1, { key: 'crew', permissions: [RSV_USE], source: 'vertical' });
248
+ expect(await stored('crew')).toEqual([RSV_USE]);
249
+ });
250
+ it('refuses widening a role after it was assigned: the seat keeps exactly what it held', async () => {
251
+ const who = person();
252
+ await host.admin.defineRole(staff, t1, { key: 'grows', permissions: [RSV_USE], source: 'vertical' });
253
+ await host.admin.assignRole(staff, { principalId: who, roleKey: 'grows', node: { tenantId: t1, scopeId: s1 } });
254
+ await expectRefusal(host.admin.defineRole(staff, t1, { key: 'grows', permissions: [RSV_USE, RSV_RUN], source: 'vertical' }), 'forbidden', /role 'grows' is a person's role and would hold rsv:run/);
255
+ expect(await stored('grows')).toEqual([RSV_USE]);
256
+ expect(await holds(who, RSV_USE)).toBe(true);
257
+ expect(await holds(who, RSV_RUN)).toBe(false);
258
+ });
259
+ it('revokes nothing: a seat holding a key reserved after it was seated keeps working, through a refused redefinition and a fan-out', async () => {
260
+ expect(await holds(legacy, RSV_RUN)).toBe(true);
261
+ await expectRefusal(host.admin.defineRole(staff, t1, { key: 'mixed', permissions: [RSV_USE, RSV_RUN], source: 'vertical' }), 'forbidden', /role 'mixed' is a person's role and would hold rsv:run/);
262
+ // A tenant-level assignment fans the stored roles out to the scopes; the stored definition
263
+ // is projected as it is, never re-judged, so the seat is not narrowed or dropped by it.
264
+ await host.admin.assignRole(staff, { principalId: person(), roleKey: 'member', node: { tenantId: t1, scopeId: null } });
265
+ expect(await stored('mixed')).toEqual([RSV_USE, RSV_RUN]);
266
+ expect(await holds(legacy, RSV_RUN)).toBe(true);
267
+ expect(await holds(legacy, RSV_USE)).toBe(true);
268
+ });
269
+ it('a narrowing is never refused for the key it takes out, only for a reserved key it still holds', async () => {
270
+ // `wide` [rsv:use, rsv:run, rsv:extra] predates the reservation (the first hook).
271
+ await expectRefusal(host.admin.defineRole(staff, t1, { key: 'wide', permissions: [RSV_USE, RSV_RUN], source: 'vertical' }), 'forbidden', /role 'wide' is a person's role and would hold rsv:run/);
272
+ expect(await stored('wide')).toEqual([RSV_USE, RSV_RUN, RSV_EXTRA]);
273
+ await host.admin.defineRole(staff, t1, { key: 'wide', permissions: [RSV_USE], source: 'vertical' });
274
+ expect(await stored('wide')).toEqual([RSV_USE]);
275
+ });
276
+ it('refuses a system-held role holding a key a registered module declares for a person; its twin is defined', async () => {
277
+ await expectRefusal(host.admin.defineRole(staff, t1, { key: 'wide-runner', permissions: [RSV_RUN, RSV_USE], source: 'vertical', holder: 'system' }), 'forbidden', /role 'wide-runner' is declared holder: 'system' but holds rsv:use \(declared for a person by a module this host registers\)/);
278
+ expect(await stored('wide-runner')).toBeUndefined();
279
+ await host.admin.defineRole(staff, t1, { key: 'wide-runner', permissions: [RSV_RUN], source: 'vertical', holder: 'system' });
280
+ expect(await stored('wide-runner')).toEqual([RSV_RUN]);
281
+ });
282
+ });
283
+ describe('a holder change, judged against the stored role and its seats (#2447 round 1)', () => {
284
+ const stored = async (key) => (await host.admin.listRoles(staff, { tenantId: t1 })).find((r) => r.key === key);
285
+ it('refuses making a seated person’s role holder: system, and writes nothing: its seat keeps what it held', async () => {
286
+ const bob = person();
287
+ await host.admin.defineRole(staff, t1, { key: 'staffer', permissions: [RSV_USE], source: 'vertical' });
288
+ await host.admin.assignRole(staff, { principalId: bob, roleKey: 'staffer', node: { tenantId: t1, scopeId: s1 } });
289
+ await expectRefusal(host.admin.defineRole(staff, t1, { key: 'staffer', permissions: [RSV_RUN], source: 'vertical', holder: 'system' }), 'forbidden', /role 'staffer' is held by a principal \(stored as a person's role\), so it cannot be declared holder: 'system'/);
290
+ expect(await stored('staffer')).toMatchObject({ permissions: [RSV_USE], holder: 'person' });
291
+ expect(await holds(bob, RSV_RUN)).toBe(false);
292
+ expect(await holds(bob, RSV_USE)).toBe(true);
293
+ });
294
+ it('…and refuses it for a tenant-level seat too', async () => {
295
+ await host.admin.defineRole(staff, t1, { key: 'staffer-t', permissions: [RSV_USE], source: 'vertical' });
296
+ await host.admin.assignRole(staff, { principalId: person(), roleKey: 'staffer-t', node: { tenantId: t1, scopeId: null } });
297
+ await expectRefusal(host.admin.defineRole(staff, t1, { key: 'staffer-t', permissions: [RSV_RUN], source: 'vertical', holder: 'system' }), 'forbidden', /held by a principal/);
298
+ });
299
+ it('refuses a system-held definition of a key someone holds with NO definition stored (round 2)', async () => {
300
+ // A seat made before any definition of its key: the platform's door seats an undefined role.
301
+ const bob = person();
302
+ await host.admin.assignRole(staff, { principalId: bob, roleKey: 'ghost', node: { tenantId: t1, scopeId: s1 } });
303
+ await expectRefusal(host.admin.defineRole(staff, t1, { key: 'ghost', permissions: [RSV_RUN], source: 'vertical', holder: 'system' }), 'forbidden', /role 'ghost' is held by a principal \(with no definition stored\)/);
304
+ expect(await stored('ghost')).toBeUndefined();
305
+ expect(await holds(bob, RSV_RUN)).toBe(false);
306
+ // Its twin: a person's definition of that key is judged as a first one, and defined.
307
+ await host.admin.defineRole(staff, t1, { key: 'ghost', permissions: [RSV_USE], source: 'vertical' });
308
+ });
309
+ it('counts the seats of an archived scope, which unarchive brings back (round 2)', async () => {
310
+ const shelf = scopeId.parse(ulid());
311
+ const bob = person();
312
+ await host.provisionScope(staff, { tenantId: t1, scopeId: shelf, vertical: 'rsv-vertical' });
313
+ await host.admin.activateScope(staff, t1, shelf);
314
+ await host.admin.defineRole(staff, t1, { key: 'shelved', permissions: [RSV_USE], source: 'vertical' });
315
+ await host.admin.assignRole(staff, { principalId: bob, roleKey: 'shelved', node: { tenantId: t1, scopeId: shelf } });
316
+ await host.admin.archiveScope(staff, t1, shelf);
317
+ await expectRefusal(host.admin.defineRole(staff, t1, { key: 'shelved', permissions: [RSV_RUN], source: 'vertical', holder: 'system' }), 'forbidden', /role 'shelved' is held by a principal/);
318
+ await host.admin.unarchiveScope(staff, t1, shelf);
319
+ expect(await host.listScopeRoleHolders(t1, shelf, bob)).toEqual([{ principal: bob, roleKey: 'shelved' }]);
320
+ expect(await stored('shelved')).toMatchObject({ permissions: [RSV_USE], holder: 'person' });
321
+ });
322
+ it('counts a seat in a scope archived straight from provisioning; unarchive brings it back unchanged (round 4)', async () => {
323
+ const early = scopeId.parse(ulid());
324
+ const bob = person();
325
+ await host.provisionScope(staff, { tenantId: t1, scopeId: early, vertical: 'rsv-vertical' }); // never activated
326
+ await host.admin.defineRole(staff, t1, { key: 'esc', permissions: [RSV_USE], source: 'vertical' });
327
+ await host.admin.assignRole(staff, { principalId: bob, roleKey: 'esc', node: { tenantId: t1, scopeId: early } });
328
+ await host.admin.archiveScope(staff, t1, early);
329
+ await expectRefusal(host.admin.defineRole(staff, t1, { key: 'esc', permissions: [RSV_RUN], source: 'vertical', holder: 'system' }), 'forbidden', /role 'esc' is held by a principal/);
330
+ await host.admin.unarchiveScope(staff, t1, early);
331
+ expect(await host.listScopeRoleHolders(t1, early, bob)).toEqual([{ principal: bob, roleKey: 'esc' }]);
332
+ expect(await stored('esc')).toMatchObject({ permissions: [RSV_USE], holder: 'person' });
333
+ const probe = await host.getScope(bob, t1, early);
334
+ expect((await probe.invoke('perm/probe', { permission: RSV_RUN })).allowed).toBe(false);
335
+ });
336
+ it('twin: the same change to a role nobody holds is judged as a first definition, and admitted', async () => {
337
+ await host.admin.defineRole(staff, t1, { key: 'idle', permissions: [RSV_USE], source: 'vertical' });
338
+ await host.admin.defineRole(staff, t1, { key: 'idle', permissions: [RSV_RUN], source: 'vertical', holder: 'system' });
339
+ expect(await stored('idle')).toMatchObject({ permissions: [RSV_RUN], holder: 'system' });
340
+ });
341
+ });
342
+ describe('a host that registers no module reserving the key (#2447)', () => {
343
+ let bare;
344
+ const t = tenantId.parse(ulid());
345
+ const other = tenantId.parse(ulid());
346
+ const roster = async (tenant) => (await bare.host.admin.listRoles(staff, { tenantId: tenant })).map((r) => r.key).sort();
347
+ beforeAll(async () => {
348
+ bare = await makeFixture();
349
+ bare.host.registerModule(permMod); // declares nothing of rsv
350
+ for (const [id, slug] of [[t, 'rsv-bare'], [other, 'rsv-bare-other']]) {
351
+ await bare.host.admin.createTenant(staff, { id, slug: `${slug}-${id.slice(-8).toLowerCase()}`, name: 'Bare' });
352
+ }
353
+ await bare.host.admin.defineRole(staff, t, { key: 'host-runner', permissions: [RSV_RUN], source: 'vertical', holder: 'system' });
354
+ await bare.host.admin.defineRole(staff, t, { key: 'member', permissions: [RSV_USE], source: 'vertical' });
355
+ });
356
+ afterAll(async () => {
357
+ await bare?.cleanup();
358
+ });
359
+ it('learns the reservation from the tenant’s system-held roles: a person’s role carrying one of their keys is refused', async () => {
360
+ await expectRefusal(bare.host.admin.defineRole(staff, t, { key: 'crew', permissions: [RSV_USE, RSV_RUN], source: 'vertical' }), 'forbidden', /role 'crew' is a person's role and would hold rsv:run \(held by the system-held role 'host-runner'\)/);
361
+ expect(await roster(t)).toEqual(['host-runner', 'member']);
362
+ });
363
+ it('fails open on a key it knows nothing about: with no system-held role holding it, the same role is defined', async () => {
364
+ await bare.host.admin.defineRole(staff, other, { key: 'crew', permissions: [RSV_USE, RSV_RUN], source: 'vertical' });
365
+ expect(await roster(other)).toEqual(['crew']);
366
+ });
367
+ it('judges a system-held role redefined as a person’s with its stored keys reserved (#2447 round 1); its twin is defined', async () => {
368
+ // A key only this role holds, so its own stored definition is the only evidence there is.
369
+ const SOLO = 'rsv:solo';
370
+ await bare.host.admin.defineRole(staff, t, { key: 'solo-runner', permissions: [SOLO], source: 'vertical', holder: 'system' });
371
+ await expectRefusal(bare.host.admin.defineRole(staff, t, { key: 'solo-runner', permissions: [SOLO], source: 'vertical' }), 'forbidden', /role 'solo-runner' is a person's role and would hold rsv:solo \(held by its stored system-held definition\)/);
372
+ expect((await bare.host.admin.listRoles(staff, { tenantId: t })).find((r) => r.key === 'solo-runner')?.holder).toBe('system');
373
+ await bare.host.admin.defineRole(staff, t, { key: 'solo-runner', permissions: [RSV_USE], source: 'vertical' });
374
+ expect((await bare.host.admin.listRoles(staff, { tenantId: t })).find((r) => r.key === 'solo-runner')?.holder).toBe('person');
375
+ });
376
+ it('a person’s door refuses the system-held role from its stored holder alone; its twin applies', async () => {
377
+ const boss = person();
378
+ await bare.host.admin.assignRole(staff, { principalId: boss, roleKey: 'member', node: { tenantId: t, scopeId: null } });
379
+ const add = (roleKey) => bare.host.admin.applyMembership(staff, {
380
+ op: 'add',
381
+ tenantId: t,
382
+ principal: person(),
383
+ roleKey,
384
+ boundedBy: boss,
385
+ unlessRemovedSince: instant.parse(new Date(Date.now() - 60_000).toISOString()),
386
+ });
387
+ expect(await add('host-runner')).toEqual({
388
+ applied: false,
389
+ reserved: expect.stringMatching(new RegExp(`role 'host-runner' is declared holder: 'system', a role for a system principal: ${NO_BOUND}`)),
390
+ });
391
+ expect(await add('member')).toEqual({ applied: true });
392
+ });
393
+ });
226
394
  describe('the declared permission surface (`permissions`)', () => {
227
395
  it('refuses to register a module the surface leaves out, naming it', async () => {
228
396
  const other = await makeFixture({ permissions: { modules: [{ manifest: { id: '@test/elsewhere' } }] } });
@@ -248,8 +416,8 @@ export function reservedRoleContractSuite(adapterName, makeFixture) {
248
416
  try {
249
417
  declared.host.registerModule(unmarkedReservedRoleMod);
250
418
  await declared.host.admin.createTenant(staff, { id: t, slug: `rsv-union-${t.slice(-10).toLowerCase()}`, name: 'Union' });
251
- await declared.host.admin.defineRole(staff, t, { key: 'mixed', permissions: [RSV_USE, RSV_RUN], source: 'vertical' });
252
- await expectRefusal(declared.host.admin.assignRole(staff, { principalId: person(), roleKey: 'mixed', node: { tenantId: t, scopeId: null } }), 'forbidden', /role 'mixed' holds rsv:run, reserved to a system principal/);
419
+ // #2447: the role definition is where the held reservation now refuses first.
420
+ await expectRefusal(declared.host.admin.defineRole(staff, t, { key: 'mixed', permissions: [RSV_USE, RSV_RUN], source: 'vertical' }), 'forbidden', /role 'mixed' is a person's role and would hold rsv:run/);
253
421
  }
254
422
  finally {
255
423
  await declared.cleanup();
@@ -1 +1 @@
1
- {"version":3,"file":"reserved-role-suite.js","sourceRoot":"","sources":["../src/reserved-role-suite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reserved-role-suite.js","sourceRoot":"","sources":["../src/reserved-role-suite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type ScopeId, type TenantId } from '@substrat-run/contracts';
2
+ import { type RoleState } from '@substrat-run/kernel';
3
+ import type { ScopeHostFixture } from './scope-host-suite.js';
4
+ /**
5
+ * #2555: a staff restore or import on a host the control plane runs (`restoreScope`, `importScope`)
6
+ * judges the tenant's roles as the directory stores them NOW against the dump's seats and role rows
7
+ * (`dumpRoleRefusal`), before anything is replaced. A dump holding a seat in a role the directory
8
+ * has since made system-held is refused, with nothing loaded and no scope created; the twin without
9
+ * the seat is admitted. A change the rule admits leaves the dump's seats as they were: nothing is
10
+ * revoked. The refusal is one fixed sentence naming the role key only.
11
+ */
12
+ export declare function restoreRoleContractSuite(adapterName: string, makeFixture: () => Promise<ScopeHostFixture & {
13
+ roleState(tenantId: TenantId, scopeId: ScopeId): Promise<RoleState>;
14
+ /** Whether this host's dump stores the tenant's role rows (a scope that reads its roles locally). */
15
+ dumpCarriesRoles: boolean;
16
+ }>): void;
17
+ //# sourceMappingURL=restore-role-suite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore-role-suite.d.ts","sourceRoot":"","sources":["../src/restore-role-suite.ts"],"names":[],"mappings":"AACA,OAAO,EAAuE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC3I,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,OAAO,CACxB,gBAAgB,GAAG;IACjB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACpE,qGAAqG;IACrG,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CACF,GACA,IAAI,CAuGN"}
@@ -0,0 +1,107 @@
1
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
2
+ import { platformActorId, principalId, scopeId, tenantId } from '@substrat-run/contracts';
3
+ import { ulid } from '@substrat-run/kernel';
4
+ /**
5
+ * #2555: a staff restore or import on a host the control plane runs (`restoreScope`, `importScope`)
6
+ * judges the tenant's roles as the directory stores them NOW against the dump's seats and role rows
7
+ * (`dumpRoleRefusal`), before anything is replaced. A dump holding a seat in a role the directory
8
+ * has since made system-held is refused, with nothing loaded and no scope created; the twin without
9
+ * the seat is admitted. A change the rule admits leaves the dump's seats as they were: nothing is
10
+ * revoked. The refusal is one fixed sentence naming the role key only.
11
+ */
12
+ export function restoreRoleContractSuite(adapterName, makeFixture) {
13
+ describe(`a restore judges the directory's roles against the dump's seats (#2555): ${adapterName}`, () => {
14
+ let fixture;
15
+ const staff = platformActorId.parse(ulid());
16
+ const t = tenantId.parse(ulid());
17
+ const alice = principalId.parse(ulid());
18
+ const USE = 'rrs:use';
19
+ const RUN = 'rrs:run';
20
+ const undefinedInDump = (key) => `restore refused: the dump seats role '${key}' but carries no definition of it, so its seats cannot be told from a person's, ` +
21
+ `and the tenant now defines the role for a system principal (K-55); nothing was loaded`;
22
+ /** The refusal of a seat in a role since made system-held: which sentence depends on whether the dump stores the role. */
23
+ const refusalFor = (key) => fixture.dumpCarriesRoles
24
+ ? `restore refused: role '${key}', which the dump seats or defines, cannot be applied as the tenant defines it now (K-55); nothing was loaded`
25
+ : undefinedInDump(key);
26
+ const scope = async () => {
27
+ const id = scopeId.parse(ulid());
28
+ await fixture.host.provisionScope(staff, { tenantId: t, scopeId: id, vertical: 'restore-roles' });
29
+ await fixture.host.admin.activateScope(staff, t, id);
30
+ return id;
31
+ };
32
+ const seat = (roleKey, at) => ({ principalId: alice, roleKey, node: { tenantId: t, scopeId: at } });
33
+ const refusalOf = (p) => p.then(() => undefined, (e) => e);
34
+ beforeAll(async () => {
35
+ fixture = await makeFixture();
36
+ await fixture.host.admin.createTenant(staff, { id: t, slug: `restore-roles-${t.slice(-8).toLowerCase()}`, name: 'Restore roles' });
37
+ });
38
+ afterAll(async () => fixture?.cleanup());
39
+ it('a dump seated in a role since made system-held is refused: nothing loaded, no scope created', async () => {
40
+ const s = await scope();
41
+ await fixture.host.admin.defineRole(staff, t, { key: 'member', permissions: [USE], source: 'vertical' });
42
+ await fixture.host.admin.assignRole(staff, seat('member', s));
43
+ const dump = await fixture.host.admin.exportScope(staff, t, s);
44
+ // The seat is taken back, so the directory may now make the role system-held.
45
+ await fixture.host.admin.unassignRole(staff, seat('member', s));
46
+ await fixture.host.admin.defineRole(staff, t, { key: 'member', permissions: [RUN], source: 'vertical', holder: 'system' });
47
+ const restored = await refusalOf(fixture.host.restoreScope(staff, t, s, dump));
48
+ expect(restored?.message).toBe(refusalFor('member'));
49
+ // The scope is as it was: the seat the dump holds did not come back.
50
+ expect((await fixture.roleState(t, s)).seated).toEqual([]);
51
+ const fresh = scopeId.parse(ulid());
52
+ const imported = await refusalOf(fixture.host.importScope(staff, { tenantId: t, scopeId: fresh, vertical: 'restore-roles' }, dump));
53
+ expect(imported?.message).toBe(refusalFor('member'));
54
+ expect((await fixture.host.admin.getScopeRecord(staff, t, fresh)) ?? null).toBeNull();
55
+ });
56
+ it('the refusal names the role key only: no principal, no tenant', async () => {
57
+ const s = await scope();
58
+ await fixture.host.admin.defineRole(staff, t, { key: 'named', permissions: [USE], source: 'vertical' });
59
+ await fixture.host.admin.assignRole(staff, seat('named', s));
60
+ const dump = await fixture.host.admin.exportScope(staff, t, s);
61
+ await fixture.host.admin.unassignRole(staff, seat('named', s));
62
+ await fixture.host.admin.defineRole(staff, t, { key: 'named', permissions: [RUN], source: 'vertical', holder: 'system' });
63
+ const message = (await refusalOf(fixture.host.restoreScope(staff, t, s, dump)))?.message ?? '';
64
+ expect(message).toBe(refusalFor('named'));
65
+ for (const id of [alice, t, s])
66
+ expect(message).not.toContain(id);
67
+ });
68
+ it('twin: the same change with no seat in the dump is admitted, by restore and by import', async () => {
69
+ const s = await scope();
70
+ await fixture.host.admin.defineRole(staff, t, { key: 'idle', permissions: [USE], source: 'vertical' });
71
+ const dump = await fixture.host.admin.exportScope(staff, t, s);
72
+ await fixture.host.admin.defineRole(staff, t, { key: 'idle', permissions: [RUN], source: 'vertical', holder: 'system' });
73
+ await fixture.host.restoreScope(staff, t, s, dump);
74
+ const fresh = scopeId.parse(ulid());
75
+ await fixture.host.importScope(staff, { tenantId: t, scopeId: fresh, vertical: 'restore-roles' }, dump);
76
+ expect((await fixture.host.admin.getScopeRecord(staff, t, fresh))?.status).toBe('active');
77
+ });
78
+ it('a person’s role the directory changed since is admitted, and the dump’s seat in it is kept', async () => {
79
+ const s = await scope();
80
+ await fixture.host.admin.defineRole(staff, t, { key: 'editor', permissions: [USE], source: 'vertical' });
81
+ await fixture.host.admin.assignRole(staff, seat('editor', s));
82
+ const dump = await fixture.host.admin.exportScope(staff, t, s);
83
+ await fixture.host.admin.unassignRole(staff, seat('editor', s));
84
+ await fixture.host.admin.defineRole(staff, t, { key: 'editor', permissions: [USE, 'rrs:edit'], source: 'vertical' });
85
+ await fixture.host.restoreScope(staff, t, s, dump);
86
+ expect((await fixture.roleState(t, s)).seated).toEqual(['editor']);
87
+ });
88
+ // Where the dump carries no role rows, this is a scope that cannot be restored from its own export (K-55).
89
+ it('a seat in a role stored system-held when the dump was taken: admitted where the dump stores the role, else judged a person’s', async () => {
90
+ const s = await scope();
91
+ await fixture.host.admin.defineRole(staff, t, { key: 'runner', permissions: [RUN], source: 'vertical', holder: 'system' });
92
+ // The platform's door seats a system-held role made only of keys this host does not reserve.
93
+ await fixture.host.admin.assignRole(staff, seat('runner', s));
94
+ const dump = await fixture.host.admin.exportScope(staff, t, s);
95
+ const restored = await refusalOf(fixture.host.restoreScope(staff, t, s, dump));
96
+ if (fixture.dumpCarriesRoles) {
97
+ expect(restored).toBeUndefined();
98
+ }
99
+ else {
100
+ // A dump with no role rows says nothing about the definition its seat was made under.
101
+ expect(restored?.message).toBe(undefinedInDump('runner'));
102
+ }
103
+ expect((await fixture.roleState(t, s)).seated).toEqual(['runner']);
104
+ });
105
+ });
106
+ }
107
+ //# sourceMappingURL=restore-role-suite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore-role-suite.js","sourceRoot":"","sources":["../src/restore-role-suite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type RoleDefinition, type ScopeId, type TenantId } from '@substrat-run/contracts';
2
+ import { type RoleState } from '@substrat-run/kernel';
3
+ import type { ScopeHostFixture } from './scope-host-suite.js';
4
+ /**
5
+ * #2446: `roleStateLocal`, the state a promote judges the incoming version's role set against
6
+ * before it moves a scope, reads the same on both adapters: the roles the host stores for the
7
+ * tenant (with their holders), and the role keys anyone holds a live scope-level seat in at that
8
+ * scope (`SCOPE_SEATED_ROLES_SQL`). A tenant-level seat is not a scope's; a revoked seat is not a
9
+ * seat. It names no principal. And the promote's question over it (`releaseRoleSetRefusal`) refuses
10
+ * a seated person's role made `holder: 'system'` and admits its unseated twin.
11
+ */
12
+ export declare function roleStateContractSuite(adapterName: string, makeFixture: () => Promise<ScopeHostFixture & {
13
+ roleState(tenantId: TenantId, scopeId: ScopeId): Promise<RoleState>;
14
+ /** Where a host keeps a scope-level copy of the tenant's roles (a CP-less deployment), project them there as its reconcile does. */
15
+ projectRoles?(tenantId: TenantId, scopeId: ScopeId, roles: RoleDefinition[]): Promise<void>;
16
+ }>): void;
17
+ //# sourceMappingURL=role-state-suite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-state-suite.d.ts","sourceRoot":"","sources":["../src/role-state-suite.ts"],"names":[],"mappings":"AACA,OAAO,EAAuE,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAChK,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,OAAO,CACxB,gBAAgB,GAAG;IACjB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACpE,oIAAoI;IACpI,YAAY,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7F,CACF,GACA,IAAI,CAwEN"}