@substrat-run/contract-tests 0.134.0 → 0.135.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/modules.d.ts CHANGED
@@ -8,7 +8,7 @@
8
8
  * artifacts live here.
9
9
  */
10
10
  import { z } from '@substrat-run/contracts';
11
- import { type ModuleRegistration, type OperationHandler } from '@substrat-run/kernel';
11
+ import { type ModuleRegistration, type OperationContext, type OperationHandler } from '@substrat-run/kernel';
12
12
  export declare const testModManifest: {
13
13
  id: string & z.$brand<"ModuleId">;
14
14
  version: string;
@@ -2042,6 +2042,276 @@ export declare const deniedScheduleModManifest: {
2042
2042
  } | undefined;
2043
2043
  };
2044
2044
  export declare const deniedScheduleMod: ModuleRegistration;
2045
+ /**
2046
+ * #1654's ENGINE: a module composed by call into `composerMod`, with a SKU of its own
2047
+ * (`composed-engine`) that the suite's tenant never holds — the shape of `engine-absence`
2048
+ * inside meridian, whose install grants `meridian` and `protocol` but not `absence`.
2049
+ *
2050
+ * - `composed-engine/sweep` is its one declared schedule, checking the permission the
2051
+ * schedule grants. Fired through the system door, it must run without the engine's SKU.
2052
+ * - `composed-engine/manual` checks the SAME permission but is NOT a declared schedule, so
2053
+ * the system principal passes its `ctx.check` and only the SKU gate can refuse it. That
2054
+ * is the lever proving the exception covers declared schedules and nothing else the
2055
+ * system door can reach.
2056
+ */
2057
+ export declare const composedEngineModManifest: {
2058
+ id: string & z.$brand<"ModuleId">;
2059
+ version: string;
2060
+ kernelContract: string;
2061
+ permissions: {
2062
+ key: string & z.$brand<"PermissionKey">;
2063
+ description: string;
2064
+ }[];
2065
+ events: {
2066
+ emits: {
2067
+ type: string;
2068
+ schemaVersion: number;
2069
+ }[];
2070
+ consumes: {
2071
+ type: string;
2072
+ schemaVersion: number;
2073
+ from?: string | undefined;
2074
+ }[];
2075
+ exports?: {
2076
+ type: string;
2077
+ schemaVersion: number;
2078
+ readPermission: string & z.$brand<"PermissionKey">;
2079
+ }[] | undefined;
2080
+ };
2081
+ migrations: {
2082
+ journalDir: string;
2083
+ compatibleFrom: string;
2084
+ };
2085
+ attachmentTargets: {
2086
+ entityType: string;
2087
+ readPermission: string & z.$brand<"PermissionKey">;
2088
+ writePermission?: (string & z.$brand<"PermissionKey">) | undefined;
2089
+ }[];
2090
+ liveTargets?: {
2091
+ entityType: string;
2092
+ readPermission: string & z.$brand<"PermissionKey">;
2093
+ }[] | undefined;
2094
+ entityRelations?: {
2095
+ entityType: string;
2096
+ parentType: string;
2097
+ }[] | undefined;
2098
+ guards?: {
2099
+ before: string;
2100
+ predicate: string;
2101
+ config: Record<string, unknown>;
2102
+ }[] | undefined;
2103
+ schedules?: {
2104
+ operation: string;
2105
+ cadence: {
2106
+ everyMinutes: number;
2107
+ };
2108
+ input?: Record<string, unknown> | undefined;
2109
+ permissions: (string & z.$brand<"PermissionKey">)[];
2110
+ }[] | undefined;
2111
+ peers?: {
2112
+ vertical: string;
2113
+ operations: string[];
2114
+ permissions: (string & z.$brand<"PermissionKey">)[];
2115
+ }[] | undefined;
2116
+ freshness?: {
2117
+ eventType: string;
2118
+ within: {
2119
+ hours: number;
2120
+ };
2121
+ }[] | undefined;
2122
+ withdraws?: string[] | undefined;
2123
+ entitlementKey: string;
2124
+ envSpec?: {
2125
+ key: string;
2126
+ label?: string | undefined;
2127
+ description: string;
2128
+ placeholder?: string | undefined;
2129
+ required: boolean;
2130
+ secret: boolean;
2131
+ default?: string | undefined;
2132
+ group?: string | undefined;
2133
+ }[] | undefined;
2134
+ ownerGrants?: (string & z.$brand<"PermissionKey">)[] | undefined;
2135
+ entitlements?: string[] | undefined;
2136
+ provides?: string[] | undefined;
2137
+ requires?: string[] | undefined;
2138
+ api?: string | undefined;
2139
+ searchables?: {
2140
+ entityType: string;
2141
+ fields: string[];
2142
+ table?: string | undefined;
2143
+ idColumn?: string | undefined;
2144
+ tokenizer?: "prefix" | "substring" | undefined;
2145
+ }[] | undefined;
2146
+ lists?: {
2147
+ entityType: string;
2148
+ sortable: string[];
2149
+ filterable?: string[] | undefined;
2150
+ table?: string | undefined;
2151
+ idColumn?: string | undefined;
2152
+ }[] | undefined;
2153
+ ui?: {
2154
+ routes?: {
2155
+ path: string;
2156
+ screen: string;
2157
+ permission: string & z.$brand<"PermissionKey">;
2158
+ }[] | undefined;
2159
+ nav?: {
2160
+ label: string;
2161
+ icon?: string | undefined;
2162
+ to: string;
2163
+ permission: string & z.$brand<"PermissionKey">;
2164
+ }[] | undefined;
2165
+ entityViews?: {
2166
+ entityType: string;
2167
+ view: string;
2168
+ }[] | undefined;
2169
+ widgets?: {
2170
+ slot: string;
2171
+ component: string;
2172
+ permission: string & z.$brand<"PermissionKey">;
2173
+ }[] | undefined;
2174
+ settingsPanels?: {
2175
+ label: string;
2176
+ component: string;
2177
+ permission: string & z.$brand<"PermissionKey">;
2178
+ }[] | undefined;
2179
+ } | undefined;
2180
+ };
2181
+ /** The engine's in-scope export — how the composing vertical reads it, by call (decision 28). */
2182
+ export declare function countComposedSweeps(ctx: Pick<OperationContext, 'sql'>): number;
2183
+ export declare const composedEngineMod: ModuleRegistration;
2184
+ /**
2185
+ * #1654's VERTICAL: holds the key a standard install grants (`composer`), and reads the
2186
+ * engine's result through the engine's export inside its own operation. It declares no
2187
+ * schedule, so its system principal holds nothing — its door is the lever proving the
2188
+ * exception never lends one module's schedule to another module's system principal.
2189
+ */
2190
+ export declare const composerModManifest: {
2191
+ id: string & z.$brand<"ModuleId">;
2192
+ version: string;
2193
+ kernelContract: string;
2194
+ permissions: {
2195
+ key: string & z.$brand<"PermissionKey">;
2196
+ description: string;
2197
+ }[];
2198
+ events: {
2199
+ emits: {
2200
+ type: string;
2201
+ schemaVersion: number;
2202
+ }[];
2203
+ consumes: {
2204
+ type: string;
2205
+ schemaVersion: number;
2206
+ from?: string | undefined;
2207
+ }[];
2208
+ exports?: {
2209
+ type: string;
2210
+ schemaVersion: number;
2211
+ readPermission: string & z.$brand<"PermissionKey">;
2212
+ }[] | undefined;
2213
+ };
2214
+ migrations: {
2215
+ journalDir: string;
2216
+ compatibleFrom: string;
2217
+ };
2218
+ attachmentTargets: {
2219
+ entityType: string;
2220
+ readPermission: string & z.$brand<"PermissionKey">;
2221
+ writePermission?: (string & z.$brand<"PermissionKey">) | undefined;
2222
+ }[];
2223
+ liveTargets?: {
2224
+ entityType: string;
2225
+ readPermission: string & z.$brand<"PermissionKey">;
2226
+ }[] | undefined;
2227
+ entityRelations?: {
2228
+ entityType: string;
2229
+ parentType: string;
2230
+ }[] | undefined;
2231
+ guards?: {
2232
+ before: string;
2233
+ predicate: string;
2234
+ config: Record<string, unknown>;
2235
+ }[] | undefined;
2236
+ schedules?: {
2237
+ operation: string;
2238
+ cadence: {
2239
+ everyMinutes: number;
2240
+ };
2241
+ input?: Record<string, unknown> | undefined;
2242
+ permissions: (string & z.$brand<"PermissionKey">)[];
2243
+ }[] | undefined;
2244
+ peers?: {
2245
+ vertical: string;
2246
+ operations: string[];
2247
+ permissions: (string & z.$brand<"PermissionKey">)[];
2248
+ }[] | undefined;
2249
+ freshness?: {
2250
+ eventType: string;
2251
+ within: {
2252
+ hours: number;
2253
+ };
2254
+ }[] | undefined;
2255
+ withdraws?: string[] | undefined;
2256
+ entitlementKey: string;
2257
+ envSpec?: {
2258
+ key: string;
2259
+ label?: string | undefined;
2260
+ description: string;
2261
+ placeholder?: string | undefined;
2262
+ required: boolean;
2263
+ secret: boolean;
2264
+ default?: string | undefined;
2265
+ group?: string | undefined;
2266
+ }[] | undefined;
2267
+ ownerGrants?: (string & z.$brand<"PermissionKey">)[] | undefined;
2268
+ entitlements?: string[] | undefined;
2269
+ provides?: string[] | undefined;
2270
+ requires?: string[] | undefined;
2271
+ api?: string | undefined;
2272
+ searchables?: {
2273
+ entityType: string;
2274
+ fields: string[];
2275
+ table?: string | undefined;
2276
+ idColumn?: string | undefined;
2277
+ tokenizer?: "prefix" | "substring" | undefined;
2278
+ }[] | undefined;
2279
+ lists?: {
2280
+ entityType: string;
2281
+ sortable: string[];
2282
+ filterable?: string[] | undefined;
2283
+ table?: string | undefined;
2284
+ idColumn?: string | undefined;
2285
+ }[] | undefined;
2286
+ ui?: {
2287
+ routes?: {
2288
+ path: string;
2289
+ screen: string;
2290
+ permission: string & z.$brand<"PermissionKey">;
2291
+ }[] | undefined;
2292
+ nav?: {
2293
+ label: string;
2294
+ icon?: string | undefined;
2295
+ to: string;
2296
+ permission: string & z.$brand<"PermissionKey">;
2297
+ }[] | undefined;
2298
+ entityViews?: {
2299
+ entityType: string;
2300
+ view: string;
2301
+ }[] | undefined;
2302
+ widgets?: {
2303
+ slot: string;
2304
+ component: string;
2305
+ permission: string & z.$brand<"PermissionKey">;
2306
+ }[] | undefined;
2307
+ settingsPanels?: {
2308
+ label: string;
2309
+ component: string;
2310
+ permission: string & z.$brand<"PermissionKey">;
2311
+ }[] | undefined;
2312
+ } | undefined;
2313
+ };
2314
+ export declare const composerMod: ModuleRegistration;
2045
2315
  export declare const flowMod: ModuleRegistration;
2046
2316
  export declare const guardedMod: ModuleRegistration;
2047
2317
  export declare const gateMod: ModuleRegistration;
@@ -1 +1 @@
1
- {"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../src/modules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../src/modules.ts"],"names":[],"mappings":"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"}
package/dist/modules.js CHANGED
@@ -8,7 +8,7 @@
8
8
  * artifacts live here.
9
9
  */
10
10
  import { dataSubjectId, moduleManifest, operationInputsOf, operationConcurrencyOf, operationIdempotencyOptOutsOf, IDEMPOTENCY_RESULT_LIMIT, permissionKey, principalId, assertTransition, z, KERNEL_AUTHORED_EVENT_TYPES, } from '@substrat-run/contracts';
11
- import { assertAllowed, readAttachmentText, readHistory, readTimeline, ulid, } from '@substrat-run/kernel';
11
+ import { assertAllowed, readAttachmentText, readHistory, readTimeline, readScopeTimeline, readScopeHistory, ulid, } from '@substrat-run/kernel';
12
12
  /** #1745: the machine `test/refuse` asserts against — `test/move` is illegal from `done`. */
13
13
  const REFUSE_LIFECYCLE = {
14
14
  field: 'state',
@@ -465,11 +465,13 @@ export const contractTestBareOps = {
465
465
  // Emit about a NAMED entity. `test/emit-event` is fixed to `x1`, and the suite
466
466
  // needs two entities moving independently to prove the version is per-entity
467
467
  // and not just "the newest event in the scope".
468
+ // `entityType` is optional and defaults to the one every per-entity case uses; the
469
+ // scope-wide walk (#1582) needs a second type to prove its filter narrows.
468
470
  'test/emit-about': ((ctx, input) => {
469
471
  ctx.emit({
470
472
  type: 'test.happened',
471
473
  schemaVersion: 1,
472
- entity: { entityType: 'test-thing', entityId: input.entityId },
474
+ entity: { entityType: input.entityType ?? 'test-thing', entityId: input.entityId },
473
475
  piiClass: input.subject ? 'pseudonymous' : 'none',
474
476
  ...(input.subject ? { subjectId: dataSubjectId.parse(input.subject) } : {}),
475
477
  payload: { about: input.entityId },
@@ -514,6 +516,10 @@ export const contractTestBareOps = {
514
516
  // limit, cursor and order without a variant operation per case.
515
517
  'test/timeline': ((ctx, input) => readTimeline(ctx, { entityType: input.entityType, entityId: input.entityId }, input)),
516
518
  'test/history': ((ctx, input) => readHistory(ctx, { entityType: input.entityType, entityId: input.entityId }, input)),
519
+ // #1582: the scope-wide walks. The whole `ScopeWalkPage` passes through, so the
520
+ // suite drives the watermark, the order and the entity-type filter directly.
521
+ 'test/scope-timeline': ((ctx, input) => readScopeTimeline(ctx, input)),
522
+ 'test/scope-history': ((ctx, input) => readScopeHistory(ctx, input)),
517
523
  // An event carrying PII, so the suite can shred it and assert the history
518
524
  // degrades to a null payload instead of vanishing or throwing.
519
525
  //
@@ -1156,6 +1162,79 @@ export const deniedScheduleMod = {
1156
1162
  }),
1157
1163
  },
1158
1164
  };
1165
+ // -- #1654: a composed engine's own schedule, on a tenant holding only the vertical's key --
1166
+ /**
1167
+ * #1654's ENGINE: a module composed by call into `composerMod`, with a SKU of its own
1168
+ * (`composed-engine`) that the suite's tenant never holds — the shape of `engine-absence`
1169
+ * inside meridian, whose install grants `meridian` and `protocol` but not `absence`.
1170
+ *
1171
+ * - `composed-engine/sweep` is its one declared schedule, checking the permission the
1172
+ * schedule grants. Fired through the system door, it must run without the engine's SKU.
1173
+ * - `composed-engine/manual` checks the SAME permission but is NOT a declared schedule, so
1174
+ * the system principal passes its `ctx.check` and only the SKU gate can refuse it. That
1175
+ * is the lever proving the exception covers declared schedules and nothing else the
1176
+ * system door can reach.
1177
+ */
1178
+ export const composedEngineModManifest = moduleManifest.parse({
1179
+ id: '@test/composed-engine',
1180
+ version: '1.0.0',
1181
+ kernelContract: '^0.0.1',
1182
+ permissions: [{ key: 'composed-engine:sweep', description: 'the engine\'s scheduled sweep' }],
1183
+ events: { emits: [{ type: 'composed-engine.swept', schemaVersion: 1 }], consumes: [] },
1184
+ migrations: { journalDir: './migrations', compatibleFrom: '1.0.0' },
1185
+ attachmentTargets: [],
1186
+ entitlementKey: 'composed-engine',
1187
+ schedules: [
1188
+ { operation: 'composed-engine/sweep', cadence: { everyMinutes: 60 }, permissions: ['composed-engine:sweep'] },
1189
+ ],
1190
+ });
1191
+ /** The engine's in-scope export — how the composing vertical reads it, by call (decision 28). */
1192
+ export function countComposedSweeps(ctx) {
1193
+ return ctx.sql.query('SELECT COUNT(*) AS n FROM composed_engine_sweeps')[0].n;
1194
+ }
1195
+ export const composedEngineMod = {
1196
+ manifest: composedEngineModManifest,
1197
+ migrations: [{ version: '0001-init', sql: 'CREATE TABLE composed_engine_sweeps (n INTEGER NOT NULL)' }],
1198
+ operations: {
1199
+ 'composed-engine/sweep': (async (ctx) => {
1200
+ assertAllowed(await ctx.check('composed-engine:sweep'));
1201
+ ctx.sql.exec('INSERT INTO composed_engine_sweeps (n) VALUES (1)');
1202
+ ctx.emit({
1203
+ type: 'composed-engine.swept',
1204
+ schemaVersion: 1,
1205
+ entity: { entityType: 'composed-engine-thing', entityId: 'sweep' },
1206
+ piiClass: 'none',
1207
+ payload: {},
1208
+ });
1209
+ }),
1210
+ 'composed-engine/manual': (async (ctx) => {
1211
+ assertAllowed(await ctx.check('composed-engine:sweep'));
1212
+ ctx.sql.exec('INSERT INTO composed_engine_sweeps (n) VALUES (1)');
1213
+ }),
1214
+ },
1215
+ };
1216
+ /**
1217
+ * #1654's VERTICAL: holds the key a standard install grants (`composer`), and reads the
1218
+ * engine's result through the engine's export inside its own operation. It declares no
1219
+ * schedule, so its system principal holds nothing — its door is the lever proving the
1220
+ * exception never lends one module's schedule to another module's system principal.
1221
+ */
1222
+ export const composerModManifest = moduleManifest.parse({
1223
+ id: '@test/composer',
1224
+ version: '1.0.0',
1225
+ kernelContract: '^0.0.1',
1226
+ permissions: [],
1227
+ events: { emits: [], consumes: [] },
1228
+ migrations: { journalDir: './migrations', compatibleFrom: '1.0.0' },
1229
+ attachmentTargets: [],
1230
+ entitlementKey: 'composer',
1231
+ });
1232
+ export const composerMod = {
1233
+ manifest: composerModManifest,
1234
+ operations: {
1235
+ 'composer/sweeps': ((ctx) => countComposedSweeps(ctx)),
1236
+ },
1237
+ };
1159
1238
  export const flowMod = {
1160
1239
  manifest: flowModManifest,
1161
1240
  migrations: [
@@ -2281,6 +2360,11 @@ export const contractTestModules = [
2281
2360
  // `ctx.check` ever runs, which still counts as a failed schedule but records no
2282
2361
  // denial. Inert for every other suite — nothing else invokes `sched-denied/tick`.
2283
2362
  deniedScheduleMod,
2363
+ // #1654: the composed engine and the vertical composing it. Inert for every other suite —
2364
+ // only `scheduleEntitlementContractSuite` registers them on a host, so no other scope is
2365
+ // seated their system grant or reads their table.
2366
+ composedEngineMod,
2367
+ composerMod,
2284
2368
  // #1577: the operation a resumable run's steps write through. Inert for every
2285
2369
  // other suite — nothing else reads `job_items`.
2286
2370
  jobsMod,