@victframework/runtime 0.1.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 (115) hide show
  1. package/dist/agent-governance.d.ts +285 -0
  2. package/dist/agent-governance.js +438 -0
  3. package/dist/agent-governance.js.map +1 -0
  4. package/dist/agent-registry.d.ts +103 -0
  5. package/dist/agent-registry.js +758 -0
  6. package/dist/agent-registry.js.map +1 -0
  7. package/dist/agent-types.d.ts +433 -0
  8. package/dist/agent-types.js +480 -0
  9. package/dist/agent-types.js.map +1 -0
  10. package/dist/authority.d.ts +83 -0
  11. package/dist/authority.js +170 -0
  12. package/dist/authority.js.map +1 -0
  13. package/dist/boundary-conformance.d.ts +51 -0
  14. package/dist/boundary-conformance.js +364 -0
  15. package/dist/boundary-conformance.js.map +1 -0
  16. package/dist/control-conformance.d.ts +68 -0
  17. package/dist/control-conformance.js +1131 -0
  18. package/dist/control-conformance.js.map +1 -0
  19. package/dist/control-in-memory.d.ts +257 -0
  20. package/dist/control-in-memory.js +886 -0
  21. package/dist/control-in-memory.js.map +1 -0
  22. package/dist/control-types.d.ts +1017 -0
  23. package/dist/control-types.js +779 -0
  24. package/dist/control-types.js.map +1 -0
  25. package/dist/durable-run.d.ts +73 -0
  26. package/dist/durable-run.js +262 -0
  27. package/dist/durable-run.js.map +1 -0
  28. package/dist/effect-policy.d.ts +22 -0
  29. package/dist/effect-policy.js +45 -0
  30. package/dist/effect-policy.js.map +1 -0
  31. package/dist/errors.d.ts +36 -0
  32. package/dist/errors.js +71 -0
  33. package/dist/errors.js.map +1 -0
  34. package/dist/in-memory-stores.d.ts +16 -0
  35. package/dist/in-memory-stores.js +522 -0
  36. package/dist/in-memory-stores.js.map +1 -0
  37. package/dist/index.d.ts +41 -0
  38. package/dist/index.js +26 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/operator-config.d.ts +141 -0
  41. package/dist/operator-config.js +289 -0
  42. package/dist/operator-config.js.map +1 -0
  43. package/dist/orchestration-activation.d.ts +116 -0
  44. package/dist/orchestration-activation.js +223 -0
  45. package/dist/orchestration-activation.js.map +1 -0
  46. package/dist/orchestration-canary-conformance.d.ts +10 -0
  47. package/dist/orchestration-canary-conformance.js +726 -0
  48. package/dist/orchestration-canary-conformance.js.map +1 -0
  49. package/dist/orchestration-commands.d.ts +47 -0
  50. package/dist/orchestration-commands.js +538 -0
  51. package/dist/orchestration-commands.js.map +1 -0
  52. package/dist/orchestration-conformance.d.ts +59 -0
  53. package/dist/orchestration-conformance.js +594 -0
  54. package/dist/orchestration-conformance.js.map +1 -0
  55. package/dist/orchestration-driver-types.d.ts +163 -0
  56. package/dist/orchestration-driver-types.js +21 -0
  57. package/dist/orchestration-driver-types.js.map +1 -0
  58. package/dist/orchestration-driver.d.ts +48 -0
  59. package/dist/orchestration-driver.js +1030 -0
  60. package/dist/orchestration-driver.js.map +1 -0
  61. package/dist/orchestration-in-memory.d.ts +18 -0
  62. package/dist/orchestration-in-memory.js +1313 -0
  63. package/dist/orchestration-in-memory.js.map +1 -0
  64. package/dist/orchestration-join-conformance.d.ts +20 -0
  65. package/dist/orchestration-join-conformance.js +542 -0
  66. package/dist/orchestration-join-conformance.js.map +1 -0
  67. package/dist/orchestration-plan.d.ts +52 -0
  68. package/dist/orchestration-plan.js +265 -0
  69. package/dist/orchestration-plan.js.map +1 -0
  70. package/dist/orchestration-race-conformance.d.ts +35 -0
  71. package/dist/orchestration-race-conformance.js +1265 -0
  72. package/dist/orchestration-race-conformance.js.map +1 -0
  73. package/dist/orchestration-remediation-conformance.d.ts +54 -0
  74. package/dist/orchestration-remediation-conformance.js +632 -0
  75. package/dist/orchestration-remediation-conformance.js.map +1 -0
  76. package/dist/orchestration-store-types.d.ts +568 -0
  77. package/dist/orchestration-store-types.js +2 -0
  78. package/dist/orchestration-store-types.js.map +1 -0
  79. package/dist/pack-conformance.d.ts +59 -0
  80. package/dist/pack-conformance.js +222 -0
  81. package/dist/pack-conformance.js.map +1 -0
  82. package/dist/pack-install.d.ts +44 -0
  83. package/dist/pack-install.js +126 -0
  84. package/dist/pack-install.js.map +1 -0
  85. package/dist/registry.d.ts +107 -0
  86. package/dist/registry.js +481 -0
  87. package/dist/registry.js.map +1 -0
  88. package/dist/runtime.d.ts +158 -0
  89. package/dist/runtime.js +1341 -0
  90. package/dist/runtime.js.map +1 -0
  91. package/dist/serialization.d.ts +26 -0
  92. package/dist/serialization.js +162 -0
  93. package/dist/serialization.js.map +1 -0
  94. package/dist/store-conformance.d.ts +45 -0
  95. package/dist/store-conformance.js +876 -0
  96. package/dist/store-conformance.js.map +1 -0
  97. package/dist/store-errors.d.ts +49 -0
  98. package/dist/store-errors.js +48 -0
  99. package/dist/store-errors.js.map +1 -0
  100. package/dist/store-types.d.ts +331 -0
  101. package/dist/store-types.js +14 -0
  102. package/dist/store-types.js.map +1 -0
  103. package/dist/store-validation.d.ts +63 -0
  104. package/dist/store-validation.js +164 -0
  105. package/dist/store-validation.js.map +1 -0
  106. package/dist/stream-hub.d.ts +151 -0
  107. package/dist/stream-hub.js +402 -0
  108. package/dist/stream-hub.js.map +1 -0
  109. package/dist/testing.d.ts +25 -0
  110. package/dist/testing.js +19 -0
  111. package/dist/testing.js.map +1 -0
  112. package/dist/types.d.ts +221 -0
  113. package/dist/types.js +2 -0
  114. package/dist/types.js.map +1 -0
  115. package/package.json +45 -0
@@ -0,0 +1,542 @@
1
+ import { neutralJsonContract } from '@victframework/sdk';
2
+ /** Fork/join flow graph with optional join contract and downstream node. */
3
+ function joinFlowGraph(options) {
4
+ const nodes = [
5
+ { id: 'start', capability: 'start' },
6
+ { id: 'f', kind: 'fork', join: 'j' },
7
+ { id: 'a', capability: 'branchA' },
8
+ { id: 'b', capability: 'branchB' },
9
+ {
10
+ id: 'j',
11
+ kind: 'join',
12
+ fork: 'f',
13
+ ...(options.joinContractId !== undefined ? { output: options.joinContractId } : {}),
14
+ },
15
+ ];
16
+ const edges = [
17
+ { from: 'start', to: 'f' },
18
+ { from: 'f', to: 'a', kind: 'branch', key: 'a' },
19
+ { from: 'f', to: 'b', kind: 'branch', key: 'b' },
20
+ { from: 'a', to: 'j' },
21
+ { from: 'b', to: 'j' },
22
+ ];
23
+ if (!options.terminal) {
24
+ nodes.push({
25
+ id: 'z',
26
+ capability: 'after',
27
+ ...(options.downstreamInputContractId !== undefined
28
+ ? { input: options.downstreamInputContractId }
29
+ : {}),
30
+ });
31
+ edges.push({ from: 'j', to: 'z' });
32
+ }
33
+ return {
34
+ id: options.terminal ? 'conf-join-terminal' : 'conf-join-flow',
35
+ entry: 'start',
36
+ nodes,
37
+ edges,
38
+ };
39
+ }
40
+ /** Distinctive payload values used as leakage canaries. */
41
+ const CANARY_A = 'branch-alpha-payload-7f3a';
42
+ const CANARY_B = 'branch-beta-payload-91cd';
43
+ const REJECT_CANARY = 'raw-parser-canary-4e2b';
44
+ export function runOrchestrationJoinSuite(runner, expect, factory) {
45
+ const t = runner.test;
46
+ t(`[${factory.name}] join boundary: accepting contract called exactly once, downstream runs`, async () => {
47
+ const fixture = await factory.create();
48
+ try {
49
+ const runtime = fixture.runtime;
50
+ let joinParseCalls = 0;
51
+ let downstreamCalls = 0;
52
+ registerFlow(runtime, {
53
+ joinContract: {
54
+ id: 'conf-join-accept',
55
+ revision: '1',
56
+ expected: 'a record',
57
+ parse: (input) => {
58
+ joinParseCalls += 1;
59
+ if (typeof input !== 'object' || input === null) {
60
+ return {
61
+ ok: false,
62
+ issues: [{ code: 'TYPE', path: '$', message: 'record' }],
63
+ };
64
+ }
65
+ return { ok: true, value: input, issues: [] };
66
+ },
67
+ },
68
+ after: (input) => {
69
+ downstreamCalls += 1;
70
+ return `processed:${JSON.stringify(input)}`;
71
+ },
72
+ });
73
+ const activated = await runtime.activate(joinFlowGraph({ joinContractId: 'conf-join-accept' }));
74
+ expect(activated.ok).toBe(true);
75
+ const result = await runtime.run('seed');
76
+ expect(result.status).toBe('completed');
77
+ expect(joinParseCalls).toBe(1);
78
+ expect(downstreamCalls).toBe(1);
79
+ const events = await fixture.orchestration.listOrchestrationEvents(result.runId);
80
+ expect(events.filter((event) => event.type === 'join.completed').length).toBe(1);
81
+ expect(events.filter((event) => event.type === 'branch.completed').length).toBe(2);
82
+ const snapshot = await fixture.orchestration.getOrchestrationSnapshot(result.runId);
83
+ expect(snapshot?.attempts.filter((attempt) => attempt.nodeId === 'j').length).toBe(1);
84
+ void expect;
85
+ }
86
+ finally {
87
+ await fixture.dispose();
88
+ }
89
+ });
90
+ t(`[${factory.name}] join boundary: rejecting contract fails safely, no downstream, no leakage`, async () => {
91
+ const fixture = await factory.create();
92
+ try {
93
+ const runtime = fixture.runtime;
94
+ let joinParseCalls = 0;
95
+ let downstreamCalls = 0;
96
+ registerFlow(runtime, {
97
+ joinContract: {
98
+ id: 'conf-join-reject',
99
+ revision: '1',
100
+ expected: 'never',
101
+ parse: (input) => {
102
+ joinParseCalls += 1;
103
+ // Hostile parser: raw custom message + payload echo + nested
104
+ // secret-shaped content that must never reach any event,
105
+ // record, or safe error.
106
+ return {
107
+ ok: false,
108
+ issues: [
109
+ {
110
+ code: 'HOSTILE',
111
+ path: '$',
112
+ message: `${REJECT_CANARY}:${JSON.stringify(input)}`,
113
+ },
114
+ ],
115
+ };
116
+ },
117
+ },
118
+ after: () => {
119
+ downstreamCalls += 1;
120
+ return 'must-not-run';
121
+ },
122
+ });
123
+ const activated = await runtime.activate(joinFlowGraph({ joinContractId: 'conf-join-reject' }));
124
+ expect(activated.ok).toBe(true);
125
+ const result = await runtime.run('seed');
126
+ expect(result.status).toBe('failed');
127
+ expect(joinParseCalls).toBe(1);
128
+ expect(downstreamCalls).toBe(0);
129
+ const message = result.error ?? {};
130
+ expect(message.code).toBe('VICT_KERNEL_CONTRACT_REJECTED');
131
+ expect(String(message.message ?? '').includes(REJECT_CANARY)).toBe(false);
132
+ const events = await fixture.orchestration.listOrchestrationEvents(result.runId);
133
+ expect(events.filter((event) => event.type === 'join.completed').length).toBe(0);
134
+ const serialized = JSON.stringify(events);
135
+ expect(serialized.includes(REJECT_CANARY)).toBe(false);
136
+ expect(serialized.includes(CANARY_A)).toBe(false);
137
+ expect(serialized.includes(CANARY_B)).toBe(false);
138
+ // Default retained history never carries the rejected payload.
139
+ const record = await fixture.orchestration.getOrchestrationRun(result.runId);
140
+ expect(record).toBeDefined();
141
+ const recordJson = JSON.stringify(record);
142
+ expect(recordJson.includes(REJECT_CANARY)).toBe(false);
143
+ expect(recordJson.includes(CANARY_A)).toBe(false);
144
+ expect(recordJson.includes(CANARY_B)).toBe(false);
145
+ }
146
+ finally {
147
+ await fixture.dispose();
148
+ }
149
+ });
150
+ t(`[${factory.name}] join boundary: transforming contract feeds its validated value downstream`, async () => {
151
+ const fixture = await factory.create();
152
+ try {
153
+ const runtime = fixture.runtime;
154
+ let joinParseCalls = 0;
155
+ let downParseCalls = 0;
156
+ registerFlow(runtime, {
157
+ joinContract: {
158
+ id: 'conf-join-upper',
159
+ revision: '1',
160
+ expected: 'a record of strings',
161
+ parse: (input) => {
162
+ joinParseCalls += 1;
163
+ if (typeof input !== 'object' || input === null) {
164
+ return {
165
+ ok: false,
166
+ issues: [{ code: 'TYPE', path: '$', message: 'record' }],
167
+ };
168
+ }
169
+ const out = {};
170
+ for (const [key, value] of Object.entries(input)) {
171
+ out[key] = String(value).toUpperCase();
172
+ }
173
+ return { ok: true, value: out, issues: [] };
174
+ },
175
+ },
176
+ after: (input) => {
177
+ downParseCalls += 1;
178
+ return `processed:${JSON.stringify(input)}`;
179
+ },
180
+ });
181
+ const activated = await runtime.activate(joinFlowGraph({ joinContractId: 'conf-join-upper' }));
182
+ expect(activated.ok).toBe(true);
183
+ const result = await runtime.run('seed');
184
+ expect(result.status).toBe('completed');
185
+ expect(joinParseCalls).toBe(1);
186
+ // The downstream capability observed the TRANSFORMED value: had the
187
+ // join's validated value not flowed downstream, the payload would
188
+ // be the raw canonical checkpoint instead.
189
+ expect(downParseCalls).toBe(1);
190
+ expect(result.output).toBe(`processed:${JSON.stringify({
191
+ a: CANARY_A.toUpperCase(),
192
+ b: CANARY_B.toUpperCase(),
193
+ })}`);
194
+ }
195
+ finally {
196
+ await fixture.dispose();
197
+ }
198
+ });
199
+ t(`[${factory.name}] join boundary: downstream input contract is an independent validating boundary`, async () => {
200
+ const fixture = await factory.create();
201
+ try {
202
+ const runtime = fixture.runtime;
203
+ let downParseCalls = 0;
204
+ registerFlow(runtime, {
205
+ // The join declares NO output contract: the raw canonical payload
206
+ // flows to the downstream node, whose INPUT contract is a separate
207
+ // boundary — and it rejects what the join passed through.
208
+ downstreamContract: {
209
+ id: 'conf-down-strict',
210
+ revision: '1',
211
+ expected: 'a string payload',
212
+ parse: (input) => {
213
+ downParseCalls += 1;
214
+ if (typeof input !== 'string') {
215
+ return {
216
+ ok: false,
217
+ issues: [{ code: 'SHAPE', path: '$', message: 'expected a string' }],
218
+ };
219
+ }
220
+ return { ok: true, value: input, issues: [] };
221
+ },
222
+ },
223
+ after: () => 'must-not-run',
224
+ });
225
+ const activated = await runtime.activate(joinFlowGraph({ downstreamInputContractId: 'conf-down-strict' }));
226
+ expect(activated.ok).toBe(true);
227
+ const result = await runtime.run('seed');
228
+ // The join passed the canonical record; the downstream INPUT
229
+ // boundary rejected it independently.
230
+ expect(result.status).toBe('failed');
231
+ expect(downParseCalls).toBe(1);
232
+ const message = result.error ?? {};
233
+ expect(message.code).toBe('VICT_KERNEL_CONTRACT_REJECTED');
234
+ const events = await fixture.orchestration.listOrchestrationEvents(result.runId);
235
+ expect(events.filter((event) => event.type === 'join.completed').length).toBe(1);
236
+ }
237
+ finally {
238
+ await fixture.dispose();
239
+ }
240
+ });
241
+ t(`[${factory.name}] join boundary: reverse branch-completion order yields the same canonical join input`, async () => {
242
+ const outputs = [];
243
+ for (const reverse of [false, true]) {
244
+ const fixture = await factory.create();
245
+ const runtime = fixture.runtime;
246
+ let releaseA;
247
+ let releaseB;
248
+ const gateA = new Promise((resolve) => {
249
+ releaseA = resolve;
250
+ });
251
+ const gateB = new Promise((resolve) => {
252
+ releaseB = resolve;
253
+ });
254
+ registerFlow(runtime, {
255
+ joinContract: {
256
+ id: `conf-join-order-${reverse ? 'r' : 'f'}`,
257
+ revision: '1',
258
+ expected: 'a record',
259
+ parse: (input) => ({ ok: true, value: input, issues: [] }),
260
+ },
261
+ branchA: async () => {
262
+ if (reverse) {
263
+ await gateA; // a waits for b: reverse completion order
264
+ }
265
+ else {
266
+ releaseB?.(); // forward: a completes first
267
+ }
268
+ return CANARY_A;
269
+ },
270
+ branchB: async () => {
271
+ if (reverse) {
272
+ releaseA?.();
273
+ }
274
+ else {
275
+ await gateB;
276
+ }
277
+ return CANARY_B;
278
+ },
279
+ after: (input) => `processed:${JSON.stringify(input)}`,
280
+ });
281
+ const activated = await runtime.activate(joinFlowGraph({ joinContractId: `conf-join-order-${reverse ? 'r' : 'f'}` }));
282
+ expect(activated.ok).toBe(true);
283
+ const result = await runtime.run('seed');
284
+ expect(result.status).toBe('completed');
285
+ outputs.push(result.output);
286
+ void releaseA;
287
+ void releaseB;
288
+ }
289
+ // Both orders produce the identical canonical (branch-key-sorted) join.
290
+ expect(outputs[0]).toBe(outputs[1]);
291
+ expect(outputs[0]).toBe(`processed:${JSON.stringify({ a: CANARY_A, b: CANARY_B })}`);
292
+ });
293
+ t(`[${factory.name}] join boundary: concurrent final arrivals create one join token and one join.completed`, async () => {
294
+ const fixture = await factory.create();
295
+ try {
296
+ const runtime = fixture.runtime;
297
+ let joinParseCalls = 0;
298
+ let downstreamCalls = 0;
299
+ let active = 0;
300
+ let maxConcurrent = 0;
301
+ let release;
302
+ const barrier = new Promise((resolve) => {
303
+ release = resolve;
304
+ });
305
+ registerFlow(runtime, {
306
+ joinContract: {
307
+ id: 'conf-join-race',
308
+ revision: '1',
309
+ expected: 'a record',
310
+ parse: (input) => {
311
+ joinParseCalls += 1;
312
+ return { ok: true, value: input, issues: [] };
313
+ },
314
+ },
315
+ branchA: async () => {
316
+ active += 1;
317
+ maxConcurrent = Math.max(maxConcurrent, active);
318
+ await barrier;
319
+ active -= 1;
320
+ return CANARY_A;
321
+ },
322
+ branchB: async () => {
323
+ active += 1;
324
+ maxConcurrent = Math.max(maxConcurrent, active);
325
+ await barrier;
326
+ active -= 1;
327
+ return CANARY_B;
328
+ },
329
+ after: (input) => {
330
+ downstreamCalls += 1;
331
+ return `processed:${JSON.stringify(input)}`;
332
+ },
333
+ });
334
+ const activated = await runtime.activate(joinFlowGraph({ joinContractId: 'conf-join-race' }));
335
+ expect(activated.ok).toBe(true);
336
+ // Both branches are released in the same tick: the store serializes
337
+ // the two final-arrival candidates; exactly one may fire the join.
338
+ const releaseNow = release;
339
+ setTimeout(releaseNow, 5);
340
+ const result = await runtime.run('seed', { concurrency: 4 });
341
+ expect(result.status).toBe('completed');
342
+ expect(maxConcurrent).toBe(2);
343
+ expect(joinParseCalls).toBe(1);
344
+ expect(downstreamCalls).toBe(1);
345
+ const events = await fixture.orchestration.listOrchestrationEvents(result.runId);
346
+ expect(events.filter((event) => event.type === 'join.completed').length).toBe(1);
347
+ expect(events.filter((event) => event.type === 'branch.completed').length).toBe(2);
348
+ const snapshot = await fixture.orchestration.getOrchestrationSnapshot(result.runId);
349
+ expect(snapshot?.attempts.filter((attempt) => attempt.nodeId === 'j').length).toBe(1);
350
+ }
351
+ finally {
352
+ await fixture.dispose();
353
+ }
354
+ });
355
+ t(`[${factory.name}] join boundary: duplicate and stale branch completions cannot revalidate or rejoin`, async () => {
356
+ const fixture = await factory.create();
357
+ try {
358
+ const runtime = fixture.runtime;
359
+ registerFlow(runtime, {
360
+ joinContract: {
361
+ id: 'conf-join-replay',
362
+ revision: '1',
363
+ expected: 'a record',
364
+ parse: (input) => ({ ok: true, value: input, issues: [] }),
365
+ },
366
+ after: (input) => `processed:${JSON.stringify(input)}`,
367
+ });
368
+ const activated = await runtime.activate(joinFlowGraph({ joinContractId: 'conf-join-replay' }));
369
+ expect(activated.ok).toBe(true);
370
+ const result = await runtime.run('seed');
371
+ expect(result.status).toBe('completed');
372
+ // The completed run has exactly one join completion and no ready
373
+ // tokens; a replayed branch arrival cannot resurrect anything.
374
+ const events = await fixture.orchestration.listOrchestrationEvents(result.runId);
375
+ expect(events.filter((event) => event.type === 'join.completed').length).toBe(1);
376
+ const beforeSeq = events.length;
377
+ void beforeSeq;
378
+ // A stale/fabricated branch arrival (unknown token, bogus fence)
379
+ // must be rejected by the store without mutating durable state.
380
+ let rejected = false;
381
+ try {
382
+ await fixture.orchestration.completeAttempt({
383
+ runId: result.runId,
384
+ attemptId: 'attempt_does_not_exist',
385
+ ownerId: 'stale-owner',
386
+ expectedAttemptFence: 999,
387
+ now: Date.now(),
388
+ outcome: { kind: 'completed', outputSummary: { shape: 'string', length: 3 } },
389
+ continuation: {
390
+ kind: 'branchArrival',
391
+ forkId: 'f',
392
+ joinId: 'j',
393
+ branchKey: 'a',
394
+ joinContinuation: { tokenId: 'token_forged', toNodeId: 'j', lineage: 'forged' },
395
+ },
396
+ events: [],
397
+ run: { status: 'running' },
398
+ branchOutput: CANARY_A,
399
+ declaredBranchKeys: ['a', 'b'],
400
+ });
401
+ }
402
+ catch {
403
+ rejected = true;
404
+ }
405
+ expect(rejected).toBe(true);
406
+ const eventsAfter = await fixture.orchestration.listOrchestrationEvents(result.runId);
407
+ expect(eventsAfter.length).toBe(beforeSeq);
408
+ expect(eventsAfter.filter((event) => event.type === 'join.completed').length).toBe(1);
409
+ const snapshotAfter = await fixture.orchestration.getOrchestrationSnapshot(result.runId);
410
+ expect(snapshotAfter?.run.status).toBe('completed');
411
+ }
412
+ finally {
413
+ await fixture.dispose();
414
+ }
415
+ });
416
+ t(`[${factory.name}] terminal join: validating contract completes the run with the canonical output`, async () => {
417
+ const fixture = await factory.create();
418
+ try {
419
+ const runtime = fixture.runtime;
420
+ let joinParseCalls = 0;
421
+ registerFlow(runtime, {
422
+ joinContract: {
423
+ id: 'conf-join-terminal',
424
+ revision: '1',
425
+ expected: 'a record of strings',
426
+ parse: (input) => {
427
+ joinParseCalls += 1;
428
+ if (typeof input !== 'object' || input === null) {
429
+ return {
430
+ ok: false,
431
+ issues: [{ code: 'TYPE', path: '$', message: 'record' }],
432
+ };
433
+ }
434
+ const out = {};
435
+ for (const [key, value] of Object.entries(input)) {
436
+ out[key] = `v:${String(value)}`;
437
+ }
438
+ return { ok: true, value: out, issues: [] };
439
+ },
440
+ },
441
+ });
442
+ const activated = await runtime.activate(joinFlowGraph({ joinContractId: 'conf-join-terminal', terminal: true }));
443
+ expect(activated.ok).toBe(true);
444
+ const result = await runtime.run('seed');
445
+ expect(result.status).toBe('completed');
446
+ expect(joinParseCalls).toBe(1);
447
+ // The validated, transformed canonical join output IS the run output.
448
+ expect(JSON.stringify(result.output)).toBe(JSON.stringify({ a: `v:${CANARY_A}`, b: `v:${CANARY_B}` }));
449
+ const events = await fixture.orchestration.listOrchestrationEvents(result.runId);
450
+ expect(events.filter((event) => event.type === 'join.completed').length).toBe(1);
451
+ expect(events.filter((event) => event.type === 'run.completed').length).toBe(1);
452
+ }
453
+ finally {
454
+ await fixture.dispose();
455
+ }
456
+ });
457
+ t(`[${factory.name}] terminal join: rejecting contract fails durably without an unhandled exception`, async () => {
458
+ const fixture = await factory.create();
459
+ try {
460
+ const runtime = fixture.runtime;
461
+ let joinParseCalls = 0;
462
+ registerFlow(runtime, {
463
+ joinContract: {
464
+ id: 'conf-join-terminal-reject',
465
+ revision: '1',
466
+ expected: 'never',
467
+ parse: (input) => {
468
+ joinParseCalls += 1;
469
+ return {
470
+ ok: false,
471
+ issues: [
472
+ {
473
+ code: 'HOSTILE',
474
+ path: '$',
475
+ message: `${REJECT_CANARY}:${JSON.stringify(input)}`,
476
+ },
477
+ ],
478
+ };
479
+ },
480
+ },
481
+ });
482
+ const activated = await runtime.activate(joinFlowGraph({ joinContractId: 'conf-join-terminal-reject', terminal: true }));
483
+ expect(activated.ok).toBe(true);
484
+ const result = await runtime.run('seed');
485
+ expect(result.status).toBe('failed');
486
+ expect(joinParseCalls).toBe(1);
487
+ const message = result.error ?? {};
488
+ expect(message.code).toBe('VICT_KERNEL_CONTRACT_REJECTED');
489
+ expect(String(message.message ?? '').includes(REJECT_CANARY)).toBe(false);
490
+ const events = await fixture.orchestration.listOrchestrationEvents(result.runId);
491
+ expect(events.filter((event) => event.type === 'run.failed').length).toBe(1);
492
+ expect(events.filter((event) => event.type === 'join.completed').length).toBe(0);
493
+ expect(JSON.stringify(events).includes(REJECT_CANARY)).toBe(false);
494
+ }
495
+ finally {
496
+ await fixture.dispose();
497
+ }
498
+ });
499
+ }
500
+ /** Register the standard flow capabilities plus caller-provided contracts. */
501
+ function registerFlow(runtime, options) {
502
+ runtime
503
+ .registerCapability({
504
+ id: 'start',
505
+ revision: '1',
506
+ effect: 'pure',
507
+ input: neutralJsonContract,
508
+ output: neutralJsonContract,
509
+ invoke: () => 'seed',
510
+ })
511
+ .registerCapability({
512
+ id: 'branchA',
513
+ revision: '1',
514
+ effect: 'pure',
515
+ input: neutralJsonContract,
516
+ output: neutralJsonContract,
517
+ invoke: options.branchA ?? (() => CANARY_A),
518
+ })
519
+ .registerCapability({
520
+ id: 'branchB',
521
+ revision: '1',
522
+ effect: 'pure',
523
+ input: neutralJsonContract,
524
+ output: neutralJsonContract,
525
+ invoke: options.branchB ?? (() => CANARY_B),
526
+ })
527
+ .registerCapability({
528
+ id: 'after',
529
+ revision: '1',
530
+ effect: 'pure',
531
+ input: neutralJsonContract,
532
+ output: neutralJsonContract,
533
+ invoke: options.after ?? ((input) => `processed:${JSON.stringify(input)}`),
534
+ });
535
+ if (options.joinContract !== undefined) {
536
+ runtime.registerContract(options.joinContract);
537
+ }
538
+ if (options.downstreamContract !== undefined) {
539
+ runtime.registerContract(options.downstreamContract);
540
+ }
541
+ }
542
+ //# sourceMappingURL=orchestration-join-conformance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestration-join-conformance.js","sourceRoot":"","sources":["../src/orchestration-join-conformance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { VictError } from '@victframework/contracts';
2
+ import { type CompiledGraph, type EffectClass } from '@victframework/kernel';
3
+ import type { AttemptContinuation, AttemptOutcome, ClaimedAttempt } from './orchestration-store-types.js';
4
+ /**
5
+ * Continuation planning for one completed attempt, derived purely from the
6
+ * pinned plan, the outcome, and the durable state the driver already read.
7
+ * The store validates every guard; a stale driver view surfaces as a
8
+ * structured conflict and the driver re-derives from fresh state.
9
+ *
10
+ * Effect-aware ambiguity rules for timed-out outcomes:
11
+ * - pure/read: retry when policy permits, else error-edge/fail;
12
+ * - keyed write: retry with the same key when policy permits, else block;
13
+ * - non-keyed write / irreversible: never replay — block.
14
+ */
15
+ export interface PlanInput {
16
+ readonly graph: CompiledGraph;
17
+ readonly claim: ClaimedAttempt;
18
+ readonly now: number;
19
+ readonly outcome: AttemptOutcome;
20
+ /** For failed/timeout outcomes: the structured safe error. */
21
+ readonly error?: VictError;
22
+ /** For successful completions: the validated output (or decision result). */
23
+ readonly validatedOutput?: unknown;
24
+ /** The pinned descriptor of the node's capability (effect + idempotency). */
25
+ readonly descriptor?: {
26
+ readonly effect: EffectClass;
27
+ readonly idempotency?: 'keyed';
28
+ };
29
+ /** True when the claimed node is a fork/join-adjacent branch arrival. */
30
+ readonly isBranchArrival?: boolean;
31
+ /**
32
+ * True when the claimed wait node has ALREADY been resolved (wake path):
33
+ * the node must NOT park again; it advances along its success edge using
34
+ * the same routing as any other completion (including branch arrival
35
+ * when the success target is the fork's join).
36
+ */
37
+ readonly resolvedWait?: boolean;
38
+ }
39
+ export type PlannedCompletion = {
40
+ readonly kind: 'transition';
41
+ readonly continuation: AttemptContinuation;
42
+ readonly runStatus: 'running' | 'waiting' | 'blocked' | 'completed' | 'failed';
43
+ } | {
44
+ readonly kind: 'invalid';
45
+ readonly error: VictError;
46
+ };
47
+ export declare function invalidOutcome(message: string): VictError;
48
+ export declare function blockedOutcome(code: string, reason: string): {
49
+ continuation: AttemptContinuation;
50
+ runStatus: 'blocked';
51
+ };
52
+ export declare function planContinuation(input: PlanInput): PlannedCompletion;