@substrat-run/contract-tests 0.162.0 → 0.164.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.
@@ -13,6 +13,19 @@ export interface AttachmentTextHostFixture extends ScopeHostFixture {
13
13
  * to the store, since no host surface may write the spine.
14
14
  */
15
15
  forgetAttachmentText(tenantId: TenantId, scopeId: ScopeId): Promise<void>;
16
+ /**
17
+ * Write these indexed text attachments straight to the scope's store, in one batch — for a
18
+ * test whose subject is a page or a cap that uploads would take minutes to reach. No host
19
+ * surface writes the spine, so a fixture reaches the store the way `forgetAttachmentText` does.
20
+ */
21
+ plantIndexedAttachments(tenantId: TenantId, scopeId: ScopeId, rows: readonly PlantedAttachment[]): Promise<void>;
22
+ }
23
+ /** An attachment as an upload and its extraction would leave it: the row and its indexed text. */
24
+ export interface PlantedAttachment {
25
+ readonly id: string;
26
+ readonly entityId: string;
27
+ readonly filename: string;
28
+ readonly text: string;
16
29
  }
17
30
  export declare function attachmentTextContractSuite(adapterName: string, makeFixture: (options?: AttachmentTextHostOptions) => Promise<AttachmentTextHostFixture>): void;
18
31
  //# sourceMappingURL=attachment-text-suite.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-text-suite.d.ts","sourceRoot":"","sources":["../src/attachment-text-suite.ts"],"names":[],"mappings":"AAkCA,OAAO,EASL,KAAK,QAAQ,EAGb,KAAK,OAAO,EACb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAWL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAG1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAa9D,wFAAwF;AACxF,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/D,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IACjE;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3E;AAED,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,yBAAyB,KAAK,OAAO,CAAC,yBAAyB,CAAC,GACvF,IAAI,CAijBN"}
1
+ {"version":3,"file":"attachment-text-suite.d.ts","sourceRoot":"","sources":["../src/attachment-text-suite.ts"],"names":[],"mappings":"AAkCA,OAAO,EASL,KAAK,QAAQ,EAGb,KAAK,OAAO,EACb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAWL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAG1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAoB9D,wFAAwF;AACxF,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/D,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IACjE;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E;;;;OAIG;IACH,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClH;AAED,kGAAkG;AAClG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,yBAAyB,KAAK,OAAO,CAAC,yBAAyB,CAAC,GACvF,IAAI,CA+iBN"}
@@ -40,9 +40,15 @@ const PERM_READ = permissionKey.parse('perm:read');
40
40
  const PERM_USE = permissionKey.parse('perm:use');
41
41
  const item = (id) => ({ entityType: 'item', entityId: id });
42
42
  const bytes = (s) => new TextEncoder().encode(s);
43
- const UPLOAD_BATCH_SIZE = 20;
44
43
  /** For a test that uploads and extracts thousands of files: the setup, not the search, takes the time. */
45
44
  const SETUP_HEAVY_MS = 120_000;
45
+ /** A planted attachment; the id is `n` in hex, so ids order as `n` does. */
46
+ const planted = (n, entityId, filename, text) => ({
47
+ id: n.toString(16).toUpperCase().padStart(26, '0'),
48
+ entityId,
49
+ filename,
50
+ text,
51
+ });
46
52
  export function attachmentTextContractSuite(adapterName, makeFixture) {
47
53
  describe(`attachment text search (#1575): ${adapterName}`, () => {
48
54
  let fixture;
@@ -228,19 +234,11 @@ export function attachmentTextContractSuite(adapterName, makeFixture) {
228
234
  const control = await newScope();
229
235
  for (const scope of [s, control]) {
230
236
  await grant(scope, bob, item('allowed'));
231
- await upload(scope, item('allowed'), 'old.txt', 'text/plain', bytes('the margay ledger, readable'));
237
+ await fixture.plantIndexedAttachments(t, scope, [planted(0, 'allowed', 'old.txt', 'the margay ledger, readable')]);
232
238
  }
233
- // Every one of these is NEWER than old.txt. A scan bound applied before the gate would
234
- // have spent itself on them and handed bob nothing.
235
- // Keep the producer path, but pipeline a bounded number of independent uploads.
236
- for (let i = 0; i < 1001; i += UPLOAD_BATCH_SIZE) {
237
- await Promise.all(Array.from({ length: Math.min(UPLOAD_BATCH_SIZE, 1001 - i) }, (_, offset) => {
238
- const n = i + offset;
239
- return upload(s, item('denied'), `hidden-${n}.txt`, 'text/plain', bytes(`the margay ledger, hidden ${n}`));
240
- }));
241
- }
242
- await extract(s);
243
- await extract(control);
239
+ // Every one of these is NEWER than old.txt (a greater id). A scan bound applied before the
240
+ // gate would have spent itself on them and handed bob nothing.
241
+ await fixture.plantIndexedAttachments(t, s, Array.from({ length: 1001 }, (_, n) => planted(n + 1, 'denied', `hidden-${n}.txt`, `the margay ledger, hidden ${n}`)));
244
242
  for (const limit of [1, 20]) {
245
243
  const page = (await search(s, bob, 'margay', limit)).map((r) => r.filename);
246
244
  expect(page).toEqual(['old.txt']);
@@ -250,7 +248,7 @@ export function attachmentTextContractSuite(adapterName, makeFixture) {
250
248
  const editors = await search(s, editor, 'margay', 20);
251
249
  expect(editors).toHaveLength(20);
252
250
  expect(editors.map((r) => r.filename)).not.toContain('old.txt');
253
- }, SETUP_HEAVY_MS);
251
+ });
254
252
  it('is not "wide" for a node-level grant on a different key, nor for an entity grant alone', async () => {
255
253
  const s = await newScope();
256
254
  const dave = principalId.parse(ulid()); // `user` at the tenant (perm:use only) + perm:read on one item
@@ -268,13 +266,7 @@ export function attachmentTextContractSuite(adapterName, makeFixture) {
268
266
  it('refuses a narrowed caller past the owner cap — the same for a term with matches and one without', async () => {
269
267
  const s = await newScope();
270
268
  await grant(s, bob, item('o0'));
271
- for (let i = 0; i <= ATTACHMENT_SEARCH_OWNER_MAX; i += UPLOAD_BATCH_SIZE) {
272
- await Promise.all(Array.from({ length: Math.min(UPLOAD_BATCH_SIZE, ATTACHMENT_SEARCH_OWNER_MAX + 1 - i) }, (_, offset) => {
273
- const n = i + offset;
274
- return upload(s, item(`o${n}`), `o${n}.txt`, 'text/plain', bytes(n === 0 ? 'the jerboa note' : 'filler only'));
275
- }));
276
- }
277
- await extract(s);
269
+ await fixture.plantIndexedAttachments(t, s, Array.from({ length: ATTACHMENT_SEARCH_OWNER_MAX + 1 }, (_, n) => planted(n, `o${n}`, `o${n}.txt`, n === 0 ? 'the jerboa note' : 'filler only')));
278
270
  const refusalOf = async (term) => {
279
271
  const err = await search(s, bob, term).then(() => undefined, (e) => e);
280
272
  return { code: errorCodeOf(err), reason: err?.extensions?.reason };
@@ -284,7 +276,7 @@ export function attachmentTextContractSuite(adapterName, makeFixture) {
284
276
  expect(await refusalOf('nothingmatchesthis')).toEqual(refused); // no match at all
285
277
  // The twin: a caller who reads the type at the scope is never refused.
286
278
  expect((await search(s, editor, 'jerboa')).map((r) => r.filename)).toEqual(['o0.txt']);
287
- }, SETUP_HEAVY_MS);
279
+ });
288
280
  it('records no denial for a hit it withheld — nobody asked for that row', async () => {
289
281
  const s = await newScope();
290
282
  await upload(s, item('denied'), 'd.txt', 'text/plain', bytes('a withheld wombat'));
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-text-suite.js","sourceRoot":"","sources":["../src/attachment-text-suite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attachment-text-suite.js","sourceRoot":"","sources":["../src/attachment-text-suite.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@
8
8
  * `capabilityLive` / `capabilityExchangeable` in the kernel — for the checker, the session
9
9
  * door and the exchange alike, and the kernel's evaluator tests pin it against an expired
10
10
  * row directly. The DO's own transitions are asserted in adapter-cloudflare's
11
- * `test/contract.test.ts` (#1686), the one way its wall clock can see time pass: each
11
+ * `test/contract-hosts.test.ts` (#1686), the one way its wall clock can see time pass: each
12
12
  * stored instant moved behind it, in the ScopeDO's SQLite, for the same three clocks.
13
13
  *
14
14
  * Three clocks run out here, and each has a positive twin one step before it:
@@ -1 +1 @@
1
- {"version":3,"file":"directory-audit-suite.d.ts","sourceRoot":"","sources":["../src/directory-audit-suite.ts"],"names":[],"mappings":"AAKA,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAG5D;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,SAAS,CAAC;IAChB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,8FAA8F;IAC9F,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/C;;;;OAIG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AA8ZD;;;;GAIG;AACH,wBAAgB,mCAAmC,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAiXhI"}
1
+ {"version":3,"file":"directory-audit-suite.d.ts","sourceRoot":"","sources":["../src/directory-audit-suite.ts"],"names":[],"mappings":"AAKA,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAG5D;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,SAAS,CAAC;IAChB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,8FAA8F;IAC9F,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/C;;;;OAIG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAwhBD;;;;GAIG;AACH,wBAAgB,mCAAmC,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAijBhI"}
@@ -46,6 +46,27 @@ const newConnection = async (host, staff, t, vertical = 'audit-vertical') => {
46
46
  await host.admin.createConnection(staff, { id, tenantId: t, vertical, provider, label: 'Audit connection', secret: { accessToken: 'tok' } });
47
47
  return { id, provider };
48
48
  };
49
+ /** #2526: a provisioned scope in tenant `t`, with a lowercase hostname of its own to bind. */
50
+ const newScope = async (host, staff, t) => {
51
+ const s = scopeId.parse(ulid());
52
+ await host.provisionScope(staff, { tenantId: t, scopeId: s, vertical: await newVertical(host, staff) });
53
+ return s;
54
+ };
55
+ const hostnameOf = () => `audit-${ulid().toLowerCase()}.example.com`;
56
+ /**
57
+ * #2526: a hostname bound to scope `s` of tenant `t`, `pending` as a bind leaves it. Bound by an
58
+ * actor of its own, so its row is never one a case counts as the call's.
59
+ */
60
+ const bound = async (host, t, s, canonical = false) => {
61
+ const hostname = hostnameOf();
62
+ await host.admin.bindHostname(platformActorId.parse(ulid()), { hostname, tenantId: t, scopeId: s, surface: 'app', region: null, canonical });
63
+ return hostname;
64
+ };
65
+ /** #2526: a scope's hostnames as `[hostname, canonical]`, in name order. */
66
+ const scopeHostnames = async (host, staff, s) => (await host.admin.listHostnames(staff, { scopeId: s })).map((h) => [h.hostname, h.canonical]).sort();
67
+ const hostnameStatus = async (host, staff, s, hostname) => (await host.admin.listHostnames(staff, { scopeId: s })).find((h) => h.hostname === hostname)?.status ?? null;
68
+ const RECORDS = [{ type: 'txt', name: '_cf-custom-hostname', value: 'dcv-token', status: null }];
69
+ const entitlementsOf = async (host, staff, t) => (await host.admin.listEntitlements(staff, t)).map((e) => [e.entitlementKey, e.plan]);
49
70
  /** One vertical flag flipped by staff: the case is the same shape for each. */
50
71
  const flagCase = (action, field) => ({
51
72
  action,
@@ -380,6 +401,97 @@ const CASES = [
380
401
  };
381
402
  },
382
403
  },
404
+ // #2526: the hostname and entitlement writes.
405
+ {
406
+ action: 'bindHostname',
407
+ write: { table: 'hostnames', verb: 'INSERT' },
408
+ arrange: async (host, staff) => {
409
+ const t = await newTenant(host, staff);
410
+ const s = await newScope(host, staff, t);
411
+ // The surface's canonical already: the new canonical demotes it in the same unit, so a
412
+ // refused bind leaves it canonical, whichever write is refused.
413
+ const first = await bound(host, t, s, true);
414
+ const hostname = hostnameOf();
415
+ return {
416
+ call: () => host.admin.bindHostname(staff, { hostname, tenantId: t, scopeId: s, surface: 'app', region: null, canonical: true }),
417
+ state: () => scopeHostnames(host, staff, s),
418
+ changed: [[first, false], [hostname, true]].sort(),
419
+ row: { before: null, after: expect.objectContaining({ hostname, tenantId: t, scopeId: s, surface: 'app', canonical: true }) },
420
+ };
421
+ },
422
+ },
423
+ {
424
+ action: 'setHostnameStatus',
425
+ write: { table: 'hostnames', verb: 'UPDATE' },
426
+ arrange: async (host, staff) => {
427
+ const t = await newTenant(host, staff);
428
+ const s = await newScope(host, staff, t);
429
+ const hostname = await bound(host, t, s);
430
+ return {
431
+ call: () => host.admin.setHostnameStatus(staff, hostname, 'active'),
432
+ state: () => hostnameStatus(host, staff, s, hostname),
433
+ changed: 'active',
434
+ row: { before: { status: 'pending' }, after: { status: 'active', note: null } },
435
+ };
436
+ },
437
+ },
438
+ {
439
+ action: 'setHostnameIssuance',
440
+ write: { table: 'hostnames', verb: 'UPDATE' },
441
+ arrange: async (host, staff) => {
442
+ const t = await newTenant(host, staff);
443
+ const s = await newScope(host, staff, t);
444
+ const hostname = await bound(host, t, s);
445
+ return {
446
+ call: () => host.admin.setHostnameIssuance(staff, hostname, { status: 'verifying', customHostnameId: 'cf-audit', validationRecords: RECORDS }),
447
+ state: () => hostnameStatus(host, staff, s, hostname),
448
+ changed: 'verifying',
449
+ row: { before: { status: 'pending' }, after: { status: 'verifying', note: null } },
450
+ };
451
+ },
452
+ },
453
+ {
454
+ action: 'unbindHostname',
455
+ write: { table: 'hostnames', verb: 'DELETE' },
456
+ arrange: async (host, staff) => {
457
+ const t = await newTenant(host, staff);
458
+ const s = await newScope(host, staff, t);
459
+ const hostname = await bound(host, t, s);
460
+ return {
461
+ call: () => host.admin.unbindHostname(staff, hostname),
462
+ state: () => scopeHostnames(host, staff, s),
463
+ changed: [],
464
+ row: { before: { hostname, status: 'pending' }, after: null },
465
+ };
466
+ },
467
+ },
468
+ {
469
+ action: 'grantEntitlement',
470
+ write: { table: '_substrat_entitlements', verb: 'INSERT' },
471
+ arrange: async (host, staff) => {
472
+ const t = await newTenant(host, staff);
473
+ return {
474
+ call: () => host.admin.grantEntitlement(staff, t, 'audit-entitlement', { plan: 'pro' }),
475
+ state: () => entitlementsOf(host, staff, t),
476
+ changed: [['audit-entitlement', 'pro']],
477
+ row: { before: null, after: { entitlementKey: 'audit-entitlement', expiresAt: null, quota: null, plan: 'pro' } },
478
+ };
479
+ },
480
+ },
481
+ {
482
+ action: 'revokeEntitlement',
483
+ write: { table: '_substrat_entitlements', verb: 'DELETE' },
484
+ arrange: async (host, staff) => {
485
+ const t = await newTenant(host, staff);
486
+ await host.admin.grantEntitlement(staff, t, 'audit-entitlement', { plan: 'pro' });
487
+ return {
488
+ call: () => host.admin.revokeEntitlement(staff, t, 'audit-entitlement'),
489
+ state: () => entitlementsOf(host, staff, t),
490
+ changed: [],
491
+ row: { before: { entitlementKey: 'audit-entitlement', expiresAt: null, quota: null, plan: 'pro' }, after: null },
492
+ };
493
+ },
494
+ },
383
495
  ];
384
496
  /**
385
497
  * #2479: every tenant and vertical directory write commits with its admin row. A fault in the
@@ -400,7 +512,9 @@ export function directoryAdminAuditTransactionSuite(adapterName, makeFixture) {
400
512
  try {
401
513
  const { call, state, changed, row } = await c.arrange(host, staff, fixture);
402
514
  const since = new Date().toISOString();
403
- const rows = () => host.admin.auditLog(staff, { action: [c.action], since });
515
+ // The call's own rows: an arrangement that made the same action as another actor, in the
516
+ // same millisecond as `since`, is not one of them.
517
+ const rows = async () => (await host.admin.auditLog(staff, { action: [c.action], since })).filter((r) => r.actor === staff);
404
518
  const before = await state();
405
519
  expect(before).not.toEqual(changed);
406
520
  await fixture.directorySql(trigger.create);
@@ -497,7 +611,9 @@ export function directoryAdminAuditTransactionSuite(adapterName, makeFixture) {
497
611
  }
498
612
  throw new Error('expected the call to be refused');
499
613
  };
500
- const rowsSince = async (host, staff, action, since) => (await host.admin.auditLog(staff, { action: [action], since })).map((r) => ({ before: r.before, after: r.after }));
614
+ const rowsSince = async (host, staff, action, since) => (await host.admin.auditLog(staff, { action: [action], since }))
615
+ .filter((r) => r.actor === staff)
616
+ .map((r) => ({ before: r.before, after: r.after }));
501
617
  /** A private vertical (tenant-owned, not listed), whose versions self-admit. */
502
618
  const privateVertical = async (host, staff) => {
503
619
  const owner = await newTenant(host, staff);
@@ -631,6 +747,53 @@ export function directoryAdminAuditTransactionSuite(adapterName, makeFixture) {
631
747
  .toEqual(['admitted']);
632
748
  });
633
749
  });
750
+ // #2565: a promote reads the listing in the unit that moves prod, as listing reads prod.
751
+ it('promoteVersion refuses an auto-admitted version as prod of a vertical listed since it was read', async () => {
752
+ await withFixture(async (fixture, host, staff) => {
753
+ const { slug, release } = await privateVertical(host, staff);
754
+ const auto = await release();
755
+ const since = new Date().toISOString();
756
+ fixture.interleave(`UPDATE verticals SET listed = 1 WHERE slug = '${slug}'`);
757
+ const refused = await refusalOf(host.admin.promoteVersion(staff, slug, 'prod', auto));
758
+ expect(errorCodeOf(refused)).toBe('conflict');
759
+ expect(refused.message).toContain(`prod version ${auto} is auto-admitted`);
760
+ expect(await host.admin.listChannels(staff, slug)).toEqual([]);
761
+ expect(await rowsSince(host, staff, 'promoteVersion', since)).toEqual([]);
762
+ });
763
+ });
764
+ it('and, unlistedOnly, refuses any version of a vertical listed since it was read', async () => {
765
+ await withFixture(async (fixture, host, staff) => {
766
+ const { slug, release } = await privateVertical(host, staff);
767
+ const vouched = await release();
768
+ await host.admin.admitVersion(staff, vouched);
769
+ const since = new Date().toISOString();
770
+ fixture.interleave(`UPDATE verticals SET listed = 1 WHERE slug = '${slug}'`);
771
+ const refused = await refusalOf(host.admin.promoteVersion(staff, slug, 'prod', vouched, undefined, { unlistedOnly: true }));
772
+ expect(errorCodeOf(refused)).toBe('forbidden');
773
+ expect(await host.admin.listChannels(staff, slug)).toEqual([]);
774
+ expect(await rowsSince(host, staff, 'promoteVersion', since)).toEqual([]);
775
+ });
776
+ });
777
+ it('re-promoting the auto-admitted version a listed vertical names as prod is refused only if its serve would change what runs', async () => {
778
+ await withFixture(async (fixture, host, staff) => {
779
+ const { slug, release } = await privateVertical(host, staff);
780
+ const auto = await release();
781
+ const vouched = await release();
782
+ await host.admin.promoteVersion(staff, slug, 'prod', auto);
783
+ // Listed before listing refused an auto-admitted prod: the state is kept, not judged again.
784
+ await fixture.directorySql(`UPDATE verticals SET listed = 1 WHERE slug = '${slug}'`);
785
+ await host.admin.promoteVersion(staff, slug, 'prod', auto);
786
+ expect((await host.admin.listChannels(staff, slug)).find((c) => c.channel === 'prod')?.versionId).toBe(auto);
787
+ // Serving the same version (the usual hosted state): the retry changes nothing either.
788
+ await fixture.directorySql(`UPDATE verticals SET serving_ref = 'serving-a', serving_version_id = '${auto}' WHERE slug = '${slug}'`);
789
+ await host.admin.promoteVersion(staff, slug, 'prod', auto);
790
+ // A failed serve left another version serving: the retry would put `auto` on every install.
791
+ await fixture.directorySql(`UPDATE verticals SET serving_ref = 'serving-a', serving_version_id = '${vouched}' WHERE slug = '${slug}'`);
792
+ const refused = await refusalOf(host.admin.promoteVersion(staff, slug, 'prod', auto));
793
+ expect(errorCodeOf(refused)).toBe('conflict');
794
+ expect(refused.message).toContain(`prod version ${auto} is auto-admitted`);
795
+ });
796
+ });
634
797
  it('setVerticalServing refuses a serve whose serving version moved, and a retry after reading it again lands', async () => {
635
798
  await withFixture(async (fixture, host, staff) => {
636
799
  const slug = await newVertical(host, staff);
@@ -670,6 +833,34 @@ export function directoryAdminAuditTransactionSuite(adapterName, makeFixture) {
670
833
  .map((r) => r.after.ref)).toEqual(['serving-a']);
671
834
  });
672
835
  });
836
+ // #2577: a serve of v2 (adding a class) and a re-serve of v1 bring the ref and version back over
837
+ // a grown class set and tag; a serve whose upload diffed its migration from the state before
838
+ // them must not record over it. One that moved only the ref and version left that diff right.
839
+ it('setVerticalServing refuses a serve computed from a class set and tag that moved, and records over a moved ref and version', async () => {
840
+ await withFixture(async (fixture, host, staff) => {
841
+ const slug = await newVertical(host, staff);
842
+ const [first, second, third] = [await publish(host, staff, slug), await publish(host, staff, slug), await publish(host, staff, slug)];
843
+ const ref = 'serving-a';
844
+ const grow = (tag) => `UPDATE verticals SET serving_do_classes = '["ScopeDO","Added"]', serving_migration_tag = '${tag}' WHERE slug = '${slug}'`;
845
+ await host.admin.setVerticalServing(staff, slug, { ref, versionId: first, doClasses: ['ScopeDO'], migrationTag: 'v1' });
846
+ const serveFrom = async (from, versionId) => host.admin.setVerticalServing(staff, slug, { ref, versionId, doClasses: from.doClasses, migrationTag: from.migrationTag }, from);
847
+ // Another serve moved only the ref and version after the caller read the row: recorded over.
848
+ const before = await host.admin.verticalServing(staff, slug);
849
+ await fixture.directorySql(`UPDATE verticals SET serving_ref = 'serving-b', serving_version_id = '${second}' WHERE slug = '${slug}'`);
850
+ await serveFrom(before, third);
851
+ expect(await host.admin.verticalServing(staff, slug)).toEqual({ ref, versionId: third, doClasses: ['ScopeDO'], migrationTag: 'v1' });
852
+ // The class set and tag moved after the caller read the row, and after the host read it.
853
+ const stale = await host.admin.verticalServing(staff, slug);
854
+ await fixture.directorySql(grow('v2'));
855
+ expect(errorCodeOf(await refusalOf(serveFrom(stale, second)))).toBe('precondition_failed');
856
+ fixture.interleave(grow('v3'));
857
+ expect(errorCodeOf(await refusalOf(serveFrom(await host.admin.verticalServing(staff, slug), second)))).toBe('precondition_failed');
858
+ expect(await host.admin.verticalServing(staff, slug))
859
+ .toEqual({ ref, versionId: third, doClasses: ['ScopeDO', 'Added'], migrationTag: 'v3' });
860
+ expect((await host.admin.auditLog(staff, { action: ['setVerticalServing'] }))
861
+ .filter((r) => r.after.vertical === slug)).toHaveLength(2);
862
+ });
863
+ });
673
864
  // #2526: the org and the connection a grant names are judged in the unit that writes it.
674
865
  it.each(['grantToOrg', 'addMember'])('%s refuses an org deleted since it was read, and writes nothing', async (action) => {
675
866
  await withFixture(async (fixture, host, staff) => {
@@ -734,6 +925,104 @@ export function directoryAdminAuditTransactionSuite(adapterName, makeFixture) {
734
925
  .toEqual([[{ name: 'Middle' }, { name: 'After' }]]);
735
926
  });
736
927
  });
928
+ // #2526: the hostname and entitlement writes judge their guard, their no-op and their row's
929
+ // `before` in the unit that writes. A no-op writes nothing and records nothing; each is
930
+ // paired with the change beside it that does record.
931
+ /** A hostname row as another caller would write it, for an interleave. */
932
+ const hostnameInsert = (hostname, t, s) => `INSERT INTO hostnames (hostname, tenant_id, scope_id, vertical_slug, surface, region, status, status_note, canonical,
933
+ created_at, custom_hostname_id, validation_records)
934
+ VALUES ('${hostname}', '${t}', '${s}', NULL, 'app', NULL, 'pending', NULL, 0, '2026-10-25T00:00:00.000Z', NULL, NULL)`;
935
+ it('bindHostname refuses a name another live scope bound since it was read, demoting nothing', async () => {
936
+ await withFixture(async (fixture, host, staff) => {
937
+ const t = await newTenant(host, staff);
938
+ const [mine, theirs] = [await newScope(host, staff, t), await newScope(host, staff, t)];
939
+ const canonical = await bound(host, t, mine, true);
940
+ const hostname = hostnameOf();
941
+ const since = new Date().toISOString();
942
+ fixture.interleave(hostnameInsert(hostname, t, theirs));
943
+ const refused = await refusalOf(host.admin.bindHostname(staff, { hostname, tenantId: t, scopeId: mine, surface: 'app', region: null, canonical: true }));
944
+ expect(errorCodeOf(refused)).toBe('conflict');
945
+ expect(refused.message).toBe(`hostname '${hostname}' is already bound to another scope`);
946
+ expect(await scopeHostnames(host, staff, mine)).toEqual([[canonical, true]]);
947
+ expect(await scopeHostnames(host, staff, theirs)).toEqual([[hostname, false]]);
948
+ expect(await rowsSince(host, staff, 'bindHostname', since)).toEqual([]);
949
+ });
950
+ });
951
+ it('and reclaims a name whose holder was archived since it was read', async () => {
952
+ await withFixture(async (fixture, host, staff) => {
953
+ const t = await newTenant(host, staff);
954
+ const [mine, theirs] = [await newScope(host, staff, t), await newScope(host, staff, t)];
955
+ const hostname = await bound(host, t, theirs);
956
+ const since = new Date().toISOString();
957
+ fixture.interleave(`UPDATE scopes SET status = 'archived' WHERE scope_id = '${theirs}'`);
958
+ await host.admin.bindHostname(staff, { hostname, tenantId: t, scopeId: mine, surface: 'app', region: null, canonical: false });
959
+ expect(await scopeHostnames(host, staff, mine)).toEqual([[hostname, false]]);
960
+ expect((await rowsSince(host, staff, 'bindHostname', since)).map((r) => r.after.scopeId)).toEqual([mine]);
961
+ });
962
+ });
963
+ it('setHostnameStatus records nothing for a status set since it was read, and the status its unit read otherwise', async () => {
964
+ await withFixture(async (fixture, host, staff) => {
965
+ const t = await newTenant(host, staff);
966
+ const s = await newScope(host, staff, t);
967
+ const hostname = await bound(host, t, s);
968
+ const since = new Date().toISOString();
969
+ fixture.interleave(`UPDATE hostnames SET status = 'active' WHERE hostname = '${hostname}'`);
970
+ await host.admin.setHostnameStatus(staff, hostname, 'active');
971
+ expect(await rowsSince(host, staff, 'setHostnameStatus', since)).toEqual([]);
972
+ fixture.interleave(`UPDATE hostnames SET status = 'failed' WHERE hostname = '${hostname}'`);
973
+ await host.admin.setHostnameStatus(staff, hostname, 'active');
974
+ expect(await hostnameStatus(host, staff, s, hostname)).toBe('active');
975
+ expect(await rowsSince(host, staff, 'setHostnameStatus', since))
976
+ .toEqual([{ before: { status: 'failed' }, after: { status: 'active', note: null } }]);
977
+ });
978
+ });
979
+ it('setHostnameIssuance records nothing for a poll that finds what another write already stored, and one row for a poll that changes it', async () => {
980
+ await withFixture(async (fixture, host, staff) => {
981
+ const t = await newTenant(host, staff);
982
+ const s = await newScope(host, staff, t);
983
+ const hostname = await bound(host, t, s);
984
+ const poll = { status: 'verifying', customHostnameId: 'cf-audit', validationRecords: RECORDS };
985
+ const since = new Date().toISOString();
986
+ fixture.interleave(`UPDATE hostnames SET status = 'verifying', custom_hostname_id = 'cf-audit',
987
+ validation_records = '${JSON.stringify(RECORDS)}' WHERE hostname = '${hostname}'`);
988
+ await host.admin.setHostnameIssuance(staff, hostname, poll);
989
+ expect(await rowsSince(host, staff, 'setHostnameIssuance', since)).toEqual([]);
990
+ // Its twin: a poll that resolves it records one row, `before` the status the unit read.
991
+ await host.admin.setHostnameIssuance(staff, hostname, { status: 'active', validationRecords: [] });
992
+ expect(await hostnameStatus(host, staff, s, hostname)).toBe('active');
993
+ expect(await rowsSince(host, staff, 'setHostnameIssuance', since))
994
+ .toEqual([{ before: { status: 'verifying' }, after: { status: 'active', note: null } }]);
995
+ });
996
+ });
997
+ it('grantEntitlement records nothing for a grant another write already made, and the grant its unit read as before otherwise', async () => {
998
+ await withFixture(async (fixture, host, staff) => {
999
+ const t = await newTenant(host, staff);
1000
+ const held = (plan) => `INSERT OR REPLACE INTO _substrat_entitlements
1001
+ (tenant_id, entitlement_key, expires_at, quota, plan, granted_at, granted_by)
1002
+ VALUES ('${t}', 'audit-entitlement', NULL, NULL, '${plan}', '2026-10-25T00:00:00.000Z', 'interleaved')`;
1003
+ const since = new Date().toISOString();
1004
+ fixture.interleave(held('pro'));
1005
+ await host.admin.grantEntitlement(staff, t, 'audit-entitlement', { plan: 'pro' });
1006
+ expect(await rowsSince(host, staff, 'grantEntitlement', since)).toEqual([]);
1007
+ fixture.interleave(held('trial'));
1008
+ await host.admin.grantEntitlement(staff, t, 'audit-entitlement', { plan: 'pro' });
1009
+ expect(await entitlementsOf(host, staff, t)).toEqual([['audit-entitlement', 'pro']]);
1010
+ expect(await rowsSince(host, staff, 'grantEntitlement', since)).toEqual([{
1011
+ before: { entitlementKey: 'audit-entitlement', expiresAt: null, quota: null, plan: 'trial' },
1012
+ after: { entitlementKey: 'audit-entitlement', expiresAt: null, quota: null, plan: 'pro' },
1013
+ }]);
1014
+ });
1015
+ });
1016
+ it('revokeEntitlement records nothing for a grant revoked since it was read', async () => {
1017
+ await withFixture(async (fixture, host, staff) => {
1018
+ const t = await newTenant(host, staff);
1019
+ await host.admin.grantEntitlement(staff, t, 'audit-entitlement', { plan: 'pro' });
1020
+ const since = new Date().toISOString();
1021
+ fixture.interleave(`DELETE FROM _substrat_entitlements WHERE tenant_id = '${t}' AND entitlement_key = 'audit-entitlement'`);
1022
+ await host.admin.revokeEntitlement(staff, t, 'audit-entitlement');
1023
+ expect(await rowsSince(host, staff, 'revokeEntitlement', since)).toEqual([]);
1024
+ });
1025
+ });
737
1026
  });
738
1027
  });
739
1028
  }