From 87c78a14ef296ad395921c1ccc8990593e457f61 Mon Sep 17 00:00:00 2001 From: Miya Date: Fri, 16 Oct 2026 07:19:22 +0200 Subject: [PATCH 01/18] Run authored deterministic children concurrently --- docs/SURFACE.md | 39 ++-- packages/sdk/src/authored-budget.ts | 7 +- packages/sdk/src/authored-flow-executor.ts | 3 + packages/sdk/src/authored-worker-step.ts | 13 +- packages/sdk/src/journal-client.ts | 19 ++ .../tests/authored-parallel-run-live.test.ts | 210 ++++++++++++++++++ 6 files changed, 265 insertions(+), 26 deletions(-) create mode 100644 packages/sdk/tests/authored-parallel-run-live.test.ts diff --git a/docs/SURFACE.md b/docs/SURFACE.md index 354f89a94..2b6f416b7 100644 --- a/docs/SURFACE.md +++ b/docs/SURFACE.md @@ -965,39 +965,38 @@ If a process-wide intrinsic replacement is unacceptable in your deployment, do not run authored TypeScript bodies in that process; the declarative YAML path does not install it. -### `f.run` on the local daemon: one at a time, in the run's environment - -Two properties of `f.run` on a local `relayflowd` surprise people. Both are how -the current kernel works, not promises of the Surface. - -**Within one run, `f.run` steps run one after another.** `Promise.all` over two -`f.run('sleep 2')` steps takes about 4s, not 2s. The SDK starts both steps at -once, but the body talks to the daemon over a single connection. The daemon -handles each connection's requests in order (`kernel/relayflowd/src/server.rs`), -and the request that starts a deterministic step returns only after the -command exits (`engine/drive.rs` → `exec_det.rs`). A declared `budget` also -queues operations in order (`authored-budget.ts`). `Promise.all` stays correct -authoring: results come back in declaration order, and the steps will overlap -once the kernel dispatches in parallel. +### `f.run` on the local daemon: concurrent children, in the run's environment + +Two properties of `f.run` on a local `relayflowd` are useful to know. + +**Independent `f.run` steps overlap.** `Promise.all` over two +`f.run('sleep 2')` steps takes about 2s of step time. Each deterministic child +uses its own journal connection because the daemon handles requests on one +connection in order and `run.start` returns only after its command exits. An +authored body admits at most eight deterministic children at once; additional +calls wait for a slot. A declared `budget` still queues these operations in +order for exact accounting (`authored-budget.ts`). `Promise.all` returns results +in declaration order. For durable authored runs, child identities come from +the root run and step id, so replay or resume finds the same child even if +peers finish in a different order. Each child has its own journal; the root's +child index records completion facts as they arrive, and readers match them +by step id and run id. What runs concurrently today: - `f.agent` and `f.llm` steps, up to `--agent-capacity`. They run in worker processes, not in the daemon's request path. -- Separate `flows run` invocations. Each has its own connection to the daemon, - so their `f.run` steps overlap. For parallel shell work, start the lanes as - separate runs. +- Separate `flows run` invocations. Their steps overlap as well. - Inside one step, a command that waits on its own background jobs, such as `f.run('a & b & wait')`. A single `f.run` cannot start a background job and return before it finishes: the step waits on the command's output pipes. -`f.dispatch` children share their parent body's connection, so they are -serialized too. +`f.dispatch` child bodies use the same bounded parallel `f.run` path. **`f.run` gets the environment of the `flows run` that started the run, but the daemon's working directory.** Every `flows run` on a data dir attaches to the same `relayflowd`, which spawns the shell steps. The CLI sends its -`process.env` with the run, and that run's steps are spawned with exactly +`process.env` with each child run, and that run's steps are spawned with exactly that environment, plus `FLOWS_INPUT` and `RELAYFLOW_MEMORY`. Two runs on one daemon each see their own variables. `flows resume` sends the resuming CLI's environment, which replaces the run's from then on. diff --git a/packages/sdk/src/authored-budget.ts b/packages/sdk/src/authored-budget.ts index 55a7c1bf4..bc1bbeab6 100644 --- a/packages/sdk/src/authored-budget.ts +++ b/packages/sdk/src/authored-budget.ts @@ -108,8 +108,9 @@ export class AuthoredBudget { } async execute(journal: JournalClient, spec: KernelRunSpec, - consume: (outcome: RunOutcome) => Promise, admissionKey?: string): Promise { - if (this.limit === undefined) return consume(await journal.runStart(spec, undefined, admissionKey)); + consume: (outcome: RunOutcome) => Promise, admissionKey?: string, + isolatedStart = false): Promise { + if (this.limit === undefined) return consume(await journal.runStart(spec, undefined, admissionKey, false, isolatedStart)); const previous = this.tail; let release!: () => void; this.tail = new Promise(resolve => { release = resolve; }); @@ -134,7 +135,7 @@ export class AuthoredBudget { ...(this.limit.window === 'day' && day !== undefined ? { day } : {}), ...(total.unmetered ? { dollars_unmetered: true as const } : {}), }; - const outcome = await journal.runStart({ ...spec, budget: { ...this.limit, prior_spend: priorSpend } }, undefined, admissionKey); + const outcome = await journal.runStart({ ...spec, budget: { ...this.limit, prior_spend: priorSpend } }, undefined, admissionKey, false, isolatedStart); try { if (outcome.completion_reason === 'budget_exceeded') { throw new AuthoredFlowExecutionError('step_failed', budgetExceededMessage(this.limit!, total, spec), 'budget_exceeded', outcome.run_id); diff --git a/packages/sdk/src/authored-flow-executor.ts b/packages/sdk/src/authored-flow-executor.ts index 20ddb5d03..4f34e6d71 100644 --- a/packages/sdk/src/authored-flow-executor.ts +++ b/packages/sdk/src/authored-flow-executor.ts @@ -828,6 +828,7 @@ export async function executeAuthoredFlow( // race a commit this one is still making. await memoryWrites.settle(); try { + lowerDeterministic.stop(bodyFailure); worker.stop(bodyFailure); await stopAuthoredOperations(authoredSteps, bodyFailure); // A durable wait hands execution back to the control plane. Its @@ -862,6 +863,7 @@ export async function executeAuthoredFlow( // Same as a failed body: no learn may outlive the attempt that started it. await memoryWrites.settle(); try { + lowerDeterministic.stop(missingCompletion); worker.stop(missingCompletion); await stopAuthoredOperations(authoredSteps, missingCompletion); await activities.closeAll('canceled'); @@ -881,6 +883,7 @@ export async function executeAuthoredFlow( } await verifyAuthoredOperations(definition.name, authoredSteps, lifecycle); } catch (error) { + lowerDeterministic.stop(error); try { await activities.closeAll('canceled'); } finally { diff --git a/packages/sdk/src/authored-worker-step.ts b/packages/sdk/src/authored-worker-step.ts index 31f0b8a6f..4dd8a9735 100644 --- a/packages/sdk/src/authored-worker-step.ts +++ b/packages/sdk/src/authored-worker-step.ts @@ -19,7 +19,7 @@ import { authoredChildAdmissionKey } from './authored-admission.js'; import { alsoRecord, recordAuthoredChild } from './authored-step-index.js'; import type { StepFailedDetails } from './failure-kinds.js'; import { LOCAL_AGENT_WORKSPACE } from './local-agent-pins.js'; -import { authoredWorkerSlots, type AuthoredWorkerSlots } from './worker-slots.js'; +import { authoredWorkerSlots, WorkerSlots, type AuthoredWorkerSlots } from './worker-slots.js'; import { validateStepSecrets } from './step-secrets.js'; const AGENT_TIMEOUT = Symbol('declared agent timeout'); @@ -358,6 +358,11 @@ export function authoredDeterministicRunner( context: AuthoredStepContext = {}, ) { const rootRunId = context.rootRunId; + // run.start drives a deterministic child to completion before replying. The + // daemon reads one connection in order, so sharing the body's connection + // would serialize Promise.all. Each admitted child gets its own connection; + // this limit bounds both daemon threads and shell commands per authored body. + const slots = new WorkerSlots(8); // One lowering, two readers. `record` changes what the child run's verdict // MEANS, so the reader changes with it; everything before the read — spec, // admission key, budget, child index — is deliberately shared, because a @@ -386,8 +391,9 @@ export function authoredDeterministicRunner( }); return read(outcome); }; - if (terminal) return journal.runStart(spec, undefined, admissionKey).then(consume); - return budget.execute(journal, spec, consume, admissionKey); + return slots.run(async () => terminal + ? consume(await journal.runStart(spec, undefined, admissionKey, false, true)) + : budget.execute(journal, spec, consume, admissionKey, true)); } const lowerRun = (id: string, command: string, terminal = false, leaseMs?: number, verification?: NamedGate, secrets?: string[]): Promise => @@ -398,6 +404,7 @@ export function authoredDeterministicRunner( secrets?: string[]): Promise => lower(id, command, false, leaseMs, verification, 'record', secrets, outcome => readRecordedOutcome(journal, outcome, id, journalSteps, context)); + lowerRun.stop = (reason: unknown): void => slots.close(reason); return lowerRun; } diff --git a/packages/sdk/src/journal-client.ts b/packages/sdk/src/journal-client.ts index c6e365894..3796bc0b9 100644 --- a/packages/sdk/src/journal-client.ts +++ b/packages/sdk/src/journal-client.ts @@ -135,7 +135,12 @@ export class JournalClient extends JournalConnection { reuseFromRunId?: string, admissionKey?: string, watch = false, + isolated = false, ): Promise { + if (isolated) { + if (watch) throw new Error('an isolated run.start cannot keep a watch on its temporary session'); + return this.runStartIsolated(spec, reuseFromRunId, admissionKey); + } for (const step of spec.steps) { for (const name of validateStepSecrets(step.secrets, process.env)) { if (this.withheld.has(name)) { @@ -155,6 +160,20 @@ export class JournalClient extends JournalConnection { }, null); } + /** Drive a blocking deterministic child on its own socket, then close it. */ + private async runStartIsolated( + spec: KernelRunSpec, reuseFromRunId?: string, admissionKey?: string, + ): Promise { + const peer = this.createPeer(); + try { + await peer.connect(); + await peer.hello('flows-authored-deterministic'); + return await peer.runStart(spec, reuseFromRunId, admissionKey); + } finally { + peer.close(); + } + } + /** §3 memoized resume. */ runResume(runId: string, allowHumanInfluenced = false): Promise { return this.request('run.resume', { diff --git a/packages/sdk/tests/authored-parallel-run-live.test.ts b/packages/sdk/tests/authored-parallel-run-live.test.ts new file mode 100644 index 000000000..86c7d417b --- /dev/null +++ b/packages/sdk/tests/authored-parallel-run-live.test.ts @@ -0,0 +1,210 @@ +import { existsSync, readFileSync, readdirSync, writeFileSync } from 'node:fs'; +import { afterEach, describe, expect, it } from 'vitest'; +import { AUTHORED_STEP_STREAM } from '../src/authored-step-index.js'; +import { JournalClient } from '../src/journal-client.js'; +import { socketPathFor } from '../src/daemon-connection.js'; +import { chainFixture } from './flow-chain-fixture.js'; + +const closes: Array<() => Promise> = []; +afterEach(async () => { for (const close of closes.splice(0).reverse()) await close(); }); + +async function until(read: () => Promise | T | undefined, what: string): Promise { + const deadline = Date.now() + 30_000; + for (;;) { + const value = await read(); + if (value !== undefined) return value; + if (Date.now() >= deadline) throw new Error(`timed out waiting for ${what}`); + await new Promise(resolve => setTimeout(resolve, 25)); + } +} + +function runIds(data: string): string[] { + return readdirSync(`${data}/runs`).filter(name => name.endsWith('.sqlite3')) + .map(name => name.slice(0, -'.sqlite3'.length)).sort(); +} + +function killDaemon(data: string): void { + const { pid } = JSON.parse(readFileSync(`${data}/connection.json`, 'utf8')) as { pid: number }; + try { process.kill(pid, 'SIGKILL'); } catch (error) { + if ((error as NodeJS.ErrnoException).code !== 'ESRCH') throw error; + } +} + +describe('parallel authored deterministic steps', () => { + it('overlaps two sleep 2 commands started in Promise.all', () => { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + const previousEnv = process.env.FLOWS_PARALLEL_TEST_ENV; + process.env.FLOWS_PARALLEL_TEST_ENV = 'peer-env'; + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +import { writeFileSync } from 'node:fs'; +export default flow('parallel-run', async f => { + const started = Date.now(); + const outputs = await Promise.all([ + f.run('sleep 2; printf first:$FLOWS_PARALLEL_TEST_ENV'), + f.run('sleep 2; printf second:$FLOWS_PARALLEL_TEST_ENV'), + ]); + writeFileSync('result.json', JSON.stringify({ elapsedMs: Date.now() - started, outputs })); + f.done('success'); +}); +`); + let result; + try { + result = fixture.invoke('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + } finally { + if (previousEnv === undefined) delete process.env.FLOWS_PARALLEL_TEST_ENV; + else process.env.FLOWS_PARALLEL_TEST_ENV = previousEnv; + } + expect(result.status, result.stderr + result.stdout).toBe(0); + const measured = JSON.parse(readFileSync(`${fixture.root}/result.json`, 'utf8')) as { + elapsedMs: number; outputs: string[]; + }; + expect(measured.outputs).toEqual(['first:peer-env', 'second:peer-env']); + console.info(`parallel sleep 2 elapsed: ${measured.elapsedMs} ms`); + expect(measured.elapsedMs).toBeLessThan(3_000); + }, 60_000); + + it('keeps declaration order when the later child finishes first', async () => { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +import { writeFileSync } from 'node:fs'; +export default flow('out-of-order-parallel-run', async f => { + const outputs = await Promise.all([ + f.run('sleep 2; printf slow'), + f.run('printf fast'), + ]); + writeFileSync('ordered.json', JSON.stringify(outputs)); + f.done('success'); +}); +`); + const result = fixture.invoke('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + expect(result.status, result.stderr + result.stdout).toBe(0); + expect(JSON.parse(readFileSync(`${fixture.root}/ordered.json`, 'utf8'))).toEqual(['slow', 'fast']); + const rootRunId = runIds(fixture.data)[0]!; + const reader = new JournalClient(socketPathFor(fixture.data)); + await reader.connect(); + await reader.hello('parallel-order-test'); + try { + const records = (await reader.streamRead(rootRunId, AUTHORED_STEP_STREAM, 0, 100)).messages + .map(message => (message as { message?: unknown }).message ?? message) as Array<{ + step?: string; state?: string; + }>; + expect(records.filter(record => record.state === 'completed' && record.step !== 'complete-3') + .map(record => record.step)).toEqual(['run-2', 'run-1']); + } finally { reader.close(); } + }, 60_000); + + it('admits at most eight deterministic children at once', () => { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(`${fixture.root}/work.mjs`, `import { appendFileSync, readFileSync } from 'node:fs'; +const id = process.argv[2]; +appendFileSync('spans.jsonl', JSON.stringify({ id, edge: 'start', at: Date.now() }) + '\\n'); +const deadline = Date.now() + 10000; +while (readFileSync('spans.jsonl', 'utf8').split('\\n').filter(line => line.includes('"edge":"start"')).length < 8) { + if (Date.now() > deadline) throw new Error('eight deterministic children were not admitted'); + await new Promise(resolve => setTimeout(resolve, 20)); +} +await new Promise(resolve => setTimeout(resolve, 500)); +appendFileSync('spans.jsonl', JSON.stringify({ id, edge: 'end', at: Date.now() }) + '\\n'); +`); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +export default flow('bounded-parallel-run', async f => { + await Promise.all(Array.from({ length: 9 }, (_, i) => f.run('node work.mjs ' + i))); + f.done('success'); +}); +`); + const result = fixture.invoke('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + expect(result.status, result.stderr + result.stdout).toBe(0); + const events = readFileSync(`${fixture.root}/spans.jsonl`, 'utf8').trim().split('\n') + .map(line => JSON.parse(line) as { id: string; edge: 'start' | 'end'; at: number }) + .sort((a, b) => a.at - b.at || (a.edge === 'end' ? -1 : 1)); + expect(events).toHaveLength(18); + let active = 0; + let peak = 0; + for (const event of events) { + active += event.edge === 'start' ? 1 : -1; + peak = Math.max(peak, active); + } + expect(active).toBe(0); + expect(peak).toBe(8); + }, 60_000); + + it('replays a completed peer and resumes an unfinished peer after a crash', async () => { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +import { writeFileSync } from 'node:fs'; +export default flow('parallel-recovery', async f => { + const outputs = await Promise.all([ + f.run('printf x >> first-count; sleep 1; printf first'), + f.run('test -f stalled-marker || { touch stalled-marker; sleep 120; }; printf second', { timeout: '5m' }), + ]); + writeFileSync('recovered.json', JSON.stringify(outputs)); + f.done('success'); +}); +`); + const cli = fixture.invokeAsync('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + const cliExited = new Promise(resolve => cli.once('exit', () => resolve())); + const rootRunId = await until(() => { + if (!existsSync(`${fixture.data}/runs`)) return undefined; + return runIds(fixture.data)[0]; + }, 'root admission'); + const reader = new JournalClient(socketPathFor(fixture.data)); + await reader.connect(); + await reader.hello('parallel-recovery-test'); + let firstChildRunId: string; + let secondChildRunId: string; + try { + firstChildRunId = await until(async () => { + const page = await reader.streamRead(rootRunId, AUTHORED_STEP_STREAM, 0, 100); + const record = page.messages.map(message => + (message as { message?: unknown }).message ?? message) + .find(value => (value as { step?: string; state?: string }).step === 'run-1' + && (value as { state?: string }).state === 'completed') as { runId?: string } | undefined; + return record?.runId; + }, 'first child completion'); + await until(() => existsSync(`${fixture.root}/stalled-marker`) ? true : undefined, + 'unfinished peer to start'); + secondChildRunId = await until(async () => { + for (const runId of runIds(fixture.data).filter(id => id !== rootRunId && id !== firstChildRunId)) { + const entries = (await reader.journalRead(runId, 1, 100)).entries; + if (entries.some(entry => (entry as { step_id?: string }).step_id === 'run-2')) return runId; + } + return undefined; + }, 'second child admission'); + } finally { reader.close(); } + + cli.kill('SIGKILL'); + await cliExited; + killDaemon(fixture.data); + + const resumed = fixture.invoke('resume', '--no-observer-link', '--json', '--data-dir', fixture.data, rootRunId); + expect(resumed.status, resumed.stderr + resumed.stdout).toBe(0); + expect(JSON.parse(readFileSync(`${fixture.root}/recovered.json`, 'utf8'))).toEqual(['first', 'second']); + expect(readFileSync(`${fixture.root}/first-count`, 'utf8')).toBe('x'); + + const after = new JournalClient(socketPathFor(fixture.data)); + await after.connect(); + await after.hello('parallel-recovery-after'); + try { + const records = (await after.streamRead(rootRunId, AUTHORED_STEP_STREAM, 0, 100)).messages + .map(message => (message as { message?: unknown }).message ?? message) as Array<{ + step?: string; runId?: string; state?: string; + }>; + expect(records.find(record => record.step === 'run-1' && record.state === 'completed')?.runId) + .toBe(firstChildRunId); + expect(records.find(record => record.step === 'run-2' && record.state === 'completed')?.runId) + .toBe(secondChildRunId); + const firstEntries = (await after.journalRead(firstChildRunId, 1, 100)).entries; + expect(firstEntries.filter(entry => (entry as { entry_type?: string }).entry_type === 'step.completed')) + .toHaveLength(1); + expect(runIds(fixture.data)).toHaveLength(4); // root, both children, completion marker + } finally { after.close(); } + }, 120_000); +}); From ad43f51d83ccf2520e5beeea85bc8ed4cb81a391 Mon Sep 17 00:00:00 2001 From: Miya Date: Fri, 16 Oct 2026 07:45:37 +0200 Subject: [PATCH 02/18] Keep parallel branch continuations replay stable --- docs/SURFACE.md | 11 ++--- packages/sdk/src/authored-result-order.ts | 32 +++++++++++++ packages/sdk/src/authored-worker-step.ts | 7 ++- .../tests/authored-parallel-run-live.test.ts | 45 +++++++++++++++++++ 4 files changed, 88 insertions(+), 7 deletions(-) create mode 100644 packages/sdk/src/authored-result-order.ts diff --git a/docs/SURFACE.md b/docs/SURFACE.md index 2b6f416b7..6d2939963 100644 --- a/docs/SURFACE.md +++ b/docs/SURFACE.md @@ -976,11 +976,12 @@ connection in order and `run.start` returns only after its command exits. An authored body admits at most eight deterministic children at once; additional calls wait for a slot. A declared `budget` still queues these operations in order for exact accounting (`authored-budget.ts`). `Promise.all` returns results -in declaration order. For durable authored runs, child identities come from -the root run and step id, so replay or resume finds the same child even if -peers finish in a different order. Each child has its own journal; the root's -child index records completion facts as they arrive, and readers match them -by step id and run id. +in declaration order. The SDK publishes child results to authored continuations +in invocation order, even when later commands finish first. This keeps +follow-up step ids stable on replay or resume. For durable authored runs, each +child's admission key comes from the root run and step id. Each child has its +own journal; the root's child index records completion facts as they arrive, +and readers match them by step id and run id. What runs concurrently today: diff --git a/packages/sdk/src/authored-result-order.ts b/packages/sdk/src/authored-result-order.ts new file mode 100644 index 000000000..5b552f075 --- /dev/null +++ b/packages/sdk/src/authored-result-order.ts @@ -0,0 +1,32 @@ +/** + * Publish authored deterministic results in invocation order while their + * journal requests run concurrently. Continuations allocate the next step id, + * so exposing a later result first would make those ids depend on shell timing + * and could bind a resumed child admission key to a different command. + */ +export class AuthoredResultOrder { + private issued = 0; + private next = 0; + private readonly waiting = new Map void>(); + + reserve(): number { + return this.issued++; + } + + async run(ticket: number, work: () => Promise): Promise { + let outcome: { ok: true; value: T } | { ok: false; error: unknown }; + try { + outcome = { ok: true, value: await work() }; + } catch (error) { + outcome = { ok: false, error }; + } + if (ticket !== this.next) { + await new Promise(resolve => this.waiting.set(ticket, resolve)); + } + this.next++; + this.waiting.get(this.next)?.(); + this.waiting.delete(this.next); + if (!outcome.ok) throw outcome.error; + return outcome.value; + } +} diff --git a/packages/sdk/src/authored-worker-step.ts b/packages/sdk/src/authored-worker-step.ts index 4dd8a9735..075b910e9 100644 --- a/packages/sdk/src/authored-worker-step.ts +++ b/packages/sdk/src/authored-worker-step.ts @@ -21,6 +21,7 @@ import type { StepFailedDetails } from './failure-kinds.js'; import { LOCAL_AGENT_WORKSPACE } from './local-agent-pins.js'; import { authoredWorkerSlots, WorkerSlots, type AuthoredWorkerSlots } from './worker-slots.js'; import { validateStepSecrets } from './step-secrets.js'; +import { AuthoredResultOrder } from './authored-result-order.js'; const AGENT_TIMEOUT = Symbol('declared agent timeout'); const WORKSPACE_PERMISSION_ANNOTATION = /:\s*(readonly|readwrite)\s*$/i; @@ -363,6 +364,7 @@ export function authoredDeterministicRunner( // would serialize Promise.all. Each admitted child gets its own connection; // this limit bounds both daemon threads and shell commands per authored body. const slots = new WorkerSlots(8); + const results = new AuthoredResultOrder(); // One lowering, two readers. `record` changes what the child run's verdict // MEANS, so the reader changes with it; everything before the read — spec, // admission key, budget, child index — is deliberately shared, because a @@ -391,9 +393,10 @@ export function authoredDeterministicRunner( }); return read(outcome); }; - return slots.run(async () => terminal + const ticket = results.reserve(); + return slots.run(() => results.run(ticket, async () => terminal ? consume(await journal.runStart(spec, undefined, admissionKey, false, true)) - : budget.execute(journal, spec, consume, admissionKey, true)); + : budget.execute(journal, spec, consume, admissionKey, true))); } const lowerRun = (id: string, command: string, terminal = false, leaseMs?: number, verification?: NamedGate, secrets?: string[]): Promise => diff --git a/packages/sdk/tests/authored-parallel-run-live.test.ts b/packages/sdk/tests/authored-parallel-run-live.test.ts index 86c7d417b..168649cfa 100644 --- a/packages/sdk/tests/authored-parallel-run-live.test.ts +++ b/packages/sdk/tests/authored-parallel-run-live.test.ts @@ -158,6 +158,15 @@ export default flow('parallel-recovery', async f => { const reader = new JournalClient(socketPathFor(fixture.data)); await reader.connect(); await reader.hello('parallel-recovery-test'); + await until(async () => { + try { + await reader.journalRead(rootRunId, 1, 1); + return true; + } catch (error) { + if (error instanceof Error && /no such table: meta/u.test(error.message)) return undefined; + throw error; + } + }, 'root journal initialization'); let firstChildRunId: string; let secondChildRunId: string; try { @@ -207,4 +216,40 @@ export default flow('parallel-recovery', async f => { expect(runIds(fixture.data)).toHaveLength(4); // root, both children, completion marker } finally { after.close(); } }, 120_000); + + it('replays follow-up steps in parallel branches after a crash', async () => { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +import { appendFileSync } from 'node:fs'; +export default flow('parallel-branch-recovery', async f => { + const left = async () => { + await f.run('sleep 2; printf left-initial'); + await f.run('printf L >> branch-effects; printf left-follow'); + await f.run('printf l >> branch-effects; printf left-last'); + }; + const right = async () => { + await f.run('printf right-initial'); + await f.run('printf R >> branch-effects; printf right-follow'); + await f.run('printf r >> branch-effects; printf right-last'); + }; + await Promise.all([left(), right()]); + await f.run('test -f branch-stalled || { touch branch-stalled; sleep 120; }; printf resumed'); + appendFileSync('branch-effects', '!'); + f.done('success'); +}); +`); + const cli = fixture.invokeAsync('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + const cliExited = new Promise(resolve => cli.once('exit', () => resolve())); + await until(() => existsSync(`${fixture.root}/branch-stalled`) ? true : undefined, 'branch stall'); + expect([...readFileSync(`${fixture.root}/branch-effects`, 'utf8')].sort()).toEqual(['L', 'R', 'l', 'r']); + const rootRunId = runIds(fixture.data)[0]!; + cli.kill('SIGKILL'); + await cliExited; + killDaemon(fixture.data); + const resumed = fixture.invoke('resume', '--no-observer-link', '--json', '--data-dir', fixture.data, rootRunId); + expect(resumed.status, resumed.stderr + resumed.stdout).toBe(0); + expect([...readFileSync(`${fixture.root}/branch-effects`, 'utf8')].sort()).toEqual(['!', 'L', 'R', 'l', 'r']); + }, 120_000); }); From 184827e0dc6856838c148003c752f2fdfd60caa6 Mon Sep 17 00:00:00 2001 From: Miya Date: Fri, 16 Oct 2026 07:55:35 +0200 Subject: [PATCH 03/18] Release parallel branch results without replay conflicts --- docs/SURFACE.md | 27 ++++++--- packages/sdk/src/authored-flow-executor.ts | 34 +++++++++++- packages/sdk/src/authored-flow-lifecycle.ts | 5 ++ packages/sdk/src/authored-result-order.ts | 32 ----------- packages/sdk/src/authored-step-graph.ts | 10 +++- packages/sdk/src/authored-step-index.ts | 3 +- packages/sdk/src/authored-worker-step.ts | 7 +-- .../tests/authored-parallel-run-live.test.ts | 55 +++++++++++++++++++ 8 files changed, 123 insertions(+), 50 deletions(-) delete mode 100644 packages/sdk/src/authored-result-order.ts diff --git a/docs/SURFACE.md b/docs/SURFACE.md index 6d2939963..2dc0da868 100644 --- a/docs/SURFACE.md +++ b/docs/SURFACE.md @@ -974,14 +974,25 @@ Two properties of `f.run` on a local `relayflowd` are useful to know. uses its own journal connection because the daemon handles requests on one connection in order and `run.start` returns only after its command exits. An authored body admits at most eight deterministic children at once; additional -calls wait for a slot. A declared `budget` still queues these operations in -order for exact accounting (`authored-budget.ts`). `Promise.all` returns results -in declaration order. The SDK publishes child results to authored continuations -in invocation order, even when later commands finish first. This keeps -follow-up step ids stable on replay or resume. For durable authored runs, each -child's admission key comes from the root run and step id. Each child has its -own journal; the root's child index records completion facts as they arrive, -and readers match them by step id and run id. +calls wait for a slot. This limit belongs to each authored body: a dispatched +child body has its own eight slots. A declared `budget` still queues these +operations in order for exact accounting (`authored-budget.ts`). `Promise.all` +returns results in declaration order while each continuation receives its +result as soon as that child completes. For durable authored runs, branch +follow-up ids are rooted in their causal predecessor, so replay or resume +finds the same child even when completion order changes. Each child's +admission key comes from the root run and step id. Each child has its own +journal; the root's child index records completion facts as they arrive, and +readers match them by step id and run id. +If the bounded causal walk cannot identify a follow-up's full predecessor +frontier, the flow fails before admitting that child rather than issuing an +ambiguous replay key. + +If one concurrent `f.run` fails, the authored body fails and its waiting +siblings are cancelled before admission. Children already admitted can finish +their own journal work; their outcomes cannot turn the failed body into a +success. A child in a separate `f.dispatch` body follows that body's own +failure and capacity rules. What runs concurrently today: diff --git a/packages/sdk/src/authored-flow-executor.ts b/packages/sdk/src/authored-flow-executor.ts index 4f34e6d71..a2bde97f6 100644 --- a/packages/sdk/src/authored-flow-executor.ts +++ b/packages/sdk/src/authored-flow-executor.ts @@ -1,7 +1,7 @@ import { assertAuthoredPromiseHooks } from './authored-runtime-capability.js'; import { pluginHelpers } from './plugin-loader.js'; import { runPluginEffect } from './authored-plugin-effect.js'; -import { randomUUID } from 'node:crypto'; +import { createHash, randomUUID } from 'node:crypto'; import { dirname } from 'node:path'; import { runHelperEffect } from './authored-helper-effect.js'; import { checkSlackHelpers } from './slack-preflight.js'; @@ -302,7 +302,37 @@ export async function executeAuthoredFlow( let requestedCompletion: LoweredCompletionReason | undefined; let requestedDetail: string | undefined; const qualify = (id: string): string => `${options.stepPrefix ?? ''}${id}`; - const nextId = (kind: string): string => qualify(`${kind}-${nextStep++}`); + // Concurrent f.run siblings may finish in either order. A follow-up in one + // branch takes its identity from that branch's causal predecessor, so replay + // cannot bind its admission key to the other branch's command. + const parallelRoots = new Set(); + const branchOrdinals = new Map(); + const runPredecessors = new Map(); + const nextId = (kind: string): string => { + const sequence = nextStep++; + if (kind !== 'run') return qualify(`${kind}-${sequence}`); + const predecessors = lifecycle.invocationPredecessors(); + if (predecessors.truncated) { + throw new AuthoredFlowExecutionError('step_failed', + 'cannot assign a replay-stable f.run identity: its causal predecessor graph is truncated'); + } + const parent = predecessors.steps.length === 1 ? predecessors.steps[0] : undefined; + const inBranch = parent !== undefined && parallelRoots.has(parent); + const signature = JSON.stringify([...predecessors.steps].sort()); + const siblings = authoredSteps.filter(operation => operation.verb === 'run' + && (operation.lifecycle === 'created' || operation.lifecycle === 'running') + && runPredecessors.get(operation.id) === signature); + const id = inBranch + ? qualify(`run-after-${createHash('sha256').update(parent).digest('hex')}-${(branchOrdinals.get(parent) ?? 0) + 1}`) + : qualify(`run-${sequence}`); + if (inBranch) branchOrdinals.set(parent, (branchOrdinals.get(parent) ?? 0) + 1); + if (inBranch || siblings.length > 0) { + parallelRoots.add(id); + for (const sibling of siblings) parallelRoots.add(sibling.id); + } + runPredecessors.set(id, signature); + return id; + }; const assertHelperAllowed = (provider: string): void => { if (options.allowedHelperProviders !== undefined && !options.allowedHelperProviders.has(provider)) { throw new AuthoredFlowExecutionError( diff --git a/packages/sdk/src/authored-flow-lifecycle.ts b/packages/sdk/src/authored-flow-lifecycle.ts index 955f07c72..cdd9952a7 100644 --- a/packages/sdk/src/authored-flow-lifecycle.ts +++ b/packages/sdk/src/authored-flow-lifecycle.ts @@ -215,6 +215,11 @@ export class AuthoredFlowLifecycle { return this.stepGraph.edgesOf(step); } + /** Predecessors for a new invocation, before it has an operation promise. */ + invocationPredecessors(): { readonly steps: readonly string[]; readonly truncated: boolean } { + return this.stepGraph.predecessorsAt(executionAsyncId()); + } + registerInvocation( operation: OperationToken, asyncId: number, diff --git a/packages/sdk/src/authored-result-order.ts b/packages/sdk/src/authored-result-order.ts deleted file mode 100644 index 5b552f075..000000000 --- a/packages/sdk/src/authored-result-order.ts +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Publish authored deterministic results in invocation order while their - * journal requests run concurrently. Continuations allocate the next step id, - * so exposing a later result first would make those ids depend on shell timing - * and could bind a resumed child admission key to a different command. - */ -export class AuthoredResultOrder { - private issued = 0; - private next = 0; - private readonly waiting = new Map void>(); - - reserve(): number { - return this.issued++; - } - - async run(ticket: number, work: () => Promise): Promise { - let outcome: { ok: true; value: T } | { ok: false; error: unknown }; - try { - outcome = { ok: true, value: await work() }; - } catch (error) { - outcome = { ok: false, error }; - } - if (ticket !== this.next) { - await new Promise(resolve => this.waiting.set(ticket, resolve)); - } - this.next++; - this.waiting.get(this.next)?.(); - this.waiting.delete(this.next); - if (!outcome.ok) throw outcome.error; - return outcome.value; - } -} diff --git a/packages/sdk/src/authored-step-graph.ts b/packages/sdk/src/authored-step-graph.ts index aaa8e2aac..98928efcd 100644 --- a/packages/sdk/src/authored-step-graph.ts +++ b/packages/sdk/src/authored-step-graph.ts @@ -32,8 +32,9 @@ import { MAX_AFTER, displayLabel, type AuthoredStepEdges } from './authored-step * body walks a few nodes per step. A walk that still exceeds `walkLimit` stops * and says so (`afterTruncated`) rather than guessing silently. * - * This is observational metadata: it never gates execution, and it changes no - * step id, admission key or resume identity. + * Most consumers use this as observational metadata. Parallel f.run follow-up + * IDs also use the causal frontier; the executor refuses a truncated frontier + * rather than choosing a replay key from incomplete predecessors. */ export const MAX_WALK = 10_000; @@ -119,6 +120,11 @@ export class AuthoredStepGraph { return this.edges.get(step); } + /** Causal predecessors of a step being declared in the current async context. */ + predecessorsAt(contextId: number): { readonly steps: readonly string[]; readonly truncated: boolean } { + return this.frontierOf(contextId); + } + /** Drop the walk state; recorded edges stay readable for late record writes. */ release(): void { this.stepPromises.clear(); diff --git a/packages/sdk/src/authored-step-index.ts b/packages/sdk/src/authored-step-index.ts index ac514b282..d8f5201ec 100644 --- a/packages/sdk/src/authored-step-index.ts +++ b/packages/sdk/src/authored-step-index.ts @@ -150,7 +150,8 @@ export async function alsoRecord( * Fold the root's stream back into one record per authored step. * * A `completed` record supersedes the `admitted` one for the same step; first - * admission order is preserved so the index reads in the order the body ran. + * admission order is preserved for each step, while different children can + * first appear in completion order when they finish concurrently. * Records this version does not recognise are skipped rather than trusted. */ export async function readAuthoredStepIndex( diff --git a/packages/sdk/src/authored-worker-step.ts b/packages/sdk/src/authored-worker-step.ts index 075b910e9..4dd8a9735 100644 --- a/packages/sdk/src/authored-worker-step.ts +++ b/packages/sdk/src/authored-worker-step.ts @@ -21,7 +21,6 @@ import type { StepFailedDetails } from './failure-kinds.js'; import { LOCAL_AGENT_WORKSPACE } from './local-agent-pins.js'; import { authoredWorkerSlots, WorkerSlots, type AuthoredWorkerSlots } from './worker-slots.js'; import { validateStepSecrets } from './step-secrets.js'; -import { AuthoredResultOrder } from './authored-result-order.js'; const AGENT_TIMEOUT = Symbol('declared agent timeout'); const WORKSPACE_PERMISSION_ANNOTATION = /:\s*(readonly|readwrite)\s*$/i; @@ -364,7 +363,6 @@ export function authoredDeterministicRunner( // would serialize Promise.all. Each admitted child gets its own connection; // this limit bounds both daemon threads and shell commands per authored body. const slots = new WorkerSlots(8); - const results = new AuthoredResultOrder(); // One lowering, two readers. `record` changes what the child run's verdict // MEANS, so the reader changes with it; everything before the read — spec, // admission key, budget, child index — is deliberately shared, because a @@ -393,10 +391,9 @@ export function authoredDeterministicRunner( }); return read(outcome); }; - const ticket = results.reserve(); - return slots.run(() => results.run(ticket, async () => terminal + return slots.run(async () => terminal ? consume(await journal.runStart(spec, undefined, admissionKey, false, true)) - : budget.execute(journal, spec, consume, admissionKey, true))); + : budget.execute(journal, spec, consume, admissionKey, true)); } const lowerRun = (id: string, command: string, terminal = false, leaseMs?: number, verification?: NamedGate, secrets?: string[]): Promise => diff --git a/packages/sdk/tests/authored-parallel-run-live.test.ts b/packages/sdk/tests/authored-parallel-run-live.test.ts index 168649cfa..36e76a58c 100644 --- a/packages/sdk/tests/authored-parallel-run-live.test.ts +++ b/packages/sdk/tests/authored-parallel-run-live.test.ts @@ -65,6 +65,33 @@ export default flow('parallel-run', async f => { expect(measured.elapsedMs).toBeLessThan(3_000); }, 60_000); + it('starts a fast branch dependent before a slow sibling completes', () => { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(`${fixture.root}/dependent.mjs`, `import { writeFileSync } from 'node:fs'; +writeFileSync('dependent-start.json', JSON.stringify({ elapsedMs: Date.now() - Number(process.argv[2]) })); +process.stdout.write('dependent'); +`); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +export default flow('parallel-dependent', async f => { + const started = Date.now(); + const slow = async () => await f.run('sleep 3; printf slow'); + const fast = async () => { + await f.run('sleep 1; printf fast'); + return await f.run('node dependent.mjs ' + started); + }; + await Promise.all([slow(), fast()]); + f.done('success'); +}); +`); + const result = fixture.invoke('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + expect(result.status, result.stderr + result.stdout).toBe(0); + const { elapsedMs } = JSON.parse(readFileSync(`${fixture.root}/dependent-start.json`, 'utf8')) as { elapsedMs: number }; + console.info(`fast dependent started after: ${elapsedMs} ms`); + expect(elapsedMs).toBeLessThan(2_300); + }, 60_000); + it('keeps declaration order when the later child finishes first', async () => { const fixture = chainFixture(); closes.push(() => fixture.close()); @@ -134,6 +161,34 @@ export default flow('bounded-parallel-run', async f => { expect(peak).toBe(8); }, 60_000); + it('does not admit a queued child after a sibling fails', () => { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(`${fixture.root}/fail-work.mjs`, `import { appendFileSync, readFileSync } from 'node:fs'; +const id = process.argv[2]; +appendFileSync('fail-starts', id + '\\n'); +const deadline = Date.now() + 10000; +while (readFileSync('fail-starts', 'utf8').trim().split('\\n').length < 8) { + if (Date.now() > deadline) throw new Error('eight children were not admitted'); + await new Promise(resolve => setTimeout(resolve, 20)); +} +if (id === '0') process.exit(7); +await new Promise(resolve => setTimeout(resolve, 500)); +`); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +export default flow('queued-child-cancellation', async f => { + await Promise.all(Array.from({ length: 9 }, (_, i) => f.run(i === 8 + ? 'touch queued-started' : 'node fail-work.mjs ' + i))); + f.done('success'); +}); +`); + const result = fixture.invoke('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + expect(result.status, result.stderr + result.stdout).toBe(1); + expect(readFileSync(`${fixture.root}/fail-starts`, 'utf8').trim().split('\n')).toHaveLength(8); + expect(existsSync(`${fixture.root}/queued-started`)).toBe(false); + }, 60_000); + it('replays a completed peer and resumes an unfinished peer after a crash', async () => { const fixture = chainFixture(); closes.push(() => fixture.close()); From ec3d1fb480b9d708c7e8ac648f4708b7210af37c Mon Sep 17 00:00:00 2001 From: Miya Date: Fri, 16 Oct 2026 09:19:56 +0200 Subject: [PATCH 04/18] Use causal frontier identity for parallel run joins --- packages/sdk/src/authored-flow-executor.ts | 11 ++- .../tests/authored-parallel-run-live.test.ts | 80 +++++++++++++++++++ 2 files changed, 87 insertions(+), 4 deletions(-) diff --git a/packages/sdk/src/authored-flow-executor.ts b/packages/sdk/src/authored-flow-executor.ts index a2bde97f6..b290c3a12 100644 --- a/packages/sdk/src/authored-flow-executor.ts +++ b/packages/sdk/src/authored-flow-executor.ts @@ -316,16 +316,19 @@ export async function executeAuthoredFlow( throw new AuthoredFlowExecutionError('step_failed', 'cannot assign a replay-stable f.run identity: its causal predecessor graph is truncated'); } - const parent = predecessors.steps.length === 1 ? predecessors.steps[0] : undefined; - const inBranch = parent !== undefined && parallelRoots.has(parent); const signature = JSON.stringify([...predecessors.steps].sort()); + // A continuation after Promise.all has several predecessors. It belongs to + // the same concurrent region as its members, and a global sequence number + // would change when another branch wins a completion race. Keep the whole + // sorted frontier as the replay identity, including at joins. + const inBranch = predecessors.steps.some(step => parallelRoots.has(step)); const siblings = authoredSteps.filter(operation => operation.verb === 'run' && (operation.lifecycle === 'created' || operation.lifecycle === 'running') && runPredecessors.get(operation.id) === signature); const id = inBranch - ? qualify(`run-after-${createHash('sha256').update(parent).digest('hex')}-${(branchOrdinals.get(parent) ?? 0) + 1}`) + ? qualify(`run-after-${createHash('sha256').update(signature).digest('hex')}-${(branchOrdinals.get(signature) ?? 0) + 1}`) : qualify(`run-${sequence}`); - if (inBranch) branchOrdinals.set(parent, (branchOrdinals.get(parent) ?? 0) + 1); + if (inBranch) branchOrdinals.set(signature, (branchOrdinals.get(signature) ?? 0) + 1); if (inBranch || siblings.length > 0) { parallelRoots.add(id); for (const sibling of siblings) parallelRoots.add(sibling.id); diff --git a/packages/sdk/tests/authored-parallel-run-live.test.ts b/packages/sdk/tests/authored-parallel-run-live.test.ts index 36e76a58c..aa6716e56 100644 --- a/packages/sdk/tests/authored-parallel-run-live.test.ts +++ b/packages/sdk/tests/authored-parallel-run-live.test.ts @@ -1,4 +1,5 @@ import { existsSync, readFileSync, readdirSync, writeFileSync } from 'node:fs'; +import { spawn } from 'node:child_process'; import { afterEach, describe, expect, it } from 'vitest'; import { AUTHORED_STEP_STREAM } from '../src/authored-step-index.js'; import { JournalClient } from '../src/journal-client.js'; @@ -307,4 +308,83 @@ export default flow('parallel-branch-recovery', async f => { expect(resumed.status, resumed.stderr + resumed.stdout).toBe(0); expect([...readFileSync(`${fixture.root}/branch-effects`, 'utf8')].sort()).toEqual(['!', 'L', 'R', 'l', 'r']); }, 120_000); + + it.each([ + { + name: 'two branches that each join two runs', + branches: ` + const left = async () => { + await Promise.all([f.run('sleep 1; printf left-a'), f.run('printf left-b')]); + await f.run('printf L >> effects; printf left-effect'); + }; + const right = async () => { + await Promise.all([f.run('printf right-a'), f.run('sleep 1; printf right-b')]); + await f.run('printf R >> effects; printf right-effect'); + };`, + }, + { + name: 'a chain beside a branch with a join', + branches: ` + const left = async () => { + await f.run('sleep 1; printf left-a'); + await f.run('printf left-b'); + await f.run('printf L >> effects; printf left-effect'); + }; + const right = async () => { + await Promise.all([f.run('printf right-a'), f.run('sleep 1; printf right-b')]); + await f.run('printf R >> effects; printf right-effect'); + };`, + }, + ])('does not replay a completed effect after a crash: $name', async ({ branches }) => { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +export default flow('parallel-join-recovery', async f => {${branches} + await Promise.all([left(), right()]); + await f.run('test -f stalled || { touch stalled; sleep 120; }; printf resumed', { timeout: '5m' }); + f.done('success'); +}); +`); + const cli = fixture.invokeAsync('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + const cliExited = new Promise(resolve => cli.once('exit', () => resolve())); + await until(() => existsSync(`${fixture.root}/stalled`) ? true : undefined, 'join recovery stall'); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual(['L', 'R']); + const rootRunId = runIds(fixture.data)[0]!; + cli.kill('SIGKILL'); + await cliExited; + killDaemon(fixture.data); + const resumed = fixture.invoke('resume', '--no-observer-link', '--json', '--data-dir', fixture.data, rootRunId); + expect(resumed.status, resumed.stderr + resumed.stdout).toBe(0); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual(['L', 'R']); + }, 120_000); + + it.skipIf(process.env.RELAYFLOWS_PREVIOUS_CLI === undefined)( + 'resumes a sequential 2.0.50 run without replaying completed effects', async () => { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +export default flow('legacy-sequential-resume', async f => { + await f.run('printf A >> effects'); + await f.run('printf B >> effects'); + await f.run('test -f stalled || { touch stalled; sleep 120; }; printf ready', { timeout: '5m' }); + await f.run('printf D >> effects'); + f.done('success'); +}); +`); + const cli = spawn(process.execPath, [process.env.RELAYFLOWS_PREVIOUS_CLI!, 'run', + '--no-observer-link', '--json', '--data-dir', fixture.data, fixture.flowPath, '--input', '{}'], + { cwd: fixture.root, stdio: 'pipe', env: { ...process.env, RELAYFLOWD_BIN: fixture.binary } }); + const cliExited = new Promise(resolve => cli.once('exit', () => resolve())); + await until(() => existsSync(`${fixture.root}/stalled`) ? true : undefined, 'legacy run stall'); + expect(readFileSync(`${fixture.root}/effects`, 'utf8')).toBe('AB'); + const rootRunId = runIds(fixture.data)[0]!; + cli.kill('SIGKILL'); + await cliExited; + killDaemon(fixture.data); + const resumed = fixture.invoke('resume', '--no-observer-link', '--json', '--data-dir', fixture.data, rootRunId); + expect(resumed.status, resumed.stderr + resumed.stdout).toBe(0); + expect(readFileSync(`${fixture.root}/effects`, 'utf8')).toBe('ABD'); + }, 120_000, + ); }); From ea75fe32c85364c23845dca2f950c50b5f887c3b Mon Sep 17 00:00:00 2001 From: Miya Date: Fri, 16 Oct 2026 09:22:01 +0200 Subject: [PATCH 05/18] Document replay identity and upgrade boundary for parallel runs --- docs/SURFACE.md | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/docs/SURFACE.md b/docs/SURFACE.md index 2dc0da868..54bb4f860 100644 --- a/docs/SURFACE.md +++ b/docs/SURFACE.md @@ -978,11 +978,16 @@ calls wait for a slot. This limit belongs to each authored body: a dispatched child body has its own eight slots. A declared `budget` still queues these operations in order for exact accounting (`authored-budget.ts`). `Promise.all` returns results in declaration order while each continuation receives its -result as soon as that child completes. For durable authored runs, branch -follow-up ids are rooted in their causal predecessor, so replay or resume -finds the same child even when completion order changes. Each child's -admission key comes from the root run and step id. Each child has its own -journal; the root's child index records completion facts as they arrive, and +result as soon as that child completes. For durable authored runs, follow-up +ids inside a concurrent region are rooted in the full causal predecessor set, +including a `Promise.all` join. Replay or resume finds the same child when +those predecessors are the same, regardless of which sibling finished first. +After `Promise.race`, the predecessor can change if a different member wins +on replay; do not put a non-idempotent effect after a race of independent +steps. + +Each child's admission key comes from the root run and step id. Each child has +its own journal; the root's child index records completion facts as they arrive, and readers match them by step id and run id. If the bounded causal walk cannot identify a follow-up's full predecessor frontier, the flow fails before admitting that child rather than issuing an @@ -994,6 +999,13 @@ their own journal work; their outcomes cannot turn the failed body into a success. A child in a separate `f.dispatch` body follows that body's own failure and capacity rules. +**Upgrade from 2.0.50:** let in-flight authored runs with concurrent `f.run` +branches and follow-ups finish before deploying this version. Version 2.0.50 +named those follow-ups with a global `run-N` counter; this version uses their +causal predecessors, so resuming such an unfinished run across the upgrade can +re-admit a completed command. Sequential authored runs retain their `run-N` +identities and can resume across the upgrade. + What runs concurrently today: - `f.agent` and `f.llm` steps, up to `--agent-capacity`. They run in worker From d30f13d8c1b6422b240675013491b1304fb03b2a Mon Sep 17 00:00:00 2001 From: Miya Date: Fri, 16 Oct 2026 10:53:29 +0200 Subject: [PATCH 06/18] Pin safe parallel run mode per authored root --- docs/SURFACE.md | 51 ++-- packages/sdk/src/authored-flow-executor.ts | 38 +-- packages/sdk/src/authored-node-entry.ts | 2 + .../sdk/src/authored-parallel-eligibility.ts | 123 ++++++++ packages/sdk/src/authored-root.ts | 16 +- packages/sdk/src/authored-worker-step.ts | 8 +- .../authored-parallel-eligibility.test.ts | 66 +++++ .../tests/authored-parallel-run-live.test.ts | 275 +++++++++++++++++- packages/sdk/tests/authored-root.test.ts | 15 + 9 files changed, 539 insertions(+), 55 deletions(-) create mode 100644 packages/sdk/src/authored-parallel-eligibility.ts create mode 100644 packages/sdk/tests/authored-parallel-eligibility.test.ts diff --git a/docs/SURFACE.md b/docs/SURFACE.md index 54bb4f860..8749ce7ab 100644 --- a/docs/SURFACE.md +++ b/docs/SURFACE.md @@ -969,29 +969,32 @@ does not install it. Two properties of `f.run` on a local `relayflowd` are useful to know. -**Independent `f.run` steps overlap.** `Promise.all` over two -`f.run('sleep 2')` steps takes about 2s of step time. Each deterministic child -uses its own journal connection because the daemon handles requests on one -connection in order and `run.start` returns only after its command exits. An -authored body admits at most eight deterministic children at once; additional -calls wait for a slot. This limit belongs to each authored body: a dispatched -child body has its own eight slots. A declared `budget` still queues these -operations in order for exact accounting (`authored-budget.ts`). `Promise.all` +**Certified `Promise.all` groups of `f.run` steps overlap.** A direct +`Promise.all` over two `f.run('sleep 2')` steps takes about 2s of step time. +The root records its execution mode before its body runs. Parallel mode is +selected only for run-only bodies whose awaited `Promise.all` members and +locally declared async branches can be identified before admission. In this +mode, each deterministic child uses its own journal connection because the +daemon handles requests on one connection in order and `run.start` returns +only after its command exits. An authored body admits at most eight +deterministic children at once; additional calls wait for a slot. `Promise.all` returns results in declaration order while each continuation receives its -result as soon as that child completes. For durable authored runs, follow-up -ids inside a concurrent region are rooted in the full causal predecessor set, -including a `Promise.all` join. Replay or resume finds the same child when -those predecessors are the same, regardless of which sibling finished first. -After `Promise.race`, the predecessor can change if a different member wins -on replay; do not put a non-idempotent effect after a race of independent -steps. +result as soon as that child completes. Follow-up ids inside a certified +concurrent region use causal predecessor identities for replay. + +Other bodies keep the established serial `f.run` scheduler and `kind-N` step +ids. This includes `Promise.race`, `Promise.any`, eager background work, +timers, other `f.*` effects, dispatched flows, and a declared `budget`. +Those bodies continue to run; the fallback only changes whether their +deterministic child commands overlap. A step whose source cannot be +certified also uses serial mode. The mode is immutable for the root's lifetime. Each child's admission key comes from the root run and step id. Each child has its own journal; the root's child index records completion facts as they arrive, and readers match them by step id and run id. -If the bounded causal walk cannot identify a follow-up's full predecessor -frontier, the flow fails before admitting that child rather than issuing an -ambiguous replay key. +In parallel mode, if the bounded causal walk cannot identify a follow-up's +full predecessor frontier, the flow fails before admitting that child rather +than issuing an ambiguous replay key. If one concurrent `f.run` fails, the authored body fails and its waiting siblings are cancelled before admission. Children already admitted can finish @@ -999,12 +1002,10 @@ their own journal work; their outcomes cannot turn the failed body into a success. A child in a separate `f.dispatch` body follows that body's own failure and capacity rules. -**Upgrade from 2.0.50:** let in-flight authored runs with concurrent `f.run` -branches and follow-ups finish before deploying this version. Version 2.0.50 -named those follow-ups with a global `run-N` counter; this version uses their -causal predecessors, so resuming such an unfinished run across the upgrade can -re-admit a completed command. Sequential authored runs retain their `run-N` -identities and can resume across the upgrade. +**Upgrade from 2.0.50:** roots admitted before execution modes were journaled +resume in serial compatibility mode, preserving the 2.0.50 `kind-N` step ids +and shared connection. Completed child effects remain bound to their original +admission keys, including follow-ups after a `Promise.all` join. What runs concurrently today: @@ -1015,7 +1016,7 @@ What runs concurrently today: `f.run('a & b & wait')`. A single `f.run` cannot start a background job and return before it finishes: the step waits on the command's output pipes. -`f.dispatch` child bodies use the same bounded parallel `f.run` path. +`f.dispatch` roots currently use serial `f.run` scheduling. **`f.run` gets the environment of the `flows run` that started the run, but the daemon's working directory.** Every `flows run` on a data dir attaches diff --git a/packages/sdk/src/authored-flow-executor.ts b/packages/sdk/src/authored-flow-executor.ts index b290c3a12..e09cb6b19 100644 --- a/packages/sdk/src/authored-flow-executor.ts +++ b/packages/sdk/src/authored-flow-executor.ts @@ -196,6 +196,8 @@ export interface ExecuteAuthoredFlowOptions { readonly workerCapacity?: number; /** Durable kernel root that owns this body's child admission identities. */ readonly rootRunId?: string; + /** Pinned by the durable root. Legacy roots retain 2.0.50 step identities. */ + readonly executionMode?: 'serial' | 'parallel'; /** Installed flow-extension plugins, in lock order, so `f.hook` can AND-compose them. */ readonly extensions?: readonly LoadedFlowExtension[]; /** @@ -302,39 +304,25 @@ export async function executeAuthoredFlow( let requestedCompletion: LoweredCompletionReason | undefined; let requestedDetail: string | undefined; const qualify = (id: string): string => `${options.stepPrefix ?? ''}${id}`; - // Concurrent f.run siblings may finish in either order. A follow-up in one - // branch takes its identity from that branch's causal predecessor, so replay - // cannot bind its admission key to the other branch's command. - const parallelRoots = new Set(); const branchOrdinals = new Map(); - const runPredecessors = new Map(); const nextId = (kind: string): string => { const sequence = nextStep++; - if (kind !== 'run') return qualify(`${kind}-${sequence}`); + if (options.executionMode !== 'parallel' || kind !== 'run') return qualify(`${kind}-${sequence}`); const predecessors = lifecycle.invocationPredecessors(); if (predecessors.truncated) { throw new AuthoredFlowExecutionError('step_failed', 'cannot assign a replay-stable f.run identity: its causal predecessor graph is truncated'); } const signature = JSON.stringify([...predecessors.steps].sort()); - // A continuation after Promise.all has several predecessors. It belongs to - // the same concurrent region as its members, and a global sequence number - // would change when another branch wins a completion race. Keep the whole - // sorted frontier as the replay identity, including at joins. - const inBranch = predecessors.steps.some(step => parallelRoots.has(step)); - const siblings = authoredSteps.filter(operation => operation.verb === 'run' - && (operation.lifecycle === 'created' || operation.lifecycle === 'running') - && runPredecessors.get(operation.id) === signature); - const id = inBranch - ? qualify(`run-after-${createHash('sha256').update(signature).digest('hex')}-${(branchOrdinals.get(signature) ?? 0) + 1}`) - : qualify(`run-${sequence}`); - if (inBranch) branchOrdinals.set(signature, (branchOrdinals.get(signature) ?? 0) + 1); - if (inBranch || siblings.length > 0) { - parallelRoots.add(id); - for (const sibling of siblings) parallelRoots.add(sibling.id); - } - runPredecessors.set(id, signature); - return id; + if (predecessors.steps.length === 0) return qualify(`run-${sequence}`); + // Each new root pins parallel mode before executing the body. Its + // continuations derive their identity only from the causal frontier and + // declaration order within that frontier; child lifecycle and completion + // order never participate. Legacy roots take the branch above and retain + // their original kind-N identities. + const ordinal = (branchOrdinals.get(signature) ?? 0) + 1; + branchOrdinals.set(signature, ordinal); + return qualify(`run-after-${createHash('sha256').update(signature).digest('hex')}-${ordinal}`); }; const assertHelperAllowed = (provider: string): void => { if (options.allowedHelperProviders !== undefined && !options.allowedHelperProviders.has(provider)) { @@ -352,6 +340,7 @@ export async function executeAuthoredFlow( ...(options.signal === undefined ? {} : { signal: options.signal }), stepEdges, }, + options.executionMode === 'parallel', ); const worker = authoredWorkerRunner( @@ -728,6 +717,7 @@ export async function executeAuthoredFlow( ...(options.agentEnvironment === undefined ? {} : { agentEnvironment: options.agentEnvironment }), ...(options.workerCapacity === undefined ? {} : { workerCapacity: options.workerCapacity }), ...(options.rootRunId === undefined ? {} : { rootRunId: options.rootRunId }), + ...(options.executionMode === undefined ? {} : { executionMode: options.executionMode }), flowGraph: options.flowGraph, stepPrefix: `${id}--`, dispatchDepth: depth + 1, diff --git a/packages/sdk/src/authored-node-entry.ts b/packages/sdk/src/authored-node-entry.ts index 1ecd4a265..b4bd59ca5 100644 --- a/packages/sdk/src/authored-node-entry.ts +++ b/packages/sdk/src/authored-node-entry.ts @@ -81,6 +81,8 @@ try { request.metadata.inputPresent ? request.metadata.input : undefined, { getDefinition: loaded.getDefinition, dataDir: request.dataDir, flowPath: request.metadata.flowPath, rootRunId: request.rootRunId, + executionMode: request.metadata.identityVersion === 2 && request.metadata.executionMode === 'parallel' + ? 'parallel' : 'serial', extensions: loaded.extensions, flowGraph: loaded.graph, localAgentStream: request.localAgentStream, signal: controller.signal, diff --git a/packages/sdk/src/authored-parallel-eligibility.ts b/packages/sdk/src/authored-parallel-eligibility.ts new file mode 100644 index 000000000..5c34a333d --- /dev/null +++ b/packages/sdk/src/authored-parallel-eligibility.ts @@ -0,0 +1,123 @@ +import ts from 'typescript'; + +const functionSource = Function.prototype.toString; +const arrayFrom = Array.from; + +/** + * A deliberately small admission proof for parallel deterministic children. + * The choice is written into the root before its body runs. An unrecognized + * program keeps the established serial scheduler and ordinal identities. + * This is a source-shape proof, never an inference from which child finished. + */ +export function parallelRunEligible(body: Function): boolean { + const file = ts.createSourceFile('authored-body.js', `const body = ${functionSource.call(body)};`, + ts.ScriptTarget.ES2022, true, ts.ScriptKind.JS); + const declaration = file.statements[0]; + if (!declaration || !ts.isVariableStatement(declaration)) return false; + const expression = declaration.declarationList.declarations[0]?.initializer; + if (expression === undefined || (!ts.isArrowFunction(expression) && !ts.isFunctionExpression(expression))) return false; + const parameter = expression.parameters[0]?.name; + if (parameter === undefined || !ts.isIdentifier(parameter) || expression.parameters.length !== 1) return false; + const contextName = parameter.text; + let allCount = 0; + let runCount = 0; + let safe = true; + const localFunctions = new Map(); + const localReferences: ts.Identifier[] = []; + const allCalls: ts.CallExpression[] = []; + const isCall = (node: ts.Node, receiver: string, method: string): boolean => + ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression) + && ts.isIdentifier(node.expression.expression) && node.expression.expression.text === receiver + && node.expression.name.text === method; + const insideAllMember = (node: ts.Node): boolean => { + for (let current: ts.Node | undefined = node.parent; current !== undefined; current = current.parent) { + if (isCall(current, 'Promise', 'all')) return true; + if (current === expression) return false; + } + return false; + }; + const visit = (node: ts.Node): void => { + if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) + && node.initializer !== undefined && (ts.isArrowFunction(node.initializer) || ts.isFunctionExpression(node.initializer))) { + localFunctions.set(node.name.text, node.name); + } + if (ts.isFunctionDeclaration(node) && node.name !== undefined) localFunctions.set(node.name.text, node.name); + if (ts.isCallExpression(node)) { + if (isCall(node, 'Promise', 'all')) { + allCount++; + allCalls.push(node); + if (!ts.isAwaitExpression(node.parent) || node.parent.expression !== node) safe = false; + } + if (isCall(node, contextName, 'run')) { + runCount++; + if ((!ts.isAwaitExpression(node.parent) || node.parent.expression !== node) + && !insideAllMember(node)) safe = false; + for (let enclosing: ts.Node | undefined = node.parent; enclosing !== undefined && enclosing !== expression; + enclosing = enclosing.parent) { + if (!ts.isArrowFunction(enclosing) && !ts.isFunctionExpression(enclosing) + && !ts.isFunctionDeclaration(enclosing)) continue; + const owner = enclosing.parent; + const named = ts.isFunctionDeclaration(enclosing) && enclosing.name !== undefined + || ts.isVariableDeclaration(owner) && owner.initializer === enclosing && ts.isIdentifier(owner.name); + const fromArray = ts.isCallExpression(owner) && owner.arguments.includes(enclosing as ts.Expression) + && isCall(owner, 'Array', 'from') && insideAllMember(owner); + if (!named && !fromArray) safe = false; + break; + } + } + if (ts.isIdentifier(node.expression) + && /^(setTimeout|setInterval|setImmediate|queueMicrotask|eval)$/.test(node.expression.text)) safe = false; + if (ts.isPropertyAccessExpression(node.expression) + && /^(then|catch|finally)$/.test(node.expression.name.text)) safe = false; + if (ts.isArrowFunction(node.expression) || ts.isFunctionExpression(node.expression)) safe = false; + } + if (ts.isNewExpression(node) && ts.isIdentifier(node.expression) && node.expression.text === 'Promise') safe = false; + if (ts.isVoidExpression(node)) safe = false; + if (ts.isAwaitExpression(node) + && !isCall(node.expression, contextName, 'run') && !isCall(node.expression, 'Promise', 'all')) safe = false; + if (ts.isIdentifier(node) && node.text === contextName && node !== parameter) { + const parent = node.parent; + if (!ts.isPropertyAccessExpression(parent) || parent.expression !== node + || !['run', 'done'].includes(parent.name.text) + || !ts.isCallExpression(parent.parent) || parent.parent.expression !== parent) safe = false; + } + if (ts.isIdentifier(node) && node.text === 'Promise' && node !== parameter) { + const parent = node.parent; + if (!ts.isPropertyAccessExpression(parent) || parent.expression !== node || parent.name.text !== 'all' + || !ts.isCallExpression(parent.parent) || parent.parent.expression !== parent) safe = false; + } + if (ts.isIdentifier(node) && node !== parameter) localReferences.push(node); + ts.forEachChild(node, visit); + }; + visit(expression.body); + for (const identifier of localReferences) { + const declarationName = localFunctions.get(identifier.text); + if (declarationName === undefined || identifier === declarationName) continue; + if (!ts.isCallExpression(identifier.parent) || identifier.parent.expression !== identifier + || !insideAllMember(identifier)) safe = false; + } + for (const call of allCalls) { + const members = call.arguments[0]; + if (members === undefined || call.arguments.length !== 1) { safe = false; continue; } + if (ts.isArrayLiteralExpression(members)) { + if (members.elements.length < 2 || members.elements.some(member => + !isCall(member, contextName, 'run') + && !(ts.isCallExpression(member) && ts.isIdentifier(member.expression) + && localFunctions.has(member.expression.text)))) safe = false; + continue; + } + if (!isCall(members, 'Array', 'from') || Array.from !== arrayFrom) { safe = false; continue; } + const from = members as ts.CallExpression; + const shape = from.arguments[0]; + const length = shape !== undefined && ts.isObjectLiteralExpression(shape) + ? shape.properties.find(property => ts.isPropertyAssignment(property) + && ts.isIdentifier(property.name) && property.name.text === 'length') : undefined; + const size = length !== undefined && ts.isPropertyAssignment(length) && ts.isNumericLiteral(length.initializer) + ? Number(length.initializer.text) : NaN; + const mapper = from.arguments[1]; + if (!Number.isSafeInteger(size) || size < 2 || from.arguments.length !== 2 + || mapper === undefined || !ts.isArrowFunction(mapper) + || !isCall(mapper.body, contextName, 'run')) safe = false; + } + return safe && allCount > 0 && runCount > 0; +} diff --git a/packages/sdk/src/authored-root.ts b/packages/sdk/src/authored-root.ts index 419874e27..ebd7c64b3 100644 --- a/packages/sdk/src/authored-root.ts +++ b/packages/sdk/src/authored-root.ts @@ -23,6 +23,7 @@ import { helperReceiptWaitId, releaseHelperReceiptWaits } from './helper-park.js import { readSubscriptionPark } from './authored-subscription-park.js'; import { localAgentCredentialEnvironment } from './local-agent-environment.js'; import { completedResult, rootKernelStep, rootStepIfPresent } from './authored-root-readback.js'; +import { parallelRunEligible } from './authored-parallel-eligibility.js'; export type DurableAuthoredFlowResult = | (AuthoredFlowExecutionResult & { readonly rootRunId: string }) @@ -50,6 +51,10 @@ export interface AuthoredRootMetadata { readonly sources: readonly AuthoredRootSourceAuthority[]; /** Plugin-level provenance in lock order; empty when the project declares none. */ readonly extensions: readonly AuthoredRootExtension[]; + /** Absent on roots admitted before causal identities existed. */ + readonly identityVersion?: 2; + /** Immutable admission choice; serial uses the 2.0.50 child identity contract. */ + readonly executionMode?: 'serial' | 'parallel'; readonly localAgentStream?: string; readonly inputPresent: boolean; readonly input?: unknown; @@ -89,6 +94,9 @@ export async function executeDurableAuthoredFlow( surface: node.surfaceAuthority, }))); const definition = loaded.getDefinition(loaded.handle); + const executionMode = loaded.graph.length === 1 && (loaded.extensions?.length ?? 0) === 0 + && definition.header.budget === undefined && parallelRunEligible(definition.body) + ? 'parallel' : 'serial'; const metadata: AuthoredRootMetadata = Object.freeze({ kind: ROOT_KIND, flowName: definition.name, @@ -99,6 +107,8 @@ export async function executeDurableAuthoredFlow( extensions: Object.freeze((loaded.extensions ?? []).map(extension => Object.freeze({ name: extension.name, digest: extension.digest, ref: extension.ref, }))), + identityVersion: 2, + executionMode, ...(options.localAgentStream === undefined ? {} : { localAgentStream: options.localAgentStream }), inputPresent: input !== undefined, ...(input === undefined ? {} : { input: jsonSnapshot(input, 'authored root input') }), @@ -353,6 +363,8 @@ async function driveRoot( ...(options.agentEnvironment === undefined ? {} : { agentEnvironment: options.agentEnvironment }), ...(options.workerCapacity === undefined ? {} : { workerCapacity: options.workerCapacity }), rootRunId: dispatch.run_id, + executionMode: metadata.identityVersion === 2 && metadata.executionMode === 'parallel' + ? 'parallel' : 'serial', extensions: loaded.extensions, flowGraph: loaded.graph, ...options.lifecycle, @@ -608,7 +620,9 @@ function isRootMetadata(value: unknown): value is AuthoredRootMetadata { && Array.isArray(sources) && sources.length > 0 && sources.every(isRootSourceAuthority) && (root.extensions === undefined || (Array.isArray(root.extensions) && root.extensions.every(isRootExtension))) && (root.localAgentStream === undefined - || /^local-agent-[a-f0-9-]+$/.test(root.localAgentStream)); + || /^local-agent-[a-f0-9-]+$/.test(root.localAgentStream)) + && ((root.identityVersion === undefined && root.executionMode === undefined) + || (root.identityVersion === 2 && (root.executionMode === 'serial' || root.executionMode === 'parallel'))); } function isRootExtension(value: unknown): value is AuthoredRootExtension { diff --git a/packages/sdk/src/authored-worker-step.ts b/packages/sdk/src/authored-worker-step.ts index 4dd8a9735..db73f2074 100644 --- a/packages/sdk/src/authored-worker-step.ts +++ b/packages/sdk/src/authored-worker-step.ts @@ -356,6 +356,7 @@ export function authoredWorkerRunner( export function authoredDeterministicRunner( name: string, journal: JournalClient, journalSteps: AuthoredFlowJournalStep[], budget: AuthoredBudget, context: AuthoredStepContext = {}, + parallel = false, ) { const rootRunId = context.rootRunId; // run.start drives a deterministic child to completion before replying. The @@ -391,9 +392,10 @@ export function authoredDeterministicRunner( }); return read(outcome); }; - return slots.run(async () => terminal - ? consume(await journal.runStart(spec, undefined, admissionKey, false, true)) - : budget.execute(journal, spec, consume, admissionKey, true)); + const admit = async () => terminal + ? consume(await journal.runStart(spec, undefined, admissionKey, false, parallel)) + : budget.execute(journal, spec, consume, admissionKey, parallel); + return parallel ? slots.run(admit) : admit(); } const lowerRun = (id: string, command: string, terminal = false, leaseMs?: number, verification?: NamedGate, secrets?: string[]): Promise => diff --git a/packages/sdk/tests/authored-parallel-eligibility.test.ts b/packages/sdk/tests/authored-parallel-eligibility.test.ts new file mode 100644 index 000000000..b535d0508 --- /dev/null +++ b/packages/sdk/tests/authored-parallel-eligibility.test.ts @@ -0,0 +1,66 @@ +import { describe, expect, it } from 'vitest'; +import { parallelRunEligible } from '../src/authored-parallel-eligibility.js'; + +const body = (source: string): Function => new Function(`return (${source});`)() as Function; + +describe('parallel run admission', () => { + it('certifies direct Promise.all and awaited branch continuations', () => { + expect(parallelRunEligible(body(`async f => { + const outputs = await Promise.all([f.run('a'), f.run('b')]); + await f.run(outputs[0]); + f.done('success'); + }`))).toBe(true); + expect(parallelRunEligible(body(`async f => { + const left = async () => { await f.run('a'); await f.run('b'); }; + const right = async () => { await f.run('c'); await f.run('d'); }; + await Promise.all([left(), right()]); + f.done('success'); + }`))).toBe(true); + expect(parallelRunEligible(body(`async f => { + await Promise.all(Array.from({ length: 9 }, (_, i) => f.run(String(i)))); + f.done('success'); + }`))).toBe(true); + }); + + it('keeps race, any, eager work, timers, and mixed effects serial', () => { + const cases = [ + `async f => { await Promise.race([f.run('a'), f.run('b')]); await f.run('c'); }`, + `async f => { await Promise.any([f.run('a'), f.run('b')]); await f.run('c'); }`, + `async f => { const background = async () => f.run('a'); background(); + await Promise.all([f.run('b'), f.run('c')]); }`, + `async f => { const background = (async () => f.run('a'))(); + await Promise.all([f.run('b'), f.run('c')]); await background; }`, + `async f => { const background = f.run('a'); + await Promise.all([f.run('b'), f.run('c')]); await background; }`, + `async f => { const group = Promise.all([f.run('a'), f.run('b')]); + await group; }`, + `async f => { await Promise.all(Array.from({ length: Math.random() * 10 }, + (_, i) => f.run(String(i)))); }`, + `async f => { const others = [f.run('a')]; + await Promise.all([...others, f.run('b')]); }`, + `async f => { await Promise.all([f.run('a'), f.run('b')]); + await new Promise(resolve => setTimeout(resolve, 1)); }`, + `async f => { await Promise.all([f.llm('a'), f.run('b')]); }`, + `async f => { await Promise.all([f.dispatch('a'), f.run('b')]); }`, + `async f => { const alias = f; await Promise.all([alias.run('a'), f.run('b')]); }`, + ]; + for (const source of cases) expect(parallelRunEligible(body(source)), source).toBe(false); + }); + + it('reads the function itself rather than an author-supplied toString', () => { + const unsafe = body(`async f => { await Promise.race([f.run('a'), f.run('b')]); }`); + unsafe.toString = () => `async f => { await Promise.all([f.run('a'), f.run('b')]); }`; + expect(parallelRunEligible(unsafe)).toBe(false); + }); + + it('keeps a replaced Array.from scheduler in serial mode', () => { + const candidate = body(`async f => { + await Promise.all(Array.from({ length: 2 }, (_, i) => f.run(String(i)))); + }`); + const original = Array.from; + try { + Array.from = ((...args: Parameters) => original(...args)) as typeof Array.from; + expect(parallelRunEligible(candidate)).toBe(false); + } finally { Array.from = original; } + }); +}); diff --git a/packages/sdk/tests/authored-parallel-run-live.test.ts b/packages/sdk/tests/authored-parallel-run-live.test.ts index aa6716e56..db61f72fb 100644 --- a/packages/sdk/tests/authored-parallel-run-live.test.ts +++ b/packages/sdk/tests/authored-parallel-run-live.test.ts @@ -5,12 +5,14 @@ import { AUTHORED_STEP_STREAM } from '../src/authored-step-index.js'; import { JournalClient } from '../src/journal-client.js'; import { socketPathFor } from '../src/daemon-connection.js'; import { chainFixture } from './flow-chain-fixture.js'; +import { readAuthoredRootMetadata } from '../src/authored-root.js'; const closes: Array<() => Promise> = []; afterEach(async () => { for (const close of closes.splice(0).reverse()) await close(); }); -async function until(read: () => Promise | T | undefined, what: string): Promise { - const deadline = Date.now() + 30_000; +async function until(read: () => Promise | T | undefined, what: string, + timeoutMs = 30_000): Promise { + const deadline = Date.now() + timeoutMs; for (;;) { const value = await read(); if (value !== undefined) return value; @@ -387,4 +389,273 @@ export default flow('legacy-sequential-resume', async f => { expect(readFileSync(`${fixture.root}/effects`, 'utf8')).toBe('ABD'); }, 120_000, ); + + it.each([ + { name: 'race', before: ['A', 'B', 'G'], body: ` + await Promise.race([f.run('printf A >> effects'), f.run('sleep 1; printf B >> effects')]); + await f.run('printf G >> effects');` }, + { name: 'any', before: ['A', 'B', 'G'], body: ` + await Promise.any([f.run('printf A >> effects'), f.run('sleep 1; printf B >> effects')]); + await f.run('printf G >> effects');` }, + { name: 'eager', before: ['X', 'Y'], body: ` + const background = (async () => { await f.run('printf X >> effects'); })(); + await new Promise(resolve => setTimeout(resolve, 300)); + await f.run('printf Y >> effects'); + await background;` }, + ])('keeps a $name flow running on serial fallback without replay', async ({ name, before, body }) => { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +export default flow('serial-${name}', async f => {${body} + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +}); +`); + const cli = fixture.invokeAsync('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + const cliExited = new Promise(resolve => cli.once('exit', () => resolve())); + closes.push(async () => { + if (cli.exitCode === null && cli.signalCode === null) cli.kill('SIGKILL'); + await cliExited; + }); + await until(() => existsSync(`${fixture.root}/stalled`) ? true : undefined, `${name} stall`, 60_000); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual(before); + const rootRunId = runIds(fixture.data)[0]!; + const reader = new JournalClient(socketPathFor(fixture.data)); + await reader.connect(); + await reader.hello('serial-fallback-test'); + try { + expect(await readAuthoredRootMetadata(reader, rootRunId)) + .toMatchObject({ identityVersion: 2, executionMode: 'serial' }); + } finally { reader.close(); } + cli.kill('SIGKILL'); + await cliExited; + killDaemon(fixture.data); + writeFileSync(`${fixture.root}/release`, ''); + const resumed = fixture.invoke('resume', '--no-observer-link', '--json', '--data-dir', fixture.data, rootRunId); + expect(resumed.status, resumed.stderr + resumed.stdout).toBe(0); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual([...before, 'Z'].sort()); + }, 120_000); + + it.each([ + { name: 'llm', localAgent: true, calls: 2, expected: ['L', 'R'], child: undefined, body: ` + const output = { type: 'object', properties: { message: { type: 'string' } }, required: ['message'] }; + const left = async () => { await f.llm('left', { output, model: 'test-model' }); await f.run('printf L >> effects'); }; + const right = async () => { await f.llm('right', { output, model: 'test-model' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);` }, + { name: 'agent', localAgent: true, calls: 2, expected: ['L', 'R'], child: undefined, body: ` + const left = async () => { await f.agent('left', { task: 'left', model: 'test-model' }); await f.run('printf L >> effects'); }; + const right = async () => { await f.agent('right', { task: 'right', model: 'test-model' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);` }, + { name: 'dispatch', localAgent: false, calls: 0, expected: ['L', 'R', 'x', 'y'], + child: `import { flow } from '@relayflows/surface'; +export default flow('child', async (f, input: { token: string }) => { + await Promise.all([f.run('printf first'), f.run('printf second')]); + await f.run('printf ' + input.token + ' >> effects'); + f.done('success'); +}); +`, body: ` + const left = async () => { await f.dispatch('child', { token: 'x' }); await f.run('printf L >> effects'); }; + const right = async () => { await f.dispatch('child', { token: 'y' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);` }, + ])('resumes $name branches without replaying completed effects', async ({ name, localAgent, calls, expected, child, body }) => { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + if (child !== undefined) writeFileSync(`${fixture.root}/child.flow.ts`, child); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +export default flow('serial-${name}'${child === undefined ? '' : ", { use: ['./child.flow.ts'] }"}, async f => {${body} + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +}); +`); + const flags = localAgent ? ['--local-agent'] : []; + const cli = fixture.invokeAsync('run', '--no-observer-link', '--json', ...flags, '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + let cliOutput = ''; + cli.stdout?.on('data', chunk => { cliOutput += String(chunk); }); + cli.stderr?.on('data', chunk => { cliOutput += String(chunk); }); + const cliExited = new Promise(resolve => cli.once('exit', () => resolve())); + closes.push(async () => { + if (cli.exitCode === null && cli.signalCode === null) cli.kill('SIGKILL'); + await cliExited; + }); + await until(() => { + if (cli.exitCode !== null) throw new Error(`${name} exited before stall: ${cliOutput}`); + return existsSync(`${fixture.root}/stalled`) ? true : undefined; + }, `${name} stall`, 90_000); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual(expected); + if (calls > 0) expect(fixture.requests()).toHaveLength(calls); + const rootRunId = runIds(fixture.data)[0]!; + const reader = new JournalClient(socketPathFor(fixture.data)); + await reader.connect(); + await reader.hello('mixed-branch-fallback-test'); + try { + expect(await readAuthoredRootMetadata(reader, rootRunId)) + .toMatchObject({ identityVersion: 2, executionMode: 'serial' }); + } finally { reader.close(); } + cli.kill('SIGKILL'); + await cliExited; + killDaemon(fixture.data); + writeFileSync(`${fixture.root}/release`, ''); + const resumed = fixture.invoke('resume', '--no-observer-link', '--json', ...flags, + '--data-dir', fixture.data, rootRunId); + expect(resumed.status, resumed.stderr + resumed.stdout).toBe(0); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual([...expected, 'Z'].sort()); + if (calls > 0) expect(fixture.requests()).toHaveLength(calls); + }, 180_000); + + for (const pause of ['after run-4', 'after run-5'] as const) { + it.skipIf(process.env.RELAYFLOWS_PREVIOUS_CLI === undefined)( + `resumes 2.0.50 consecutive Promise.all groups ${pause} without replay`, async () => { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +import { existsSync, writeFileSync } from 'node:fs'; +export default flow('legacy-consecutive-groups', async f => { + await f.run('printf 1 >> effects'); + await f.run('printf 2 >> effects'); + await Promise.all([f.run('printf 3 >> effects'), f.run('printf 4 >> effects')]); + if (!existsSync('release4')) { + writeFileSync('pause4', ''); + await new Promise(resolve => setTimeout(resolve, 120000)); + } + await Promise.all([ + f.run('printf 5 >> effects'), + f.run('test -f release6 || { touch pause5; sleep 120; }; printf 6 >> effects', { timeout: '5m' }), + ]); + f.done('success'); +}); +`); + if (pause === 'after run-5') writeFileSync(`${fixture.root}/release4`, ''); + else writeFileSync(`${fixture.root}/release6`, ''); + const cli = spawn(process.execPath, [process.env.RELAYFLOWS_PREVIOUS_CLI!, 'run', + '--no-observer-link', '--json', '--data-dir', fixture.data, fixture.flowPath, '--input', '{}'], + { cwd: fixture.root, stdio: 'pipe', env: { ...process.env, RELAYFLOWD_BIN: fixture.binary } }); + let cliOutput = ''; + cli.stdout?.on('data', chunk => { cliOutput += String(chunk); }); + cli.stderr?.on('data', chunk => { cliOutput += String(chunk); }); + const cliExited = new Promise(resolve => cli.once('exit', () => resolve())); + closes.push(async () => { + if (cli.exitCode === null && cli.signalCode === null) cli.kill('SIGKILL'); + await cliExited; + }); + try { + await until(() => { + if (cli.exitCode !== null) throw new Error(`legacy CLI exited ${cli.exitCode}: ${cliOutput}`); + return existsSync(`${fixture.root}/${pause === 'after run-4' ? 'pause4' : 'pause5'}`) + ? true : undefined; + }, `${pause} marker`, 120_000); + } catch (error) { + throw new Error(`${String(error)}; effects=${existsSync(`${fixture.root}/effects`) + ? readFileSync(`${fixture.root}/effects`, 'utf8') : 'missing'}; cli=${cliOutput}`); + } + const rootRunId = runIds(fixture.data)[0]!; + if (pause === 'after run-5') { + const reader = new JournalClient(socketPathFor(fixture.data)); + await reader.connect(); + await reader.hello('legacy-group-recovery-test'); + try { + await until(async () => { + for (const runId of runIds(fixture.data).filter(id => id !== rootRunId)) { + try { + const entries = (await reader.journalRead(runId, 1, 100)).entries; + if (entries.some(entry => (entry as { entry_type?: string; step_id?: string }).entry_type + === 'step.completed' && (entry as { step_id?: string }).step_id === 'run-5')) return true; + } catch (error) { + if (error instanceof Error && /no such table: meta/u.test(error.message)) continue; + throw error; + } + } + return undefined; + }, 'legacy run-5 child completion', 60_000); + } finally { reader.close(); } + } + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()) + .toEqual(pause === 'after run-4' ? ['1', '2', '3', '4'] : ['1', '2', '3', '4', '5']); + cli.kill('SIGKILL'); + await cliExited; + killDaemon(fixture.data); + writeFileSync(`${fixture.root}/${pause === 'after run-4' ? 'release4' : 'release6'}`, ''); + const resumed = fixture.invoke('resume', '--no-observer-link', '--json', '--data-dir', fixture.data, rootRunId); + expect(resumed.status, resumed.stderr + resumed.stdout).toBe(0); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()) + .toEqual(['1', '2', '3', '4', '5', '6']); + }, 240_000, + ); + } + + const legacyUpgradeCases = [ + { name: 'A1 nested joins', effects: ['L', 'R'], body: ` + const left = async () => { + await Promise.all([f.run('sleep 0.3; printf A'), f.run('printf B')]); + await f.run('printf L >> effects'); + }; + const right = async () => { + await Promise.all([f.run('printf C'), f.run('sleep 0.3; printf D')]); + await f.run('printf R >> effects'); + }; + await Promise.all([left(), right()]);` }, + { name: 'B1 chain beside join', effects: ['L', 'R'], body: ` + const left = async () => { + await f.run('printf A'); + await f.run('printf B'); + await f.run('printf L >> effects'); + }; + const right = async () => { + await Promise.all([f.run('printf C'), f.run('printf D')]); + await f.run('printf R >> effects'); + }; + await Promise.all([left(), right()]);` }, + { name: 'N2 independent dependents', effects: ['a', 'b', 'c'], body: ` + const a = async () => { await f.run('printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('printf C'); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]);` }, + ] as const; + for (const { name, effects, body } of legacyUpgradeCases) { + it.skipIf(process.env.RELAYFLOWS_PREVIOUS_CLI === undefined)( + `resumes 2.0.50 ${name} without replay`, async () => { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +export default flow('legacy-${name.replaceAll(' ', '-')}', async f => {${body} + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +}); +`); + const cli = spawn(process.execPath, [process.env.RELAYFLOWS_PREVIOUS_CLI, 'run', + '--no-observer-link', '--json', '--data-dir', fixture.data, fixture.flowPath, '--input', '{}'], + { cwd: fixture.root, stdio: 'pipe', env: { ...process.env, RELAYFLOWD_BIN: fixture.binary } }); + let cliOutput = ''; + cli.stdout?.on('data', chunk => { cliOutput += String(chunk); }); + cli.stderr?.on('data', chunk => { cliOutput += String(chunk); }); + const cliExited = new Promise(resolve => cli.once('exit', () => resolve())); + closes.push(async () => { + if (cli.exitCode === null && cli.signalCode === null) cli.kill('SIGKILL'); + await cliExited; + }); + await until(() => { + if (cli.exitCode !== null) throw new Error(`${name} old CLI exited before stall: ${cliOutput}`); + return existsSync(`${fixture.root}/stalled`) ? true : undefined; + }, `${name} legacy stall`, 120_000); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual(effects); + const rootRunId = runIds(fixture.data)[0]!; + const reader = new JournalClient(socketPathFor(fixture.data)); + await reader.connect(); + await reader.hello('legacy-parallel-upgrade-test'); + try { + const metadata = await readAuthoredRootMetadata(reader, rootRunId); + expect(metadata?.identityVersion).toBeUndefined(); + expect(metadata?.executionMode).toBeUndefined(); + } finally { reader.close(); } + cli.kill('SIGKILL'); + await cliExited; + killDaemon(fixture.data); + writeFileSync(`${fixture.root}/release`, ''); + const resumed = fixture.invoke('resume', '--no-observer-link', '--json', '--data-dir', fixture.data, rootRunId); + expect(resumed.status, resumed.stderr + resumed.stdout).toBe(0); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual([...effects, 'Z'].sort()); + }, 240_000, + ); + } }); diff --git a/packages/sdk/tests/authored-root.test.ts b/packages/sdk/tests/authored-root.test.ts index 2dafec039..75764ea19 100644 --- a/packages/sdk/tests/authored-root.test.ts +++ b/packages/sdk/tests/authored-root.test.ts @@ -172,9 +172,24 @@ describe('durable authored root', () => { }); expect(metadata.sourceSha256).toMatch(/^[a-f0-9]{64}$/u); expect(metadata.extensions).toEqual([]); + expect(metadata).toMatchObject({ identityVersion: 2, executionMode: 'serial' }); expect(journal.peer.completions).toEqual([{ attempt: 1, reason: 'success' }]); }); + it('pins a certified Promise.all run body to parallel mode before dispatch', async () => { + const loaded = await fixture(false, 0, async f => { + await Promise.all([f.run('printf a'), f.run('printf b')]); + f.done('success'); + }); + const journal = new RootJournal(); + journal.startStatus = outcome(journal.runId, 'completed', 'success'); + journal.entries = [completedEntry()]; + await executeDurableAuthoredFlow(loaded, journal as unknown as JournalClient, undefined, + { dataDir: '/unused', admissionKey: 'certified-group' }); + const step = (journal.starts[0]!.spec as { steps: Array<{ instruction: string }> }).steps[0]!; + expect(JSON.parse(step.instruction)).toMatchObject({ identityVersion: 2, executionMode: 'parallel' }); + }); + it('stops waiting for a root re-dispatch when the caller cancels', async () => { // The root lease is lost (the daemon refuses the renewal), so the driver // waits up to 45s for the kernel to re-dispatch the root. A caller cancel From f4172846865ecdd026513c6a381e4faab07480ae Mon Sep 17 00:00:00 2001 From: Miya Date: Fri, 16 Oct 2026 12:11:14 +0200 Subject: [PATCH 07/18] Certify parallel authored roots with strict source grammar and replay-safe fallback --- docs/SURFACE.md | 24 +- packages/sdk/src/authored-flow-executor.ts | 34 +- .../sdk/src/authored-parallel-eligibility.ts | 210 ++++++------ packages/sdk/src/authored-root.ts | 11 +- packages/sdk/src/authored-verdict.ts | 5 +- .../authored-flow-lifecycle-executor.test.ts | 35 +- .../authored-parallel-eligibility.test.ts | 41 ++- .../tests/authored-parallel-run-live.test.ts | 324 ++++++++++++++++-- packages/sdk/tests/authored-root.test.ts | 4 +- .../sdk/tests/authored-status-detail.test.ts | 4 +- 10 files changed, 533 insertions(+), 159 deletions(-) diff --git a/docs/SURFACE.md b/docs/SURFACE.md index 8749ce7ab..722b0e002 100644 --- a/docs/SURFACE.md +++ b/docs/SURFACE.md @@ -972,9 +972,14 @@ Two properties of `f.run` on a local `relayflowd` are useful to know. **Certified `Promise.all` groups of `f.run` steps overlap.** A direct `Promise.all` over two `f.run('sleep 2')` steps takes about 2s of step time. The root records its execution mode before its body runs. Parallel mode is -selected only for run-only bodies whose awaited `Promise.all` members and -locally declared async branches can be identified before admission. In this -mode, each deterministic child uses its own journal connection because the +selected only for a narrow source grammar: awaited `Promise.all` groups of +direct `f.run` calls, and locally declared async branches made only of awaited +`f.run` calls or direct run groups. Generated arrays such as `Array.from` use +serial mode. Branches may not mutate shared values, await +timers or other promises, or call `f.done`; completion belongs at the end of +the root body. The check is conservative: an unrecognized source form uses +serial mode even when its author knows it would be safe. In parallel mode, +each deterministic child uses its own journal connection because the daemon handles requests on one connection in order and `run.start` returns only after its command exits. An authored body admits at most eight deterministic children at once; additional calls wait for a slot. `Promise.all` @@ -984,7 +989,8 @@ concurrent region use causal predecessor identities for replay. Other bodies keep the established serial `f.run` scheduler and `kind-N` step ids. This includes `Promise.race`, `Promise.any`, eager background work, -timers, other `f.*` effects, dispatched flows, and a declared `budget`. +timers, closure-shared promises or mutable results, other `f.*` effects, +dispatched flows, and a declared `budget`. Those bodies continue to run; the fallback only changes whether their deterministic child commands overlap. A step whose source cannot be certified also uses serial mode. The mode is immutable for the root's lifetime. @@ -993,8 +999,10 @@ Each child's admission key comes from the root run and step id. Each child has its own journal; the root's child index records completion facts as they arrive, and readers match them by step id and run id. In parallel mode, if the bounded causal walk cannot identify a follow-up's -full predecessor frontier, the flow fails before admitting that child rather -than issuing an ambiguous replay key. +full predecessor frontier, a non-run effect appears, or a new initial child +appears after the body's first turn, the root fails before admitting that +effect rather than issuing an ambiguous replay key. This failure remains a +root failure even when authored code catches the immediate exception. If one concurrent `f.run` fails, the authored body fails and its waiting siblings are cancelled before admission. Children already admitted can finish @@ -1006,6 +1014,10 @@ failure and capacity rules. resume in serial compatibility mode, preserving the 2.0.50 `kind-N` step ids and shared connection. Completed child effects remain bound to their original admission keys, including follow-ups after a `Promise.all` join. +New parallel roots carry a distinct root kind. A 2.0.50 CLI refuses one on +rollback, leaving it resumable by this or a newer CLI rather than replaying +parallel follow-ups with old `run-N` identities. New serial roots retain the +original root kind and serial IDs. What runs concurrently today: diff --git a/packages/sdk/src/authored-flow-executor.ts b/packages/sdk/src/authored-flow-executor.ts index e09cb6b19..1c67ad130 100644 --- a/packages/sdk/src/authored-flow-executor.ts +++ b/packages/sdk/src/authored-flow-executor.ts @@ -303,18 +303,29 @@ export async function executeAuthoredFlow( let nextStep = 1; let requestedCompletion: LoweredCompletionReason | undefined; let requestedDetail: string | undefined; + let firstBodyTurn = true; + let parallelViolation: AuthoredFlowExecutionError | undefined; const qualify = (id: string): string => `${options.stepPrefix ?? ''}${id}`; const branchOrdinals = new Map(); + const rejectParallel = (message: string): never => { + parallelViolation ??= new AuthoredFlowExecutionError('step_failed', message); + throw parallelViolation; + }; + const assertParallelRunOnly = (kind: string): void => { + if (options.executionMode === 'parallel') rejectParallel(`parallel f.run body attempted ${kind} before admission`); + }; const nextId = (kind: string): string => { const sequence = nextStep++; - if (options.executionMode !== 'parallel' || kind !== 'run') return qualify(`${kind}-${sequence}`); + if (options.executionMode !== 'parallel') return qualify(`${kind}-${sequence}`); + if (kind !== 'run') rejectParallel(`parallel f.run body attempted ${kind} before admission`); const predecessors = lifecycle.invocationPredecessors(); - if (predecessors.truncated) { - throw new AuthoredFlowExecutionError('step_failed', - 'cannot assign a replay-stable f.run identity: its causal predecessor graph is truncated'); - } + if (predecessors.truncated) rejectParallel( + 'cannot assign a replay-stable f.run identity: its causal predecessor graph is truncated'); const signature = JSON.stringify([...predecessors.steps].sort()); - if (predecessors.steps.length === 0) return qualify(`run-${sequence}`); + if (predecessors.steps.length === 0) { + if (!firstBodyTurn) rejectParallel('parallel f.run had no causal predecessor after the first body turn'); + return qualify(`run-${sequence}`); + } // Each new root pins parallel mode before executing the body. Its // continuations derive their identity only from the causal frontier and // declaration order within that frontier; child lifecycle and completion @@ -527,6 +538,7 @@ export async function executeAuthoredFlow( const slackRun = options.rootRunId ?? randomUUID(); function slackOperation(call: SlackCall): Step { + assertParallelRunOnly(`slack.${call.verb}`); assertOperationAllowed(`slack.${call.verb}`, definition.name, requestedCompletion); assertHelperAllowed(call.provider); const snapshot = snapshotJsonValue(call, 'f.slack call') as unknown as SlackCall; @@ -557,6 +569,7 @@ export async function executeAuthoredFlow( const context: Ctx = { ...createHelpers((call: HelperCall): Step => { const verb = `${call.provider}.${call.verb}`; + assertParallelRunOnly(verb); assertOperationAllowed(verb, definition.name, requestedCompletion); assertHelperAllowed(call.provider); const snapshot = snapshotJsonValue(call, `f.${verb} call`) as unknown as HelperCall; @@ -586,7 +599,7 @@ export async function executeAuthoredFlow( }), memory: authoredMemory( scriptMemoryScope(flowPath, definition.name), - () => assertOperationAllowed('memory', definition.name, requestedCompletion), + () => { assertParallelRunOnly('memory'); assertOperationAllowed('memory', definition.name, requestedCompletion); }, definition.header.memory?.script !== false, memoryWrites, options.rootRunId === undefined ? undefined : journalLearnLedger(journal, options.rootRunId), @@ -610,6 +623,7 @@ export async function executeAuthoredFlow( return trackStep(authoredSteps, agentOp); }, on(source, activityOptions) { + assertParallelRunOnly('on'); assertOperationAllowed('on', definition.name, requestedCompletion); // Activity ids are root-scoped (`activity-N`); a child's own counter would collide. if ((options.dispatchDepth ?? 0) > 0) { @@ -820,7 +834,7 @@ export async function executeAuthoredFlow( requestedDetail = detail; }, cloud: unsupportedCloud( - () => assertOperationAllowed('cloud', definition.name, requestedCompletion), + () => { assertParallelRunOnly('cloud'); assertOperationAllowed('cloud', definition.name, requestedCompletion); }, ), }; @@ -839,12 +853,16 @@ export async function executeAuthoredFlow( let bodyFailed = false; let bodyFailure: unknown; try { + if (options.executionMode === 'parallel') queueMicrotask(() => { firstBodyTurn = false; }); const bodyPromise = lifecycle.runBody(() => definition.body(context, input as Input)); await bodyPromise; } catch (error) { bodyFailed = true; bodyFailure = error; } + // A source certificate is a performance admission decision, never a way + // for authored try/catch to turn a refused effect into successful output. + if (parallelViolation !== undefined) { bodyFailed = true; bodyFailure = parallelViolation; } if (bodyFailed) { // An in-flight learn must land or fail before this attempt gives the root // back: a re-driven attempt reads the memory-learn stream, and must not diff --git a/packages/sdk/src/authored-parallel-eligibility.ts b/packages/sdk/src/authored-parallel-eligibility.ts index 5c34a333d..9a806644a 100644 --- a/packages/sdk/src/authored-parallel-eligibility.ts +++ b/packages/sdk/src/authored-parallel-eligibility.ts @@ -1,123 +1,129 @@ import ts from 'typescript'; const functionSource = Function.prototype.toString; -const arrayFrom = Array.from; -/** - * A deliberately small admission proof for parallel deterministic children. - * The choice is written into the root before its body runs. An unrecognized - * program keeps the established serial scheduler and ordinal identities. - * This is a source-shape proof, never an inference from which child finished. - */ +/** A closed grammar for deterministic Promise.all branches. Unknown bodies stay serial. */ export function parallelRunEligible(body: Function): boolean { const file = ts.createSourceFile('authored-body.js', `const body = ${functionSource.call(body)};`, ts.ScriptTarget.ES2022, true, ts.ScriptKind.JS); + if (file.statements.length !== 1) return false; const declaration = file.statements[0]; if (!declaration || !ts.isVariableStatement(declaration)) return false; const expression = declaration.declarationList.declarations[0]?.initializer; - if (expression === undefined || (!ts.isArrowFunction(expression) && !ts.isFunctionExpression(expression))) return false; + // Function expressions can obtain the context through `arguments[0]`. + if (expression === undefined || !ts.isArrowFunction(expression) || !ts.isBlock(expression.body) + || expression.modifiers?.some(modifier => modifier.kind === ts.SyntaxKind.AsyncKeyword) !== true) return false; const parameter = expression.parameters[0]?.name; if (parameter === undefined || !ts.isIdentifier(parameter) || expression.parameters.length !== 1) return false; - const contextName = parameter.text; - let allCount = 0; - let runCount = 0; - let safe = true; - const localFunctions = new Map(); - const localReferences: ts.Identifier[] = []; - const allCalls: ts.CallExpression[] = []; - const isCall = (node: ts.Node, receiver: string, method: string): boolean => - ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression) - && ts.isIdentifier(node.expression.expression) && node.expression.expression.text === receiver - && node.expression.name.text === method; - const insideAllMember = (node: ts.Node): boolean => { - for (let current: ts.Node | undefined = node.parent; current !== undefined; current = current.parent) { - if (isCall(current, 'Promise', 'all')) return true; - if (current === expression) return false; - } + const context = parameter.text; + const branches = new Map(); + const rootValues = new Set(); + let groups = 0; + let runs = 0; + + const unwrap = (node: ts.Expression): ts.Expression => + ts.isParenthesizedExpression(node) ? unwrap(node.expression) : node; + const method = (node: ts.Expression, owner: string, name: string): node is ts.CallExpression => { + const value = unwrap(node); + return ts.isCallExpression(value) && ts.isPropertyAccessExpression(value.expression) + && ts.isIdentifier(value.expression.expression) && value.expression.expression.text === owner + && value.expression.name.text === name; + }; + const pure = (node: ts.Expression, values: ReadonlySet): boolean => { + const value = unwrap(node); + if (ts.isStringLiteral(value) || ts.isNumericLiteral(value) || ts.isNoSubstitutionTemplateLiteral(value) + || value.kind === ts.SyntaxKind.TrueKeyword || value.kind === ts.SyntaxKind.FalseKeyword + || value.kind === ts.SyntaxKind.NullKeyword) return true; + if (ts.isIdentifier(value)) return values.has(value.text); + if (ts.isTemplateExpression(value)) return value.templateSpans.every(span => pure(span.expression, values)); + if (ts.isPrefixUnaryExpression(value)) return [ts.SyntaxKind.PlusToken, ts.SyntaxKind.MinusToken, + ts.SyntaxKind.ExclamationToken].includes(value.operator) && pure(value.operand, values); + if (ts.isBinaryExpression(value)) return [ts.SyntaxKind.PlusToken, ts.SyntaxKind.MinusToken, + ts.SyntaxKind.AsteriskToken, ts.SyntaxKind.SlashToken, ts.SyntaxKind.EqualsEqualsEqualsToken, + ts.SyntaxKind.ExclamationEqualsEqualsToken, ts.SyntaxKind.LessThanToken, + ts.SyntaxKind.GreaterThanToken].includes(value.operatorToken.kind) + && pure(value.left, values) && pure(value.right, values); + if (ts.isConditionalExpression(value)) return pure(value.condition, values) + && pure(value.whenTrue, values) && pure(value.whenFalse, values); + if (ts.isElementAccessExpression(value)) return value.argumentExpression !== undefined + && pure(value.expression, values) && pure(value.argumentExpression, values); + if (ts.isPropertyAccessExpression(value)) return pure(value.expression, values); + if (ts.isArrayLiteralExpression(value)) return value.elements.every(element => + ts.isExpression(element) && pure(element, values)); + if (ts.isObjectLiteralExpression(value)) return value.properties.every(property => + ts.isPropertyAssignment(property) && (ts.isIdentifier(property.name) || ts.isStringLiteral(property.name)) + && pure(property.initializer, values)); return false; }; - const visit = (node: ts.Node): void => { - if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) - && node.initializer !== undefined && (ts.isArrowFunction(node.initializer) || ts.isFunctionExpression(node.initializer))) { - localFunctions.set(node.name.text, node.name); + const run = (node: ts.Expression, values: ReadonlySet): boolean => { + const value = unwrap(node); + if (!method(value, context, 'run') || value.arguments.length < 1 || value.arguments.length > 2 + || !value.arguments.every(argument => pure(argument, values))) return false; + runs++; + return true; + }; + const group = (node: ts.Expression, values: ReadonlySet, depth: number): boolean => { + const value = unwrap(node); + if (!method(value, 'Promise', 'all') || value.arguments.length !== 1 || depth > 4) return false; + groups++; + const members = value.arguments[0]!; + if (ts.isArrayLiteralExpression(members)) { + if (members.elements.length < 2) return false; + return members.elements.every(member => { + if (!ts.isExpression(member)) return false; + if (run(member, values)) return true; + const call = unwrap(member); + if (depth === 0 && ts.isCallExpression(call) && ts.isIdentifier(call.expression) + && call.arguments.length === 0 && branches.has(call.expression.text)) { + return branch(branches.get(call.expression.text)!, depth + 1); + } + if (depth === 0 && ts.isCallExpression(call) && call.arguments.length === 0 + && ts.isParenthesizedExpression(call.expression) && ts.isArrowFunction(call.expression.expression)) { + return branch(call.expression.expression, depth + 1); + } + return false; + }); } - if (ts.isFunctionDeclaration(node) && node.name !== undefined) localFunctions.set(node.name.text, node.name); - if (ts.isCallExpression(node)) { - if (isCall(node, 'Promise', 'all')) { - allCount++; - allCalls.push(node); - if (!ts.isAwaitExpression(node.parent) || node.parent.expression !== node) safe = false; + return false; + }; + const awaitStep = (node: ts.Expression, values: ReadonlySet, depth: number): boolean => { + const value = unwrap(node); + if (!ts.isAwaitExpression(value)) return false; + return run(value.expression, values) || group(value.expression, values, depth); + }; + const statements = (block: ts.Block, values: Set, depth: number): boolean => { + for (const statement of block.statements) { + if (ts.isExpressionStatement(statement)) { + if (awaitStep(statement.expression, values, depth)) continue; + const value = unwrap(statement.expression); + if (depth === 0 && method(value, context, 'done') && value.arguments.length >= 1 + && value.arguments.every(argument => pure(argument, values)) + && statement === block.statements[block.statements.length - 1]) continue; + return false; } - if (isCall(node, contextName, 'run')) { - runCount++; - if ((!ts.isAwaitExpression(node.parent) || node.parent.expression !== node) - && !insideAllMember(node)) safe = false; - for (let enclosing: ts.Node | undefined = node.parent; enclosing !== undefined && enclosing !== expression; - enclosing = enclosing.parent) { - if (!ts.isArrowFunction(enclosing) && !ts.isFunctionExpression(enclosing) - && !ts.isFunctionDeclaration(enclosing)) continue; - const owner = enclosing.parent; - const named = ts.isFunctionDeclaration(enclosing) && enclosing.name !== undefined - || ts.isVariableDeclaration(owner) && owner.initializer === enclosing && ts.isIdentifier(owner.name); - const fromArray = ts.isCallExpression(owner) && owner.arguments.includes(enclosing as ts.Expression) - && isCall(owner, 'Array', 'from') && insideAllMember(owner); - if (!named && !fromArray) safe = false; - break; + if (ts.isReturnStatement(statement) && depth > 0 && statement.expression !== undefined + && awaitStep(statement.expression, values, depth)) continue; + if (!ts.isVariableStatement(statement) || (statement.declarationList.flags & ts.NodeFlags.Const) === 0) return false; + for (const item of statement.declarationList.declarations) { + if (!ts.isIdentifier(item.name) || item.initializer === undefined) return false; + if (depth === 0 && ts.isArrowFunction(item.initializer)) { + if (branches.has(item.name.text) || item.initializer.parameters.length !== 0 + || item.initializer.modifiers?.some(modifier => modifier.kind === ts.SyntaxKind.AsyncKeyword) !== true + ) return false; + branches.set(item.name.text, item.initializer); + continue; } + if (!awaitStep(item.initializer, values, depth)) return false; + values.add(item.name.text); } - if (ts.isIdentifier(node.expression) - && /^(setTimeout|setInterval|setImmediate|queueMicrotask|eval)$/.test(node.expression.text)) safe = false; - if (ts.isPropertyAccessExpression(node.expression) - && /^(then|catch|finally)$/.test(node.expression.name.text)) safe = false; - if (ts.isArrowFunction(node.expression) || ts.isFunctionExpression(node.expression)) safe = false; - } - if (ts.isNewExpression(node) && ts.isIdentifier(node.expression) && node.expression.text === 'Promise') safe = false; - if (ts.isVoidExpression(node)) safe = false; - if (ts.isAwaitExpression(node) - && !isCall(node.expression, contextName, 'run') && !isCall(node.expression, 'Promise', 'all')) safe = false; - if (ts.isIdentifier(node) && node.text === contextName && node !== parameter) { - const parent = node.parent; - if (!ts.isPropertyAccessExpression(parent) || parent.expression !== node - || !['run', 'done'].includes(parent.name.text) - || !ts.isCallExpression(parent.parent) || parent.parent.expression !== parent) safe = false; - } - if (ts.isIdentifier(node) && node.text === 'Promise' && node !== parameter) { - const parent = node.parent; - if (!ts.isPropertyAccessExpression(parent) || parent.expression !== node || parent.name.text !== 'all' - || !ts.isCallExpression(parent.parent) || parent.parent.expression !== parent) safe = false; } - if (ts.isIdentifier(node) && node !== parameter) localReferences.push(node); - ts.forEachChild(node, visit); + return true; }; - visit(expression.body); - for (const identifier of localReferences) { - const declarationName = localFunctions.get(identifier.text); - if (declarationName === undefined || identifier === declarationName) continue; - if (!ts.isCallExpression(identifier.parent) || identifier.parent.expression !== identifier - || !insideAllMember(identifier)) safe = false; - } - for (const call of allCalls) { - const members = call.arguments[0]; - if (members === undefined || call.arguments.length !== 1) { safe = false; continue; } - if (ts.isArrayLiteralExpression(members)) { - if (members.elements.length < 2 || members.elements.some(member => - !isCall(member, contextName, 'run') - && !(ts.isCallExpression(member) && ts.isIdentifier(member.expression) - && localFunctions.has(member.expression.text)))) safe = false; - continue; - } - if (!isCall(members, 'Array', 'from') || Array.from !== arrayFrom) { safe = false; continue; } - const from = members as ts.CallExpression; - const shape = from.arguments[0]; - const length = shape !== undefined && ts.isObjectLiteralExpression(shape) - ? shape.properties.find(property => ts.isPropertyAssignment(property) - && ts.isIdentifier(property.name) && property.name.text === 'length') : undefined; - const size = length !== undefined && ts.isPropertyAssignment(length) && ts.isNumericLiteral(length.initializer) - ? Number(length.initializer.text) : NaN; - const mapper = from.arguments[1]; - if (!Number.isSafeInteger(size) || size < 2 || from.arguments.length !== 2 - || mapper === undefined || !ts.isArrowFunction(mapper) - || !isCall(mapper.body, contextName, 'run')) safe = false; - } - return safe && allCount > 0 && runCount > 0; + const branch = (arrow: ts.ArrowFunction, depth: number): boolean => + arrow.parameters.length === 0 + && (ts.isBlock(arrow.body) ? statements(arrow.body, new Set(rootValues), depth) + : awaitStep(arrow.body, rootValues, depth)); + + if (!statements(expression.body, rootValues, 0)) return false; + return groups > 0 && runs > 0; } diff --git a/packages/sdk/src/authored-root.ts b/packages/sdk/src/authored-root.ts index ebd7c64b3..9c2b1fe33 100644 --- a/packages/sdk/src/authored-root.ts +++ b/packages/sdk/src/authored-root.ts @@ -6,7 +6,7 @@ import { readFile } from 'node:fs/promises'; import { canonicalize } from './canonical.js'; import { compileSpec, toKernelSpec } from './compile.js'; import { executeAuthoredFlow, type AuthoredFlowExecutionResult, type AuthoredFlowSuspendedResult } from './authored-flow-executor.js'; -import { AUTHORED_ROOT_KIND } from './authored-verdict.js'; +import { AUTHORED_PARALLEL_ROOT_KIND, AUTHORED_ROOT_KIND } from './authored-verdict.js'; import { loadAuthoredFlow, type LoadedAuthoredFlow, @@ -43,7 +43,7 @@ export interface AuthoredRootExtension { } export interface AuthoredRootMetadata { - readonly kind: typeof ROOT_KIND; + readonly kind: typeof ROOT_KIND | typeof AUTHORED_PARALLEL_ROOT_KIND; readonly flowName: string; readonly flowPath: string; readonly sourceSha256: string; @@ -98,7 +98,7 @@ export async function executeDurableAuthoredFlow( && definition.header.budget === undefined && parallelRunEligible(definition.body) ? 'parallel' : 'serial'; const metadata: AuthoredRootMetadata = Object.freeze({ - kind: ROOT_KIND, + kind: executionMode === 'parallel' ? AUTHORED_PARALLEL_ROOT_KIND : ROOT_KIND, flowName: definition.name, flowPath: loaded.sourcePath, sourceSha256: sha256(source), @@ -612,7 +612,10 @@ function isRootMetadata(value: unknown): value is AuthoredRootMetadata { const root = value as Partial; const surface = root.surface as Partial | undefined; const sources = root.sources; - return root.kind === ROOT_KIND && typeof root.flowName === 'string' + return (root.kind === ROOT_KIND || root.kind === AUTHORED_PARALLEL_ROOT_KIND) + && (root.kind !== AUTHORED_PARALLEL_ROOT_KIND + || (root.identityVersion === 2 && root.executionMode === 'parallel')) + && typeof root.flowName === 'string' && typeof root.flowPath === 'string' && /^[a-f0-9]{64}$/.test(root.sourceSha256 ?? '') && typeof root.inputPresent === 'boolean' && surface?.packageName === '@relayflows/surface' && typeof surface.version === 'string' && /^[a-f0-9]{64}$/.test(surface.packageSha256 ?? '') diff --git a/packages/sdk/src/authored-verdict.ts b/packages/sdk/src/authored-verdict.ts index 95b309b16..0a0731a83 100644 --- a/packages/sdk/src/authored-verdict.ts +++ b/packages/sdk/src/authored-verdict.ts @@ -21,6 +21,8 @@ import type { JournalEvent } from './journal-reader.js'; /** The `instruction` discriminator `authored-root.ts` writes into the root step. */ export const AUTHORED_ROOT_KIND = 'relayflows.authored-root.v1'; +/** Older CLIs do not recognize this root and must refuse a parallel rollback. */ +export const AUTHORED_PARALLEL_ROOT_KIND = 'relayflows.authored-root.parallel.v2'; export interface AuthoredVerdict { readonly reason: LoweredCompletionReason; @@ -76,7 +78,8 @@ export function declaresAuthoredRoot(spawned: JournalEvent): boolean { if (step === null || step['id'] !== 'authored-root') return false; if (typeof step['instruction'] !== 'string') return false; try { - return record(JSON.parse(step['instruction']))?.['kind'] === AUTHORED_ROOT_KIND; + const kind = record(JSON.parse(step['instruction']))?.['kind']; + return kind === AUTHORED_ROOT_KIND || kind === AUTHORED_PARALLEL_ROOT_KIND; } catch { return false; } diff --git a/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts b/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts index 5e62dc0fd..6011f1aa4 100644 --- a/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts +++ b/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts @@ -2,7 +2,7 @@ import { rmSync } from 'node:fs'; import type { Server } from 'node:net'; import { flow, type Ctx, type FlowHandle, type Step } from '@relayflows/surface'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; -import { executeAuthoredFlow } from '../src/authored-flow-executor.js'; +import { executeAuthoredFlow, type ExecuteAuthoredFlowOptions } from '../src/authored-flow-executor.js'; import { JournalClient } from '../src/journal-client.js'; import { kernelDialectError, @@ -64,12 +64,13 @@ describe('authored flow lifecycle through the journal executor', () => { rmSync(path, { force: true }); }); - async function execute(handle: FlowHandle): Promise>> { + async function execute(handle: FlowHandle, options: ExecuteAuthoredFlowOptions = {}) + : Promise>> { const client = new JournalClient(path, { requestTimeoutMs: 2000 }); await client.connect(); await client.hello('authored-flow-lifecycle-test'); try { - return await executeAuthoredFlow(handle, client); + return await executeAuthoredFlow(handle, client, undefined, options); } finally { client.close(); } @@ -81,6 +82,34 @@ describe('authored flow lifecycle through the journal executor', () => { ); } + it('keeps a caught parallel non-run refusal as a root failure', async () => { + const startedBefore = startedSpecs.length; + await expect(execute(flow('parallel-hidden-llm', async f => { + try { f.llm('prompt', { output: { type: 'string' } }); } catch { /* author swallowed refusal */ } + f.done('success'); + }), { executionMode: 'parallel' })).rejects.toMatchObject({ code: 'step_failed' }); + expect(startedSpecs).toHaveLength(startedBefore); + }); + + it('keeps a caught parallel activity refusal as a root failure', async () => { + const startedBefore = startedSpecs.length; + await expect(execute(flow('parallel-hidden-activity', async f => { + try { f.on(undefined as never, undefined as never); } catch { /* author swallowed refusal */ } + f.done('success'); + }), { executionMode: 'parallel' })).rejects.toMatchObject({ code: 'step_failed' }); + expect(startedSpecs).toHaveLength(startedBefore); + }); + + it('keeps a caught late zero-predecessor refusal as a root failure', async () => { + const startedBefore = startedSpecs.length; + await expect(execute(flow('parallel-hidden-late-run', async f => { + await Promise.resolve(); + try { await f.run('printf hidden'); } catch { /* author swallowed refusal */ } + f.done('success'); + }), { executionMode: 'parallel' })).rejects.toMatchObject({ code: 'step_failed' }); + expect(startedSpecs).toHaveLength(startedBefore); + }); + it('refuses native resolver callbacks without starting terminal success', async () => { const startedBefore = startedSpecs.length; await expect(execute(flow('native-resolver-forgery', async (f) => { diff --git a/packages/sdk/tests/authored-parallel-eligibility.test.ts b/packages/sdk/tests/authored-parallel-eligibility.test.ts index b535d0508..1557743cc 100644 --- a/packages/sdk/tests/authored-parallel-eligibility.test.ts +++ b/packages/sdk/tests/authored-parallel-eligibility.test.ts @@ -17,9 +17,45 @@ describe('parallel run admission', () => { f.done('success'); }`))).toBe(true); expect(parallelRunEligible(body(`async f => { - await Promise.all(Array.from({ length: 9 }, (_, i) => f.run(String(i)))); + await Promise.all([f.run('a'), f.run('b'), f.run('c')]); f.done('success'); }`))).toBe(true); + expect(parallelRunEligible(body(`async f => { + const route = async () => { await f.run('route'); await f.run('dependent'); }; + const second = async () => { await f.run('other'); await f.run('follow-up'); }; + await Promise.all([route(), second()]); + await f.run('joined'); + f.done('success'); + }`))).toBe(true); + }); + + it('falls back for completion-order and hidden-effect shapes', () => { + const cases = [ + // K1/K12: imported timers and for-await before a first child. + `async f => { const pause = () => sleep(300); + const late = async () => { await Promise.all([pause(), pause()]); await f.run('L'); }; + const fast = async () => { await f.run('A'); await f.run('B'); }; + await Promise.all([fast(), late()]); f.done('success'); }`, + `async f => { const late = async () => { for await (const x of source) await f.run(x); }; + await Promise.all([late(), f.run('A')]); f.done('success'); }`, + // K2b/K3: closure-shared readiness and completion-order mutation. + `async f => { const late = async () => { await Promise.all([ready(), ready()]); await f.run('C'); }; + await Promise.all([f.run('A'), late()]); f.done('success'); }`, + `async f => { const out = []; const left = async () => { out.push(await f.run('A')); }; + const right = async () => { out.push(await f.run('B')); }; + await Promise.all([left(), right()]); await f.run(out.join('')); f.done('success'); }`, + // K4: an arguments alias can reach f.llm without spelling f.llm. + `async function (f) { const g = arguments[0]; const ask = async () => { await g.llm('x'); }; + await Promise.all([ask(), f.run('A')]); f.done('success'); }`, + // K5/K5b: non-step recursive joins can truncate the predecessor graph. + `async f => { const descend = async n => n ? Promise.all([descend(n - 1), descend(n - 1)]) : 1; + await Promise.all([descend(12), f.run('A')]); await f.run('B'); f.done('success'); }`, + // K13b: completion from inside a branch changes peer admission order. + `async f => { const a = async () => { await f.run('A'); f.done('success'); }; + const b = async () => { await f.run('B'); await f.run('C'); }; + await Promise.all([a(), b()]); }`, + ]; + for (const source of cases) expect(parallelRunEligible(body(source)), source).toBe(false); }); it('keeps race, any, eager work, timers, and mixed effects serial', () => { @@ -36,6 +72,7 @@ describe('parallel run admission', () => { await group; }`, `async f => { await Promise.all(Array.from({ length: Math.random() * 10 }, (_, i) => f.run(String(i)))); }`, + `async f => { await Promise.all(Array.from({ length: 9 }, (_, i) => f.run('' + i))); }`, `async f => { const others = [f.run('a')]; await Promise.all([...others, f.run('b')]); }`, `async f => { await Promise.all([f.run('a'), f.run('b')]); @@ -53,7 +90,7 @@ describe('parallel run admission', () => { expect(parallelRunEligible(unsafe)).toBe(false); }); - it('keeps a replaced Array.from scheduler in serial mode', () => { + it('keeps generated fanout serial even if Array.from is replaced', () => { const candidate = body(`async f => { await Promise.all(Array.from({ length: 2 }, (_, i) => f.run(String(i)))); }`); diff --git a/packages/sdk/tests/authored-parallel-run-live.test.ts b/packages/sdk/tests/authored-parallel-run-live.test.ts index db61f72fb..f01abaa95 100644 --- a/packages/sdk/tests/authored-parallel-run-live.test.ts +++ b/packages/sdk/tests/authored-parallel-run-live.test.ts @@ -1,5 +1,5 @@ import { existsSync, readFileSync, readdirSync, writeFileSync } from 'node:fs'; -import { spawn } from 'node:child_process'; +import { spawn, spawnSync } from 'node:child_process'; import { afterEach, describe, expect, it } from 'vitest'; import { AUTHORED_STEP_STREAM } from '../src/authored-step-index.js'; import { JournalClient } from '../src/journal-client.js'; @@ -39,15 +39,20 @@ describe('parallel authored deterministic steps', () => { closes.push(() => fixture.close()); const previousEnv = process.env.FLOWS_PARALLEL_TEST_ENV; process.env.FLOWS_PARALLEL_TEST_ENV = 'peer-env'; + writeFileSync(`${fixture.root}/span.mjs`, `import { writeFileSync } from 'node:fs'; +const name = process.argv[2]; +writeFileSync(name + '-start', String(Date.now())); +await new Promise(resolve => setTimeout(resolve, 2000)); +writeFileSync(name + '-end', String(Date.now())); +writeFileSync(name + '-env', process.env.FLOWS_PARALLEL_TEST_ENV || 'missing'); +process.stdout.write(name + ':' + process.env.FLOWS_PARALLEL_TEST_ENV); +`); writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; -import { writeFileSync } from 'node:fs'; export default flow('parallel-run', async f => { - const started = Date.now(); - const outputs = await Promise.all([ - f.run('sleep 2; printf first:$FLOWS_PARALLEL_TEST_ENV'), - f.run('sleep 2; printf second:$FLOWS_PARALLEL_TEST_ENV'), + await Promise.all([ + f.run('node span.mjs first'), + f.run('node span.mjs second'), ]); - writeFileSync('result.json', JSON.stringify({ elapsedMs: Date.now() - started, outputs })); f.done('success'); }); `); @@ -60,28 +65,35 @@ export default flow('parallel-run', async f => { else process.env.FLOWS_PARALLEL_TEST_ENV = previousEnv; } expect(result.status, result.stderr + result.stdout).toBe(0); - const measured = JSON.parse(readFileSync(`${fixture.root}/result.json`, 'utf8')) as { - elapsedMs: number; outputs: string[]; - }; - expect(measured.outputs).toEqual(['first:peer-env', 'second:peer-env']); - console.info(`parallel sleep 2 elapsed: ${measured.elapsedMs} ms`); - expect(measured.elapsedMs).toBeLessThan(3_000); + const firstStart = Number(readFileSync(`${fixture.root}/first-start`, 'utf8')); + const secondStart = Number(readFileSync(`${fixture.root}/second-start`, 'utf8')); + const firstEnd = Number(readFileSync(`${fixture.root}/first-end`, 'utf8')); + const secondEnd = Number(readFileSync(`${fixture.root}/second-end`, 'utf8')); + const elapsedMs = Math.max(firstEnd, secondEnd) - Math.min(firstStart, secondStart); + expect(readFileSync(`${fixture.root}/first-env`, 'utf8')).toBe('peer-env'); + expect(readFileSync(`${fixture.root}/second-env`, 'utf8')).toBe('peer-env'); + console.info(`parallel sleep 2 elapsed: ${elapsedMs} ms`); + expect(elapsedMs).toBeLessThan(3_000); }, 60_000); it('starts a fast branch dependent before a slow sibling completes', () => { const fixture = chainFixture(); closes.push(() => fixture.close()); writeFileSync(`${fixture.root}/dependent.mjs`, `import { writeFileSync } from 'node:fs'; -writeFileSync('dependent-start.json', JSON.stringify({ elapsedMs: Date.now() - Number(process.argv[2]) })); +writeFileSync('dependent-start', String(Date.now())); process.stdout.write('dependent'); +`); + writeFileSync(`${fixture.root}/slow.mjs`, `import { writeFileSync } from 'node:fs'; +writeFileSync('slow-start', String(Date.now())); +await new Promise(resolve => setTimeout(resolve, 3000)); +process.stdout.write('slow'); `); writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; export default flow('parallel-dependent', async f => { - const started = Date.now(); - const slow = async () => await f.run('sleep 3; printf slow'); + const slow = async () => await f.run('node slow.mjs'); const fast = async () => { await f.run('sleep 1; printf fast'); - return await f.run('node dependent.mjs ' + started); + return await f.run('node dependent.mjs'); }; await Promise.all([slow(), fast()]); f.done('success'); @@ -90,7 +102,8 @@ export default flow('parallel-dependent', async f => { const result = fixture.invoke('run', '--no-observer-link', '--json', '--data-dir', fixture.data, fixture.flowPath, '--input', '{}'); expect(result.status, result.stderr + result.stdout).toBe(0); - const { elapsedMs } = JSON.parse(readFileSync(`${fixture.root}/dependent-start.json`, 'utf8')) as { elapsedMs: number }; + const elapsedMs = Number(readFileSync(`${fixture.root}/dependent-start`, 'utf8')) + - Number(readFileSync(`${fixture.root}/slow-start`, 'utf8')); console.info(`fast dependent started after: ${elapsedMs} ms`); expect(elapsedMs).toBeLessThan(2_300); }, 60_000); @@ -99,20 +112,19 @@ export default flow('parallel-dependent', async f => { const fixture = chainFixture(); closes.push(() => fixture.close()); writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; -import { writeFileSync } from 'node:fs'; export default flow('out-of-order-parallel-run', async f => { const outputs = await Promise.all([ f.run('sleep 2; printf slow'), f.run('printf fast'), ]); - writeFileSync('ordered.json', JSON.stringify(outputs)); + await f.run('printf ' + outputs[0] + ':' + outputs[1] + ' > ordered.txt'); f.done('success'); }); `); const result = fixture.invoke('run', '--no-observer-link', '--json', '--data-dir', fixture.data, fixture.flowPath, '--input', '{}'); expect(result.status, result.stderr + result.stdout).toBe(0); - expect(JSON.parse(readFileSync(`${fixture.root}/ordered.json`, 'utf8'))).toEqual(['slow', 'fast']); + expect(readFileSync(`${fixture.root}/ordered.txt`, 'utf8')).toBe('slow:fast'); const rootRunId = runIds(fixture.data)[0]!; const reader = new JournalClient(socketPathFor(fixture.data)); await reader.connect(); @@ -122,7 +134,8 @@ export default flow('out-of-order-parallel-run', async f => { .map(message => (message as { message?: unknown }).message ?? message) as Array<{ step?: string; state?: string; }>; - expect(records.filter(record => record.state === 'completed' && record.step !== 'complete-3') + expect(records.filter(record => record.state === 'completed' + && (record.step === 'run-1' || record.step === 'run-2')) .map(record => record.step)).toEqual(['run-2', 'run-1']); } finally { reader.close(); } }, 60_000); @@ -143,7 +156,11 @@ appendFileSync('spans.jsonl', JSON.stringify({ id, edge: 'end', at: Date.now() } `); writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; export default flow('bounded-parallel-run', async f => { - await Promise.all(Array.from({ length: 9 }, (_, i) => f.run('node work.mjs ' + i))); + await Promise.all([ + f.run('node work.mjs 0'), f.run('node work.mjs 1'), f.run('node work.mjs 2'), + f.run('node work.mjs 3'), f.run('node work.mjs 4'), f.run('node work.mjs 5'), + f.run('node work.mjs 6'), f.run('node work.mjs 7'), f.run('node work.mjs 8'), + ]); f.done('success'); }); `); @@ -180,8 +197,11 @@ await new Promise(resolve => setTimeout(resolve, 500)); `); writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; export default flow('queued-child-cancellation', async f => { - await Promise.all(Array.from({ length: 9 }, (_, i) => f.run(i === 8 - ? 'touch queued-started' : 'node fail-work.mjs ' + i))); + await Promise.all([ + f.run('node fail-work.mjs 0'), f.run('node fail-work.mjs 1'), f.run('node fail-work.mjs 2'), + f.run('node fail-work.mjs 3'), f.run('node fail-work.mjs 4'), f.run('node fail-work.mjs 5'), + f.run('node fail-work.mjs 6'), f.run('node fail-work.mjs 7'), f.run('touch queued-started'), + ]); f.done('success'); }); `); @@ -196,13 +216,12 @@ export default flow('queued-child-cancellation', async f => { const fixture = chainFixture(); closes.push(() => fixture.close()); writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; -import { writeFileSync } from 'node:fs'; export default flow('parallel-recovery', async f => { const outputs = await Promise.all([ f.run('printf x >> first-count; sleep 1; printf first'), f.run('test -f stalled-marker || { touch stalled-marker; sleep 120; }; printf second', { timeout: '5m' }), ]); - writeFileSync('recovered.json', JSON.stringify(outputs)); + await f.run('printf ' + outputs[0] + ':' + outputs[1] + ' > recovered.txt'); f.done('success'); }); `); @@ -253,7 +272,7 @@ export default flow('parallel-recovery', async f => { const resumed = fixture.invoke('resume', '--no-observer-link', '--json', '--data-dir', fixture.data, rootRunId); expect(resumed.status, resumed.stderr + resumed.stdout).toBe(0); - expect(JSON.parse(readFileSync(`${fixture.root}/recovered.json`, 'utf8'))).toEqual(['first', 'second']); + expect(readFileSync(`${fixture.root}/recovered.txt`, 'utf8')).toBe('first:second'); expect(readFileSync(`${fixture.root}/first-count`, 'utf8')).toBe('x'); const after = new JournalClient(socketPathFor(fixture.data)); @@ -271,7 +290,7 @@ export default flow('parallel-recovery', async f => { const firstEntries = (await after.journalRead(firstChildRunId, 1, 100)).entries; expect(firstEntries.filter(entry => (entry as { entry_type?: string }).entry_type === 'step.completed')) .toHaveLength(1); - expect(runIds(fixture.data)).toHaveLength(4); // root, both children, completion marker + expect(runIds(fixture.data)).toHaveLength(5); // root, both children, follow-up, completion marker } finally { after.close(); } }, 120_000); @@ -279,7 +298,6 @@ export default flow('parallel-recovery', async f => { const fixture = chainFixture(); closes.push(() => fixture.close()); writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; -import { appendFileSync } from 'node:fs'; export default flow('parallel-branch-recovery', async f => { const left = async () => { await f.run('sleep 2; printf left-initial'); @@ -293,7 +311,7 @@ export default flow('parallel-branch-recovery', async f => { }; await Promise.all([left(), right()]); await f.run('test -f branch-stalled || { touch branch-stalled; sleep 120; }; printf resumed'); - appendFileSync('branch-effects', '!'); + await f.run('printf ! >> branch-effects'); f.done('success'); }); `); @@ -390,6 +408,47 @@ export default flow('legacy-sequential-resume', async f => { }, 120_000, ); + it.skipIf(process.env.RELAYFLOWS_PREVIOUS_CLI === undefined)( + 'refuses a parallel v2 root under 2.0.50 and lets the new CLI resume it', async () => { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +export default flow('rollback-parallel-root', async f => { + await Promise.all([f.run('printf A >> effects'), f.run('printf B >> effects')]); + await f.run('test -f release || { touch stalled; sleep 120; }; printf C >> effects', { timeout: '5m' }); + f.done('success'); +}); +`); + const cli = fixture.invokeAsync('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + const cliExited = new Promise(resolve => cli.once('exit', () => resolve())); + await until(() => existsSync(`${fixture.root}/stalled`) ? true : undefined, 'rollback stall'); + const before = [...readFileSync(`${fixture.root}/effects`, 'utf8')].sort(); + expect(before).toEqual(['A', 'B']); + const rootRunId = runIds(fixture.data)[0]!; + const reader = new JournalClient(socketPathFor(fixture.data)); + await reader.connect(); + await reader.hello('rollback-root-kind-test'); + try { + expect(await readAuthoredRootMetadata(reader, rootRunId)) + .toMatchObject({ kind: 'relayflows.authored-root.parallel.v2', executionMode: 'parallel' }); + } finally { reader.close(); } + cli.kill('SIGKILL'); + await cliExited; + killDaemon(fixture.data); + writeFileSync(`${fixture.root}/release`, ''); + const old = spawnSync(process.execPath, [process.env.RELAYFLOWS_PREVIOUS_CLI!, 'resume', + '--no-observer-link', '--json', '--data-dir', fixture.data, rootRunId], + { cwd: fixture.root, env: { ...process.env, RELAYFLOWD_BIN: fixture.binary }, encoding: 'utf8', timeout: 30_000 }); + expect(old.status, old.stderr + old.stdout).not.toBe(0); + expect(old.stderr + old.stdout).toMatch(/malformed authority metadata/u); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual(before); + const resumed = fixture.invoke('resume', '--no-observer-link', '--json', '--data-dir', fixture.data, rootRunId); + expect(resumed.status, resumed.stderr + resumed.stdout).toBe(0); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual(['A', 'B', 'C']); + }, 120_000, + ); + it.each([ { name: 'race', before: ['A', 'B', 'G'], body: ` await Promise.race([f.run('printf A >> effects'), f.run('sleep 1; printf B >> effects')]); @@ -584,6 +643,209 @@ export default flow('legacy-consecutive-groups', async f => { ); } + it.each([ + { name: 'closure-shared readiness', expected: ['A', 'B', 'C'], preamble: ` +let releaseFirst; +const ready = new Promise(resolve => { releaseFirst = resolve; });`, body: ` + const left = async () => { + await f.run('printf A >> effects'); + releaseFirst(); + await f.run('printf B >> effects'); + }; + const right = async () => { + await Promise.all([ready, ready]); + await f.run('printf C >> effects'); + }; + await Promise.all([left(), right()]);` }, + { name: 'shared completion-order array', expected: ['A', 'B'], preamble: '', body: ` + const out = []; + const left = async () => { out.push(await f.run('printf A >> effects; printf a')); }; + const right = async () => { out.push(await f.run('printf B >> effects; printf b')); }; + await Promise.all([left(), right()]); + await f.run('printf ' + out.join('') + ' > order');` }, + { name: 'deep non-step joins with a swallowed refusal', expected: ['A', 'B'], preamble: '', body: ` + const descend = async n => n === 0 ? undefined : Promise.all([descend(n - 1), descend(n - 1)]); + await Promise.all([descend(12), f.run('printf A >> effects')]); + try { await f.run('printf B >> effects'); } catch { /* would silently skip B */ }` }, + ])('keeps $name serial and replays no completed effect', async ({ name, expected, preamble, body }) => { + for (let repetition = 0; repetition < 6; repetition++) { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface';${preamble} +export default flow('serial-review-${name.replaceAll(' ', '-')}', async f => {${body} + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +}); +`); + const cli = fixture.invokeAsync('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + const cliExited = new Promise(resolve => cli.once('exit', () => resolve())); + closes.push(async () => { + if (cli.exitCode === null && cli.signalCode === null) cli.kill('SIGKILL'); + await cliExited; + }); + await until(() => existsSync(`${fixture.root}/stalled`) ? true : undefined, `${name} stall`, 60_000); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual(expected); + const rootRunId = runIds(fixture.data)[0]!; + const reader = new JournalClient(socketPathFor(fixture.data)); + await reader.connect(); + await reader.hello('serial-review-test'); + try { + expect(await readAuthoredRootMetadata(reader, rootRunId)) + .toMatchObject({ kind: 'relayflows.authored-root.v1', executionMode: 'serial' }); + } finally { reader.close(); } + const order = existsSync(`${fixture.root}/order`) ? readFileSync(`${fixture.root}/order`, 'utf8') : undefined; + cli.kill('SIGKILL'); + await cliExited; + killDaemon(fixture.data); + writeFileSync(`${fixture.root}/release`, ''); + const resumed = fixture.invoke('resume', '--no-observer-link', '--json', '--data-dir', fixture.data, rootRunId); + expect(resumed.status, resumed.stderr + resumed.stdout).toBe(0); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual([...expected, 'Z'].sort()); + if (order !== undefined) expect(readFileSync(`${fixture.root}/order`, 'utf8')).toBe(order); + await fixture.close(); + } + }, 240_000); + + it('keeps done inside a branch on the established serial scheduler', async () => { + for (let repetition = 0; repetition < 6; repetition++) { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +export default flow('serial-branch-completion', async f => { + const b = async () => { await f.run('sleep 0.4; printf B >> effects'); await f.run('printf C >> effects'); }; + const a = async () => { await f.run('sleep 0.1; printf A >> effects'); f.done('success'); }; + await Promise.all([b(), a()]); +}); +`); + const result = fixture.invoke('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + expect(result.status, result.stderr + result.stdout).toBe(0); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual(['A', 'B', 'C']); + await fixture.close(); + } + }, 120_000); + + it('retains the base failure when a branch completes before its sibling continues', async () => { + for (let repetition = 0; repetition < 6; repetition++) { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +export default flow('serial-early-completion', async f => { + const a = async () => { await f.run('sleep 0.4; printf A >> effects'); f.done('success'); }; + const b = async () => { await f.run('sleep 0.1; printf B >> effects'); await f.run('printf C >> effects'); }; + await Promise.all([a(), b()]); +}); +`); + const result = fixture.invoke('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + expect(result.status).not.toBe(0); + expect(result.stderr + result.stdout).toMatch(/operation_after_completion/u); + await fixture.close(); + } + }, 120_000); + + it('keeps an arguments-alias LLM body serial across six resumes', async () => { + for (let repetition = 0; repetition < 6; repetition++) { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +export default flow('serial-hidden-llm', async function (f) { + const g = arguments[0]; + const output = { type: 'object', properties: { message: { type: 'string' } }, required: ['message'] }; + const left = async () => { await g.llm('left', { output, model: 'test-model' }); await f.run('printf L >> effects'); }; + const right = async () => { await g.llm('right', { output, model: 'test-model' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]); + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +}); +`); + const cli = fixture.invokeAsync('run', '--no-observer-link', '--json', '--local-agent', + '--data-dir', fixture.data, fixture.flowPath, '--input', '{}'); + const cliExited = new Promise(resolve => cli.once('exit', () => resolve())); + closes.push(async () => { + if (cli.exitCode === null && cli.signalCode === null) cli.kill('SIGKILL'); + await cliExited; + }); + await until(() => existsSync(`${fixture.root}/stalled`) ? true : undefined, 'hidden LLM stall', 90_000); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual(['L', 'R']); + expect(fixture.requests()).toHaveLength(2); + const rootRunId = runIds(fixture.data)[0]!; + const reader = new JournalClient(socketPathFor(fixture.data)); + await reader.connect(); + await reader.hello('hidden-llm-mode-test'); + try { + expect(await readAuthoredRootMetadata(reader, rootRunId)) + .toMatchObject({ kind: 'relayflows.authored-root.v1', executionMode: 'serial' }); + } finally { reader.close(); } + cli.kill('SIGKILL'); + await cliExited; + killDaemon(fixture.data); + writeFileSync(`${fixture.root}/release`, ''); + const resumed = fixture.invoke('resume', '--no-observer-link', '--json', '--local-agent', + '--data-dir', fixture.data, rootRunId); + expect(resumed.status, resumed.stderr + resumed.stdout).toBe(0); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual(['L', 'R', 'Z']); + expect(fixture.requests()).toHaveLength(2); + await fixture.close(); + } + }, 240_000); + + it.each([ + { name: 'imported timer helper', delay: `const pause = () => sleep(300);`, wait: ` + await Promise.all([pause(), pause()]);` }, + { name: 'for-await timer', delay: `async function* paused() { await sleep(300); yield 1; }`, wait: ` + for await (const value of paused()) { void value; }` }, + ])('does not replay a completed effect after $name reorder', async ({ name, delay, wait }) => { + for (let repetition = 0; repetition < 6; repetition++) { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +import { setTimeout as sleep } from 'node:timers/promises'; +export default flow('serial-reorder-${name.replaceAll(' ', '-')}', async f => { + ${delay} + const late = async () => { ${wait} + await f.run('printf L >> effects'); + }; + const fast = async () => { + await f.run('sleep 0.2; printf A >> effects'); + await f.run('sleep 0.2; printf B >> effects'); + await f.run('printf C >> effects'); + }; + await Promise.all([fast(), late()]); + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +}); +`); + const cli = fixture.invokeAsync('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + const cliExited = new Promise(resolve => cli.once('exit', () => resolve())); + closes.push(async () => { + if (cli.exitCode === null && cli.signalCode === null) cli.kill('SIGKILL'); + await cliExited; + }); + await until(() => existsSync(`${fixture.root}/stalled`) ? true : undefined, `${name} stall`, 60_000); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual(['A', 'B', 'C', 'L']); + const rootRunId = runIds(fixture.data)[0]!; + const reader = new JournalClient(socketPathFor(fixture.data)); + await reader.connect(); + await reader.hello('reorder-mode-test'); + try { + expect(await readAuthoredRootMetadata(reader, rootRunId)) + .toMatchObject({ kind: 'relayflows.authored-root.v1', executionMode: 'serial' }); + } finally { reader.close(); } + cli.kill('SIGKILL'); + await cliExited; + killDaemon(fixture.data); + writeFileSync(`${fixture.root}/release`, ''); + const resumed = fixture.invoke('resume', '--no-observer-link', '--json', '--data-dir', fixture.data, rootRunId); + expect([0, 1]).toContain(resumed.status); + const effects = [...readFileSync(`${fixture.root}/effects`, 'utf8')]; + for (const effect of ['A', 'B', 'C', 'L']) expect(effects.filter(item => item === effect)).toHaveLength(1); + await fixture.close(); + } + }, 240_000); + const legacyUpgradeCases = [ { name: 'A1 nested joins', effects: ['L', 'R'], body: ` const left = async () => { diff --git a/packages/sdk/tests/authored-root.test.ts b/packages/sdk/tests/authored-root.test.ts index 75764ea19..e52914171 100644 --- a/packages/sdk/tests/authored-root.test.ts +++ b/packages/sdk/tests/authored-root.test.ts @@ -187,7 +187,9 @@ describe('durable authored root', () => { await executeDurableAuthoredFlow(loaded, journal as unknown as JournalClient, undefined, { dataDir: '/unused', admissionKey: 'certified-group' }); const step = (journal.starts[0]!.spec as { steps: Array<{ instruction: string }> }).steps[0]!; - expect(JSON.parse(step.instruction)).toMatchObject({ identityVersion: 2, executionMode: 'parallel' }); + expect(JSON.parse(step.instruction)).toMatchObject({ + kind: 'relayflows.authored-root.parallel.v2', identityVersion: 2, executionMode: 'parallel', + }); }); it('stops waiting for a root re-dispatch when the caller cancels', async () => { diff --git a/packages/sdk/tests/authored-status-detail.test.ts b/packages/sdk/tests/authored-status-detail.test.ts index 2c2bafdd6..bc749f374 100644 --- a/packages/sdk/tests/authored-status-detail.test.ts +++ b/packages/sdk/tests/authored-status-detail.test.ts @@ -9,7 +9,7 @@ import { mkdtempSync, rmSync } from 'node:fs'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; import { afterEach, describe, expect, it } from 'vitest'; -import { authoredVerdictOf, AUTHORED_ROOT_KIND } from '../src/authored-verdict.js'; +import { authoredVerdictOf, AUTHORED_PARALLEL_ROOT_KIND, AUTHORED_ROOT_KIND } from '../src/authored-verdict.js'; import { canonicalize } from '../src/canonical.js'; import { parseStatusArgs, runStatus, type StatusOptions } from '../src/cli/status.js'; import type { JournalEvent } from '../src/journal-client.js'; @@ -87,6 +87,8 @@ describe('projecting the authored verdict out of a root journal', () => { it('reads the verdict and its detail', () => { expect(authoredVerdictOf(journal({ detail: FINDING }))) .toEqual({ reason: 'step_failed', detail: FINDING }); + expect(authoredVerdictOf(journal({ kind: AUTHORED_PARALLEL_ROOT_KIND, detail: FINDING }))) + .toEqual({ reason: 'step_failed', detail: FINDING }); }); it('reads a verdict with no detail, and reports no detail key', () => { From 78e7d1fcc0bf58ade55b13c68c347c312b7f85f5 Mon Sep 17 00:00:00 2001 From: Miya Date: Fri, 16 Oct 2026 20:25:47 +0200 Subject: [PATCH 08/18] Keep authored parallel replay identities safe across Promise variants --- docs/SURFACE.md | 19 ++- .../native-parallel-review5/.gitattributes | 1 + evidence/native-parallel-review5/Dockerfile | 7 + .../Dockerfile.upgrade | 8 + .../build-typecheck.log | 12 ++ .../native-parallel-review5/linux-replay.log | 61 +++++++ .../native-parallel-review5/linux-upgrade.log | 19 +++ .../mac-2051-compat.log | 17 ++ .../native-parallel-review5/mac-focused.log | 59 +++++++ .../mutation-backstop-fail.log | 33 ++++ .../mutation-backstop-pass.log | 10 ++ .../mutation-f1-fail.log | 33 ++++ .../mutation-f1-pass.log | 10 ++ .../mutation-f2-fail.log | 33 ++++ .../mutation-f2-pass.log | 10 ++ .../mutation-f4-fail.log | 33 ++++ .../mutation-f4-pass.log | 10 ++ evidence/native-parallel-review5/replay.mjs | 159 ++++++++++++++++++ evidence/native-parallel-review5/upgrade.mjs | 99 +++++++++++ .../native-parallel-review5/verification.md | 77 +++++++++ packages/sdk/package-lock.json | 8 + packages/sdk/package.json | 1 + packages/sdk/src/authored-flow-executor.ts | 3 + packages/sdk/src/authored-flow-lifecycle.ts | 12 +- .../sdk/src/authored-parallel-eligibility.ts | 81 ++++++++- packages/sdk/src/authored-promise-graph.ts | 8 + packages/sdk/src/authored-root.ts | 2 +- packages/sdk/src/authored-step-graph.ts | 23 ++- .../authored-flow-lifecycle-executor.test.ts | 50 ++++++ .../authored-parallel-eligibility.test.ts | 58 ++++++- .../tests/authored-parallel-run-live.test.ts | 114 +++++++++++++ .../tests/authored-step-secrets-live.test.ts | 45 ++++- .../sdk/tests/journal-client-step-env.test.ts | 38 +++++ 33 files changed, 1126 insertions(+), 27 deletions(-) create mode 100644 evidence/native-parallel-review5/.gitattributes create mode 100644 evidence/native-parallel-review5/Dockerfile create mode 100644 evidence/native-parallel-review5/Dockerfile.upgrade create mode 100644 evidence/native-parallel-review5/build-typecheck.log create mode 100644 evidence/native-parallel-review5/linux-replay.log create mode 100644 evidence/native-parallel-review5/linux-upgrade.log create mode 100644 evidence/native-parallel-review5/mac-2051-compat.log create mode 100644 evidence/native-parallel-review5/mac-focused.log create mode 100644 evidence/native-parallel-review5/mutation-backstop-fail.log create mode 100644 evidence/native-parallel-review5/mutation-backstop-pass.log create mode 100644 evidence/native-parallel-review5/mutation-f1-fail.log create mode 100644 evidence/native-parallel-review5/mutation-f1-pass.log create mode 100644 evidence/native-parallel-review5/mutation-f2-fail.log create mode 100644 evidence/native-parallel-review5/mutation-f2-pass.log create mode 100644 evidence/native-parallel-review5/mutation-f4-fail.log create mode 100644 evidence/native-parallel-review5/mutation-f4-pass.log create mode 100644 evidence/native-parallel-review5/replay.mjs create mode 100644 evidence/native-parallel-review5/upgrade.mjs create mode 100644 evidence/native-parallel-review5/verification.md diff --git a/docs/SURFACE.md b/docs/SURFACE.md index 722b0e002..b1b29829b 100644 --- a/docs/SURFACE.md +++ b/docs/SURFACE.md @@ -974,7 +974,10 @@ Two properties of `f.run` on a local `relayflowd` are useful to know. The root records its execution mode before its body runs. Parallel mode is selected only for a narrow source grammar: awaited `Promise.all` groups of direct `f.run` calls, and locally declared async branches made only of awaited -`f.run` calls or direct run groups. Generated arrays such as `Array.from` use +`f.run` calls or direct run groups. Every branch must contain a direct `f.run`. +The module must leave the intrinsic `Promise` and `globalThis.Promise` +unshadowed; a module that binds either name uses serial mode. Generated arrays +such as `Array.from` use serial mode. Branches may not mutate shared values, await timers or other promises, or call `f.done`; completion belongs at the end of the root body. The check is conservative: an unrecognized source form uses @@ -999,10 +1002,12 @@ Each child's admission key comes from the root run and step id. Each child has its own journal; the root's child index records completion facts as they arrive, and readers match them by step id and run id. In parallel mode, if the bounded causal walk cannot identify a follow-up's -full predecessor frontier, a non-run effect appears, or a new initial child +full predecessor frontier, the frontier passes through an unregistered promise +aggregate, a non-run effect appears, or a new initial child appears after the body's first turn, the root fails before admitting that -effect rather than issuing an ambiguous replay key. This failure remains a -root failure even when authored code catches the immediate exception. +effect rather than issuing an ambiguous replay key. Once this happens, no +later child is admitted. The failure remains a root failure even when authored +code catches the immediate exception. If one concurrent `f.run` fails, the authored body fails and its waiting siblings are cancelled before admission. Children already admitted can finish @@ -1010,11 +1015,11 @@ their own journal work; their outcomes cannot turn the failed body into a success. A child in a separate `f.dispatch` body follows that body's own failure and capacity rules. -**Upgrade from 2.0.50:** roots admitted before execution modes were journaled -resume in serial compatibility mode, preserving the 2.0.50 `kind-N` step ids +**Upgrade from 2.0.50 or 2.0.51:** roots admitted before execution modes were journaled +resume in serial compatibility mode, preserving their `kind-N` step ids and shared connection. Completed child effects remain bound to their original admission keys, including follow-ups after a `Promise.all` join. -New parallel roots carry a distinct root kind. A 2.0.50 CLI refuses one on +New parallel roots carry a distinct root kind. A 2.0.50 or 2.0.51 CLI refuses one on rollback, leaving it resumable by this or a newer CLI rather than replaying parallel follow-ups with old `run-N` identities. New serial roots retain the original root kind and serial IDs. diff --git a/evidence/native-parallel-review5/.gitattributes b/evidence/native-parallel-review5/.gitattributes new file mode 100644 index 000000000..23cdbfe7e --- /dev/null +++ b/evidence/native-parallel-review5/.gitattributes @@ -0,0 +1 @@ +*.log -whitespace diff --git a/evidence/native-parallel-review5/Dockerfile b/evidence/native-parallel-review5/Dockerfile new file mode 100644 index 000000000..2692f33a0 --- /dev/null +++ b/evidence/native-parallel-review5/Dockerfile @@ -0,0 +1,7 @@ +FROM node:22-trixie +RUN mkdir -p /bench && cd /bench && npm install --ignore-scripts \ + @relayflows/sdk@2.0.51 @relayflows/surface@2.0.51 \ + @relayflows/runtime-linux-x64@2.0.51 bluebird@3.7.2 +COPY dist/ /bench/node_modules/@relayflows/sdk/dist/ +COPY replay.mjs /bench/replay.mjs +WORKDIR /bench diff --git a/evidence/native-parallel-review5/Dockerfile.upgrade b/evidence/native-parallel-review5/Dockerfile.upgrade new file mode 100644 index 000000000..ea1931342 --- /dev/null +++ b/evidence/native-parallel-review5/Dockerfile.upgrade @@ -0,0 +1,8 @@ +FROM node:22-trixie +RUN mkdir -p /bench && cd /bench && npm install --ignore-scripts \ + @relayflows/sdk@2.0.51 @relayflows/surface@2.0.51 \ + @relayflows/runtime-linux-x64@2.0.51 bluebird@3.7.2 +COPY dist/ /bench/sdk-head/dist/ +COPY package.json /bench/sdk-head/package.json +COPY upgrade.mjs /bench/upgrade.mjs +WORKDIR /bench diff --git a/evidence/native-parallel-review5/build-typecheck.log b/evidence/native-parallel-review5/build-typecheck.log new file mode 100644 index 000000000..57900cf0c --- /dev/null +++ b/evidence/native-parallel-review5/build-typecheck.log @@ -0,0 +1,12 @@ + +> @relayflows/sdk@2.0.51 build +> tsc && node scripts/make-cli-executable.mjs + + +> @relayflows/sdk@2.0.51 typecheck +> tsc --noEmit && tsc -p tsconfig.type-tests.json + + +> @relayflows/sdk@2.0.51 typecheck:tests +> tsc -p tsconfig.tests.json + diff --git a/evidence/native-parallel-review5/linux-replay.log b/evidence/native-parallel-review5/linux-replay.log new file mode 100644 index 000000000..94f1efe7b --- /dev/null +++ b/evidence/native-parallel-review5/linux-replay.log @@ -0,0 +1,61 @@ +{"case":"A1","index":0,"rootRunId":"01M52Z24188HRQ7JQCS671H78N","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":1,"rootRunId":"01M52Z27JP7MQWFN9RZKSQ9AFZ","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":2,"rootRunId":"01M52Z2B1M774PFFJ5FQGM57VS","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":3,"rootRunId":"01M52Z2EE408TFR696QA5CM5B6","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":4,"rootRunId":"01M52Z2HY0GQYS8V6BWV6DP2FE","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":5,"rootRunId":"01M52Z2NASHW0HHNEZGCYG0YC4","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":0,"rootRunId":"01M52Z2RRJKTBM9NP63ZG0J888","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":1,"rootRunId":"01M52Z2VWCD75TSHAEYQ9ARN2J","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":2,"rootRunId":"01M52Z2YXBSNG24ZE0N9D7FS6V","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":3,"rootRunId":"01M52Z31XV3SRPQJH8XJBR4QBS","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":4,"rootRunId":"01M52Z35288ES8K22BM1P8H4KF","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":5,"rootRunId":"01M52Z387NTGMM45NG78GHG1A7","before":"LR","after":"LRZ","resumed":true} +{"case":"N2","index":0,"rootRunId":"01M52Z3B7BHF1DMRWNEP3C33HC","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":1,"rootRunId":"01M52Z3EN6R4CJF36MYJJTVX7Y","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":2,"rootRunId":"01M52Z3J0Q87QTBZ867EF5NTQ6","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":3,"rootRunId":"01M52Z3NC58NNW7JJ2DHXZJKRK","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":4,"rootRunId":"01M52Z3RTQC39C0N6JR84AEK67","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":5,"rootRunId":"01M52Z3W5BVD9DQXG5H53C85D8","before":"abc","after":"Zabc","resumed":true} +{"case":"C1e","index":0,"rootRunId":"01M52Z3ZGNSJC6WXKMM2B303RS","before":"XY","after":"XYZ","resumed":true} +{"case":"C1e","index":1,"rootRunId":"01M52Z432F9TVKCVYE16XNX0QD","before":"XY","after":"XYZ","resumed":true} +{"case":"C1e","index":2,"rootRunId":"01M52Z46JPMYDDHS0S0X895DM8","before":"XY","after":"XYZ","resumed":true} +{"case":"C1e","index":3,"rootRunId":"01M52Z4A5BJPHG42T8X66J9C3M","before":"XY","after":"XYZ","resumed":true} +{"case":"C1e","index":4,"rootRunId":"01M52Z4DPRJSG4BF2X7WFR5SDK","before":"XY","after":"XYZ","resumed":true} +{"case":"C1e","index":5,"rootRunId":"01M52Z4H9ED4S0Q29SZP3V3DB7","before":"XY","after":"XYZ","resumed":true} +{"case":"G1","index":0,"rootRunId":"01M52Z4MT6WH3E5FPHXAFWSWDY","before":"ABG","after":"ABGZ","resumed":true} +{"case":"G1","index":1,"rootRunId":"01M52Z4RBZRWBAG7BPZRZ57HDM","before":"ABG","after":"ABGZ","resumed":true} +{"case":"G1","index":2,"rootRunId":"01M52Z4VPQ9NHKJHHF2N2HJMB9","before":"ABG","after":"ABGZ","resumed":true} +{"case":"G1","index":3,"rootRunId":"01M52Z4Z0J85B30KAHRZYG420C","before":"ABG","after":"ABGZ","resumed":true} +{"case":"G1","index":4,"rootRunId":"01M52Z52D0ZVHTHXY0PNA8TH9G","before":"ABG","after":"ABGZ","resumed":true} +{"case":"G1","index":5,"rootRunId":"01M52Z55T3S2J6YGEMRESKF71Z","before":"ABG","after":"ABGZ","resumed":true} +{"case":"ANY","index":0,"rootRunId":"01M52Z595CWXFA4Z6Y7X0DGSDM","before":"ABG","after":"ABGZ","resumed":true} +{"case":"ANY","index":1,"rootRunId":"01M52Z5CPKCCK8K24JA0NZ8EX9","before":"ABG","after":"ABGZ","resumed":true} +{"case":"ANY","index":2,"rootRunId":"01M52Z5G30553F6KA4JWB33XG4","before":"ABG","after":"ABGZ","resumed":true} +{"case":"ANY","index":3,"rootRunId":"01M52Z5KE9ZHMJ2DGCJF1KJWAJ","before":"ABG","after":"ABGZ","resumed":true} +{"case":"ANY","index":4,"rootRunId":"01M52Z5PTZG0WJDAC2G3Z5B0B1","before":"ABG","after":"ABGZ","resumed":true} +{"case":"ANY","index":5,"rootRunId":"01M52Z5T9MT2KYZBYW4Z60DC4X","before":"ABG","after":"ABGZ","resumed":true} +{"case":"I1","index":0,"rootRunId":"01M52Z5XP46VMR070SFWZRE6D1","before":"LRxy","after":"LRZxy","resumed":true} +{"case":"I1","index":1,"rootRunId":"01M52Z618D7GKVK72YEH2XQ8ED","before":"LRxy","after":"LRZxy","resumed":true} +{"case":"I1","index":2,"rootRunId":"01M52Z64SEKY66ETXZ4PEJA2EQ","before":"LRxy","after":"LRZxy","resumed":true} +{"case":"I1","index":3,"rootRunId":"01M52Z6877CC252SRTQX16JYFD","before":"LRxy","after":"LRZxy","resumed":true} +{"case":"I1","index":4,"rootRunId":"01M52Z6BT84DNG6MB4X9H2H722","before":"LRxy","after":"LRZxy","resumed":true} +{"case":"I1","index":5,"rootRunId":"01M52Z6F6RER3S149QYWK2E9K5","before":"LRxy","after":"LRZxy","resumed":true} +{"case":"H1","index":0,"rootRunId":"01M52Z6JHXPZGWR44PKXJDR6YV","before":"LR","after":"LRZ","resumed":true} +{"case":"H1","index":1,"rootRunId":"01M52Z6Q6XW0C9NXXZZYX55PQ0","before":"LR","after":"LRZ","resumed":true} +{"case":"H1","index":2,"rootRunId":"01M52Z6VMKH6VXKF8605SP7A9B","before":"LR","after":"LRZ","resumed":true} +{"case":"H1","index":3,"rootRunId":"01M52Z7073M1HHHNBMTDBH22H2","before":"LR","after":"LRZ","resumed":true} +{"case":"H1","index":4,"rootRunId":"01M52Z74ME3ZQCVE0DS3PQE1AX","before":"LR","after":"LRZ","resumed":true} +{"case":"H1","index":5,"rootRunId":"01M52Z794GBJ38T9GFY6EP3GN6","before":"LR","after":"LRZ","resumed":true} +{"case":"K4","index":0,"rootRunId":"01M52Z7DMZDHYJ469KD4EABFNS","before":"LR","after":"LRZ","resumed":true} +{"case":"K4","index":1,"rootRunId":"01M52Z7J6DSYR0393Z5X4EDYHP","before":"LR","after":"LRZ","resumed":true} +{"case":"K4","index":2,"rootRunId":"01M52Z7PS6CC2NHZZ8QB6B1XDA","before":"LR","after":"LRZ","resumed":true} +{"case":"K4","index":3,"rootRunId":"01M52Z7VF519075R0A72KQK558","before":"LR","after":"LRZ","resumed":true} +{"case":"K4","index":4,"rootRunId":"01M52Z805KZAEZ6BHW3XCY3AV9","before":"LR","after":"LRZ","resumed":true} +{"case":"K4","index":5,"rootRunId":"01M52Z84PK0GRSRW6JRGSJ7EE9","before":"LR","after":"LRZ","resumed":true} +{"case":"H2","index":0,"rootRunId":"01M52Z89B48FYSMXG0PMRKNAQE","before":"LR","after":"LRZ","resumed":true} +{"case":"H2","index":1,"rootRunId":"01M52Z8DP1R7HGG5MFVVJW4DJ9","before":"LR","after":"LRZ","resumed":true} +{"case":"H2","index":2,"rootRunId":"01M52Z8J4RSW82WT7HFMVGK0YM","before":"LR","after":"LRZ","resumed":true} +{"case":"H2","index":3,"rootRunId":"01M52Z8PJAHYT1ZR9S0HH2KAW3","before":"LR","after":"LRZ","resumed":true} +{"case":"H2","index":4,"rootRunId":"01M52Z8TYKFW3T401A5JKQRZBZ","before":"LR","after":"LRZ","resumed":true} +{"case":"H2","index":5,"rootRunId":"01M52Z8Z6669FGMS9EMXMKWNNQ","before":"LR","after":"LRZ","resumed":true} +{"done":true,"cases":10,"repetitions":6} diff --git a/evidence/native-parallel-review5/linux-upgrade.log b/evidence/native-parallel-review5/linux-upgrade.log new file mode 100644 index 000000000..7e663ef4f --- /dev/null +++ b/evidence/native-parallel-review5/linux-upgrade.log @@ -0,0 +1,19 @@ +{"case":"A1","index":0,"rootRunId":"01M52Z994B7Q02KTZ88MKF4H4M","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":1,"rootRunId":"01M52Z9CDX02GYWDFD94BEWCED","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":2,"rootRunId":"01M52Z9FQQ6SP192FSP8M69TNZ","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":3,"rootRunId":"01M52Z9K112J5M1KKNB6MPBCTN","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":4,"rootRunId":"01M52Z9PA5GK2BYXEB91C1E9R5","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":5,"rootRunId":"01M52Z9SNJMCGTJ9CYB82DJGBX","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":0,"rootRunId":"01M52Z9WY3TT83QFTAWXVC6114","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":1,"rootRunId":"01M52Z9ZGZWVJZT06QS70S8KPS","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":2,"rootRunId":"01M52ZA250X66HQM4CJ9MZCDG5","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":3,"rootRunId":"01M52ZA4T6FCSJG5X2XHQ92M1D","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":4,"rootRunId":"01M52ZA7EG0SBM90W3XA7WAG9C","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":5,"rootRunId":"01M52ZAA35R4MDFFYZG3TBRN4G","before":"LR","after":"LRZ","resumed":true} +{"case":"N2","index":0,"rootRunId":"01M52ZACR9EAWN597XZA94VPSP","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":1,"rootRunId":"01M52ZAGCG5EVZTZY848BMSN87","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":2,"rootRunId":"01M52ZAM18HCFFGQMEJB06GVAV","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":3,"rootRunId":"01M52ZAQSFXK4G2VWT5SYJGY2E","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":4,"rootRunId":"01M52ZAVESXFHV8W82ZZAK4N19","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":5,"rootRunId":"01M52ZAZ3DPV83PEM13MA6AW1M","before":"abc","after":"Zabc","resumed":true} +{"done":true,"cases":3,"repetitions":6} diff --git a/evidence/native-parallel-review5/mac-2051-compat.log b/evidence/native-parallel-review5/mac-2051-compat.log new file mode 100644 index 000000000..48a8c26b6 --- /dev/null +++ b/evidence/native-parallel-review5/mac-2051-compat.log @@ -0,0 +1,17 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-parallel-run-live.test.ts (37 tests | 30 skipped) 10330ms + ✓ parallel authored deterministic steps > resumes a sequential 2.0.50 run without replaying completed effects 1595ms + ✓ parallel authored deterministic steps > refuses a parallel v2 root under 2.0.50 and lets the new CLI resume it 1353ms + ✓ parallel authored deterministic steps > resumes 2.0.50 consecutive Promise.all groups after run-4 without replay 1249ms + ✓ parallel authored deterministic steps > resumes 2.0.50 consecutive Promise.all groups after run-5 without replay 1324ms + ✓ parallel authored deterministic steps > resumes 2.0.50 A1 nested joins without replay 2047ms + ✓ parallel authored deterministic steps > resumes 2.0.50 B1 chain beside join without replay 1371ms + ✓ parallel authored deterministic steps > resumes 2.0.50 N2 independent dependents without replay 1392ms + + Test Files 1 passed (1) + Tests 7 passed | 30 skipped (37) + Start at 20:19:00 + Duration 11.43s (transform 419ms, setup 8ms, collect 891ms, tests 10.33s, environment 0ms, prepare 49ms) + diff --git a/evidence/native-parallel-review5/mac-focused.log b/evidence/native-parallel-review5/mac-focused.log new file mode 100644 index 000000000..d0a3c0f3c --- /dev/null +++ b/evidence/native-parallel-review5/mac-focused.log @@ -0,0 +1,59 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-parallel-eligibility.test.ts (7 tests) 19ms + ✓ tests/journal-client-step-env.test.ts (8 tests) 10ms + ✓ tests/authored-flow-lifecycle-executor.test.ts (34 tests) 540ms + ✓ tests/authored-step-secrets-live.test.ts (2 tests) 1547ms + ✓ an authored shell child sees a delivered token only when its own f.run grants it 871ms + ✓ parallel authored shell children keep their own secret grants 675ms +stdout | tests/authored-parallel-run-live.test.ts > parallel authored deterministic steps > overlaps two sleep 2 commands started in Promise.all +parallel sleep 2 elapsed: 2002 ms + +stdout | tests/authored-parallel-run-live.test.ts > parallel authored deterministic steps > starts a fast branch dependent before a slow sibling completes +fast dependent started after: 1064 ms + + ✓ tests/authored-parallel-run-live.test.ts (37 tests) 186214ms + ✓ parallel authored deterministic steps > overlaps two sleep 2 commands started in Promise.all 2915ms + ✓ parallel authored deterministic steps > starts a fast branch dependent before a slow sibling completes 3661ms + ✓ parallel authored deterministic steps > keeps declaration order when the later child finishes first 2661ms + ✓ parallel authored deterministic steps > admits at most eight deterministic children at once 2066ms + ✓ parallel authored deterministic steps > does not admit a queued child after a sibling fails 2293ms + ✓ parallel authored deterministic steps > replays a completed peer and resumes an unfinished peer after a crash 2435ms + ✓ parallel authored deterministic steps > replays follow-up steps in parallel branches after a crash 3431ms + ✓ parallel authored deterministic steps > does not replay a completed effect after a crash: 'two branches that each join two runs' 2386ms + ✓ parallel authored deterministic steps > does not replay a completed effect after a crash: 'a chain beside a branch with a join' 2444ms + ✓ parallel authored deterministic steps > resumes a sequential 2.0.50 run without replaying completed effects 1661ms + ✓ parallel authored deterministic steps > refuses a parallel v2 root under 2.0.50 and lets the new CLI resume it 1467ms + ✓ parallel authored deterministic steps > keeps a 'race' flow running on serial fallback without replay 2296ms + ✓ parallel authored deterministic steps > keeps a 'any' flow running on serial fallback without replay 2293ms + ✓ parallel authored deterministic steps > keeps a 'eager' flow running on serial fallback without replay 2068ms + ✓ parallel authored deterministic steps > resumes 'llm' branches without replaying completed effects 2246ms + ✓ parallel authored deterministic steps > resumes 'agent' branches without replaying completed effects 2083ms + ✓ parallel authored deterministic steps > resumes 'dispatch' branches without replaying completed effects 1901ms + ✓ parallel authored deterministic steps > resumes 2.0.50 consecutive Promise.all groups after run-4 without replay 1241ms + ✓ parallel authored deterministic steps > resumes 2.0.50 consecutive Promise.all groups after run-5 without replay 1339ms + ✓ parallel authored deterministic steps > keeps 'closure-shared readiness' serial and replays no completed effect 7972ms + ✓ parallel authored deterministic steps > keeps 'shared completion-order array' serial and replays no completed effect 7749ms + ✓ parallel authored deterministic steps > keeps 'deep non-step joins with a swallowed …' serial and replays no completed effect 8198ms + ✓ parallel authored deterministic steps > keeps done inside a branch on the established serial scheduler 8470ms + ✓ parallel authored deterministic steps > retains the base failure when a branch completes before its sibling continues 6649ms + ✓ parallel authored deterministic steps > keeps an arguments-alias LLM body serial across six resumes 12255ms + ✓ parallel authored deterministic steps > keeps 'bound module Promise' serial without replay across six resumes 10485ms + ✓ parallel authored deterministic steps > keeps 'hand-written module Promise' serial without replay across six resumes 9280ms + ✓ parallel authored deterministic steps > keeps 'module Promise class' serial without replay across six resumes 8950ms + ✓ parallel authored deterministic steps > keeps 'module Promise Native branches' serial without replay across six resumes 9834ms + ✓ parallel authored deterministic steps > keeps 'imported Bluebird Promise Native bran…' serial without replay across six resumes 9759ms + ✓ parallel authored deterministic steps > keeps 'empty async branches' serial without replay across six resumes 7014ms + ✓ parallel authored deterministic steps > keeps a Bluebird group of direct f.run calls serial across six resumes 7724ms + ✓ parallel authored deterministic steps > does not replay a completed effect after 'imported timer helper' reorder 12408ms + ✓ parallel authored deterministic steps > does not replay a completed effect after 'for-await timer' reorder 11365ms + ✓ parallel authored deterministic steps > resumes 2.0.50 A1 nested joins without replay 2517ms + ✓ parallel authored deterministic steps > resumes 2.0.50 B1 chain beside join without replay 1350ms + ✓ parallel authored deterministic steps > resumes 2.0.50 N2 independent dependents without replay 1349ms + + Test Files 5 passed (5) + Tests 88 passed (88) + Start at 20:15:47 + Duration 187.19s (transform 559ms, setup 64ms, collect 2.75s, tests 188.33s, environment 0ms, prepare 197ms) + diff --git a/evidence/native-parallel-review5/mutation-backstop-fail.log b/evidence/native-parallel-review5/mutation-backstop-fail.log new file mode 100644 index 000000000..0b7b57f67 --- /dev/null +++ b/evidence/native-parallel-review5/mutation-backstop-fail.log @@ -0,0 +1,33 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/authored-flow-lifecycle-executor.test.ts (34 tests | 1 failed | 33 skipped) 16ms + × authored flow lifecycle through the journal executor > refuses a parallel follow-up through an unobserved Promise.all 14ms + → expected [Function] to throw error matching /unregistered aggregate/u but got 'unawaited_step: flow "parallel-unobse…' + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-flow-lifecycle-executor.test.ts > authored flow lifecycle through the journal executor > refuses a parallel follow-up through an unobserved Promise.all +AssertionError: expected [Function] to throw error matching /unregistered aggregate/u but got 'unawaited_step: flow "parallel-unobse…' + +- Expected: +/unregistered aggregate/u + ++ Received: +"unawaited_step: flow \"parallel-unobserved-aggregate\" returned with unawaited steps: run-1 (f.run)" + + ❯ tests/authored-flow-lifecycle-executor.test.ts:108:5 + 106| it('refuses a parallel follow-up through an unobserved Promise.all',… + 107| const startedBefore = startedSpecs.length; + 108| await expect(execute(flow('parallel-unobserved-aggregate', async f… + | ^ + 109| await unobservedAll([f.run('printf A'), f.run('printf B')]); + 110| await f.run('printf X'); + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed (1) + Tests 1 failed | 33 skipped (34) + Start at 20:15:25 + Duration 986ms (transform 323ms, setup 9ms, collect 788ms, tests 16ms, environment 0ms, prepare 32ms) + diff --git a/evidence/native-parallel-review5/mutation-backstop-pass.log b/evidence/native-parallel-review5/mutation-backstop-pass.log new file mode 100644 index 000000000..4fb21ac59 --- /dev/null +++ b/evidence/native-parallel-review5/mutation-backstop-pass.log @@ -0,0 +1,10 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-flow-lifecycle-executor.test.ts (34 tests | 33 skipped) 11ms + + Test Files 1 passed (1) + Tests 1 passed | 33 skipped (34) + Start at 20:15:32 + Duration 1.30s (transform 326ms, setup 10ms, collect 1.07s, tests 11ms, environment 0ms, prepare 66ms) + diff --git a/evidence/native-parallel-review5/mutation-f1-fail.log b/evidence/native-parallel-review5/mutation-f1-fail.log new file mode 100644 index 000000000..8ca711f83 --- /dev/null +++ b/evidence/native-parallel-review5/mutation-f1-fail.log @@ -0,0 +1,33 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/authored-parallel-eligibility.test.ts (7 tests | 1 failed | 6 skipped) 7ms + × parallel run admission > requires the module Promise binding to be the intrinsic 6ms + → const Promise = { all: globalThis.Promise.all.bind(globalThis.Promise) };: expected true to be false // Object.is equality + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-parallel-eligibility.test.ts > parallel run admission > requires the module Promise binding to be the intrinsic +AssertionError: const Promise = { all: globalThis.Promise.all.bind(globalThis.Promise) };: expected true to be false // Object.is equality + +- Expected ++ Received + +- false ++ true + + ❯ tests/authored-parallel-eligibility.test.ts:125:72 + 123| `const intrinsic = globalThis; intrinsic.Promise = replacement;`, + 124| `global.Promise = replacement;`, + 125| ]) expect(eligible(candidate, `${prefix}\n${definition}`), prefix)… + | ^ + 126| expect(eligible(candidate, + 127| `export default (Promise.all = replacement, flow('probe', ${Func… + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed (1) + Tests 1 failed | 6 skipped (7) + Start at 20:14:48 + Duration 560ms (transform 29ms, setup 27ms, collect 193ms, tests 7ms, environment 0ms, prepare 114ms) + diff --git a/evidence/native-parallel-review5/mutation-f1-pass.log b/evidence/native-parallel-review5/mutation-f1-pass.log new file mode 100644 index 000000000..c8e658f78 --- /dev/null +++ b/evidence/native-parallel-review5/mutation-f1-pass.log @@ -0,0 +1,10 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-parallel-eligibility.test.ts (7 tests | 6 skipped) 8ms + + Test Files 1 passed (1) + Tests 1 passed | 6 skipped (7) + Start at 20:14:55 + Duration 428ms (transform 31ms, setup 11ms, collect 206ms, tests 8ms, environment 0ms, prepare 38ms) + diff --git a/evidence/native-parallel-review5/mutation-f2-fail.log b/evidence/native-parallel-review5/mutation-f2-fail.log new file mode 100644 index 000000000..0c1f053a7 --- /dev/null +++ b/evidence/native-parallel-review5/mutation-f2-fail.log @@ -0,0 +1,33 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/authored-parallel-eligibility.test.ts (7 tests | 1 failed | 6 skipped) 8ms + × parallel run admission > keeps groups with empty async branches serial 7ms + → expected true to be false // Object.is equality + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-parallel-eligibility.test.ts > parallel run admission > keeps groups with empty async branches serial +AssertionError: expected true to be false // Object.is equality + +- Expected ++ Received + +- false ++ true + + ❯ tests/authored-parallel-eligibility.test.ts:137:11 + 135| await f.run('X'); + 136| f.done('success'); + 137| }`))).toBe(false); + | ^ + 138| expect(eligible(body(`async f => { + 139| const work = async () => { await f.run('A'); }; + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed (1) + Tests 1 failed | 6 skipped (7) + Start at 20:15:00 + Duration 435ms (transform 20ms, setup 21ms, collect 196ms, tests 8ms, environment 0ms, prepare 46ms) + diff --git a/evidence/native-parallel-review5/mutation-f2-pass.log b/evidence/native-parallel-review5/mutation-f2-pass.log new file mode 100644 index 000000000..ebb84e744 --- /dev/null +++ b/evidence/native-parallel-review5/mutation-f2-pass.log @@ -0,0 +1,10 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-parallel-eligibility.test.ts (7 tests | 6 skipped) 7ms + + Test Files 1 passed (1) + Tests 1 passed | 6 skipped (7) + Start at 20:15:03 + Duration 435ms (transform 23ms, setup 8ms, collect 188ms, tests 7ms, environment 0ms, prepare 63ms) + diff --git a/evidence/native-parallel-review5/mutation-f4-fail.log b/evidence/native-parallel-review5/mutation-f4-fail.log new file mode 100644 index 000000000..563a58ab3 --- /dev/null +++ b/evidence/native-parallel-review5/mutation-f4-fail.log @@ -0,0 +1,33 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/authored-flow-lifecycle-executor.test.ts (34 tests | 1 failed | 33 skipped) 15ms + × authored flow lifecycle through the journal executor > refuses later admissions after a caught parallel violation 13ms + → expected [ { version: '0.1.0', …(2) } ] to have a length of +0 but got 1 + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-flow-lifecycle-executor.test.ts > authored flow lifecycle through the journal executor > refuses later admissions after a caught parallel violation +AssertionError: expected [ { version: '0.1.0', …(2) } ] to have a length of +0 but got 1 + +- Expected ++ Received + +- 0 ++ 1 + + ❯ tests/authored-flow-lifecycle-executor.test.ts:103:26 + 101| f.done('success'); + 102| }), { executionMode: 'parallel' })).rejects.toMatchObject({ code: … + 103| expect(startedSpecs).toHaveLength(startedBefore); + | ^ + 104| }); + 105| + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed (1) + Tests 1 failed | 33 skipped (34) + Start at 20:15:12 + Duration 1.46s (transform 426ms, setup 9ms, collect 1.26s, tests 15ms, environment 0ms, prepare 29ms) + diff --git a/evidence/native-parallel-review5/mutation-f4-pass.log b/evidence/native-parallel-review5/mutation-f4-pass.log new file mode 100644 index 000000000..f9fc28bb9 --- /dev/null +++ b/evidence/native-parallel-review5/mutation-f4-pass.log @@ -0,0 +1,10 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-flow-lifecycle-executor.test.ts (34 tests | 33 skipped) 11ms + + Test Files 1 passed (1) + Tests 1 passed | 33 skipped (34) + Start at 20:15:19 + Duration 1.29s (transform 405ms, setup 9ms, collect 1.08s, tests 11ms, environment 0ms, prepare 33ms) + diff --git a/evidence/native-parallel-review5/replay.mjs b/evidence/native-parallel-review5/replay.mjs new file mode 100644 index 000000000..6a029bc4b --- /dev/null +++ b/evidence/native-parallel-review5/replay.mjs @@ -0,0 +1,159 @@ +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import { spawn } from 'node:child_process'; + +const bin = '/bench/node_modules/.bin/flows'; +const daemonBin = '/bench/node_modules/@relayflows/runtime-linux-x64/bin/relayflowd'; +const cases = [ + { name: 'A1', expected: 'LR', body: ` + const left = async () => { + await Promise.all([f.run('sleep 0.3; printf A'), f.run('printf B')]); + await f.run('printf L >> effects'); + }; + const right = async () => { + await Promise.all([f.run('printf C'), f.run('sleep 0.3; printf D')]); + await f.run('printf R >> effects'); + }; + await Promise.all([left(), right()]);` }, + { name: 'B1', expected: 'LR', body: ` + const left = async () => { + await f.run('printf A'); + await f.run('printf B'); + await f.run('printf L >> effects'); + }; + const right = async () => { + await Promise.all([f.run('printf C'), f.run('printf D')]); + await f.run('printf R >> effects'); + }; + await Promise.all([left(), right()]);` }, + { name: 'N2', expected: 'abc', body: ` + const a = async () => { await f.run('sleep 0.3; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.3; printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.3; printf C'); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]);` }, + { name: 'C1e', expected: 'XY', body: ` + const background = (async () => { await f.run('printf X >> effects'); })(); + await new Promise(resolve => setTimeout(resolve, 300)); + await f.run('printf Y >> effects'); + await background;` }, + { name: 'G1', expected: 'ABG', body: ` + await Promise.race([f.run('printf A >> effects'), f.run('sleep 0.3; printf B >> effects')]); + await f.run('printf G >> effects');` }, + { name: 'ANY', expected: 'ABG', body: ` + await Promise.any([f.run('printf A >> effects'), f.run('sleep 0.3; printf B >> effects')]); + await f.run('printf G >> effects');` }, + { name: 'I1', expected: 'LRxy', header: `, { use: ['./child.flow.ts'] }`, + childSource: `import { flow } from '@relayflows/surface'; +export default flow('child', async (f, input) => { + await Promise.all([f.run('printf first'), f.run('printf second')]); + await f.run('printf ' + input.token + ' >> effects'); + f.done('success'); +});\n`, body: ` + const left = async () => { await f.dispatch('child', { token: 'x' }); await f.run('printf L >> effects'); }; + const right = async () => { await f.dispatch('child', { token: 'y' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);` }, + { name: 'H1', expected: 'LR', wrapperCalls: 2, body: ` + const output = { type: 'object', properties: { message: { type: 'string' } }, required: ['message'] }; + const left = async () => { await f.llm('left', { output, model: 'test-model' }); await f.run('printf L >> effects'); }; + const right = async () => { await f.llm('right', { output, model: 'test-model' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);` }, + { name: 'K4', expected: 'LR', wrapperCalls: 2, functionExpression: true, body: ` + const g = arguments[0]; + const output = { type: 'object', properties: { message: { type: 'string' } }, required: ['message'] }; + const left = async () => { await g.llm('left', { output, model: 'test-model' }); await f.run('printf L >> effects'); }; + const right = async () => { await g.llm('right', { output, model: 'test-model' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);` }, + { name: 'H2', expected: 'LR', wrapperCalls: 2, body: ` + const left = async () => { await f.agent('left', { task: 'left', model: 'test-model' }); await f.run('printf L >> effects'); }; + const right = async () => { await f.agent('right', { task: 'right', model: 'test-model' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);` }, +]; +const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); +function start(args, root, env) { + const child = spawn(bin, args, { cwd: root, env, stdio: ['ignore', 'pipe', 'pipe'] }); + let output = ''; + child.stdout.on('data', chunk => { output += chunk; }); + child.stderr.on('data', chunk => { output += chunk; }); + const closed = new Promise(resolve => child.once('close', (code, signal) => resolve({ code, signal, output }))); + return { child, closed, get output() { return output; } }; +} +function stopDaemon(data) { + const connection = path.join(data, 'connection.json'); + if (!fs.existsSync(connection)) return; + const pid = JSON.parse(fs.readFileSync(connection, 'utf8')).pid; + try { process.kill(pid, 'SIGKILL'); } catch (error) { + if (error.code !== 'ESRCH') throw error; + } +} +async function one(test, index) { + const root = fs.mkdtempSync('/bench/replay-verify-'); + const data = path.join(root, 'data'); + const flow = path.join(root, 'test.flow.ts'); + if (test.childSource) fs.writeFileSync(path.join(root, 'child.flow.ts'), test.childSource); + if (test.wrapperCalls) { + fs.writeFileSync(path.join(root, 'adapter.mjs'), `#!/usr/bin/env node +import fs from 'node:fs'; +if (process.argv[2] === 'auth') process.exit(0); +if (process.argv[2] === '--relayflows-adapter-v1') { + process.stdout.write('relayflows-agent-cli-v1\\n'); + let input = ''; + for await (const chunk of process.stdin) input += chunk; + if (input.trim() === '') process.exit(0); + const request = JSON.parse(input); + if (request.protocol !== 'relayflows-agent-cli-v1') process.exit(2); + process.stdout.write('relayflows-agent-cli-v1-execute\\n'); + fs.appendFileSync('calls', 'x'); + process.stdout.write('{"message":"ok"}'); +}\n`, { mode: 0o755 }); + fs.writeFileSync(path.join(root, 'flows.json'), JSON.stringify({ cli: path.join(root, 'adapter.mjs'), models: ['test-model'] })); + } + fs.writeFileSync(flow, `import { flow } from '@relayflows/surface'; +export default flow('replay-${test.name}'${test.header ?? ''}, ${test.functionExpression ? 'async function(f)' : 'async f =>'} {${test.body} + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +});\n`); + const env = { ...process.env, PATH: `/bench/node_modules/.bin:/usr/local/bin:/usr/bin:/bin`, + HOME: root, TMPDIR: '/tmp', XDG_RUNTIME_DIR: '/tmp', RELAYFLOWD_BIN: daemonBin }; + let original; + try { + original = start(['run', '--json', '--no-observer-link', ...(test.wrapperCalls ? ['--local-agent'] : []), + '--data-dir', data, flow, '--input', '{}'], root, env); + const deadline = Date.now() + 60_000; + while (!fs.existsSync(path.join(root, 'stalled'))) { + if (original.child.exitCode !== null) throw new Error(`${test.name} run exited early: ${original.output}`); + if (Date.now() > deadline) throw new Error(`${test.name} never reached stall: ${original.output}`); + await sleep(25); + } + const before = fs.readFileSync(path.join(root, 'effects'), 'utf8').split('').sort().join(''); + if (before !== test.expected) throw new Error(`${test.name} before=${before} expected=${test.expected}`); + if (test.wrapperCalls && fs.readFileSync(path.join(root, 'calls'), 'utf8').length !== test.wrapperCalls) + throw new Error(`${test.name} wrapper call count before resume was not ${test.wrapperCalls}`); + const rootRunId = fs.readdirSync(path.join(data, 'runs')).filter(name => name.endsWith('.sqlite3')).sort()[0].slice(0, -8); + original.child.kill('SIGKILL'); + await original.closed; + stopDaemon(data); + fs.writeFileSync(path.join(root, 'release'), ''); + const resumed = start(['resume', '--json', '--no-observer-link', ...(test.wrapperCalls ? ['--local-agent'] : []), + '--data-dir', data, rootRunId], root, env); + const timeout = setTimeout(() => resumed.child.kill('SIGKILL'), 120_000); + timeout.unref(); + const result = await resumed.closed; + clearTimeout(timeout); + if (result.code !== 0) throw new Error(`${test.name} resume failed: ${result.output}`); + const after = fs.readFileSync(path.join(root, 'effects'), 'utf8').split('').sort().join(''); + if (after !== [...test.expected, 'Z'].sort().join('')) throw new Error(`${test.name} replay: before=${before} after=${after}`); + if (test.wrapperCalls && fs.readFileSync(path.join(root, 'calls'), 'utf8').length !== test.wrapperCalls) + throw new Error(`${test.name} replayed an LLM or agent call`); + console.log(JSON.stringify({ case: test.name, index, rootRunId, before, after, resumed: true })); + } finally { + if (original?.child.exitCode === null && original.child.signalCode === null) original.child.kill('SIGKILL'); + stopDaemon(data); + fs.rmSync(root, { recursive: true, force: true }); + } +} +const repetitions = Number(process.env.REPETITIONS ?? '6'); +const selection = process.env.CASE?.split(','); +const selected = cases.filter(test => selection === undefined || selection.includes(test.name)); +for (const test of selected) for (let index = 0; index < repetitions; index++) await one(test, index); +console.log(JSON.stringify({ done: true, cases: selected.length, repetitions })); diff --git a/evidence/native-parallel-review5/upgrade.mjs b/evidence/native-parallel-review5/upgrade.mjs new file mode 100644 index 000000000..b8622be42 --- /dev/null +++ b/evidence/native-parallel-review5/upgrade.mjs @@ -0,0 +1,99 @@ +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import { spawn } from 'node:child_process'; + +const oldBin = '/bench/node_modules/@relayflows/sdk/dist/cli.js'; +const headBin = '/bench/sdk-head/dist/cli.js'; +const daemonBin = '/bench/node_modules/@relayflows/runtime-linux-x64/bin/relayflowd'; +const cases = [ + { name: 'A1', expected: 'LR', body: ` + const left = async () => { + await Promise.all([f.run('sleep 0.3; printf A'), f.run('printf B')]); + await f.run('printf L >> effects'); + }; + const right = async () => { + await Promise.all([f.run('printf C'), f.run('sleep 0.3; printf D')]); + await f.run('printf R >> effects'); + }; + await Promise.all([left(), right()]);` }, + { name: 'B1', expected: 'LR', body: ` + const left = async () => { + await f.run('printf A'); + await f.run('printf B'); + await f.run('printf L >> effects'); + }; + const right = async () => { + await Promise.all([f.run('printf C'), f.run('printf D')]); + await f.run('printf R >> effects'); + }; + await Promise.all([left(), right()]);` }, + { name: 'N2', expected: 'abc', body: ` + const a = async () => { await f.run('sleep 0.3; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.3; printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.3; printf C'); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]);` }, +]; +const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); +function start(bin, args, root, env) { + const child = spawn(process.execPath, [bin, ...args], { cwd: root, env, stdio: ['ignore', 'pipe', 'pipe'] }); + let output = ''; + child.stdout.on('data', chunk => { output += chunk; }); + child.stderr.on('data', chunk => { output += chunk; }); + const closed = new Promise(resolve => child.once('close', (code, signal) => resolve({ code, signal, output }))); + return { child, closed, get output() { return output; } }; +} +function stopDaemon(data) { + const connection = path.join(data, 'connection.json'); + if (!fs.existsSync(connection)) return; + const pid = JSON.parse(fs.readFileSync(connection, 'utf8')).pid; + try { process.kill(pid, 'SIGKILL'); } catch (error) { + if (error.code !== 'ESRCH') throw error; + } +} +async function one(test, index) { + const root = fs.mkdtempSync('/bench/replay-verify-'); + const data = path.join(root, 'data'); + const flow = path.join(root, 'test.flow.ts'); + fs.writeFileSync(flow, `import { flow } from '@relayflows/surface'; +export default flow('replay-${test.name}', async f => {${test.body} + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +});\n`); + const env = { ...process.env, PATH: `/bench/node_modules/.bin:/usr/local/bin:/usr/bin:/bin`, + HOME: root, TMPDIR: '/tmp', XDG_RUNTIME_DIR: '/tmp', RELAYFLOWD_BIN: daemonBin }; + let original; + try { + original = start(oldBin, ['run', '--json', '--no-observer-link', '--data-dir', data, flow, '--input', '{}'], root, env); + const deadline = Date.now() + 60_000; + while (!fs.existsSync(path.join(root, 'stalled'))) { + if (original.child.exitCode !== null) throw new Error(`${test.name} run exited early: ${original.output}`); + if (Date.now() > deadline) throw new Error(`${test.name} never reached stall: ${original.output}`); + await sleep(25); + } + const before = fs.readFileSync(path.join(root, 'effects'), 'utf8').split('').sort().join(''); + if (before !== test.expected) throw new Error(`${test.name} before=${before} expected=${test.expected}`); + const rootRunId = fs.readdirSync(path.join(data, 'runs')).filter(name => name.endsWith('.sqlite3')).sort()[0].slice(0, -8); + original.child.kill('SIGKILL'); + await original.closed; + stopDaemon(data); + fs.writeFileSync(path.join(root, 'release'), ''); + const resumed = start(headBin, ['resume', '--json', '--no-observer-link', '--data-dir', data, rootRunId], root, env); + const timeout = setTimeout(() => resumed.child.kill('SIGKILL'), 120_000); + timeout.unref(); + const result = await resumed.closed; + clearTimeout(timeout); + if (result.code !== 0) throw new Error(`${test.name} resume failed: ${result.output}`); + const after = fs.readFileSync(path.join(root, 'effects'), 'utf8').split('').sort().join(''); + if (after !== [...test.expected, 'Z'].sort().join('')) throw new Error(`${test.name} replay: before=${before} after=${after}`); + console.log(JSON.stringify({ case: test.name, index, rootRunId, before, after, resumed: true })); + } finally { + if (original?.child.exitCode === null && original.child.signalCode === null) original.child.kill('SIGKILL'); + stopDaemon(data); + fs.rmSync(root, { recursive: true, force: true }); + } +} +const repetitions = Number(process.env.REPETITIONS ?? '6'); +const selected = cases.filter(test => process.env.CASE === undefined || test.name === process.env.CASE); +for (const test of selected) for (let index = 0; index < repetitions; index++) await one(test, index); +console.log(JSON.stringify({ done: true, cases: selected.length, repetitions })); diff --git a/evidence/native-parallel-review5/verification.md b/evidence/native-parallel-review5/verification.md new file mode 100644 index 000000000..77a68ee7a --- /dev/null +++ b/evidence/native-parallel-review5/verification.md @@ -0,0 +1,77 @@ +# Parallel `f.run` review #5 verification + +Base: `origin/main` at `5de41849` (Flows 2.0.51). The branch remained draft while these checks ran. All commands below used the rebased branch source; the Linux images copied the built `packages/sdk/dist` with a matching SHA-256 for `authored-parallel-eligibility.js` (`682ca6b984deaaaa23e916655688566d841821bc0622b676092abfe92f545634`). + +## Build and focused Mac run + +From `packages/sdk`: + +```sh +npm run build +npm run typecheck +npm run typecheck:tests +RELAYFLOWD_BIN=/Users/khaliqgant/.relayflows-toolchain/target/ms-step-secrets/debug/relayflowd \ +RELAYFLOWS_PREVIOUS_CLI='/Volumes/Paris Drive/AgentWorkforce/ms-sandboxes/native-selfhosted-measure-2026-10-16/node_modules/@relayflows/sdk/dist/cli.js' \ +npx vitest run tests/authored-parallel-run-live.test.ts tests/authored-step-secrets-live.test.ts tests/authored-parallel-eligibility.test.ts tests/authored-flow-lifecycle-executor.test.ts tests/journal-client-step-env.test.ts +``` + +Captured output: [build-typecheck.log](build-typecheck.log), [mac-focused.log](mac-focused.log). The final lines were: + +```text +Test Files 5 passed (5) + Tests 88 passed (88) +``` + +The live suite includes six crash/resume repetitions each for P1, P1h, P1c, P1n, P1bn, P1b, and P2. It asserts serial mode and one copy of every completed effect. The secret test asserts parallel mode, a granted child receives the delivered token, and its ungranted sibling does not. The loopback test asserts an isolated peer refuses a withheld grant before `run.start`. + +## Published 2.0.51 compatibility + +The test names still say “2.0.50”, but this command supplied the published 2.0.51 CLI as the previous version: + +```sh +RELAYFLOWD_BIN=/Users/khaliqgant/.relayflows-toolchain/target/ms-step-secrets/debug/relayflowd \ +RELAYFLOWS_PREVIOUS_CLI='/Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/prior-2051/node_modules/@relayflows/sdk/dist/cli.js' \ +npx vitest run tests/authored-parallel-run-live.test.ts -t '2.0.50' +``` + +Captured output: [mac-2051-compat.log](mac-2051-compat.log). + +```text +Test Files 1 passed (1) + Tests 7 passed | 30 skipped (37) +``` + +The selected cases cover previous-version resume after `run-4` and `run-5`, A1/B1/N2 legacy roots, and rollback refusal for a new parallel root followed by successful head resume. + +## Linux x64 crash and upgrade runs + +The image installed published `@relayflows/sdk`, `@relayflows/surface`, and `@relayflows/runtime-linux-x64` at 2.0.51, then copied the branch's built SDK `dist`. Commands from the worker workspace: + +```sh +docker build --platform linux/amd64 -t ms-flows-parallel:review5 -f Dockerfile . +docker run --rm --platform linux/amd64 --init -e REPETITIONS=6 ms-flows-parallel:review5 node /bench/replay.mjs +docker build --platform linux/amd64 -t ms-flows-parallel:review5-upgrade -f Dockerfile.upgrade . +docker run --rm --platform linux/amd64 --init -e REPETITIONS=6 ms-flows-parallel:review5-upgrade node /bench/upgrade.mjs +``` + +The build context was `swarm/ms-flows-parallel/docker-review5`, with the branch's `packages/sdk/dist` and `package.json` copied in. The exact [Dockerfile](Dockerfile), [upgrade Dockerfile](Dockerfile.upgrade), [replay harness](replay.mjs), and [upgrade harness](upgrade.mjs) are copied here. Captured output: [linux-replay.log](linux-replay.log), [linux-upgrade.log](linux-upgrade.log). Their final lines were: + +```text +{"done":true,"cases":10,"repetitions":6} +{"done":true,"cases":3,"repetitions":6} +``` + +The first matrix covers A1, B1, N2, eager work, race, any, dispatch, LLM, arguments-alias LLM, and agent branches (60/60); the second resumes 2.0.51 A1/B1/N2 roots under the branch (18/18). Each log records the effect letters before and after resume and fails the command on an extra effect or provider call. + +## Mutation checks + +Each check changed one production guard, ran its focused test, restored the source from a saved copy, verified the original SHA-256, and reran the same test. The exact test commands and captured outputs are below. `authored-parallel-eligibility.ts` restored to `94b2a8025319c42f86a6efb3436a71323e65491a3b44b415c9f15f1b16e411a1`; `authored-flow-executor.ts` restored to `c72b093a48111fea56615df35f9a695039e57ab00bc9c94d905fdcb13e6e50ce`. + +| Guard temporarily changed | Command from `packages/sdk` | Captured failure and restored pass | +|---|---|---| +| Module-source check changed to `if (false && !moduleUsesIntrinsicPromise(moduleSource))` | `npx vitest run tests/authored-parallel-eligibility.test.ts -t 'requires the module Promise binding'` | [fail](mutation-f1-fail.log): `expected true to be false`; [pass](mutation-f1-pass.log): `1 passed` | +| Branch check changed from `return valid && runs > before` to `return valid` | `npx vitest run tests/authored-parallel-eligibility.test.ts -t 'keeps groups with empty async branches serial'` | [fail](mutation-f2-fail.log): `expected true to be false`; [pass](mutation-f2-pass.log): `1 passed` | +| Removed `if (parallelViolation !== undefined) throw parallelViolation` | `npx vitest run tests/authored-flow-lifecycle-executor.test.ts -t 'refuses later admissions after a caught parallel violation'` | [fail](mutation-f4-fail.log): one child admitted after refusal; [pass](mutation-f4-pass.log): `1 passed` | +| Removed the `predecessors.unregisteredAggregate` refusal | `npx vitest run tests/authored-flow-lifecycle-executor.test.ts -t 'refuses a parallel follow-up through an unobserved Promise.all'` | [fail](mutation-backstop-fail.log): refusal changed to `unawaited_step`; [pass](mutation-backstop-pass.log): `1 passed` | + +The pre-existing serial LLM completion-order conflict, reproduced on released 2.0.50 and 2.0.51, is tracked separately in [#674](https://github.com/AgentWorkforce/flows/issues/674). diff --git a/packages/sdk/package-lock.json b/packages/sdk/package-lock.json index 68774a790..1daea3069 100644 --- a/packages/sdk/package-lock.json +++ b/packages/sdk/package-lock.json @@ -30,6 +30,7 @@ "devDependencies": { "@agent-relay/cli-surface": "^12.2.4", "@types/node": "^22.7.0", + "bluebird": "^3.7.2", "esbuild": "^0.21.5", "vitest": "^2.1.0" }, @@ -1420,6 +1421,13 @@ "node": "18 || 20 || >=22" } }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, "node_modules/body-parser": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 049a1a5fc..d0d1ec7c6 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -65,6 +65,7 @@ "devDependencies": { "@agent-relay/cli-surface": "^12.2.4", "@types/node": "^22.7.0", + "bluebird": "^3.7.2", "esbuild": "^0.21.5", "vitest": "^2.1.0" }, diff --git a/packages/sdk/src/authored-flow-executor.ts b/packages/sdk/src/authored-flow-executor.ts index 1c67ad130..1630f444b 100644 --- a/packages/sdk/src/authored-flow-executor.ts +++ b/packages/sdk/src/authored-flow-executor.ts @@ -315,10 +315,13 @@ export async function executeAuthoredFlow( if (options.executionMode === 'parallel') rejectParallel(`parallel f.run body attempted ${kind} before admission`); }; const nextId = (kind: string): string => { + if (parallelViolation !== undefined) throw parallelViolation; const sequence = nextStep++; if (options.executionMode !== 'parallel') return qualify(`${kind}-${sequence}`); if (kind !== 'run') rejectParallel(`parallel f.run body attempted ${kind} before admission`); const predecessors = lifecycle.invocationPredecessors(); + if (predecessors.unregisteredAggregate) rejectParallel( + 'cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate'); if (predecessors.truncated) rejectParallel( 'cannot assign a replay-stable f.run identity: its causal predecessor graph is truncated'); const signature = JSON.stringify([...predecessors.steps].sort()); diff --git a/packages/sdk/src/authored-flow-lifecycle.ts b/packages/sdk/src/authored-flow-lifecycle.ts index cdd9952a7..c3a683f4d 100644 --- a/packages/sdk/src/authored-flow-lifecycle.ts +++ b/packages/sdk/src/authored-flow-lifecycle.ts @@ -139,7 +139,11 @@ export class AuthoredFlowLifecycle { for (const probe of this.activeResolverProbes) probe.add(asyncId); }, ); - this.stepGraph = new AuthoredStepGraph((asyncId) => this.graph.causesOf(asyncId)); + this.stepGraph = new AuthoredStepGraph( + (asyncId) => this.graph.causesOf(asyncId), + undefined, + (asyncId) => this.graph.wasAdoptedFromResolvingContext(asyncId), + ); installPromiseAllObserver(); try { this.graph.enable(); @@ -216,7 +220,11 @@ export class AuthoredFlowLifecycle { } /** Predecessors for a new invocation, before it has an operation promise. */ - invocationPredecessors(): { readonly steps: readonly string[]; readonly truncated: boolean } { + invocationPredecessors(): { + readonly steps: readonly string[]; + readonly truncated: boolean; + readonly unregisteredAggregate: boolean; + } { return this.stepGraph.predecessorsAt(executionAsyncId()); } diff --git a/packages/sdk/src/authored-parallel-eligibility.ts b/packages/sdk/src/authored-parallel-eligibility.ts index 9a806644a..fa329748b 100644 --- a/packages/sdk/src/authored-parallel-eligibility.ts +++ b/packages/sdk/src/authored-parallel-eligibility.ts @@ -3,7 +3,11 @@ import ts from 'typescript'; const functionSource = Function.prototype.toString; /** A closed grammar for deterministic Promise.all branches. Unknown bodies stay serial. */ -export function parallelRunEligible(body: Function): boolean { +export function parallelRunEligible(body: Function, moduleSource: string): boolean { + // Promise.all is intercepted only when `Promise` resolves to the intrinsic. + // Function.toString cannot see a module-level lexical binding, so inspect + // the complete source before using the body's narrower grammar. + if (!moduleUsesIntrinsicPromise(moduleSource)) return false; const file = ts.createSourceFile('authored-body.js', `const body = ${functionSource.call(body)};`, ts.ScriptTarget.ES2022, true, ts.ScriptKind.JS); if (file.statements.length !== 1) return false; @@ -119,11 +123,78 @@ export function parallelRunEligible(body: Function): boolean { } return true; }; - const branch = (arrow: ts.ArrowFunction, depth: number): boolean => - arrow.parameters.length === 0 - && (ts.isBlock(arrow.body) ? statements(arrow.body, new Set(rootValues), depth) - : awaitStep(arrow.body, rootValues, depth)); + const branch = (arrow: ts.ArrowFunction, depth: number): boolean => { + if (arrow.parameters.length !== 0) return false; + const before = runs; + const valid = ts.isBlock(arrow.body) ? statements(arrow.body, new Set(rootValues), depth) + : awaitStep(arrow.body, rootValues, depth); + // An empty async branch creates a join with no causal step predecessor. + return valid && runs > before; + }; if (!statements(expression.body, rootValues, 0)) return false; return groups > 0 && runs > 0; } + +/** Reject any source that can change what a free `Promise` identifier means. */ +function moduleUsesIntrinsicPromise(source: string): boolean { + const file = ts.createSourceFile('authored-module.ts', source, ts.ScriptTarget.ES2022, true, ts.ScriptKind.TS); + if (((file as ts.SourceFile & { parseDiagnostics?: readonly ts.Diagnostic[] }).parseDiagnostics?.length ?? 0) > 0) { + return false; + } + // Top-level code can alter the constructor or its methods without binding + // the name. Leave these modules on the established serial scheduler too. + const touchesPromiseOutsideDefinition = (node: ts.Node): boolean => { + if (ts.isIdentifier(node) && ['Promise', 'globalThis', 'global'].includes(node.text)) return true; + return ts.forEachChild(node, touchesPromiseOutsideDefinition) === true; + }; + for (const statement of file.statements) { + if (ts.isExportAssignment(statement)) { + // Only the final body argument is allowed to mention Promise.all. Do + // not let an expression around flow() mutate Promise while we skip it. + const call = statement.expression; + if (statement.isExportEquals || !ts.isCallExpression(call) + || !ts.isIdentifier(call.expression) || call.expression.text !== 'flow') return false; + const args = call.arguments; + if (!ts.isArrowFunction(args[args.length - 1]!)) return false; + if (args.slice(0, -1).some(touchesPromiseOutsideDefinition)) return false; + continue; + } + if (touchesPromiseOutsideDefinition(statement)) return false; + } + const forbidden = new Set(['Promise', 'globalThis']); + const bindsForbidden = (name: ts.BindingName): boolean => ts.isIdentifier(name) + ? forbidden.has(name.text) + : name.elements.some(element => ts.isBindingElement(element) && bindsForbidden(element.name)); + const isGlobalPromise = (node: ts.Node): boolean => { + if (ts.isIdentifier(node)) return forbidden.has(node.text); + if (ts.isPropertyAccessExpression(node)) return ts.isIdentifier(node.expression) + && node.expression.text === 'globalThis' && node.name.text === 'Promise'; + return ts.isElementAccessExpression(node) && ts.isIdentifier(node.expression) + && node.expression.text === 'globalThis' && ts.isStringLiteral(node.argumentExpression) + && node.argumentExpression.text === 'Promise'; + }; + let unsafe = false; + const visit = (node: ts.Node): void => { + if (unsafe) return; + if ((ts.isVariableDeclaration(node) || ts.isParameter(node) || ts.isBindingElement(node)) + && bindsForbidden(node.name)) unsafe = true; + if ((ts.isFunctionDeclaration(node) || ts.isFunctionExpression(node) + || ts.isClassDeclaration(node) || ts.isClassExpression(node) + || ts.isEnumDeclaration(node) || ts.isImportEqualsDeclaration(node) + || ts.isTypeAliasDeclaration(node) || ts.isInterfaceDeclaration(node)) + && node.name !== undefined && forbidden.has(node.name.text)) unsafe = true; + if (ts.isImportClause(node) && node.name !== undefined && forbidden.has(node.name.text)) unsafe = true; + if (ts.isNamespaceImport(node) && forbidden.has(node.name.text)) unsafe = true; + if (ts.isImportSpecifier(node) && forbidden.has(node.name.text)) unsafe = true; + if (ts.isBinaryExpression(node) + && node.operatorToken.kind >= ts.SyntaxKind.FirstAssignment + && node.operatorToken.kind <= ts.SyntaxKind.LastAssignment + && isGlobalPromise(node.left)) unsafe = true; + if ((ts.isPrefixUnaryExpression(node) || ts.isPostfixUnaryExpression(node)) + && isGlobalPromise(node.operand)) unsafe = true; + ts.forEachChild(node, visit); + }; + visit(file); + return !unsafe; +} diff --git a/packages/sdk/src/authored-promise-graph.ts b/packages/sdk/src/authored-promise-graph.ts index 7168550ba..016651b8f 100644 --- a/packages/sdk/src/authored-promise-graph.ts +++ b/packages/sdk/src/authored-promise-graph.ts @@ -30,6 +30,8 @@ export class AuthoredPromiseGraph { private readonly triggers = new Map(); private readonly creationContexts = new Map(); private readonly resolutionCauses = new Map(); + /** Promises attributed only when another promise's reaction resolved them. */ + private readonly adoptedFromResolvingContext = new Set(); private readonly promiseIds = new WeakMap(); private readonly handles = new Map>(); private readonly unattributedChildren = new Map(); @@ -77,6 +79,7 @@ export class AuthoredPromiseGraph { // success. Measured; see ops/probes/pr134-repair-0903/combinators.mjs. const adopted = this.attributedRoots.get(cause); if (adopted !== undefined) { + this.adoptedFromResolvingContext.add(asyncId); this.attribute(asyncId, adopted); return; } @@ -145,6 +148,10 @@ export class AuthoredPromiseGraph { return causes; } + wasAdoptedFromResolvingContext(asyncId: number): boolean { + return this.adoptedFromResolvingContext.has(asyncId); + } + dependsOn(descendant: number, ancestor: number): boolean { return this.dependenciesOf(descendant).has(ancestor); } @@ -167,6 +174,7 @@ export class AuthoredPromiseGraph { this.triggers.clear(); this.creationContexts.clear(); this.resolutionCauses.clear(); + this.adoptedFromResolvingContext.clear(); this.handles.clear(); this.unattributedChildren.clear(); this.attributedRoots.clear(); diff --git a/packages/sdk/src/authored-root.ts b/packages/sdk/src/authored-root.ts index 9c2b1fe33..64f0ab246 100644 --- a/packages/sdk/src/authored-root.ts +++ b/packages/sdk/src/authored-root.ts @@ -95,7 +95,7 @@ export async function executeDurableAuthoredFlow( }))); const definition = loaded.getDefinition(loaded.handle); const executionMode = loaded.graph.length === 1 && (loaded.extensions?.length ?? 0) === 0 - && definition.header.budget === undefined && parallelRunEligible(definition.body) + && definition.header.budget === undefined && parallelRunEligible(definition.body, source.toString('utf8')) ? 'parallel' : 'serial'; const metadata: AuthoredRootMetadata = Object.freeze({ kind: executionMode === 'parallel' ? AUTHORED_PARALLEL_ROOT_KIND : ROOT_KIND, diff --git a/packages/sdk/src/authored-step-graph.ts b/packages/sdk/src/authored-step-graph.ts index 98928efcd..28e191b76 100644 --- a/packages/sdk/src/authored-step-graph.ts +++ b/packages/sdk/src/authored-step-graph.ts @@ -41,6 +41,7 @@ export const MAX_WALK = 10_000; interface Frontier { readonly steps: readonly string[]; readonly truncated: boolean; + readonly unregisteredAggregate: boolean; } interface StepNode { @@ -72,6 +73,7 @@ interface Aggregate { export class AuthoredStepGraph { private readonly stepPromises = new Map(); private readonly aggregates = new Map(); + private readonly registeredMembers = new Set(); private readonly contexts = new Map(); private readonly nodes = new Map(); private readonly edges = new Map(); @@ -79,6 +81,7 @@ export class AuthoredStepGraph { constructor( private readonly causesOf: (asyncId: number) => readonly number[], private readonly walkLimit = MAX_WALK, + private readonly adoptedOutsideCombinator: (asyncId: number) => boolean = () => false, ) {} /** A combinator's aggregate and its members, for expansion once it settles. */ @@ -88,6 +91,7 @@ export class AuthoredStepGraph { combinator: Combinator, members: readonly number[], ): void { + for (const member of members) this.registeredMembers.add(member); const expandsOn = EXPANDS_ON[combinator]; if (expandsOn === undefined || members.length === 0) return; this.aggregates.set(aggregateId, { promise, expandsOn, members }); @@ -121,7 +125,7 @@ export class AuthoredStepGraph { } /** Causal predecessors of a step being declared in the current async context. */ - predecessorsAt(contextId: number): { readonly steps: readonly string[]; readonly truncated: boolean } { + predecessorsAt(contextId: number): Frontier { return this.frontierOf(contextId); } @@ -129,6 +133,7 @@ export class AuthoredStepGraph { release(): void { this.stepPromises.clear(); this.aggregates.clear(); + this.registeredMembers.clear(); this.contexts.clear(); this.nodes.clear(); } @@ -138,6 +143,7 @@ export class AuthoredStepGraph { if (memo !== undefined) return memo; const candidates = new Set(); let truncated = false; + let unregisteredAggregate = false; const visited = new Set([start]); const queue = [start]; // Breadth-first, so that a walk cut short by the limit has already found @@ -149,10 +155,17 @@ export class AuthoredStepGraph { candidates.add(step); continue; } + // An operation promise is already a complete, named frontier. Beyond + // those, an aggregate adopted only from its resolver's context may hide + // other members. Intrinsic Promise.all aggregates are registered before + // settlement and therefore never enter this unsafe path. + unregisteredAggregate ||= this.adoptedOutsideCombinator(current) + && !this.aggregates.has(current) && !this.registeredMembers.has(current); const answered = current === start ? undefined : this.contexts.get(current); if (answered !== undefined) { for (const found of answered.steps) candidates.add(found); truncated ||= answered.truncated; + unregisteredAggregate ||= answered.unregisteredAggregate; continue; } for (const id of [...this.waitedFor(current), ...this.causesOf(current)]) { @@ -168,7 +181,11 @@ export class AuthoredStepGraph { } } const reduced = this.reduce(candidates); - const frontier = Object.freeze({ steps: reduced.steps, truncated: truncated || reduced.truncated }); + const frontier = Object.freeze({ + steps: reduced.steps, + truncated: truncated || reduced.truncated, + unregisteredAggregate, + }); this.contexts.set(start, frontier); return frontier; } @@ -190,7 +207,7 @@ export class AuthoredStepGraph { * reduction reads recorded `after` lists; when one it reads is incomplete, * a redundant ancestor can survive, and the result says so. */ - private reduce(candidates: ReadonlySet): Frontier { + private reduce(candidates: ReadonlySet): Pick { const ordered = [...candidates].sort((a, b) => this.orderOf(a) - this.orderOf(b)); if (ordered.length <= 1) return { steps: ordered, truncated: false }; // An ancestor is always registered before its descendant, so nothing diff --git a/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts b/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts index 6011f1aa4..4ba1cb114 100644 --- a/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts +++ b/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts @@ -12,6 +12,8 @@ import { startLoopback, } from './journal-client-loopback.js'; +const unobservedAll = Promise.all.bind(Promise); + describe('authored flow lifecycle through the journal executor', () => { let path: string; let server: Server; @@ -91,6 +93,54 @@ describe('authored flow lifecycle through the journal executor', () => { expect(startedSpecs).toHaveLength(startedBefore); }); + it('refuses later admissions after a caught parallel violation', async () => { + const startedBefore = startedSpecs.length; + await expect(execute(flow('parallel-refusal-stays-closed', async f => { + try { f.llm('prompt', { output: { type: 'string' } }); } catch { /* author swallowed refusal */ } + try { await f.run('printf E'); } catch { /* this admission must also be refused */ } + f.done('success'); + }), { executionMode: 'parallel' })).rejects.toMatchObject({ code: 'step_failed' }); + expect(startedSpecs).toHaveLength(startedBefore); + }); + + it('refuses a parallel follow-up through an unobserved Promise.all', async () => { + const startedBefore = startedSpecs.length; + await expect(execute(flow('parallel-unobserved-aggregate', async f => { + await unobservedAll([f.run('printf A'), f.run('printf B')]); + await f.run('printf X'); + f.done('success'); + }), { executionMode: 'parallel' })).rejects.toThrow(/unregistered aggregate/u); + const admitted = startedSpecs.slice(startedBefore).map(spec => spec['name']); + expect(admitted).toEqual([ + 'parallel-unobserved-aggregate/run-1', + 'parallel-unobserved-aggregate/run-2', + ]); + }); + + it('admits a parallel follow-up through the observed intrinsic Promise.all', async () => { + const startedBefore = startedSpecs.length; + await expect(execute(flow('parallel-observed-aggregate', async f => { + await Promise.all([f.run('printf A'), f.run('printf B')]); + await f.run('printf X'); + f.done('success'); + }), { executionMode: 'parallel' })).resolves.toMatchObject({ completionReason: 'success' }); + const admitted = startedSpecs.slice(startedBefore).map(spec => String(spec['name'])); + expect(admitted).toHaveLength(4); + expect(admitted[2]).toMatch(/^parallel-observed-aggregate\/run-after-/u); + }); + + it('keeps observed async route branches parallel through their join', async () => { + const startedBefore = startedSpecs.length; + await expect(execute(flow('parallel-observed-routes', async f => { + const left = async () => { await f.run('printf A'); await f.run('printf L'); }; + const right = async () => { await f.run('printf B'); await f.run('printf R'); }; + await Promise.all([left(), right()]); + await f.run('printf X'); + f.done('success'); + }), { executionMode: 'parallel' })).resolves.toMatchObject({ completionReason: 'success' }); + expect(startedSpecs.slice(startedBefore)).toHaveLength(6); + }); + it('keeps a caught parallel activity refusal as a root failure', async () => { const startedBefore = startedSpecs.length; await expect(execute(flow('parallel-hidden-activity', async f => { diff --git a/packages/sdk/tests/authored-parallel-eligibility.test.ts b/packages/sdk/tests/authored-parallel-eligibility.test.ts index 1557743cc..e265bad89 100644 --- a/packages/sdk/tests/authored-parallel-eligibility.test.ts +++ b/packages/sdk/tests/authored-parallel-eligibility.test.ts @@ -2,25 +2,27 @@ import { describe, expect, it } from 'vitest'; import { parallelRunEligible } from '../src/authored-parallel-eligibility.js'; const body = (source: string): Function => new Function(`return (${source});`)() as Function; +const eligible = (candidate: Function, moduleSource = `import { flow } from '@relayflows/surface';\nexport default flow('probe', ${Function.prototype.toString.call(candidate)});`) => + parallelRunEligible(candidate, moduleSource); describe('parallel run admission', () => { it('certifies direct Promise.all and awaited branch continuations', () => { - expect(parallelRunEligible(body(`async f => { + expect(eligible(body(`async f => { const outputs = await Promise.all([f.run('a'), f.run('b')]); await f.run(outputs[0]); f.done('success'); }`))).toBe(true); - expect(parallelRunEligible(body(`async f => { + expect(eligible(body(`async f => { const left = async () => { await f.run('a'); await f.run('b'); }; const right = async () => { await f.run('c'); await f.run('d'); }; await Promise.all([left(), right()]); f.done('success'); }`))).toBe(true); - expect(parallelRunEligible(body(`async f => { + expect(eligible(body(`async f => { await Promise.all([f.run('a'), f.run('b'), f.run('c')]); f.done('success'); }`))).toBe(true); - expect(parallelRunEligible(body(`async f => { + expect(eligible(body(`async f => { const route = async () => { await f.run('route'); await f.run('dependent'); }; const second = async () => { await f.run('other'); await f.run('follow-up'); }; await Promise.all([route(), second()]); @@ -55,7 +57,7 @@ describe('parallel run admission', () => { const b = async () => { await f.run('B'); await f.run('C'); }; await Promise.all([a(), b()]); }`, ]; - for (const source of cases) expect(parallelRunEligible(body(source)), source).toBe(false); + for (const source of cases) expect(eligible(body(source)), source).toBe(false); }); it('keeps race, any, eager work, timers, and mixed effects serial', () => { @@ -81,13 +83,13 @@ describe('parallel run admission', () => { `async f => { await Promise.all([f.dispatch('a'), f.run('b')]); }`, `async f => { const alias = f; await Promise.all([alias.run('a'), f.run('b')]); }`, ]; - for (const source of cases) expect(parallelRunEligible(body(source)), source).toBe(false); + for (const source of cases) expect(eligible(body(source)), source).toBe(false); }); it('reads the function itself rather than an author-supplied toString', () => { const unsafe = body(`async f => { await Promise.race([f.run('a'), f.run('b')]); }`); unsafe.toString = () => `async f => { await Promise.all([f.run('a'), f.run('b')]); }`; - expect(parallelRunEligible(unsafe)).toBe(false); + expect(eligible(unsafe)).toBe(false); }); it('keeps generated fanout serial even if Array.from is replaced', () => { @@ -97,7 +99,47 @@ describe('parallel run admission', () => { const original = Array.from; try { Array.from = ((...args: Parameters) => original(...args)) as typeof Array.from; - expect(parallelRunEligible(candidate)).toBe(false); + expect(eligible(candidate)).toBe(false); } finally { Array.from = original; } }); + + it('requires the module Promise binding to be the intrinsic', () => { + const candidate = body(`async f => { + await Promise.all([f.run('A'), f.run('B')]); + await f.run('X'); + f.done('success'); + }`); + const definition = `export default flow('probe', ${Function.prototype.toString.call(candidate)});`; + expect(eligible(candidate, `import { flow } from '@relayflows/surface';\n${definition}`)).toBe(true); + for (const prefix of [ + `const Promise = { all: globalThis.Promise.all.bind(globalThis.Promise) };`, + `import Promise from 'bluebird';`, + `class Promise extends globalThis.Promise { static all(items) { return super.all(items); } }`, + `function helper(Promise) { return Promise; }`, + `const globalThis = { Promise: replacement };`, + `globalThis.Promise = replacement;`, + `globalThis['Promise'] = replacement;`, + `Promise.all = replacement;`, + `const intrinsic = globalThis; intrinsic.Promise = replacement;`, + `global.Promise = replacement;`, + ]) expect(eligible(candidate, `${prefix}\n${definition}`), prefix).toBe(false); + expect(eligible(candidate, + `export default (Promise.all = replacement, flow('probe', ${Function.prototype.toString.call(candidate)}));`)) + .toBe(false); + }); + + it('keeps groups with empty async branches serial', () => { + expect(eligible(body(`async f => { + const warm = async () => {}; + await Promise.all([warm(), warm()]); + await f.run('X'); + f.done('success'); + }`))).toBe(false); + expect(eligible(body(`async f => { + const work = async () => { await f.run('A'); }; + const warm = async () => {}; + await Promise.all([work(), warm()]); + f.done('success'); + }`))).toBe(false); + }); }); diff --git a/packages/sdk/tests/authored-parallel-run-live.test.ts b/packages/sdk/tests/authored-parallel-run-live.test.ts index f01abaa95..651a58620 100644 --- a/packages/sdk/tests/authored-parallel-run-live.test.ts +++ b/packages/sdk/tests/authored-parallel-run-live.test.ts @@ -791,6 +791,120 @@ export default flow('serial-hidden-llm', async function (f) { } }, 240_000); + it.each([ + { name: 'bound module Promise', preamble: `const Promise = { all: globalThis.Promise.all.bind(globalThis.Promise) };`, + body: `await Promise.all([f.run('sleep 0.1; printf A'), f.run('printf B'), f.run('printf C')]); + await f.run('printf X >> effects');`, expected: 'X' }, + { name: 'hand-written module Promise', preamble: `const Promise = { all: values => new globalThis.Promise((resolve, reject) => { + const items = [...values], results = Array(items.length); let remaining = items.length; + items.forEach((item, index) => globalThis.Promise.resolve(item).then(value => { + results[index] = value; if (--remaining === 0) resolve(results); + }, reject)); + }) };`, + body: `await Promise.all([f.run('sleep 0.1; printf A'), f.run('printf B'), f.run('printf C')]); + await f.run('printf X >> effects');`, expected: 'X' }, + { name: 'module Promise class', preamble: `class Promise extends globalThis.Promise { + static all(values) { return super.all(values); } + }`, + body: `await Promise.all([f.run('sleep 0.1; printf A'), f.run('printf B'), f.run('printf C')]); + await f.run('printf X >> effects');`, expected: 'X' }, + { name: 'module Promise Native branches', preamble: `const Promise = { + all: globalThis.Promise.all.bind(globalThis.Promise), + };`, + body: `const left = async () => { await f.run('sleep 0.1; printf A'); await f.run('printf L >> effects'); }; + const right = async () => { await f.run('printf B'); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`, expected: 'LR' }, + { name: 'imported Bluebird Promise Native branches', preamble: `import Promise from 'bluebird';`, + body: `const left = async () => { await f.run('sleep 0.1; printf A'); await f.run('printf L >> effects'); }; + const right = async () => { await f.run('printf B'); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`, expected: 'LR' }, + { name: 'empty async branches', preamble: '', + body: `const warm = async () => {}; + await Promise.all([warm(), warm()]); + await f.run('printf X >> effects');`, expected: 'X' }, + ])('keeps $name serial without replay across six resumes', async ({ name, preamble, body, expected }) => { + for (let repetition = 0; repetition < 6; repetition++) { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +${preamble} +export default flow('serial-module-${name.replaceAll(' ', '-')}', async f => { + ${body} + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +}); +`); + const cli = fixture.invokeAsync('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + const cliExited = new Promise(resolve => cli.once('exit', () => resolve())); + closes.push(async () => { + if (cli.exitCode === null && cli.signalCode === null) cli.kill('SIGKILL'); + await cliExited; + }); + await until(() => existsSync(`${fixture.root}/stalled`) ? true : undefined, `${name} stall`, 60_000); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort().join('')).toBe(expected); + const rootRunId = runIds(fixture.data)[0]!; + const reader = new JournalClient(socketPathFor(fixture.data)); + await reader.connect(); + await reader.hello('module-promise-mode-test'); + try { + expect(await readAuthoredRootMetadata(reader, rootRunId)) + .toMatchObject({ kind: 'relayflows.authored-root.v1', executionMode: 'serial' }); + } finally { reader.close(); } + cli.kill('SIGKILL'); + await cliExited; + killDaemon(fixture.data); + writeFileSync(`${fixture.root}/release`, ''); + const resumed = fixture.invoke('resume', '--no-observer-link', '--json', '--data-dir', fixture.data, rootRunId); + expect(resumed.status, resumed.stderr + resumed.stdout).toBe(0); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort().join('')) + .toBe([...expected, 'Z'].sort().join('')); + await fixture.close(); + } + }, 240_000); + + it('keeps a Bluebird group of direct f.run calls serial across six resumes', async () => { + for (let repetition = 0; repetition < 6; repetition++) { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +import Promise from 'bluebird'; +export default flow('serial-bluebird-direct', async f => { + await Promise.all([f.run('printf A >> effects'), f.run('printf B >> effects')]); + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +}); +`); + const cli = fixture.invokeAsync('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + const cliExited = new Promise(resolve => cli.once('exit', () => resolve())); + closes.push(async () => { + if (cli.exitCode === null && cli.signalCode === null) cli.kill('SIGKILL'); + await cliExited; + }); + await until(() => existsSync(`${fixture.root}/stalled`) ? true : undefined, 'Bluebird direct stall', 60_000); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual(['A', 'B']); + const rootRunId = runIds(fixture.data)[0]!; + const reader = new JournalClient(socketPathFor(fixture.data)); + await reader.connect(); + await reader.hello('bluebird-direct-mode-test'); + try { + expect(await readAuthoredRootMetadata(reader, rootRunId)) + .toMatchObject({ kind: 'relayflows.authored-root.v1', executionMode: 'serial' }); + } finally { reader.close(); } + cli.kill('SIGKILL'); + await cliExited; + killDaemon(fixture.data); + writeFileSync(`${fixture.root}/release`, ''); + const resumed = fixture.invoke('resume', '--no-observer-link', '--json', '--data-dir', fixture.data, rootRunId); + expect([0, 1]).toContain(resumed.status); + if (resumed.status !== 0) expect(resumed.stderr + resumed.stdout).toMatch(/unawaited_step/u); + const effects = [...readFileSync(`${fixture.root}/effects`, 'utf8')]; + for (const effect of ['A', 'B']) expect(effects.filter(item => item === effect)).toHaveLength(1); + await fixture.close(); + } + }, 240_000); + it.each([ { name: 'imported timer helper', delay: `const pause = () => sleep(300);`, wait: ` await Promise.all([pause(), pause()]);` }, diff --git a/packages/sdk/tests/authored-step-secrets-live.test.ts b/packages/sdk/tests/authored-step-secrets-live.test.ts index 3c504aa9d..983133efa 100644 --- a/packages/sdk/tests/authored-step-secrets-live.test.ts +++ b/packages/sdk/tests/authored-step-secrets-live.test.ts @@ -1,5 +1,8 @@ -import { readFileSync, writeFileSync } from 'node:fs'; +import { readFileSync, readdirSync, writeFileSync } from 'node:fs'; import { afterEach, expect, it } from 'vitest'; +import { JournalClient } from '../src/journal-client.js'; +import { socketPathFor } from '../src/daemon-connection.js'; +import { readAuthoredRootMetadata } from '../src/authored-root.js'; import { chainFixture } from './flow-chain-fixture.js'; const cleanup: Array<() => Promise> = []; @@ -39,3 +42,43 @@ export default flow('scoped-shell', async f => { expect(JSON.parse(readFileSync(`${fixture.root}/observed.json`, 'utf8'))) .toEqual({ plain: ':', granted: 'native-secret' }); }, 60_000); + +it('parallel authored shell children keep their own secret grants', async () => { + const fixture = chainFixture(); + cleanup.push(() => fixture.close()); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +export default flow('parallel-scoped-shell', async f => { + const outputs = await Promise.all([ + f.run('printf %s "$NATIVE_API_TOKEN"'), + f.run('printf %s "$NATIVE_API_TOKEN"', { secrets: ['NATIVE_API_TOKEN'] }), + ]); + await f.run('printf "%s:%s" "' + outputs[0] + '" "' + outputs[1] + '" > observed.txt'); + f.done('success'); +}); +`); + const previousToken = process.env.NATIVE_API_TOKEN; + const previousManifest = process.env.RELAY_SECRET_ENV_NAMES; + process.env.NATIVE_API_TOKEN = 'parallel-secret'; + process.env.RELAY_SECRET_ENV_NAMES = '["NATIVE_API_TOKEN"]'; + let result; + try { + result = fixture.invoke('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + } finally { + if (previousToken === undefined) delete process.env.NATIVE_API_TOKEN; + else process.env.NATIVE_API_TOKEN = previousToken; + if (previousManifest === undefined) delete process.env.RELAY_SECRET_ENV_NAMES; + else process.env.RELAY_SECRET_ENV_NAMES = previousManifest; + } + expect(result.status, result.stderr + result.stdout).toBe(0); + expect(readFileSync(`${fixture.root}/observed.txt`, 'utf8')).toBe(':parallel-secret'); + const rootRunId = readdirSync(`${fixture.data}/runs`).find(name => name.endsWith('.sqlite3'))! + .slice(0, -'.sqlite3'.length); + const reader = new JournalClient(socketPathFor(fixture.data)); + await reader.connect(); + await reader.hello('parallel-secret-mode-test'); + try { + expect(await readAuthoredRootMetadata(reader, rootRunId)) + .toMatchObject({ executionMode: 'parallel' }); + } finally { reader.close(); } +}, 60_000); diff --git a/packages/sdk/tests/journal-client-step-env.test.ts b/packages/sdk/tests/journal-client-step-env.test.ts index df95e0867..16ddd8343 100644 --- a/packages/sdk/tests/journal-client-step-env.test.ts +++ b/packages/sdk/tests/journal-client-step-env.test.ts @@ -206,3 +206,41 @@ it('refuses a grant absent from the delivered-name manifest before run.start', a rmSync(path, { force: true }); } }); + +it('checks isolated run grants against the peer handshake before admission', async () => { + const path = sockPath(); + let hellos = 0; + let starts = 0; + const server = startLoopback(path, { + hello: ctx => { + hellos++; + sendResult(ctx, { protocol: 0, server: 'relayflowd', + features: ['step_env', 'step_secret_scoping'], det_withheld: ['HIDDEN_SECRET'] }); + }, + 'run.start': ctx => { starts++; sendResult(ctx, { run_id: 'run-01', status: 'completed' }); }, + }); + const client = new JournalClient(path); + const priorToken = process.env.HIDDEN_SECRET; + const priorManifest = process.env.RELAY_SECRET_ENV_NAMES; + process.env.HIDDEN_SECRET = 'withheld-value'; + process.env.RELAY_SECRET_ENV_NAMES = '["HIDDEN_SECRET"]'; + try { + await client.connect(); + await client.hello('isolated-secret-grant'); + const spec = { ...HELLO_SPEC, steps: [ + { ...HELLO_SPEC.steps[0]!, secrets: ['HIDDEN_SECRET'] }, + ] }; + await expect(client.runStart(spec, undefined, undefined, false, true)) + .rejects.toThrow('withheld by the daemon'); + expect(hellos).toBe(2); + expect(starts).toBe(0); + } finally { + if (priorToken === undefined) delete process.env.HIDDEN_SECRET; + else process.env.HIDDEN_SECRET = priorToken; + if (priorManifest === undefined) delete process.env.RELAY_SECRET_ENV_NAMES; + else process.env.RELAY_SECRET_ENV_NAMES = priorManifest; + client.close(); + await new Promise(resolve => server.close(() => resolve())); + rmSync(path, { force: true }); + } +}); From 41c155fa361eda34a29d84a77266601a8b8ef152 Mon Sep 17 00:00:00 2001 From: Miya Date: Fri, 16 Oct 2026 21:35:58 +0200 Subject: [PATCH 09/18] Guard authored parallel replay against unobserved joins --- docs/SURFACE.md | 10 +- .../Dockerfile.upgrade-2050 | 8 + .../linux-forced-guard.log | 7 + .../linux-forced-no-guard.log | 7 + .../linux-native-overlap.log | 22 ++ .../linux-prior-replay.log | 61 +++++ .../linux-review5-exact.log | 43 +++ .../linux-rollback-2050.log | 7 + .../linux-rollback-2051.log | 7 + .../linux-upgrade-2050.log | 19 ++ .../linux-upgrade-2051.log | 19 ++ .../mac-final-live.log | 79 ++++++ .../mac-imported-timer-isolated.log | 10 + .../native-overlap.mjs | 81 ++++++ .../native-parallel-review6/review5-exact.mjs | 195 ++++++++++++++ .../review5-fixtures.md | 250 ++++++++++++++++++ evidence/native-parallel-review6/rollback.mjs | 82 ++++++ .../native-parallel-review6/verification.md | 51 ++++ packages/sdk/src/authored-flow-executor.ts | 5 + packages/sdk/src/authored-flow-lifecycle.ts | 32 ++- .../sdk/src/authored-parallel-eligibility.ts | 7 +- packages/sdk/src/authored-promise-graph.ts | 23 ++ packages/sdk/src/authored-step-graph.ts | 24 +- .../authored-flow-lifecycle-executor.test.ts | 122 ++++++++- .../authored-parallel-eligibility.test.ts | 10 + .../tests/authored-parallel-run-live.test.ts | 90 ++++++- 26 files changed, 1252 insertions(+), 19 deletions(-) create mode 100644 evidence/native-parallel-review6/Dockerfile.upgrade-2050 create mode 100644 evidence/native-parallel-review6/linux-forced-guard.log create mode 100644 evidence/native-parallel-review6/linux-forced-no-guard.log create mode 100644 evidence/native-parallel-review6/linux-native-overlap.log create mode 100644 evidence/native-parallel-review6/linux-prior-replay.log create mode 100644 evidence/native-parallel-review6/linux-review5-exact.log create mode 100644 evidence/native-parallel-review6/linux-rollback-2050.log create mode 100644 evidence/native-parallel-review6/linux-rollback-2051.log create mode 100644 evidence/native-parallel-review6/linux-upgrade-2050.log create mode 100644 evidence/native-parallel-review6/linux-upgrade-2051.log create mode 100644 evidence/native-parallel-review6/mac-final-live.log create mode 100644 evidence/native-parallel-review6/mac-imported-timer-isolated.log create mode 100644 evidence/native-parallel-review6/native-overlap.mjs create mode 100644 evidence/native-parallel-review6/review5-exact.mjs create mode 100644 evidence/native-parallel-review6/review5-fixtures.md create mode 100644 evidence/native-parallel-review6/rollback.mjs create mode 100644 evidence/native-parallel-review6/verification.md diff --git a/docs/SURFACE.md b/docs/SURFACE.md index b1b29829b..a62f31bc2 100644 --- a/docs/SURFACE.md +++ b/docs/SURFACE.md @@ -975,8 +975,11 @@ The root records its execution mode before its body runs. Parallel mode is selected only for a narrow source grammar: awaited `Promise.all` groups of direct `f.run` calls, and locally declared async branches made only of awaited `f.run` calls or direct run groups. Every branch must contain a direct `f.run`. -The module must leave the intrinsic `Promise` and `globalThis.Promise` -unshadowed; a module that binds either name uses serial mode. Generated arrays +The entry module must directly define and export the flow body. Re-exports and +imported flow definitions use serial mode, because their `Promise` binding +belongs to another module. The defining module must leave the intrinsic +`Promise` and `globalThis.Promise` unshadowed; a module that binds either name +uses serial mode. Generated arrays such as `Array.from` use serial mode. Branches may not mutate shared values, await timers or other promises, or call `f.done`; completion belongs at the end of @@ -1003,7 +1006,8 @@ its own journal; the root's child index records completion facts as they arrive, readers match them by step id and run id. In parallel mode, if the bounded causal walk cannot identify a follow-up's full predecessor frontier, the frontier passes through an unregistered promise -aggregate, a non-run effect appears, or a new initial child +aggregate, an intrinsic Promise combinator observer has been replaced, a +non-run effect appears, or a new initial child appears after the body's first turn, the root fails before admitting that effect rather than issuing an ambiguous replay key. Once this happens, no later child is admitted. The failure remains a root failure even when authored diff --git a/evidence/native-parallel-review6/Dockerfile.upgrade-2050 b/evidence/native-parallel-review6/Dockerfile.upgrade-2050 new file mode 100644 index 000000000..1fc72495c --- /dev/null +++ b/evidence/native-parallel-review6/Dockerfile.upgrade-2050 @@ -0,0 +1,8 @@ +FROM node:22-trixie +RUN mkdir -p /bench && cd /bench && npm install --ignore-scripts \ + @relayflows/sdk@2.0.50 @relayflows/surface@2.0.50 \ + @relayflows/runtime-linux-x64@2.0.50 bluebird@3.7.2 +COPY dist/ /bench/sdk-head/dist/ +COPY package.json /bench/sdk-head/package.json +COPY upgrade.mjs /bench/upgrade.mjs +WORKDIR /bench diff --git a/evidence/native-parallel-review6/linux-forced-guard.log b/evidence/native-parallel-review6/linux-forced-guard.log new file mode 100644 index 000000000..e9ac3af65 --- /dev/null +++ b/evidence/native-parallel-review6/linux-forced-guard.log @@ -0,0 +1,7 @@ +{"name":"Q5w","index":0,"mode":"parallel","result":"failed_closed","effects":""} +{"name":"Q5w","index":1,"mode":"parallel","result":"failed_closed","effects":""} +{"name":"Q5w","index":2,"mode":"parallel","result":"failed_closed","effects":""} +{"name":"Q5w","index":3,"mode":"parallel","result":"failed_closed","effects":""} +{"name":"Q5w","index":4,"mode":"parallel","result":"failed_closed","effects":""} +{"name":"Q5w","index":5,"mode":"parallel","result":"failed_closed","effects":""} +{"done":true,"cases":["Q5w"],"repetitions":6,"mutation":"forced_guard","replays":0} diff --git a/evidence/native-parallel-review6/linux-forced-no-guard.log b/evidence/native-parallel-review6/linux-forced-no-guard.log new file mode 100644 index 000000000..eb2afe86b --- /dev/null +++ b/evidence/native-parallel-review6/linux-forced-no-guard.log @@ -0,0 +1,7 @@ +{"name":"Q5w","index":0,"mode":"parallel","result":"replayed_under_mutation","before":"X","after":"XXZ"} +{"name":"Q5w","index":1,"mode":"parallel","result":"no_replay_this_timing","before":"X","after":"XZ"} +{"name":"Q5w","index":2,"mode":"parallel","result":"replayed_under_mutation","before":"X","after":"XXZ"} +{"name":"Q5w","index":3,"mode":"parallel","result":"no_replay_this_timing","before":"X","after":"XZ"} +{"name":"Q5w","index":4,"mode":"parallel","result":"no_replay_this_timing","before":"X","after":"XZ"} +{"name":"Q5w","index":5,"mode":"parallel","result":"replayed_under_mutation","before":"X","after":"XXZ"} +{"done":true,"cases":["Q5w"],"repetitions":6,"mutation":"forced_no_guard","replays":3} diff --git a/evidence/native-parallel-review6/linux-native-overlap.log b/evidence/native-parallel-review6/linux-native-overlap.log new file mode 100644 index 000000000..93a31c9a5 --- /dev/null +++ b/evidence/native-parallel-review6/linux-native-overlap.log @@ -0,0 +1,22 @@ +{"side":"base","index":0,"cliMs":3128,"bodyMs":1559,"routeStartSpreadMs":736,"routeOverlap":false,"dependentOverlap":false} +{"side":"head","index":0,"cliMs":2540,"bodyMs":561,"routeStartSpreadMs":13,"routeOverlap":true,"dependentOverlap":true} +{"side":"base","index":1,"cliMs":3232,"bodyMs":1613,"routeStartSpreadMs":748,"routeOverlap":false,"dependentOverlap":false} +{"side":"head","index":1,"cliMs":3119,"bodyMs":639,"routeStartSpreadMs":3,"routeOverlap":true,"dependentOverlap":true} +{"side":"base","index":2,"cliMs":3243,"bodyMs":1625,"routeStartSpreadMs":751,"routeOverlap":false,"dependentOverlap":false} +{"side":"head","index":2,"cliMs":3986,"bodyMs":748,"routeStartSpreadMs":5,"routeOverlap":true,"dependentOverlap":true} +{"side":"base","index":3,"cliMs":3285,"bodyMs":1740,"routeStartSpreadMs":790,"routeOverlap":false,"dependentOverlap":false} +{"side":"head","index":3,"cliMs":2444,"bodyMs":614,"routeStartSpreadMs":12,"routeOverlap":true,"dependentOverlap":true} +{"side":"base","index":4,"cliMs":2940,"bodyMs":1664,"routeStartSpreadMs":767,"routeOverlap":false,"dependentOverlap":false} +{"side":"head","index":4,"cliMs":2360,"bodyMs":577,"routeStartSpreadMs":2,"routeOverlap":true,"dependentOverlap":true} +{"side":"base","index":5,"cliMs":2873,"bodyMs":1611,"routeStartSpreadMs":771,"routeOverlap":false,"dependentOverlap":false} +{"side":"head","index":5,"cliMs":2237,"bodyMs":576,"routeStartSpreadMs":3,"routeOverlap":true,"dependentOverlap":true} +{"side":"base","index":6,"cliMs":2862,"bodyMs":1675,"routeStartSpreadMs":746,"routeOverlap":false,"dependentOverlap":false} +{"side":"head","index":6,"cliMs":2357,"bodyMs":527,"routeStartSpreadMs":11,"routeOverlap":true,"dependentOverlap":true} +{"side":"base","index":7,"cliMs":2864,"bodyMs":1529,"routeStartSpreadMs":731,"routeOverlap":false,"dependentOverlap":false} +{"side":"head","index":7,"cliMs":2363,"bodyMs":554,"routeStartSpreadMs":6,"routeOverlap":true,"dependentOverlap":true} +{"side":"base","index":8,"cliMs":2818,"bodyMs":1581,"routeStartSpreadMs":730,"routeOverlap":false,"dependentOverlap":false} +{"side":"head","index":8,"cliMs":2471,"bodyMs":562,"routeStartSpreadMs":11,"routeOverlap":true,"dependentOverlap":true} +{"side":"base","index":9,"cliMs":2799,"bodyMs":1531,"routeStartSpreadMs":725,"routeOverlap":false,"dependentOverlap":false} +{"side":"head","index":9,"cliMs":2202,"bodyMs":553,"routeStartSpreadMs":7,"routeOverlap":true,"dependentOverlap":true} +{"side":"base","summary":{"cliP50Ms":2873,"cliP95Ms":3285,"bodyP50Ms":1611,"routeStartSpreadP50Ms":746,"routeOverlap":0,"dependentOverlap":0}} +{"side":"head","summary":{"cliP50Ms":2363,"cliP95Ms":3986,"bodyP50Ms":562,"routeStartSpreadP50Ms":6,"routeOverlap":10,"dependentOverlap":10}} diff --git a/evidence/native-parallel-review6/linux-prior-replay.log b/evidence/native-parallel-review6/linux-prior-replay.log new file mode 100644 index 000000000..9c0bc55d8 --- /dev/null +++ b/evidence/native-parallel-review6/linux-prior-replay.log @@ -0,0 +1,61 @@ +{"case":"A1","index":0,"rootRunId":"01M530Z6KBR62RCG59KZ6RQ5D0","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":1,"rootRunId":"01M530Z9YHSJ329A0V0528G4AR","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":2,"rootRunId":"01M530ZDB66XHM4J1TH34D68KT","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":3,"rootRunId":"01M530ZGQWYKN456A7AYBZ9MZQ","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":4,"rootRunId":"01M530ZM2DRJ5V8QCQRX4ZW42A","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":5,"rootRunId":"01M530ZQDS7AWEZCDJCPWJSZVD","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":0,"rootRunId":"01M530ZTSE3ZMA7H1FWX00KXMM","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":1,"rootRunId":"01M530ZXVJ5F079792J5W5PD4W","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":2,"rootRunId":"01M531011PBQQPP31X3XPB516S","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":3,"rootRunId":"01M5310459Z1JWV5MM69VATV27","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":4,"rootRunId":"01M531077MVQAGVE52QYJBPV8B","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":5,"rootRunId":"01M5310ADJ8M3JBTWKCB9AKJRC","before":"LR","after":"LRZ","resumed":true} +{"case":"N2","index":0,"rootRunId":"01M5310DR6BBE4SQ6QG9N0WDNQ","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":1,"rootRunId":"01M5310H5FCJBKE3G38P2453G7","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":2,"rootRunId":"01M5310MPMA3A8ZZPEHR9Z2A8E","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":3,"rootRunId":"01M5310R32DG627DS61JP6SPHG","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":4,"rootRunId":"01M5310VEA2WMRGE3AMHKHZPX0","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":5,"rootRunId":"01M5310YWHKWBY0A57Y5JCFEFQ","before":"abc","after":"Zabc","resumed":true} +{"case":"C1e","index":0,"rootRunId":"01M53112C9TZX0E8PENGYE8TRZ","before":"XY","after":"XYZ","resumed":true} +{"case":"C1e","index":1,"rootRunId":"01M53115ZVQCD9VBY7QDXV27QK","before":"XY","after":"XYZ","resumed":true} +{"case":"C1e","index":2,"rootRunId":"01M53119MJ9X7FZNQ8VSMCGVZW","before":"XY","after":"XYZ","resumed":true} +{"case":"C1e","index":3,"rootRunId":"01M5311D6GM61T29B0W7QSQVV9","before":"XY","after":"XYZ","resumed":true} +{"case":"C1e","index":4,"rootRunId":"01M5311GV9M7VYFDTD3JHQYGGN","before":"XY","after":"XYZ","resumed":true} +{"case":"C1e","index":5,"rootRunId":"01M5311MDYVXR0VABQVR2PT6ES","before":"XY","after":"XYZ","resumed":true} +{"case":"G1","index":0,"rootRunId":"01M5311QXEG409GC6QJR3TT0ST","before":"ABG","after":"ABGZ","resumed":true} +{"case":"G1","index":1,"rootRunId":"01M5311V8DXBSAKXJ16ZJJX1MM","before":"ABG","after":"ABGZ","resumed":true} +{"case":"G1","index":2,"rootRunId":"01M5311YH7JC4RZ9W0XZGTP5VM","before":"ABG","after":"ABGZ","resumed":true} +{"case":"G1","index":3,"rootRunId":"01M53121S4EGWHX4YZV10QSJR7","before":"ABG","after":"ABGZ","resumed":true} +{"case":"G1","index":4,"rootRunId":"01M531254NTZ3H3F9206D3AYS9","before":"ABG","after":"ABGZ","resumed":true} +{"case":"G1","index":5,"rootRunId":"01M53128CX9D5VXGTDRM32DA2J","before":"ABG","after":"ABGZ","resumed":true} +{"case":"ANY","index":0,"rootRunId":"01M5312BM10RKD05G8XDP1SEFF","before":"ABG","after":"ABGZ","resumed":true} +{"case":"ANY","index":1,"rootRunId":"01M5312EYGS2FBZWCJR49XM1NQ","before":"ABG","after":"ABGZ","resumed":true} +{"case":"ANY","index":2,"rootRunId":"01M5312J7DQR1JN48K31KV3N1R","before":"ABG","after":"ABGZ","resumed":true} +{"case":"ANY","index":3,"rootRunId":"01M5312NFZ1KCWC9ZJD2Y6TQZ6","before":"ABG","after":"ABGZ","resumed":true} +{"case":"ANY","index":4,"rootRunId":"01M5312RSZVEKX6VQX9P4FBP3J","before":"ABG","after":"ABGZ","resumed":true} +{"case":"ANY","index":5,"rootRunId":"01M5312W5C6DN72AVH0KG6MQ8K","before":"ABG","after":"ABGZ","resumed":true} +{"case":"I1","index":0,"rootRunId":"01M5312ZJBEWBYVXAK3NVY5BQD","before":"LRxy","after":"LRZxy","resumed":true} +{"case":"I1","index":1,"rootRunId":"01M5313324M9K272Z1Y3ECGCJ6","before":"LRxy","after":"LRZxy","resumed":true} +{"case":"I1","index":2,"rootRunId":"01M53136K3CRZSQVRSST7BQ865","before":"LRxy","after":"LRZxy","resumed":true} +{"case":"I1","index":3,"rootRunId":"01M5313A2KH0W0VH3JH7PRPHEB","before":"LRxy","after":"LRZxy","resumed":true} +{"case":"I1","index":4,"rootRunId":"01M5313DJGZG18FY7KSWSPFVNV","before":"LRxy","after":"LRZxy","resumed":true} +{"case":"I1","index":5,"rootRunId":"01M5313H8B6XMD0XC2C0KD271A","before":"LRxy","after":"LRZxy","resumed":true} +{"case":"H1","index":0,"rootRunId":"01M5313MMCEXD6JG7C2TVPHD8J","before":"LR","after":"LRZ","resumed":true} +{"case":"H1","index":1,"rootRunId":"01M5313S6R519H7AN3XFZGYG4N","before":"LR","after":"LRZ","resumed":true} +{"case":"H1","index":2,"rootRunId":"01M5313XWRG05PC2A42JJJPKR8","before":"LR","after":"LRZ","resumed":true} +{"case":"H1","index":3,"rootRunId":"01M53142DD1W79KE0V9V7QHNW3","before":"LR","after":"LRZ","resumed":true} +{"case":"H1","index":4,"rootRunId":"01M53146ZMG1N84QV08NWCSNKQ","before":"LR","after":"LRZ","resumed":true} +{"case":"H1","index":5,"rootRunId":"01M5314BKG4CMG4T31XV67N4YX","before":"LR","after":"LRZ","resumed":true} +{"case":"K4","index":0,"rootRunId":"01M5314GB9GTVKXYY8VE2NG4SK","before":"LR","after":"LRZ","resumed":true} +{"case":"K4","index":1,"rootRunId":"01M5314MXATN7R14ZQFXX6A3Z3","before":"LR","after":"LRZ","resumed":true} +{"case":"K4","index":2,"rootRunId":"01M5314SH7SBYGWVMWKFX1B0JW","before":"LR","after":"LRZ","resumed":true} +{"case":"K4","index":3,"rootRunId":"01M5314Y4CTD1ZKXDTDX0Y0VGF","before":"LR","after":"LRZ","resumed":true} +{"case":"K4","index":4,"rootRunId":"01M53152P6MGC5AKKC6WQW0PRH","before":"LR","after":"LRZ","resumed":true} +{"case":"K4","index":5,"rootRunId":"01M531574NCFXZPTAS53D38Q8Q","before":"LR","after":"LRZ","resumed":true} +{"case":"H2","index":0,"rootRunId":"01M5315BKQC4KR9KYKR1C97S1V","before":"LR","after":"LRZ","resumed":true} +{"case":"H2","index":1,"rootRunId":"01M5315FVDZ6KMTP7NVP7KE2XP","before":"LR","after":"LRZ","resumed":true} +{"case":"H2","index":2,"rootRunId":"01M5315M2WXFZFGJE5FA40Y411","before":"LR","after":"LRZ","resumed":true} +{"case":"H2","index":3,"rootRunId":"01M5315RD9TZVR5RV5RT2545JF","before":"LR","after":"LRZ","resumed":true} +{"case":"H2","index":4,"rootRunId":"01M5315WMPMWEZSQ394FPRB06N","before":"LR","after":"LRZ","resumed":true} +{"case":"H2","index":5,"rootRunId":"01M53160YCCRHT3XG4NWHGNJY2","before":"LR","after":"LRZ","resumed":true} +{"done":true,"cases":10,"repetitions":6} diff --git a/evidence/native-parallel-review6/linux-review5-exact.log b/evidence/native-parallel-review6/linux-review5-exact.log new file mode 100644 index 000000000..9e4ffa0a7 --- /dev/null +++ b/evidence/native-parallel-review6/linux-review5-exact.log @@ -0,0 +1,43 @@ +{"name":"Q5","index":0,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5","index":1,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5","index":2,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5","index":3,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5","index":4,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5","index":5,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5n","index":0,"mode":"serial","result":"resumed","before":"abcX","after":"abcXZ"} +{"name":"Q5n","index":1,"mode":"serial","result":"resumed","before":"abcX","after":"abcXZ"} +{"name":"Q5n","index":2,"mode":"serial","result":"resumed","before":"abcX","after":"abcXZ"} +{"name":"Q5n","index":3,"mode":"serial","result":"resumed","before":"abcX","after":"abcXZ"} +{"name":"Q5n","index":4,"mode":"serial","result":"resumed","before":"abcX","after":"abcXZ"} +{"name":"Q5n","index":5,"mode":"serial","result":"resumed","before":"abcX","after":"abcXZ"} +{"name":"Q5h","index":0,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5h","index":1,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5h","index":2,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5h","index":3,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5h","index":4,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5h","index":5,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5w","index":0,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5w","index":1,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5w","index":2,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5w","index":3,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5w","index":4,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5w","index":5,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5wn","index":0,"mode":"serial","result":"resumed","before":"abcX","after":"abcXZ"} +{"name":"Q5wn","index":1,"mode":"serial","result":"resumed","before":"abcX","after":"abcXZ"} +{"name":"Q5wn","index":2,"mode":"serial","result":"resumed","before":"abcX","after":"abcXZ"} +{"name":"Q5wn","index":3,"mode":"serial","result":"resumed","before":"abcX","after":"abcXZ"} +{"name":"Q5wn","index":4,"mode":"serial","result":"resumed","before":"abcX","after":"abcXZ"} +{"name":"Q5wn","index":5,"mode":"serial","result":"resumed","before":"abcX","after":"abcXZ"} +{"name":"Q5wh","index":0,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5wh","index":1,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5wh","index":2,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5wh","index":3,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5wh","index":4,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q5wh","index":5,"mode":"serial","result":"resumed","before":"X","after":"XZ"} +{"name":"Q6Pw","index":0,"mode":"parallel","result":"failed_closed","effects":""} +{"name":"Q6Pw","index":1,"mode":"parallel","result":"failed_closed","effects":""} +{"name":"Q6Pw","index":2,"mode":"parallel","result":"failed_closed","effects":""} +{"name":"Q6Pw","index":3,"mode":"parallel","result":"failed_closed","effects":""} +{"name":"Q6Pw","index":4,"mode":"parallel","result":"failed_closed","effects":""} +{"name":"Q6Pw","index":5,"mode":"parallel","result":"failed_closed","effects":""} +{"done":true,"cases":["Q5","Q5n","Q5h","Q5w","Q5wn","Q5wh","Q6Pw"],"repetitions":6,"replays":0} diff --git a/evidence/native-parallel-review6/linux-rollback-2050.log b/evidence/native-parallel-review6/linux-rollback-2050.log new file mode 100644 index 000000000..85fcb6eef --- /dev/null +++ b/evidence/native-parallel-review6/linux-rollback-2050.log @@ -0,0 +1,7 @@ +{"index":0,"oldExit":1,"oldDiagnostic":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: a","before":"abc","afterOld":"abc","after":"Zabc","resumed":true} +{"index":1,"oldExit":1,"oldDiagnostic":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: a","before":"abc","afterOld":"abc","after":"Zabc","resumed":true} +{"index":2,"oldExit":1,"oldDiagnostic":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: a","before":"abc","afterOld":"abc","after":"Zabc","resumed":true} +{"index":3,"oldExit":1,"oldDiagnostic":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: a","before":"abc","afterOld":"abc","after":"Zabc","resumed":true} +{"index":4,"oldExit":1,"oldDiagnostic":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: a","before":"abc","afterOld":"abc","after":"Zabc","resumed":true} +{"index":5,"oldExit":1,"oldDiagnostic":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: a","before":"abc","afterOld":"abc","after":"Zabc","resumed":true} +{"done":true,"repetitions":6} diff --git a/evidence/native-parallel-review6/linux-rollback-2051.log b/evidence/native-parallel-review6/linux-rollback-2051.log new file mode 100644 index 000000000..85fcb6eef --- /dev/null +++ b/evidence/native-parallel-review6/linux-rollback-2051.log @@ -0,0 +1,7 @@ +{"index":0,"oldExit":1,"oldDiagnostic":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: a","before":"abc","afterOld":"abc","after":"Zabc","resumed":true} +{"index":1,"oldExit":1,"oldDiagnostic":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: a","before":"abc","afterOld":"abc","after":"Zabc","resumed":true} +{"index":2,"oldExit":1,"oldDiagnostic":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: a","before":"abc","afterOld":"abc","after":"Zabc","resumed":true} +{"index":3,"oldExit":1,"oldDiagnostic":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: a","before":"abc","afterOld":"abc","after":"Zabc","resumed":true} +{"index":4,"oldExit":1,"oldDiagnostic":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: a","before":"abc","afterOld":"abc","after":"Zabc","resumed":true} +{"index":5,"oldExit":1,"oldDiagnostic":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: a","before":"abc","afterOld":"abc","after":"Zabc","resumed":true} +{"done":true,"repetitions":6} diff --git a/evidence/native-parallel-review6/linux-upgrade-2050.log b/evidence/native-parallel-review6/linux-upgrade-2050.log new file mode 100644 index 000000000..c061a78fd --- /dev/null +++ b/evidence/native-parallel-review6/linux-upgrade-2050.log @@ -0,0 +1,19 @@ +{"case":"A1","index":0,"rootRunId":"01M531Y50BK7K16VXCKM28REZN","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":1,"rootRunId":"01M531Y8GSHPTG66P45484YPY5","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":2,"rootRunId":"01M531YC1G5G11M1DVA04S5P59","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":3,"rootRunId":"01M531YFZ04BZKMSCWTZ9H1SPA","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":4,"rootRunId":"01M531YM6JSWEJB400HKX1HG0J","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":5,"rootRunId":"01M531YQVXEEVE4CHK99F3XRQK","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":0,"rootRunId":"01M531YWCBEFN4C6HJN3JV6527","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":1,"rootRunId":"01M531Z0RRFQP9V7CWHC20CEXF","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":2,"rootRunId":"01M531Z5SND74F5JWVY0NQRCAM","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":3,"rootRunId":"01M531ZBFT7QPHF2EQE2PY5HD0","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":4,"rootRunId":"01M531ZN0ETZESMC9WDC90TC4Y","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":5,"rootRunId":"01M531ZXWK1C5PSPBGFNX4GYMW","before":"LR","after":"LRZ","resumed":true} +{"case":"N2","index":0,"rootRunId":"01M53207AZXJNV6TK7MXBG20PC","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":1,"rootRunId":"01M5320N4V6CA9CBPSA9MT1G6X","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":2,"rootRunId":"01M5320Z5Z5G67X00194NQX7SH","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":3,"rootRunId":"01M53215BV5DC0WWHX6VYQAGQX","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":4,"rootRunId":"01M5321D6ZAE7KTM1REG11BWM7","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":5,"rootRunId":"01M5321HE5HN8KEYD97EHYQRCM","before":"abc","after":"Zabc","resumed":true} +{"done":true,"cases":3,"repetitions":6} diff --git a/evidence/native-parallel-review6/linux-upgrade-2051.log b/evidence/native-parallel-review6/linux-upgrade-2051.log new file mode 100644 index 000000000..526fe2bad --- /dev/null +++ b/evidence/native-parallel-review6/linux-upgrade-2051.log @@ -0,0 +1,19 @@ +{"case":"A1","index":0,"rootRunId":"01M531VAQ6G0RXRSZ29Q3DCWND","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":1,"rootRunId":"01M531VEDTB65E6JMK8YXWGP7E","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":2,"rootRunId":"01M531VHYJKHPKXFS0PJ53JH1M","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":3,"rootRunId":"01M531VNESK7VXYMTCNNZB7B9B","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":4,"rootRunId":"01M531VS1YTG1D1XEXPK8Z5Z9G","before":"LR","after":"LRZ","resumed":true} +{"case":"A1","index":5,"rootRunId":"01M531VWGZW944PM6J6DG01V00","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":0,"rootRunId":"01M531W01E1B3B6VH3HRP6Y0FT","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":1,"rootRunId":"01M531W35104P3XW9KZ4MBBP12","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":2,"rootRunId":"01M531W63QP7881HP9TAPCT4RK","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":3,"rootRunId":"01M531W948Q14HFJWY8X72XE2R","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":4,"rootRunId":"01M531WC7GV51PEEHKAPGXVD04","before":"LR","after":"LRZ","resumed":true} +{"case":"B1","index":5,"rootRunId":"01M531WF9WZCFQBR8YGVGGHBJC","before":"LR","after":"LRZ","resumed":true} +{"case":"N2","index":0,"rootRunId":"01M531WJ73JAPSF082MFXZ9SHP","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":1,"rootRunId":"01M531WP069PG4C93D2FTEYR31","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":2,"rootRunId":"01M531WSRFR5G6QJWB38TZ2F81","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":3,"rootRunId":"01M531WXGYZ29BBXZKDR8X59JW","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":4,"rootRunId":"01M531X194KAHHX8070K44X5HK","before":"abc","after":"Zabc","resumed":true} +{"case":"N2","index":5,"rootRunId":"01M531X50900RS2TCVWTX2BYV3","before":"abc","after":"Zabc","resumed":true} +{"done":true,"cases":3,"repetitions":6} diff --git a/evidence/native-parallel-review6/mac-final-live.log b/evidence/native-parallel-review6/mac-final-live.log new file mode 100644 index 000000000..79dc3e13d --- /dev/null +++ b/evidence/native-parallel-review6/mac-final-live.log @@ -0,0 +1,79 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-parallel-eligibility.test.ts (8 tests) 25ms + ✓ tests/journal-client-step-env.test.ts (8 tests) 14ms + ✓ tests/authored-flow-lifecycle-executor.test.ts (42 tests) 883ms + ✓ authored flow lifecycle through the journal executor > closes an already queued ninth child as soon as a violation is caught 311ms + ✓ tests/authored-step-secrets-live.test.ts (2 tests) 5897ms + ✓ an authored shell child sees a delivered token only when its own f.run grants it 4709ms + ✓ parallel authored shell children keep their own secret grants 1187ms +stdout | tests/authored-parallel-run-live.test.ts > parallel authored deterministic steps > overlaps two sleep 2 commands started in Promise.all +parallel sleep 2 elapsed: 2004 ms + +stdout | tests/authored-parallel-run-live.test.ts > parallel authored deterministic steps > starts a fast branch dependent before a slow sibling completes +fast dependent started after: 1336 ms + + ❯ tests/authored-parallel-run-live.test.ts (41 tests | 1 failed) 586043ms + ✓ parallel authored deterministic steps > keeps a re-exported body serial after a first step and reuses completed effects on resume 6970ms + ✓ parallel authored deterministic steps > keeps a re-exported body serial with the group first and reuses completed effects on resume 2789ms + ✓ parallel authored deterministic steps > refuses an imported Promise.all patch before admitting another parallel effect 1214ms + ✓ parallel authored deterministic steps > fails closed on the reviewer imported patch during a prior step 1073ms + ✓ parallel authored deterministic steps > overlaps two sleep 2 commands started in Promise.all 5439ms + ✓ parallel authored deterministic steps > starts a fast branch dependent before a slow sibling completes 6985ms + ✓ parallel authored deterministic steps > keeps declaration order when the later child finishes first 3795ms + ✓ parallel authored deterministic steps > admits at most eight deterministic children at once 2960ms + ✓ parallel authored deterministic steps > does not admit a queued child after a sibling fails 2765ms + ✓ parallel authored deterministic steps > replays a completed peer and resumes an unfinished peer after a crash 3538ms + ✓ parallel authored deterministic steps > replays follow-up steps in parallel branches after a crash 5281ms + ✓ parallel authored deterministic steps > does not replay a completed effect after a crash: 'two branches that each join two runs' 4475ms + ✓ parallel authored deterministic steps > does not replay a completed effect after a crash: 'a chain beside a branch with a join' 2594ms + ✓ parallel authored deterministic steps > resumes a sequential 2.0.50 run without replaying completed effects 2317ms + ✓ parallel authored deterministic steps > refuses a parallel v2 root under 2.0.50 and lets the new CLI resume it 1684ms + ✓ parallel authored deterministic steps > keeps a 'race' flow running on serial fallback without replay 2362ms + ✓ parallel authored deterministic steps > keeps a 'any' flow running on serial fallback without replay 2757ms + ✓ parallel authored deterministic steps > keeps a 'eager' flow running on serial fallback without replay 2219ms + ✓ parallel authored deterministic steps > resumes 'llm' branches without replaying completed effects 2648ms + ✓ parallel authored deterministic steps > resumes 'agent' branches without replaying completed effects 2886ms + ✓ parallel authored deterministic steps > resumes 'dispatch' branches without replaying completed effects 2303ms + ✓ parallel authored deterministic steps > resumes 2.0.50 consecutive Promise.all groups after run-4 without replay 1907ms + ✓ parallel authored deterministic steps > resumes 2.0.50 consecutive Promise.all groups after run-5 without replay 1498ms + ✓ parallel authored deterministic steps > keeps 'closure-shared readiness' serial and replays no completed effect 9605ms + ✓ parallel authored deterministic steps > keeps 'shared completion-order array' serial and replays no completed effect 11683ms + ✓ parallel authored deterministic steps > keeps 'deep non-step joins with a swallowed …' serial and replays no completed effect 8616ms + ✓ parallel authored deterministic steps > keeps done inside a branch on the established serial scheduler 7416ms + ✓ parallel authored deterministic steps > retains the base failure when a branch completes before its sibling continues 14023ms + ✓ parallel authored deterministic steps > keeps an arguments-alias LLM body serial across six resumes 60335ms + ✓ parallel authored deterministic steps > keeps 'bound module Promise' serial without replay across six resumes 17850ms + ✓ parallel authored deterministic steps > keeps 'hand-written module Promise' serial without replay across six resumes 13482ms + ✓ parallel authored deterministic steps > keeps 'module Promise class' serial without replay across six resumes 17216ms + ✓ parallel authored deterministic steps > keeps 'module Promise Native branches' serial without replay across six resumes 17299ms + ✓ parallel authored deterministic steps > keeps 'imported Bluebird Promise Native bran…' serial without replay across six resumes 89118ms + ✓ parallel authored deterministic steps > keeps 'empty async branches' serial without replay across six resumes 16611ms + ✓ parallel authored deterministic steps > keeps a Bluebird group of direct f.run calls serial across six resumes 15255ms + × parallel authored deterministic steps > does not replay a completed effect after 'imported timer helper' reorder 66087ms + → expected [ +0, 1 ] to include null + ✓ parallel authored deterministic steps > does not replay a completed effect after 'for-await timer' reorder 29218ms + ✓ parallel authored deterministic steps > resumes 2.0.50 A1 nested joins without replay 56221ms + ✓ parallel authored deterministic steps > resumes 2.0.50 B1 chain beside join without replay 38283ms + ✓ parallel authored deterministic steps > resumes 2.0.50 N2 independent dependents without replay 25253ms + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-parallel-run-live.test.ts > parallel authored deterministic steps > does not replay a completed effect after 'imported timer helper' reorder +AssertionError: expected [ +0, 1 ] to include null + ❯ tests/authored-parallel-run-live.test.ts:1044:22 + 1042| writeFileSync(`${fixture.root}/release`, ''); + 1043| const resumed = fixture.invoke('resume', '--no-observer-link', '… + 1044| expect([0, 1]).toContain(resumed.status); + | ^ + 1045| const effects = [...readFileSync(`${fixture.root}/effects`, 'utf… + 1046| for (const effect of ['A', 'B', 'C', 'L']) expect(effects.filter… + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed | 4 passed (5) + Tests 1 failed | 100 passed (101) + Start at 21:22:04 + Duration 590.93s (transform 2.64s, setup 105ms, collect 14.58s, tests 592.86s, environment 0ms, prepare 617ms) + diff --git a/evidence/native-parallel-review6/mac-imported-timer-isolated.log b/evidence/native-parallel-review6/mac-imported-timer-isolated.log new file mode 100644 index 000000000..d8cdff90b --- /dev/null +++ b/evidence/native-parallel-review6/mac-imported-timer-isolated.log @@ -0,0 +1,10 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-parallel-run-live.test.ts > parallel authored deterministic steps > does not replay a completed effect after 'imported timer helper' reorder 175131ms + + Test Files 1 passed (1) + Tests 1 passed | 40 skipped (41) + Start at 21:32:08 + Duration 199.47s (transform 4.58s, setup 15ms, collect 23.90s, tests 175.13s, environment 0ms, prepare 165ms) + diff --git a/evidence/native-parallel-review6/native-overlap.mjs b/evidence/native-parallel-review6/native-overlap.mjs new file mode 100644 index 000000000..eacd8de00 --- /dev/null +++ b/evidence/native-parallel-review6/native-overlap.mjs @@ -0,0 +1,81 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { spawn } from 'node:child_process'; + +const base = '/bench/node_modules/@relayflows/sdk/dist/cli.js'; +const head = '/bench/sdk-head/dist/cli.js'; +const daemon = '/bench/node_modules/@relayflows/runtime-linux-x64/bin/relayflowd'; +const samples = { base: [], head: [] }; + +function percentile(values, p) { + const sorted = [...values].sort((a, b) => a - b); + return sorted[Math.min(sorted.length - 1, Math.ceil(p * sorted.length) - 1)]; +} + +async function one(side, index) { + const root = fs.mkdtempSync('/bench/native-overlap-'); + const data = path.join(root, 'data'); + fs.writeFileSync(path.join(root, 'package.json'), '{"type":"module"}'); + fs.symlinkSync('/bench/node_modules', path.join(root, 'node_modules')); + const branch = label => `const ${label} = async () => { + await f.run('date +%s%3N > ${label}-start; sleep 0.3; date +%s%3N > ${label}-end'); + await f.run('date +%s%3N > ${label}-dependent-start; sleep 0.1; date +%s%3N > ${label}-dependent-end'); + };`; + fs.writeFileSync(path.join(root, 'native.flow.ts'), `import { flow } from '@relayflows/surface'; +export default flow('native-overlap', async f => { + ${['a', 'b', 'c'].map(branch).join('\n')} + await Promise.all([a(), b(), c()]); + f.done('success'); +});\n`); + const cli = side === 'head' ? head : base; + const started = Date.now(); + try { + const child = spawn(process.execPath, [cli, 'run', '--no-observer-link', '--json', '--data-dir', data, + path.join(root, 'native.flow.ts'), '--input', '{}'], { + cwd: root, env: { ...process.env, RELAYFLOWD_BIN: daemon }, stdio: ['ignore', 'pipe', 'pipe'], + }); + let output = ''; + child.stdout.on('data', data => { output += data; }); + child.stderr.on('data', data => { output += data; }); + const result = await new Promise(resolve => child.once('close', (code, signal) => resolve({ code, signal }))); + const cliMs = Date.now() - started; + if (result.code !== 0) throw new Error(`${side} run failed: ${output}`); + const read = name => Number(fs.readFileSync(path.join(root, name), 'utf8').trim()); + const routes = ['a', 'b', 'c'].map(label => ({ start: read(`${label}-start`), end: read(`${label}-end`) })); + const dependents = ['a', 'b', 'c'].map(label => ({ + start: read(`${label}-dependent-start`), end: read(`${label}-dependent-end`), + })); + const routeStartSpreadMs = Math.max(...routes.map(span => span.start)) - Math.min(...routes.map(span => span.start)); + const routeOverlap = Math.max(...routes.map(span => span.start)) < Math.min(...routes.map(span => span.end)); + const dependentOverlap = Math.max(...dependents.map(span => span.start)) + < Math.min(...dependents.map(span => span.end)); + const bodyMs = Math.max(...dependents.map(span => span.end)) - Math.min(...routes.map(span => span.start)); + const sample = { side, index, cliMs, bodyMs, routeStartSpreadMs, routeOverlap, dependentOverlap }; + samples[side].push(sample); + console.log(JSON.stringify(sample)); + } finally { + const connection = path.join(data, 'connection.json'); + if (fs.existsSync(connection)) { + const pid = JSON.parse(fs.readFileSync(connection, 'utf8')).pid; + try { process.kill(pid, 'SIGKILL'); } + catch (error) { if (error.code !== 'ESRCH') throw error; } + } + fs.rmSync(root, { recursive: true, force: true }); + } +} + +for (let index = 0; index < 10; index++) { + await one('base', index); + await one('head', index); +} +for (const side of ['base', 'head']) { + const values = samples[side]; + console.log(JSON.stringify({ side, summary: { + cliP50Ms: percentile(values.map(value => value.cliMs), 0.5), + cliP95Ms: percentile(values.map(value => value.cliMs), 0.95), + bodyP50Ms: percentile(values.map(value => value.bodyMs), 0.5), + routeStartSpreadP50Ms: percentile(values.map(value => value.routeStartSpreadMs), 0.5), + routeOverlap: values.filter(value => value.routeOverlap).length, + dependentOverlap: values.filter(value => value.dependentOverlap).length, + } })); +} diff --git a/evidence/native-parallel-review6/review5-exact.mjs b/evidence/native-parallel-review6/review5-exact.mjs new file mode 100644 index 000000000..382102ae4 --- /dev/null +++ b/evidence/native-parallel-review6/review5-exact.mjs @@ -0,0 +1,195 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { execFileSync, spawn } from 'node:child_process'; + +// Source blocks are loaded from the copied reviewer brief byte for byte. +const brief = fs.readFileSync('/bench/review5-fixtures.md', 'utf8'); +const names = ['Q5', 'Q5n', 'Q5h', 'Q5w', 'Q5wn', 'Q5wh', 'Q6Pw']; +const delays = [0, 60, 130, 220, 330, 450]; +const bin = '/bench/node_modules/.bin/flows'; +const daemon = '/bench/node_modules/@relayflows/runtime-linux-x64/bin/relayflowd'; +const mutation = process.env.REVIEW5_MUTATION; +const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); + +function mutateDist() { + if (mutation === undefined) return; + const dist = '/bench/node_modules/@relayflows/sdk/dist'; + const eligibilityPath = path.join(dist, 'authored-parallel-eligibility.js'); + const eligibility = fs.readFileSync(eligibilityPath, 'utf8'); + const forced = eligibility.replace('export function parallelRunEligible(body, moduleSource) {', + 'export function parallelRunEligible(body, moduleSource) { return true;'); + if (forced === eligibility) throw new Error('eligibility mutation did not match'); + fs.writeFileSync(eligibilityPath, forced); + if (mutation !== 'forced_no_guard') return; + const graphPath = path.join(dist, 'authored-promise-graph.js'); + const graph = fs.readFileSync(graphPath, 'utf8'); + const disabled = graph.replace(/hasUnobservedJoinShape\(asyncId\) \{[\s\S]*?\n \}/u, + 'hasUnobservedJoinShape(asyncId) { return false; }'); + if (disabled === graph) throw new Error('guard mutation did not match'); + fs.writeFileSync(graphPath, disabled); +} + +function sourceBlocks(name) { + const section = brief.split(/^## /mu).find(part => part.startsWith(`${name} (`)); + if (section === undefined) throw new Error(`missing reviewer source for ${name}`); + const blocks = [...section.matchAll(/```(?:ts|js)\n([\s\S]*?)```/gu)].map(match => match[1]); + if (blocks.length !== 2) throw new Error(`${name}: expected two exact source blocks, got ${blocks.length}`); + return blocks; +} + +function start(args, root) { + const child = spawn(process.execPath, [bin, ...args], { + cwd: root, env: { ...process.env, RELAYFLOWD_BIN: daemon }, stdio: ['ignore', 'pipe', 'pipe'], + }); + let output = ''; + child.stdout.on('data', data => { output += data; }); + child.stderr.on('data', data => { output += data; }); + return { + child, + closed: new Promise(resolve => child.once('close', (code, signal) => resolve({ code, signal }))), + get output() { return output; }, + }; +} + +function killSweep(root) { + const connection = path.join(root, 'data/connection.json'); + const targets = new Set(); + if (fs.existsSync(connection)) targets.add(JSON.parse(fs.readFileSync(connection, 'utf8')).pid); + for (const item of fs.readdirSync('/proc')) { + if (!/^\d+$/u.test(item)) continue; + const pid = Number(item); + if (pid === process.pid) continue; + try { + const cwd = fs.readlinkSync(`/proc/${pid}/cwd`); + const cmdline = fs.readFileSync(`/proc/${pid}/cmdline`, 'utf8'); + if (cwd.startsWith(root) || cmdline.includes(root)) targets.add(pid); + } catch { /* process exited during the sweep */ } + } + for (const pid of targets) { + try { process.kill(pid, 'SIGKILL'); } + catch (error) { if (error.code !== 'ESRCH') throw error; } + } +} + +const sql = `import sqlite3,json,sys +db=sqlite3.connect(sys.argv[1]) +row=db.execute("select payload from entries where entry_type='run.spawned' order by seq limit 1").fetchone() +count=db.execute("select count(*) from entries where entry_type='step.completed'").fetchone()[0] +print(json.dumps({'spawned':json.loads(row[0]) if row else None,'completed':count}))`; +function readJournal(file) { + return JSON.parse(execFileSync('python3', ['-c', sql, file], { encoding: 'utf8' })); +} +function spawnedSpec(spawned) { + return spawned?.spec ?? spawned?.payload?.spec ?? spawned?.run?.spec; +} +function journals(root) { + const files = fs.readdirSync(path.join(root, 'data/runs')).filter(name => name.endsWith('.sqlite3')).sort(); + return files.map(file => { + const runId = file.slice(0, -8); + return { runId, ...readJournal(path.join(root, 'data/runs', file)) }; + }); +} +function assertNoJournalReplay(records, rootId) { + const seen = new Map(); + for (const record of records) { + if (record.runId === rootId) continue; + const step = spawnedSpec(record.spawned)?.steps?.[0]; + if (step?.command === undefined) continue; + const earlier = seen.get(step.command); + if (earlier !== undefined && earlier.id !== step.id && (earlier.completed > 0 || record.completed > 0)) + throw new Error(`journal replay: ${step.command}: ${earlier.id} -> ${step.id}`); + seen.set(step.command, { id: step.id, completed: record.completed }); + } +} + +async function one(name, index) { + const root = fs.mkdtempSync(`/bench/review5-${name}-`); + const data = path.join(root, 'data'); + const [entrySource, otherSource] = sourceBlocks(name); + fs.writeFileSync(path.join(root, 'package.json'), '{"type":"module"}'); + fs.symlinkSync('/bench/node_modules', path.join(root, 'node_modules')); + fs.writeFileSync(path.join(root, 'flows.json'), JSON.stringify({ + cli: path.join(root, 'adapter.mjs'), models: ['test-model'], + })); + fs.writeFileSync(path.join(root, 'adapter.mjs'), '#!/usr/bin/env node\nprocess.exit(0);\n', { mode: 0o755 }); + fs.writeFileSync(path.join(root, 'chain.flow.ts'), entrySource); + if (name === 'Q6Pw') { + fs.mkdirSync(path.join(root, 'lib')); + fs.writeFileSync(path.join(root, 'lib/patch.mjs'), otherSource); + } else fs.writeFileSync(path.join(root, 'impl.ts'), otherSource); + let original; + try { + original = start(['run', '--no-observer-link', '--json', '--data-dir', data, + path.join(root, 'chain.flow.ts'), '--input', '{}'], root); + const deadline = Date.now() + 90_000; + let freshFailure; + while (!fs.existsSync(path.join(root, 'stalled'))) { + if (original.child.exitCode !== null || original.child.signalCode !== null) { + freshFailure = await original.closed; + break; + } + if (Date.now() >= deadline) throw new Error(`${name} fresh stall timeout: ${original.output}`); + await sleep(15); + } + if (freshFailure !== undefined) { + if ((name !== 'Q6Pw' && !(name === 'Q5w' && mutation === 'forced_guard')) || freshFailure.code === 0) + throw new Error(`${name} base-working fresh run failed: ${original.output}`); + const effects = fs.existsSync(path.join(root, 'effects')) + ? fs.readFileSync(path.join(root, 'effects'), 'utf8') : ''; + if (effects.includes('X')) throw new Error(`${name} admitted completed X before refusal: ${effects}`); + const records = journals(root); + const rootRecord = records.find(record => spawnedSpec(record.spawned)?.steps?.[0]?.id === 'authored-root'); + if (rootRecord === undefined) throw new Error(`${name} has no authored root`); + const mode = JSON.parse(spawnedSpec(rootRecord.spawned).steps[0].instruction).executionMode; + if (mode !== 'parallel') throw new Error(`${name} expected parallel mode, got ${mode}`); + assertNoJournalReplay(records, rootRecord.runId); + console.log(JSON.stringify({ name, index, mode, result: 'failed_closed', effects })); + return; + } + await sleep(delays[index]); + original.child.kill('SIGKILL'); + await Promise.race([original.closed, sleep(2_000).then(() => { throw new Error('CLI did not exit after SIGKILL'); })]); + killSweep(root); + await sleep(100); + killSweep(root); + fs.writeFileSync(path.join(root, 'release'), ''); + const before = fs.readFileSync(path.join(root, 'effects'), 'utf8'); + const recordsBefore = journals(root); + const rootRecord = recordsBefore.find(record => spawnedSpec(record.spawned)?.steps?.[0]?.id === 'authored-root'); + if (rootRecord === undefined) throw new Error(`${name} has no authored root`); + const mode = JSON.parse(spawnedSpec(rootRecord.spawned).steps[0].instruction).executionMode; + if (name.startsWith('Q5') && mode !== (mutation === undefined ? 'serial' : 'parallel')) + throw new Error(`${name} unexpected mode ${mode}`); + const resumed = start(['resume', '--no-observer-link', '--json', '--data-dir', data, rootRecord.runId], root); + const timer = setTimeout(() => resumed.child.kill('SIGKILL'), 150_000); + const result = await resumed.closed; + clearTimeout(timer); + if (result.code !== 0) throw new Error(`${name} resume failed: ${resumed.output}`); + const after = fs.readFileSync(path.join(root, 'effects'), 'utf8'); + const expected = name.includes('n') || name === 'Q6Pw' ? 'abcXZ' : 'XZ'; + if (mutation === 'forced_no_guard' && name === 'Q5w') { + const replayed = (after.match(/X/gu) ?? []).length > 1; + if (!['XZ', 'XXZ'].includes(after)) throw new Error(`unexpected mutation effects: ${after}`); + console.log(JSON.stringify({ name, index, mode, + result: replayed ? 'replayed_under_mutation' : 'no_replay_this_timing', before, after })); + return replayed; + } + if (after.split('').sort().join('') !== expected.split('').sort().join('')) + throw new Error(`${name} effects replay: before=${before}, after=${after}, expected=${expected}`); + assertNoJournalReplay(journals(root), rootRecord.runId); + console.log(JSON.stringify({ name, index, mode, result: 'resumed', before, after })); + } finally { + if (original?.child.exitCode === null && original.child.signalCode === null) original.child.kill('SIGKILL'); + killSweep(root); + fs.rmSync(root, { recursive: true, force: true }); + } +} + +const requested = process.env.CASE?.split(','); +mutateDist(); +let replays = 0; +for (const name of names.filter(value => requested === undefined || requested.includes(value))) { + for (let index = 0; index < 6; index++) if (await one(name, index) === true) replays++; +} +if (mutation === 'forced_no_guard' && replays === 0) throw new Error('disabled guard did not expose the replay'); +console.log(JSON.stringify({ done: true, cases: requested ?? names, repetitions: 6, mutation, replays })); diff --git a/evidence/native-parallel-review6/review5-fixtures.md b/evidence/native-parallel-review6/review5-fixtures.md new file mode 100644 index 000000000..b86e1b8fa --- /dev/null +++ b/evidence/native-parallel-review6/review5-fixtures.md @@ -0,0 +1,250 @@ +# #667 review 5: exact fixtures for Q5, Q5n, Q5h, Q5w, Q5wn, Q5wh, Q6Pw + +These are byte-for-byte expansions of the scenario generator I ran (`scenarios.mjs`/`h.mjs`, reconstructed from the review-5 transcript, where the generator source appears verbatim). I am not aware of any byte I cannot vouch for. The only things that differ per run are the absolute fixture directory (``) and the stdout of the commands. + +Head under test: `78e7d1fcc0bf58ade55b13c68c347c312b7f85f5`. + +## Environment as run + +- Docker `node:22-trixie` (Node v22.23.3), started with `--init`, x86_64 Linux VM on Docker Desktop. +- **Kernel:** `relayflowd` built in the container from flows `5de41849` (main, v2.0.51; head's kernel is byte-identical) with `cargo build -p relayflowd` (dev profile). Binary: `/w/target-main/debug/relayflowd`. The 2.0.50 runs used a kernel built the same way from `da6eeb3f`. +- **Head CLI:** `packages/sdk` at head, `npm ci && npm run build`, CLI `/w/head/packages/sdk/dist/cli.js`, node_modules `/w/head/packages/sdk/node_modules` (`@relayflows/surface` 2.0.51). Built `dist/authored-parallel-eligibility.js` SHA-256 `682ca6b984deaaaa23e916655688566d841821bc0622b676092abfe92f545634`. +- **Base CLI:** the same build from `5de41849`. The 2.0.50 runs used `npm install @relayflows/sdk@2.0.50` and its `dist/cli.js`. +- `sqlite3` CLI was installed for the journal read-back. +- Up to 3 fixtures ran concurrently (harness `--conc=3`), alongside other scenario batches. + +## Files common to every fixture (`` is the fixture root) + +`/package.json`: +```json +{"type":"module"} +``` + +`/node_modules` is a symlink to the CLI side's node_modules (head: `/w/head/packages/sdk/node_modules`). The symlink lives in a scratch fixture directory, not a worktree. + +`/flows.json` (written by the harness, not used by these shell-only flows): +```json +{"cli":"/adapter.mjs","models":["test-model"]} +``` + +`/adapter.mjs`, chmod 755, never invoked by these flows (`calls.jsonl` stayed empty): +```js +#!/usr/bin/env node +import { receiveWrapperRequest } from '/w/head/testdata/preflight/wrapper-session.mjs'; +import { appendFileSync } from 'node:fs'; +if (process.argv[2] === 'auth') process.exit(0); +const request = await receiveWrapperRequest(); +if (request) { + appendFileSync("/calls.jsonl", JSON.stringify({ instruction: request.instruction.split('\n')[0] }) + '\n'); + process.stdout.write("{\"message\":\"hello from llm\"}"); +} +``` + +## Q5 (re-export chain, group in the first turn) + +`/chain.flow.ts`: +```ts +export { default } from './impl.ts'; +``` + +`/impl.ts`: +```ts +import { flow } from '@relayflows/surface'; +const Promise = { all: globalThis.Promise.all.bind(globalThis.Promise) }; +export default flow('q5', async f => { + await Promise.all([f.run('sleep 0.5; printf A'), f.run('printf B'), f.run('sleep 0.1; printf C')]); + await f.run('printf X >> effects'); + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +}); +``` + +## Q5n (re-export chain, Native shape, group in the first turn) + +`/chain.flow.ts`: +```ts +export { default } from './impl.ts'; +``` + +`/impl.ts`: +```ts +import { flow } from '@relayflows/surface'; +const Promise = { all: globalThis.Promise.all.bind(globalThis.Promise) }; +export default flow('q5n', async f => { + const a = async () => { await f.run('sleep 0.4; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.2; printf C'); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]); + await f.run('printf X >> effects'); + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +}); +``` + +## Q5h (re-export chain, hand-written all, group in the first turn) + +`/chain.flow.ts`: +```ts +export { default } from './impl.ts'; +``` + +`/impl.ts`: +```ts +import { flow } from '@relayflows/surface'; +const Promise = { all: (xs) => new globalThis.Promise((res, rej) => { const out = []; let n = xs.length; xs.forEach((x, i) => globalThis.Promise.resolve(x).then(v => { out[i] = v; if (--n === 0) res(out); }, rej)); }) }; +export default flow('q5h', async f => { + await Promise.all([f.run('sleep 0.5; printf A'), f.run('printf B'), f.run('sleep 0.1; printf C')]); + await f.run('printf X >> effects'); + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +}); +``` + +## Q5w (re-export chain, group after a first step), the 6/6 replay + +`/chain.flow.ts`: +```ts +export { default } from './impl.ts'; +``` + +`/impl.ts`: +```ts +import { flow } from '@relayflows/surface'; +const Promise = { all: globalThis.Promise.all.bind(globalThis.Promise) }; +export default flow('q5w', async f => { + await f.run('sleep 0.2; printf W'); + await Promise.all([f.run('sleep 0.5; printf A'), f.run('printf B'), f.run('sleep 0.1; printf C')]); + await f.run('printf X >> effects'); + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +}); +``` + +## Q5wn (re-export chain, Native shape, group after a first step) + +`/chain.flow.ts`: +```ts +export { default } from './impl.ts'; +``` + +`/impl.ts`: +```ts +import { flow } from '@relayflows/surface'; +const Promise = { all: globalThis.Promise.all.bind(globalThis.Promise) }; +export default flow('q5wn', async f => { + await f.run('sleep 0.2; printf W'); + const a = async () => { await f.run('sleep 0.4; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.2; printf C'); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]); + await f.run('printf X >> effects'); + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +}); +``` + +## Q5wh (re-export chain, hand-written all, group after a first step) + +`/chain.flow.ts`: +```ts +export { default } from './impl.ts'; +``` + +`/impl.ts`: +```ts +import { flow } from '@relayflows/surface'; +const Promise = { all: (xs) => new globalThis.Promise((res, rej) => { const out = []; let n = xs.length; xs.forEach((x, i) => globalThis.Promise.resolve(x).then(v => { out[i] = v; if (--n === 0) res(out); }, rej)); }) }; +export default flow('q5wh', async f => { + await f.run('sleep 0.2; printf W'); + await Promise.all([f.run('sleep 0.5; printf A'), f.run('printf B'), f.run('sleep 0.1; printf C')]); + await f.run('printf X >> effects'); + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +}); +``` + +## Q6Pw (imported module patches Promise.all after the observer is installed) + +`/chain.flow.ts`: +```ts +import { flow } from '@relayflows/surface'; +import './lib/patch.mjs'; +export default flow('q6Pw', async f => { + await f.run('sleep 0.3; printf W'); + const a = async () => { await f.run('sleep 0.4; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.2; printf C'); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]); + await f.run('printf X >> effects'); + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +}); +``` + +`/lib/patch.mjs`: +```js +const I = Function('return this')()['Pro' + 'mise']; +const intrinsicAll = I.all; +const t = setInterval(() => { if (I.all !== intrinsicAll) { clearInterval(t); I.all = function all(xs) { return intrinsicAll.call(I, xs); }; } }, 2); +t.unref(); +``` + +## Driver steps (identical for every scenario above) + +For repetition `i` in 0..5, with `DELAYS = [0, 60, 130, 220, 330, 450]`: + +1. **Create the fixture.** `rm -rf ; mkdir -p ` and write the files above. `` was `/w/runs//--`. +2. **Start the run asynchronously** with cwd `` and env = the container env plus `RELAYFLOWD_BIN=`: + ```sh + node run --no-observer-link --json --data-dir /data /chain.flow.ts --input '{}' + ``` + There was no `--local-agent` flag. The CLI starts the daemon itself. +3. **Wait for the stall.** Poll every 15 ms for `/stalled`, up to 90 s, or until the CLI exits. + - If the CLI exits first, the run is a fresh-run outcome: record its exit code and diagnostics (this is where Q5/Q5n/Q5h stop at head). +4. **Kill.** Once `stalled` exists: + - Sleep `DELAYS[i]` ms, then SIGKILL the CLI and wait up to 2 s for it to exit. + - SIGKILL the daemon pid read from `/data/connection.json`, plus every process whose `/proc//cwd` starts with `` or whose `/proc//cmdline` contains ``. This catches the `sleep 120` shell. + - Sleep 100 ms and repeat that whole kill sweep once. +5. **Release.** Create an empty `/release`. +6. **Find the root run id.** List `/data/runs/*.sqlite3` sorted by name (ULID). For each, read `select payload from entries where entry_type='run.spawned' order by seq limit 1`. The root is the first one whose `spec.steps[0].id === 'authored-root'`. The same read gave the mode (`JSON.parse(spec.steps[0].instruction).executionMode`). +7. **Resume synchronously,** same cwd and env, 150 s timeout: + ```sh + node resume --no-observer-link --json --data-dir /data + ``` +8. **Clean up.** Repeat the kill sweep from step 4, then read the results. + +Start and resume used the same side: head/head, main/main, or 2.0.50/2.0.50. + +## Assertions + +- **Effects:** read `/effects`. Only the shell commands that append to `effects` count; W/A/B/C print to stdout only. +- **Replay (primary):** any letter appears more than once. +- **Replay (journal cross-check):** + - For every child run (each non-root `*.sqlite3`), take the first `run.spawned` `spec.steps[0].command` and its step id. + - Count `step.completed` entries with `select count(*) from entries where entry_type='step.completed'`. + - A replay is flagged when the same command appears under two different step ids and at least one of them completed. +- **Pass:** the resume exits 0 and neither replay check fires. +- **Expected effects.** Head printed the same letters, in branch completion order such as `bcaXZ`. + + | Scenario | Effects with no replay | + |---|---| + | Q5, Q5h, Q5w, Q5wh | `XZ` | + | Q5n, Q5wn, Q6Pw | `abcXZ` | + +- **Observed at head:** + + | Scenario | Result | + |---|---| + | Q5w | `XXZ` 6/6, resume exit 0. Journal: `printf X >> effects` admitted as `run-after-caf9…-1` on the first run and `run-after-2477…-1` on resume. | + | Q5wn | `bcaXXZ` 5/6, resume exit 0 | + | Q5wh | `XXZ` 5/6, resume exit 0 | + | Q6Pw | `bcaXXZ` 5/6, resume exit 0 | + | Q5, Q5n, Q5h | no stall; the fresh `run` exits 1 with `diagnostics[].kind = "step_failed"` and the message `cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate`. Q5n had already appended `bca`. | + + Base 2.0.51 passed all seven 6/6. 2.0.50 passed Q5w and Q5wn 6/6 (the others were not run on 2.0.50). + +## Notes for reproducing + +- **Q6Pw timing:** this scenario depends on the patch landing during the 0.3 s `W` step on the first run, and the resume's memoized `W` reaching the group before the 2 ms interval fires. I saw 5/6 replays with the delays above under concurrency 3. +- **Q6Pw without `W`:** Q6P, the same patch with no first step, passes 6/6, because the group is called in the first turn before the patch. +- **Replay rates:** the re-export replays (Q5w/Q5wn/Q5wh) depend only on which member settles last on resume versus the first run. They do not depend on the kill delay. diff --git a/evidence/native-parallel-review6/rollback.mjs b/evidence/native-parallel-review6/rollback.mjs new file mode 100644 index 000000000..75fc7581d --- /dev/null +++ b/evidence/native-parallel-review6/rollback.mjs @@ -0,0 +1,82 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { spawn } from 'node:child_process'; + +const head = '/bench/sdk-head/dist/cli.js'; +const old = '/bench/node_modules/@relayflows/sdk/dist/cli.js'; +const daemon = '/bench/node_modules/@relayflows/runtime-linux-x64/bin/relayflowd'; +const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); + +function start(cli, args, root) { + const child = spawn(process.execPath, [cli, ...args], { + cwd: root, env: { ...process.env, RELAYFLOWD_BIN: daemon }, stdio: ['ignore', 'pipe', 'pipe'], + }); + let output = ''; + child.stdout.on('data', value => { output += value; }); + child.stderr.on('data', value => { output += value; }); + return { child, closed: new Promise(resolve => child.once('close', (code, signal) => resolve({ code, signal }))), + get output() { return output; } }; +} + +function stopDaemon(data) { + const connection = path.join(data, 'connection.json'); + if (!fs.existsSync(connection)) return; + const pid = JSON.parse(fs.readFileSync(connection, 'utf8')).pid; + try { process.kill(pid, 'SIGKILL'); } + catch (error) { if (error.code !== 'ESRCH') throw error; } +} + +async function one(index) { + const root = fs.mkdtempSync('/bench/rollback-'); + const data = path.join(root, 'data'); + fs.writeFileSync(path.join(root, 'package.json'), '{"type":"module"}'); + fs.symlinkSync('/bench/node_modules', path.join(root, 'node_modules')); + const flow = path.join(root, 'rollback.flow.ts'); + fs.writeFileSync(flow, `import { flow } from '@relayflows/surface'; +export default flow('rollback-parallel', async f => { + const a = async () => { await f.run('sleep 0.3; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.3; printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.3; printf C'); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]); + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +});\n`); + let initial; + try { + initial = start(head, ['run', '--no-observer-link', '--json', '--data-dir', data, flow, '--input', '{}'], root); + const deadline = Date.now() + 60_000; + while (!fs.existsSync(path.join(root, 'stalled'))) { + if (initial.child.exitCode !== null || initial.child.signalCode !== null) + throw new Error(`head run failed before stall: ${initial.output}`); + if (Date.now() >= deadline) throw new Error(`head stall timeout: ${initial.output}`); + await sleep(25); + } + const before = fs.readFileSync(path.join(root, 'effects'), 'utf8').split('').sort().join(''); + if (before !== 'abc') throw new Error(`head effects before rollback: ${before}`); + const rootRunId = fs.readdirSync(path.join(data, 'runs')).filter(name => name.endsWith('.sqlite3')).sort()[0].slice(0, -8); + initial.child.kill('SIGKILL'); + await initial.closed; + stopDaemon(data); + fs.writeFileSync(path.join(root, 'release'), ''); + const refused = start(old, ['resume', '--no-observer-link', '--json', '--data-dir', data, rootRunId], root); + const oldResult = await refused.closed; + if (oldResult.code === 0) throw new Error(`old CLI resumed parallel root: ${refused.output}`); + const afterOld = fs.readFileSync(path.join(root, 'effects'), 'utf8').split('').sort().join(''); + if (afterOld !== before) throw new Error(`old CLI replayed effects: ${before} -> ${afterOld}`); + stopDaemon(data); + const resumed = start(head, ['resume', '--no-observer-link', '--json', '--data-dir', data, rootRunId], root); + const newResult = await resumed.closed; + if (newResult.code !== 0) throw new Error(`head failed to resume after rollback refusal: ${resumed.output}`); + const after = fs.readFileSync(path.join(root, 'effects'), 'utf8').split('').sort().join(''); + if (after !== 'Zabc') throw new Error(`head replayed effects after rollback refusal: ${after}`); + console.log(JSON.stringify({ index, oldExit: oldResult.code, oldDiagnostic: refused.output.slice(0, 300), + before, afterOld, after, resumed: true })); + } finally { + if (initial?.child.exitCode === null && initial.child.signalCode === null) initial.child.kill('SIGKILL'); + stopDaemon(data); + fs.rmSync(root, { recursive: true, force: true }); + } +} + +for (let index = 0; index < 6; index++) await one(index); +console.log(JSON.stringify({ done: true, repetitions: 6 })); diff --git a/evidence/native-parallel-review6/verification.md b/evidence/native-parallel-review6/verification.md new file mode 100644 index 000000000..68208a3c0 --- /dev/null +++ b/evidence/native-parallel-review6/verification.md @@ -0,0 +1,51 @@ +# #667 review 5 repair verification + +Candidate source is based on `78e7d1fcc0bf58ade55b13c68c347c312b7f85f5` (2.0.51). The rebuilt SDK's `dist/authored-flow-lifecycle.js` SHA-256 is `933e84fab3c8bc86a40b4799f2b33edee58c75a252a40eb5d4a7d8f6e33e65d2`; eligibility, promise graph and step graph digests are respectively `575d20380baf2f258bd8efa4cb05da2769c7e0c8c9727329f2acd94dcc3921ae`, `4a8bb1a1142fe2650c82b46e77a3d8ea5d6a8ab4b3cb32a527ed1b15228b9d55`, and `c039cfc347cb1a5134b0eae206f9869d7bed7f8c1c950f83a82290ed55e1c436`. The final Linux x64 image is `ms-flows-parallel:review6-final` (`sha256:fd469694f2e49c733bea8375891b88b6bc15b2c6e7dd3c5726784cdfcb35417e`). + +## Reviewer fixtures + +The copied [reviewer fixture brief](review5-fixtures.md) has SHA-256 `6a38c9c39bf448032b114d973201dd42a9d33fc1cbcea6bfd728e7f538f76688`, identical to `~/relay-briefs/ms-flows-parallel-667-review5-fixtures.md`. [review5-exact.mjs](review5-exact.mjs) reads its seven flow and patch source blocks directly. It uses the reviewer's six kill delays `[0, 60, 130, 220, 330, 450]` ms, two process sweeps, root detection from `run.spawned`, and both effect-file and child-journal replay checks. The shell-only fixture's unused adapter is a stub; all flow and patch source blocks are copied verbatim. Journal SQL is run through Python's `sqlite3` module instead of the `sqlite3` CLI. The daemon is the published 2.0.51 Linux x64 binary rather than the reviewer's locally built dev-profile binary. + +```sh +docker run --rm --platform linux/amd64 --init \ + -v "$PWD/evidence/native-parallel-review6/review5-exact.mjs:/bench/review5-exact.mjs:ro" \ + -v "$PWD/evidence/native-parallel-review6/review5-fixtures.md:/bench/review5-fixtures.md:ro" \ + ms-flows-parallel:review6-final node /bench/review5-exact.mjs +``` + +[Final fixture output](linux-review5-exact.log): Q5, Q5n, Q5h, Q5w, Q5wn and Q5wh each resumed 6/6 in serial mode with no duplicate effect or command admitted under a second step ID. Q6Pw failed closed before X in parallel mode 6/6. The Q5 cases remain runnable on fresh starts; the earlier first-turn failure did not recur. + +## Runtime guard mutation + +With only the source eligibility gate forced open, the exact Q5w source fails before X on all six fresh runs ([guard output](linux-forced-guard.log)). With the same forced eligibility and only `hasUnobservedJoinShape()` disabled in the compiled SDK, X was appended twice in 3/6 crash-and-resume runs ([mutation output](linux-forced-no-guard.log)). Both runs used the final image. This mutation changes neither the fixture nor the observer identity check. + +```sh +docker run --rm --platform linux/amd64 --init -e CASE=Q5w -e REVIEW5_MUTATION=forced_guard \ + -v "$PWD/evidence/native-parallel-review6/review5-exact.mjs:/bench/review5-exact.mjs:ro" \ + -v "$PWD/evidence/native-parallel-review6/review5-fixtures.md:/bench/review5-fixtures.md:ro" \ + ms-flows-parallel:review6-final node /bench/review5-exact.mjs +docker run --rm --platform linux/amd64 --init -e CASE=Q5w -e REVIEW5_MUTATION=forced_no_guard \ + -v "$PWD/evidence/native-parallel-review6/review5-exact.mjs:/bench/review5-exact.mjs:ro" \ + -v "$PWD/evidence/native-parallel-review6/review5-fixtures.md:/bench/review5-fixtures.md:ro" \ + ms-flows-parallel:review6-final node /bench/review5-exact.mjs +``` + +## Compatibility and overlap + +- [Prior replay matrix](linux-prior-replay.log): A1, B1, N2, C1e, G1, ANY, I1, H1, K4, H2 each resumed 6/6 without duplicate effects on the candidate before the final narrowing of the observer identity check. +- [2.0.51 → candidate](linux-upgrade-2051.log) and [2.0.50 → candidate](linux-upgrade-2050.log): A1, B1, N2 each resumed 6/6 with no duplicate effects. The only source change after these runs narrowed the observer check from all four intrinsic combinators to `all` and `allSettled`. +- [Candidate → 2.0.51 → candidate](linux-rollback-2051.log) and [candidate → 2.0.50 → candidate](linux-rollback-2050.log): old CLI refused a parallel v2 root 6/6 with `malformed authority metadata`, effects stayed `abc`, then candidate resumed to `Zabc` 6/6. These runs preceded the same observer-check narrowing. +- [Paired Native overlap](linux-native-overlap.log): ten alternating 2.0.51 base and candidate runs, three 300 ms routes each with a 100 ms dependent. Base route and dependent overlap were 0/10; candidate both 10/10. Body p50 was 1611 ms base and 562 ms candidate; route start spread p50 was 746 ms base and 6 ms candidate. The host was shared, so absolute CLI latency is less stable than the overlap and body-time result. This run preceded the same observer-check narrowing. + +Local SDK checks after the final source edit: + +```sh +cd packages/sdk +npm run typecheck:tests +npm run typecheck +npx vitest run tests/authored-flow-lifecycle-executor.test.ts tests/authored-parallel-eligibility.test.ts tests/authored-step-graph.test.ts --reporter=dot +``` + +All 75 focused tests passed, including forced late joins, observer replacement, direct branch dependents and immediate closure of a queued ninth child. The broader authored parallel live suite passed 33 tests (7 published-CLI-dependent tests skipped) before the observer-check narrowing. Its new reviewer Q6Pw and re-export cases also passed in a targeted Mac rerun. + +The [final Mac live run](mac-final-live.log) passed 100 of 101 tests. All new Q5/Q6, secret, Native overlap, legacy-upgrade, rollback, and prior replay cases passed. One six-repeat imported-timer helper test got `status: null` from the fixture's 30-second synchronous CLI timeout during resume. It [passed all six repetitions when rerun alone](mac-imported-timer-isolated.log), taking 175 seconds total. The full-run timeout remains a test reliability concern; the Linux prior replay matrix passed this shape 6/6 and the final exact reviewer matrix passed 42/42. diff --git a/packages/sdk/src/authored-flow-executor.ts b/packages/sdk/src/authored-flow-executor.ts index 1630f444b..b53f5eed5 100644 --- a/packages/sdk/src/authored-flow-executor.ts +++ b/packages/sdk/src/authored-flow-executor.ts @@ -305,10 +305,12 @@ export async function executeAuthoredFlow( let requestedDetail: string | undefined; let firstBodyTurn = true; let parallelViolation: AuthoredFlowExecutionError | undefined; + let closeParallelSlots: ((reason: unknown) => void) | undefined; const qualify = (id: string): string => `${options.stepPrefix ?? ''}${id}`; const branchOrdinals = new Map(); const rejectParallel = (message: string): never => { parallelViolation ??= new AuthoredFlowExecutionError('step_failed', message); + closeParallelSlots?.(parallelViolation); throw parallelViolation; }; const assertParallelRunOnly = (kind: string): void => { @@ -319,6 +321,8 @@ export async function executeAuthoredFlow( const sequence = nextStep++; if (options.executionMode !== 'parallel') return qualify(`${kind}-${sequence}`); if (kind !== 'run') rejectParallel(`parallel f.run body attempted ${kind} before admission`); + if (!lifecycle.combinatorsObserved()) rejectParallel( + 'cannot assign a replay-stable f.run identity: the intrinsic Promise combinator observer was replaced'); const predecessors = lifecycle.invocationPredecessors(); if (predecessors.unregisteredAggregate) rejectParallel( 'cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate'); @@ -356,6 +360,7 @@ export async function executeAuthoredFlow( }, options.executionMode === 'parallel', ); + closeParallelSlots = lowerDeterministic.stop; const worker = authoredWorkerRunner( definition, journal, flowPath, journalSteps, waitOptions, diff --git a/packages/sdk/src/authored-flow-lifecycle.ts b/packages/sdk/src/authored-flow-lifecycle.ts index c3a683f4d..7514d807e 100644 --- a/packages/sdk/src/authored-flow-lifecycle.ts +++ b/packages/sdk/src/authored-flow-lifecycle.ts @@ -42,7 +42,8 @@ const stepOwners = new WeakMap = Object.fromEntri ): Promise { const members = collectMembers(values); if (members === undefined) return native.call(this, values); - const aggregate = native.call(this, members); - activeLifecycle.getStore()?.registerCombinator(members, aggregate, name); - return aggregate; + const lifecycle = activeLifecycle.getStore(); + if (lifecycle === undefined) return native.call(this, members); + return lifecycle.observeCombinator(native, this, members, name); }; Object.defineProperty(observed, 'name', { value: name, configurable: true }); Object.defineProperty(observed, 'length', { value: 1, configurable: true }); @@ -142,7 +143,8 @@ export class AuthoredFlowLifecycle { this.stepGraph = new AuthoredStepGraph( (asyncId) => this.graph.causesOf(asyncId), undefined, - (asyncId) => this.graph.wasAdoptedFromResolvingContext(asyncId), + (asyncId) => this.graph.wasAdoptedFromResolvingContext(asyncId) + || this.graph.hasUnobservedJoinShape(asyncId), ); installPromiseAllObserver(); try { @@ -165,6 +167,7 @@ export class AuthoredFlowLifecycle { values: readonly unknown[], aggregate: Promise, combinator: CombinatorName, + created: ReadonlySet, ): void { const aggregateId = this.graph.idOf(aggregate); if (aggregateId === undefined) return; @@ -190,7 +193,18 @@ export class AuthoredFlowLifecycle { } this.promiseAllGroups.push({ aggregate: aggregateId, members: memberIds }); this.registrations++; - this.stepGraph.registerAggregate(aggregateId, aggregate, combinator, awaitedMembers); + this.stepGraph.registerAggregate(aggregateId, aggregate, combinator, awaitedMembers, created); + } + + observeCombinator( + native: Combinator, + constructor: PromiseConstructor, + values: readonly unknown[], + name: CombinatorName, + ): Promise { + const { value, created } = this.graph.captureCombinator(() => native.call(constructor, values)); + this.registerCombinator(values, value, name, created); + return value; } /** @@ -228,6 +242,12 @@ export class AuthoredFlowLifecycle { return this.stepGraph.predecessorsAt(executionAsyncId()); } + /** The observation contract must still be installed when a child is admitted. */ + combinatorsObserved(): boolean { + return Promise.all === (observedCombinators.all as unknown) + && Promise.allSettled === (observedCombinators.allSettled as unknown); + } + registerInvocation( operation: OperationToken, asyncId: number, diff --git a/packages/sdk/src/authored-parallel-eligibility.ts b/packages/sdk/src/authored-parallel-eligibility.ts index fa329748b..076525b8b 100644 --- a/packages/sdk/src/authored-parallel-eligibility.ts +++ b/packages/sdk/src/authored-parallel-eligibility.ts @@ -148,6 +148,7 @@ function moduleUsesIntrinsicPromise(source: string): boolean { if (ts.isIdentifier(node) && ['Promise', 'globalThis', 'global'].includes(node.text)) return true; return ts.forEachChild(node, touchesPromiseOutsideDefinition) === true; }; + let definesDefaultBody = false; for (const statement of file.statements) { if (ts.isExportAssignment(statement)) { // Only the final body argument is allowed to mention Promise.all. Do @@ -158,6 +159,8 @@ function moduleUsesIntrinsicPromise(source: string): boolean { const args = call.arguments; if (!ts.isArrowFunction(args[args.length - 1]!)) return false; if (args.slice(0, -1).some(touchesPromiseOutsideDefinition)) return false; + if (definesDefaultBody) return false; + definesDefaultBody = true; continue; } if (touchesPromiseOutsideDefinition(statement)) return false; @@ -196,5 +199,7 @@ function moduleUsesIntrinsicPromise(source: string): boolean { ts.forEachChild(node, visit); }; visit(file); - return !unsafe; + // The body may come from another module, where a free Promise name can be + // shadowed without appearing in this source. In that case use serial IDs. + return definesDefaultBody && !unsafe; } diff --git a/packages/sdk/src/authored-promise-graph.ts b/packages/sdk/src/authored-promise-graph.ts index 016651b8f..6d65c337e 100644 --- a/packages/sdk/src/authored-promise-graph.ts +++ b/packages/sdk/src/authored-promise-graph.ts @@ -38,6 +38,7 @@ export class AuthoredPromiseGraph { private readonly attributedRoots = new Map(); private readonly roots = new Set(); private readonly pending = new Set(); + private readonly combinatorCaptures: Set[] = []; private dependencyCache: { readonly start: number; readonly found: ReadonlySet; readonly version: number } | undefined; /** Bumped by every graph change, so derived answers can be cached between changes. */ private changes = 0; @@ -54,6 +55,7 @@ export class AuthoredPromiseGraph { this.triggers.set(asyncId, triggerAsyncId); this.creationContexts.set(asyncId, executionAsyncId()); this.promiseIds.set(resource, asyncId); + for (const capture of this.combinatorCaptures) capture.add(asyncId); this.handles.set(asyncId, resource as Promise); this.pending.add(asyncId); const root = this.roots.has(triggerAsyncId) @@ -103,6 +105,14 @@ export class AuthoredPromiseGraph { return this.promiseIds.get(value); } + /** The intrinsic creates per-member reaction promises as well as its aggregate. */ + captureCombinator(call: () => T): { readonly value: T; readonly created: ReadonlySet } { + const created = new Set(); + this.combinatorCaptures.push(created); + try { return { value: call(), created }; } + finally { this.combinatorCaptures.pop(); } + } + /** Mark a promise whose descendants belong to an authored operation. */ registerRoot(asyncId: number): void { if (asyncId <= 0 || this.roots.has(asyncId)) return; @@ -148,6 +158,18 @@ export class AuthoredPromiseGraph { return causes; } + /** + * A promise created directly in one async context but settled in another + * can be a join. Its resolution edge names only the settling member, so a + * frontier may use it only when a combinator registered all members. + */ + hasUnobservedJoinShape(asyncId: number): boolean { + const trigger = this.triggers.get(asyncId); + const resolution = this.resolutionCauses.get(asyncId); + return trigger !== undefined && trigger === this.creationContexts.get(asyncId) + && resolution !== undefined && resolution !== trigger; + } + wasAdoptedFromResolvingContext(asyncId: number): boolean { return this.adoptedFromResolvingContext.has(asyncId); } @@ -180,6 +202,7 @@ export class AuthoredPromiseGraph { this.attributedRoots.clear(); this.roots.clear(); this.pending.clear(); + this.combinatorCaptures.length = 0; this.dependencyCache = undefined; } diff --git a/packages/sdk/src/authored-step-graph.ts b/packages/sdk/src/authored-step-graph.ts index 28e191b76..75c4c9b42 100644 --- a/packages/sdk/src/authored-step-graph.ts +++ b/packages/sdk/src/authored-step-graph.ts @@ -73,6 +73,8 @@ interface Aggregate { export class AuthoredStepGraph { private readonly stepPromises = new Map(); private readonly aggregates = new Map(); + private readonly registeredAggregates = new Set(); + private readonly registeredCombinatorInternals = new Set(); private readonly registeredMembers = new Set(); private readonly contexts = new Map(); private readonly nodes = new Map(); @@ -81,7 +83,7 @@ export class AuthoredStepGraph { constructor( private readonly causesOf: (asyncId: number) => readonly number[], private readonly walkLimit = MAX_WALK, - private readonly adoptedOutsideCombinator: (asyncId: number) => boolean = () => false, + private readonly unobservedJoinShape: (asyncId: number) => boolean = () => false, ) {} /** A combinator's aggregate and its members, for expansion once it settles. */ @@ -90,7 +92,10 @@ export class AuthoredStepGraph { promise: Promise, combinator: Combinator, members: readonly number[], + created: ReadonlySet = new Set(), ): void { + this.registeredAggregates.add(aggregateId); + for (const id of created) this.registeredCombinatorInternals.add(id); for (const member of members) this.registeredMembers.add(member); const expandsOn = EXPANDS_ON[combinator]; if (expandsOn === undefined || members.length === 0) return; @@ -133,6 +138,8 @@ export class AuthoredStepGraph { release(): void { this.stepPromises.clear(); this.aggregates.clear(); + this.registeredAggregates.clear(); + this.registeredCombinatorInternals.clear(); this.registeredMembers.clear(); this.contexts.clear(); this.nodes.clear(); @@ -155,12 +162,15 @@ export class AuthoredStepGraph { candidates.add(step); continue; } - // An operation promise is already a complete, named frontier. Beyond - // those, an aggregate adopted only from its resolver's context may hide - // other members. Intrinsic Promise.all aggregates are registered before - // settlement and therefore never enter this unsafe path. - unregisteredAggregate ||= this.adoptedOutsideCombinator(current) - && !this.aggregates.has(current) && !this.registeredMembers.has(current); + // A join's resolution edge contains only its settling member. In + // parallel mode the full member list is safe only if our combinator + // observer registered it before the promise settled. The creation and + // resolution contexts also catch an unobserved join created after a + // previous step, where root-adoption alone cannot detect it. + const possibleJoin = this.unobservedJoinShape(current) + && !this.registeredAggregates.has(current) && !this.registeredMembers.has(current) + && !this.registeredCombinatorInternals.has(current); + unregisteredAggregate ||= possibleJoin; const answered = current === start ? undefined : this.contexts.get(current); if (answered !== undefined) { for (const found of answered.steps) candidates.add(found); diff --git a/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts b/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts index 4ba1cb114..460395c8c 100644 --- a/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts +++ b/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts @@ -13,6 +13,16 @@ import { } from './journal-client-loopback.js'; const unobservedAll = Promise.all.bind(Promise); +const handmadeAll = (values: readonly PromiseLike[]): Promise => + new Promise((resolve, reject) => { + const result: T[] = new Array(values.length); + let remaining = values.length; + if (remaining === 0) resolve(result); + values.forEach((value, index) => Promise.resolve(value).then(item => { + result[index] = item; + if (--remaining === 0) resolve(result); + }, reject)); + }); describe('authored flow lifecycle through the journal executor', () => { let path: string; @@ -37,12 +47,14 @@ describe('authored flow lifecycle through the journal executor', () => { const command = step['command'] as string; startedSpecs.push(spec); stepByRun.set(runId, { id: step['id'] as string, command }); - sendResult(ctx, { + const complete = () => sendResult(ctx, { run_id: runId, status: command === 'false' ? 'failed' : 'completed', completion_reason: command === 'false' ? 'step_failed' : 'success', completed_steps: 1, }); + if (command.startsWith('hold-')) setTimeout(complete, 300); + else complete(); }, 'journal.read': (ctx, params) => { const step = stepByRun.get(params.run_id as string)!; @@ -103,6 +115,23 @@ describe('authored flow lifecycle through the journal executor', () => { expect(startedSpecs).toHaveLength(startedBefore); }); + it('closes an already queued ninth child as soon as a violation is caught', async () => { + const startedBefore = startedSpecs.length; + await expect(execute(flow('parallel-queued-violation', async f => { + const children = Array.from({ length: 9 }, (_, index) => f.run(`hold-${index}`)); + const joined = Promise.allSettled(children); + setTimeout(() => { + try { f.llm('unsupported', { output: { type: 'string' } }); } + catch { /* the root failure still owns this scope */ } + }, 30); + await joined; + f.done('success'); + }), { executionMode: 'parallel' })).rejects.toMatchObject({ code: 'step_failed' }); + expect(startedSpecs.slice(startedBefore).map(spec => + (spec['steps'] as Array<{ command: string }>)[0]!.command)) + .toEqual(Array.from({ length: 8 }, (_, index) => `hold-${index}`)); + }); + it('refuses a parallel follow-up through an unobserved Promise.all', async () => { const startedBefore = startedSpecs.length; await expect(execute(flow('parallel-unobserved-aggregate', async f => { @@ -117,6 +146,97 @@ describe('authored flow lifecycle through the journal executor', () => { ]); }); + it('refuses an unobserved join after an earlier step', async () => { + const startedBefore = startedSpecs.length; + await expect(execute(flow('parallel-late-unobserved-aggregate', async f => { + await f.run('printf W'); + await unobservedAll([f.run('printf A'), f.run('printf B'), f.run('printf C')]); + await f.run('printf X'); + f.done('success'); + }), { executionMode: 'parallel' })).rejects.toThrow(/unregistered aggregate/u); + expect(startedSpecs.slice(startedBefore).map(spec => spec['name'])) + .toEqual([ + 'parallel-late-unobserved-aggregate/run-1', + expect.stringMatching(/^parallel-late-unobserved-aggregate\/run-after-/u), + expect.stringMatching(/^parallel-late-unobserved-aggregate\/run-after-/u), + expect.stringMatching(/^parallel-late-unobserved-aggregate\/run-after-/u), + ]); + }); + + it('refuses a hand-written join after an earlier step', async () => { + const startedBefore = startedSpecs.length; + await expect(execute(flow('parallel-late-handmade-aggregate', async f => { + await f.run('printf W'); + await handmadeAll([f.run('printf A'), f.run('printf B')]); + await f.run('printf X'); + f.done('success'); + }), { executionMode: 'parallel' })).rejects.toThrow(/unregistered aggregate/u); + expect(startedSpecs.slice(startedBefore)).toHaveLength(3); + }); + + it('admits sequential awaits in parallel mode', async () => { + await expect(execute(flow('parallel-sequential', async f => { + await f.run('printf A'); + await f.run('printf B'); + await f.run('printf C'); + f.done('success'); + }), { executionMode: 'parallel' })).resolves.toMatchObject({ completionReason: 'success' }); + }); + + it('admits branch dependents after a shared predecessor', async () => { + await expect(execute(flow('parallel-shared-branch-predecessor', async f => { + await f.run('printf W'); + const a = async () => { await f.run('printf A'); await f.run('printf A2'); }; + const b = async () => { await f.run('printf B'); await f.run('printf B2'); }; + await Promise.all([a(), b()]); + await f.run('printf X'); + f.done('success'); + }), { executionMode: 'parallel' })).resolves.toMatchObject({ completionReason: 'success' }); + }); + + it('refuses a follow-up after the Promise observer is replaced between steps', async () => { + const startedBefore = startedSpecs.length; + await expect(execute(flow('parallel-replaced-observer', async f => { + await f.run('printf W'); + const observed = Promise.all; + Promise.all = unobservedAll as typeof Promise.all; + try { + await Promise.all([f.run('printf A'), f.run('printf B')]); + await f.run('printf X'); + } finally { Promise.all = observed; } + f.done('success'); + }), { executionMode: 'parallel' })).rejects.toThrow(/observer was replaced/u); + expect(startedSpecs.slice(startedBefore).map(spec => spec['name'])) + .toEqual(['parallel-replaced-observer/run-1']); + }); + + it('also refuses a replaced Promise.allSettled observer before admission', async () => { + const startedBefore = startedSpecs.length; + await expect(execute(flow('parallel-replaced-all-settled', async f => { + await f.run('printf W'); + const observed = Promise.allSettled; + Promise.allSettled = ((values: Iterable) => observed.call(Promise, values)) as typeof Promise.allSettled; + try { await f.run('printf X'); } + finally { Promise.allSettled = observed; } + f.done('success'); + }), { executionMode: 'parallel' })).rejects.toThrow(/observer was replaced/u); + expect(startedSpecs.slice(startedBefore).map(spec => spec['name'])) + .toEqual(['parallel-replaced-all-settled/run-1']); + }); + + it('keeps an unrelated Promise.race replacement from changing certified all groups', async () => { + await expect(execute(flow('parallel-unrelated-race-patch', async f => { + await f.run('printf W'); + const observed = Promise.race; + Promise.race = ((values: Iterable) => observed.call(Promise, Array.from(values))) as typeof Promise.race; + try { + await Promise.all([f.run('printf A'), f.run('printf B')]); + await f.run('printf X'); + } finally { Promise.race = observed; } + f.done('success'); + }), { executionMode: 'parallel' })).resolves.toMatchObject({ completionReason: 'success' }); + }); + it('admits a parallel follow-up through the observed intrinsic Promise.all', async () => { const startedBefore = startedSpecs.length; await expect(execute(flow('parallel-observed-aggregate', async f => { diff --git a/packages/sdk/tests/authored-parallel-eligibility.test.ts b/packages/sdk/tests/authored-parallel-eligibility.test.ts index e265bad89..86e5a854a 100644 --- a/packages/sdk/tests/authored-parallel-eligibility.test.ts +++ b/packages/sdk/tests/authored-parallel-eligibility.test.ts @@ -128,6 +128,16 @@ describe('parallel run admission', () => { .toBe(false); }); + it('requires the entry module itself to define the body', () => { + const candidate = body(`async f => { + await Promise.all([f.run('A'), f.run('B')]); + await f.run('X'); + f.done('success'); + }`); + expect(eligible(candidate, `export { default } from './impl.ts';`)).toBe(false); + expect(eligible(candidate, `import impl from './impl.ts'; export default impl;`)).toBe(false); + }); + it('keeps groups with empty async branches serial', () => { expect(eligible(body(`async f => { const warm = async () => {}; diff --git a/packages/sdk/tests/authored-parallel-run-live.test.ts b/packages/sdk/tests/authored-parallel-run-live.test.ts index 651a58620..dede1a4f0 100644 --- a/packages/sdk/tests/authored-parallel-run-live.test.ts +++ b/packages/sdk/tests/authored-parallel-run-live.test.ts @@ -1,4 +1,4 @@ -import { existsSync, readFileSync, readdirSync, writeFileSync } from 'node:fs'; +import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs'; import { spawn, spawnSync } from 'node:child_process'; import { afterEach, describe, expect, it } from 'vitest'; import { AUTHORED_STEP_STREAM } from '../src/authored-step-index.js'; @@ -34,6 +34,94 @@ function killDaemon(data: string): void { } describe('parallel authored deterministic steps', () => { + it.each(['after a first step', 'with the group first'])( + 'keeps a re-exported body serial %s and reuses completed effects on resume', async (shape) => { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(fixture.flowPath, `export { default } from './impl.ts';\n`); + writeFileSync(`${fixture.root}/impl.ts`, `import { flow } from '@relayflows/surface'; +const Promise = { all: globalThis.Promise.all.bind(globalThis.Promise) }; +export default flow('reexported-body', async f => { + ${shape === 'after a first step' ? "await f.run('printf W >> effects');" : ''} + await Promise.all([f.run('sleep 0.2; printf A'), f.run('printf B'), f.run('printf C')]); + await f.run('printf X >> effects'); + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +});\n`); + const cli = fixture.invokeAsync('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + const cliExited = new Promise(resolve => cli.once('exit', () => resolve())); + await until(() => existsSync(`${fixture.root}/stalled`) ? true : undefined, 're-export stall'); + const rootRunId = runIds(fixture.data)[0]!; + const reader = new JournalClient(socketPathFor(fixture.data)); + await reader.connect(); + await reader.hello('reexport-serial-test'); + try { + expect(await readAuthoredRootMetadata(reader, rootRunId)) + .toMatchObject({ executionMode: 'serial' }); + } finally { reader.close(); } + expect(readFileSync(`${fixture.root}/effects`, 'utf8')).toBe( + shape === 'after a first step' ? 'WX' : 'X'); + cli.kill('SIGKILL'); + await cliExited; + killDaemon(fixture.data); + writeFileSync(`${fixture.root}/release`, ''); + const resumed = fixture.invoke('resume', '--no-observer-link', '--json', '--data-dir', fixture.data, rootRunId); + expect(resumed.status, resumed.stderr + resumed.stdout).toBe(0); + expect(readFileSync(`${fixture.root}/effects`, 'utf8')).toBe( + shape === 'after a first step' ? 'WXZ' : 'XZ'); + }, 120_000); + + it('refuses an imported Promise.all patch before admitting another parallel effect', () => { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(`${fixture.root}/patch.mjs`, `const intrinsic = Promise.all; +const timer = setInterval(() => { + if (Promise.all === intrinsic) return; + Promise.all = function (values) { return intrinsic.call(Promise, values); }; + clearInterval(timer); +}, 1);\n`); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +import './patch.mjs'; +export default flow('imported-promise-patch', async f => { + await f.run('sleep 0.2; printf W >> effects'); + await Promise.all([f.run('printf A >> effects'), f.run('printf B >> effects')]); + await f.run('printf X >> effects'); + f.done('success'); +});\n`); + const result = fixture.invoke('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + expect(result.status, result.stderr + result.stdout).toBe(1); + expect(readFileSync(`${fixture.root}/effects`, 'utf8')).toBe('W'); + }, 60_000); + + it('fails closed on the reviewer imported patch during a prior step', () => { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + mkdirSync(`${fixture.root}/lib`); + writeFileSync(`${fixture.root}/lib/patch.mjs`, `const I = Function('return this')()['Pro' + 'mise']; +const intrinsicAll = I.all; +const t = setInterval(() => { if (I.all !== intrinsicAll) { clearInterval(t); I.all = function all(xs) { return intrinsicAll.call(I, xs); }; } }, 2); +t.unref();\n`); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +import './lib/patch.mjs'; +export default flow('q6Pw', async f => { + await f.run('sleep 0.3; printf W'); + const a = async () => { await f.run('sleep 0.4; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.2; printf C'); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]); + await f.run('printf X >> effects'); + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +});\n`); + const result = fixture.invoke('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + expect(result.status, result.stderr + result.stdout).toBe(1); + const effects = existsSync(`${fixture.root}/effects`) ? readFileSync(`${fixture.root}/effects`, 'utf8') : ''; + expect(effects).not.toContain('X'); + }, 60_000); + it('overlaps two sleep 2 commands started in Promise.all', () => { const fixture = chainFixture(); closes.push(() => fixture.close()); From e3503c08681c6bab0a53b856dd7e7d821b9245d5 Mon Sep 17 00:00:00 2001 From: Miya Date: Fri, 16 Oct 2026 23:54:10 +0200 Subject: [PATCH 10/18] Certify authored parallel bodies against replay-unsafe joins --- docs/SURFACE.md | 20 +- evidence/native-parallel-review7/COMMANDS.md | 59 +++++ evidence/native-parallel-review7/README.md | 95 +++++++ .../native-parallel-review7/arm-volume-e.log | 37 +++ .../arm-volume-forced.log | 85 +++++++ .../arm-volume-k1-base2051.log | 7 + .../arm-volume-k1-head.log | 7 + .../arm-volume-native.log | 19 ++ .../arm-volume-prior-all.log | 97 ++++++++ .../native-parallel-review7/arm-volume-q.log | 43 ++++ .../arm-volume-r-all.log | 55 +++++ .../arm-volume-rollback2050.log | 31 +++ .../arm-volume-rollback2051.log | 31 +++ .../arm-volume-timing.log | 22 ++ .../arm-volume-upgrade2050.log | 31 +++ .../arm-volume-upgrade2051.log | 31 +++ .../native-parallel-review7/mut-f1-fail.log | 32 +++ .../native-parallel-review7/mut-f1-pass.log | 9 + .../mut-f2-binding-fail.log | 32 +++ .../mut-f2-binding-pass.log | 9 + .../mut-f2-body-fail.log | 32 +++ .../mut-f2-body-pass.log | 9 + .../native-parallel-review7/mut-f3-fail.log | 32 +++ .../native-parallel-review7/mut-f3-pass.log | 9 + .../mutation-proof.log | 183 ++++++++++++++ .../native-parallel-review7/mutation-proof.sh | 74 ++++++ .../native-parallel-review7/raw-logs.tar.gz | Bin 0 -> 6137 bytes .../native-parallel-review7/review6-exact.mjs | 231 ++++++++++++++++++ evidence/native-parallel-review7/s.mjs | 164 +++++++++++++ evidence/native-parallel-review7/s2.mjs | 181 ++++++++++++++ .../native-parallel-review7/sdk-build.log | 3 + .../sdk-dist-hashes.log | 8 + .../sdk-focused-unit.log | 17 ++ .../native-parallel-review7/sdk-npm-ci.log | 16 ++ .../sdk-secrets-live.log | 11 + .../sdk-typecheck-tests.log | 3 + .../native-parallel-review7/sdk-typecheck.log | 3 + evidence/native-parallel-review7/timing.mjs | 96 ++++++++ .../workspace-resolution.log | 4 + packages/sdk/src/authored-flow-executor.ts | 8 +- packages/sdk/src/authored-flow-lifecycle.ts | 30 ++- packages/sdk/src/authored-parallel-body.ts | 66 +++++ .../sdk/src/authored-parallel-eligibility.ts | 36 ++- packages/sdk/src/authored-root.ts | 4 +- packages/sdk/src/authored-step-graph.ts | 26 +- .../authored-flow-lifecycle-executor.test.ts | 91 ++++--- .../sdk/tests/authored-parallel-body.test.ts | 53 ++++ .../authored-parallel-eligibility.test.ts | 19 ++ .../tests/authored-parallel-run-live.test.ts | 15 +- .../sdk/tests/authored-step-graph.test.ts | 20 ++ 50 files changed, 2135 insertions(+), 61 deletions(-) create mode 100644 evidence/native-parallel-review7/COMMANDS.md create mode 100644 evidence/native-parallel-review7/README.md create mode 100644 evidence/native-parallel-review7/arm-volume-e.log create mode 100644 evidence/native-parallel-review7/arm-volume-forced.log create mode 100644 evidence/native-parallel-review7/arm-volume-k1-base2051.log create mode 100644 evidence/native-parallel-review7/arm-volume-k1-head.log create mode 100644 evidence/native-parallel-review7/arm-volume-native.log create mode 100644 evidence/native-parallel-review7/arm-volume-prior-all.log create mode 100644 evidence/native-parallel-review7/arm-volume-q.log create mode 100644 evidence/native-parallel-review7/arm-volume-r-all.log create mode 100644 evidence/native-parallel-review7/arm-volume-rollback2050.log create mode 100644 evidence/native-parallel-review7/arm-volume-rollback2051.log create mode 100644 evidence/native-parallel-review7/arm-volume-timing.log create mode 100644 evidence/native-parallel-review7/arm-volume-upgrade2050.log create mode 100644 evidence/native-parallel-review7/arm-volume-upgrade2051.log create mode 100644 evidence/native-parallel-review7/mut-f1-fail.log create mode 100644 evidence/native-parallel-review7/mut-f1-pass.log create mode 100644 evidence/native-parallel-review7/mut-f2-binding-fail.log create mode 100644 evidence/native-parallel-review7/mut-f2-binding-pass.log create mode 100644 evidence/native-parallel-review7/mut-f2-body-fail.log create mode 100644 evidence/native-parallel-review7/mut-f2-body-pass.log create mode 100644 evidence/native-parallel-review7/mut-f3-fail.log create mode 100644 evidence/native-parallel-review7/mut-f3-pass.log create mode 100644 evidence/native-parallel-review7/mutation-proof.log create mode 100644 evidence/native-parallel-review7/mutation-proof.sh create mode 100644 evidence/native-parallel-review7/raw-logs.tar.gz create mode 100644 evidence/native-parallel-review7/review6-exact.mjs create mode 100644 evidence/native-parallel-review7/s.mjs create mode 100644 evidence/native-parallel-review7/s2.mjs create mode 100644 evidence/native-parallel-review7/sdk-build.log create mode 100644 evidence/native-parallel-review7/sdk-dist-hashes.log create mode 100644 evidence/native-parallel-review7/sdk-focused-unit.log create mode 100644 evidence/native-parallel-review7/sdk-npm-ci.log create mode 100644 evidence/native-parallel-review7/sdk-secrets-live.log create mode 100644 evidence/native-parallel-review7/sdk-typecheck-tests.log create mode 100644 evidence/native-parallel-review7/sdk-typecheck.log create mode 100644 evidence/native-parallel-review7/timing.mjs create mode 100644 evidence/native-parallel-review7/workspace-resolution.log create mode 100644 packages/sdk/src/authored-parallel-body.ts create mode 100644 packages/sdk/tests/authored-parallel-body.test.ts diff --git a/docs/SURFACE.md b/docs/SURFACE.md index a62f31bc2..d6161f63b 100644 --- a/docs/SURFACE.md +++ b/docs/SURFACE.md @@ -975,13 +975,17 @@ The root records its execution mode before its body runs. Parallel mode is selected only for a narrow source grammar: awaited `Promise.all` groups of direct `f.run` calls, and locally declared async branches made only of awaited `f.run` calls or direct run groups. Every branch must contain a direct `f.run`. -The entry module must directly define and export the flow body. Re-exports and -imported flow definitions use serial mode, because their `Promise` binding -belongs to another module. The defining module must leave the intrinsic -`Promise` and `globalThis.Promise` unshadowed; a module that binds either name -uses serial mode. Generated arrays -such as `Array.from` use -serial mode. Branches may not mutate shared values, await +The entry module must import `{ flow }` directly from `@relayflows/surface` and +pass the body arrow literally to `export default flow('name', async f => {...})`. +The entry +has no other top-level statements in parallel mode. Re-exports, +local flow factories, and imported flow definitions use serial mode, because +their body's Promise binding cannot be certified from the entry file. Other +imports also use serial mode because they may alter Promise before the body +starts. The defining module must leave the intrinsic `Promise` and +`globalThis.Promise` unshadowed; a module that binds either name uses serial +mode. Generated arrays such as `Array.from` use serial mode. Branches may not +mutate shared values, await timers or other promises, or call `f.done`; completion belongs at the end of the root body. The check is conservative: an unrecognized source form uses serial mode even when its author knows it would be safe. In parallel mode, @@ -1006,7 +1010,7 @@ its own journal; the root's child index records completion facts as they arrive, readers match them by step id and run id. In parallel mode, if the bounded causal walk cannot identify a follow-up's full predecessor frontier, the frontier passes through an unregistered promise -aggregate, an intrinsic Promise combinator observer has been replaced, a +aggregate, a Promise constructor, method, or combinator has been replaced, a non-run effect appears, or a new initial child appears after the body's first turn, the root fails before admitting that effect rather than issuing an ambiguous replay key. Once this happens, no diff --git a/evidence/native-parallel-review7/COMMANDS.md b/evidence/native-parallel-review7/COMMANDS.md new file mode 100644 index 000000000..85233ca33 --- /dev/null +++ b/evidence/native-parallel-review7/COMMANDS.md @@ -0,0 +1,59 @@ +# Commands and captured output + +These are the literal verification commands, run from the flows worktree root. +The named `ms-flows-parallel-r7` volume held the native arm64 daemon, SDK +builds, reviewer generators, and harness at `/bench`; `review6-exact.mjs` +created and removed each fixture in that volume. Every command's complete +stdout and stderr is in the named log file. + +```sh +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/bench -e RELAYFLOWD_BIN=/bench/relayflowd -e CASE=R1,R1w,R1wn,R2w,R3w,R3,R4w,R1c,R5n node:22-trixie node /bench/cases/review6-exact.mjs > evidence/native-parallel-review7/arm-volume-r-all.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/bench -e RELAYFLOWD_BIN=/bench/relayflowd -e CASE=Q5,Q5n,Q5h,Q5w,Q5wn,Q5wh,Q6Pw node:22-trixie node /bench/cases/review6-exact.mjs > evidence/native-parallel-review7/arm-volume-q.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/bench -e RELAYFLOWD_BIN=/bench/relayflowd -e CASE=E1factory,E2helper,E3dyn,E4json,E4jsonuse,E5ns node:22-trixie node /bench/cases/review6-exact.mjs > evidence/native-parallel-review7/arm-volume-e.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/bench -e RELAYFLOWD_BIN=/bench/relayflowd -e CASE=P1,P1h,P1c,P1n,P1bn,P2,C1e,G1,H1,H2,K4,I1,K2b,K3,K5b,K13b node:22-trixie node /bench/cases/review6-exact.mjs > evidence/native-parallel-review7/arm-volume-prior-all.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/bench -e RELAYFLOWD_BIN=/bench/relayflowd -e CASE=A1,B1,N2 node:22-trixie node /bench/cases/review6-exact.mjs > evidence/native-parallel-review7/arm-volume-native.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/bench -e RELAYFLOWD_BIN=/bench/relayflowd -e CASE=K1 -e EXPECT_BASE_FAILURE=1 node:22-trixie node /bench/cases/review6-exact.mjs > evidence/native-parallel-review7/arm-volume-k1-head.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/bench -e RELAYFLOWD_BIN=/bench/relayflowd -e CASE=K1 -e EXPECT_BASE_FAILURE=1 -e BASELINE=1 -e FIRST_BIN=/bench/sdk-base-2051/dist/cli.js -e RESUME_BIN=/bench/sdk-base-2051/dist/cli.js node:22-trixie node /bench/cases/review6-exact.mjs > evidence/native-parallel-review7/arm-volume-k1-base2051.log 2>&1 +``` + +The upgrade and rollback commands used the published npm SDKs. The 2.0.50 +side used `relayflowd2050` built from `da6eeb3f`; the 2.0.51 side used this +branch's kernel, which matches the published kernel for these cases. + +```sh +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/bench -e RELAYFLOWD_BIN=/bench/relayflowd -e FIRST_DAEMON_BIN=/bench/relayflowd2050 -e RESUME_DAEMON_BIN=/bench/relayflowd -e FIRST_BIN=/bench/p2050/node_modules/@relayflows/sdk/dist/cli.js -e FIXTURE_NODE_MODULES=/bench/p2050/node_modules -e CASE=UCI4,UCI5,UA1,UB1,UN2 -e BASELINE=1 node:22-trixie node /bench/cases/review6-exact.mjs > evidence/native-parallel-review7/arm-volume-upgrade2050.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/bench -e RELAYFLOWD_BIN=/bench/relayflowd -e CASE=UCI4,UCI5,UA1,UB1,UN2 -e BASELINE=1 -e FIRST_BIN=/bench/sdk-base-2051/dist/cli.js node:22-trixie node /bench/cases/review6-exact.mjs > evidence/native-parallel-review7/arm-volume-upgrade2051.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/bench -e RELAYFLOWD_BIN=/bench/relayflowd -e RESUME_DAEMON_BIN=/bench/relayflowd2050 -e FINAL_DAEMON_BIN=/bench/relayflowd -e RESUME_BIN=/bench/p2050/node_modules/@relayflows/sdk/dist/cli.js -e FINAL_BIN=/bench/node_modules/@relayflows/sdk/dist/cli.js -e CASE=RBCI4,RBCI5,RBA1,RBB1,RBN2 -e EXPECT_ROLLBACK_REFUSAL=1 node:22-trixie node /bench/cases/review6-exact.mjs > evidence/native-parallel-review7/arm-volume-rollback2050.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/bench -e RELAYFLOWD_BIN=/bench/relayflowd -e CASE=RBCI4,RBCI5,RBA1,RBB1,RBN2 -e EXPECT_ROLLBACK_REFUSAL=1 -e RESUME_BIN=/bench/sdk-base-2051/dist/cli.js -e FINAL_BIN=/bench/node_modules/@relayflows/sdk/dist/cli.js node:22-trixie node /bench/cases/review6-exact.mjs > evidence/native-parallel-review7/arm-volume-rollback2051.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/bench node:22-trixie node /bench/cases/timing.mjs > evidence/native-parallel-review7/arm-volume-timing.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/bench -e RELAYFLOWD_BIN=/bench/relayflowd -e FORCE_ELIGIBLE=1 -e CASE=FRrace,FRany,FRnestrace,FRdefer,FRthen,FRcatch,FRwrap,FRsettled,FRset,FRgen,FRthenagg,FRfinally,FRiter,FRmicro node:22-trixie node /bench/cases/review6-exact.mjs > evidence/native-parallel-review7/arm-volume-forced.log 2>&1 +``` + +The forced command modified only the staged SDK dist. After it exited, +`authored-parallel-eligibility.js` was restored from the pristine `sdk-head` +copy and compared with `cmp`. + +Mutation commands and complete fail/pass output are captured by: + +```sh +bash evidence/native-parallel-review7/mutation-proof.sh > evidence/native-parallel-review7/mutation-proof.log 2>&1 +``` + +Final SDK checks ran from `packages/sdk` after the mutations were restored: + +```sh +npm run build > ../../evidence/native-parallel-review7/sdk-build.log 2>&1 +npm run typecheck > ../../evidence/native-parallel-review7/sdk-typecheck.log 2>&1 +npm run typecheck:tests > ../../evidence/native-parallel-review7/sdk-typecheck-tests.log 2>&1 +npx vitest run tests/authored-parallel-body.test.ts tests/authored-parallel-eligibility.test.ts tests/authored-step-graph.test.ts tests/authored-flow-lifecycle-executor.test.ts tests/authored-step-secrets.test.ts tests/communication-feature-secret-scoping.test.ts tests/worker-feature-secret-scoping.test.ts > ../../evidence/native-parallel-review7/sdk-focused-unit.log 2>&1 +RELAYFLOWD_BIN="$HOME/.relayflows-toolchain/target/ms-step-secrets/debug/relayflowd" npx vitest run tests/authored-step-secrets-live.test.ts > ../../evidence/native-parallel-review7/sdk-secrets-live.log 2>&1 +npm ci > ../../evidence/native-parallel-review7/sdk-npm-ci.log 2>&1 +{ ls -ld node_modules node_modules/@relayflows/surface; node -p "require.resolve('@relayflows/surface')"; node -p "require('node:fs').realpathSync('node_modules/@relayflows/surface')"; } > ../../evidence/native-parallel-review7/workspace-resolution.log 2>&1 +``` + +The built source and the staged Docker SDK were compared from the worktree root: + +```sh +shasum -a 256 packages/sdk/dist/authored-parallel-eligibility.js packages/sdk/dist/authored-parallel-body.js packages/sdk/dist/authored-flow-lifecycle.js packages/sdk/dist/authored-step-graph.js > evidence/native-parallel-review7/sdk-dist-hashes.log +docker run --rm --platform linux/arm64 -v ms-flows-parallel-r7:/bench node:22-trixie sha256sum /bench/sdk-head/dist/authored-parallel-eligibility.js /bench/sdk-head/dist/authored-parallel-body.js /bench/sdk-head/dist/authored-flow-lifecycle.js /bench/sdk-head/dist/authored-step-graph.js >> evidence/native-parallel-review7/sdk-dist-hashes.log +``` diff --git a/evidence/native-parallel-review7/README.md b/evidence/native-parallel-review7/README.md new file mode 100644 index 000000000..433f6378a --- /dev/null +++ b/evidence/native-parallel-review7/README.md @@ -0,0 +1,95 @@ +# Review 6 replay evidence for #667 + +The candidate is based on flows 2.0.51. The arm64 runs used `node:22-trixie` and +`relayflowd` built from this branch's kernel. Published SDKs 2.0.50 and 2.0.51 +came from npm; the 2.0.50 daemon was built from `da6eeb3f`. The harness, +dependencies, fixtures, and journals lived in a named Docker volume. Each +matrix ran in one container at a time, with six kill offsets (0–450 ms). + +`s.mjs` and `s2.mjs` preserve the reviewer's scenario generators. The review +did not preserve an R5n generator block, so `review6-exact.mjs` reconstructs +its entry from the reported source and uses the reported patch module exactly. +The harness checks effect uniqueness, completed run identities, execution mode, +and refusal before new effects for rollback. It scopes identical commands in +separate dispatched child flows by dispatch id. +`COMMANDS.md` records each literal Docker command; the log files below are the +complete captured stdout and stderr for those commands. +The original log bytes are also in `raw-logs.tar.gz`; the browsable `.log` +files differ only by normalized trailing blank lines so `git diff --check` +passes. + +| Matrix | Result | Log | +| --- | ---: | --- | +| R1/R1w/R1wn/R2w/R3/R3w/R4w/R1c/R5n | 54/54 clean, serial | `arm-volume-r-all.log` | +| Q5/Q5n/Q5h/Q5w/Q5wn/Q5wh/Q6Pw | 42/42 clean, serial | `arm-volume-q.log` | +| E1–E5 entry variants | 36/36 clean, serial | `arm-volume-e.log` | +| Prior P/C/G/H/K/I variants | 96/96 clean, serial | `arm-volume-prior-all.log` | +| A1/B1/N2 | 18/18 clean, parallel | `arm-volume-native.log` | +| 2.0.50 → candidate, CI4/CI5/A1/B1/N2 | 30/30 clean | `arm-volume-upgrade2050.log` | +| 2.0.51 → candidate, same shapes | 30/30 clean | `arm-volume-upgrade2051.log` | +| Candidate → 2.0.50, same shapes | 30/30 safe rollback | `arm-volume-rollback2050.log` | +| Candidate → 2.0.51, same shapes | 30/30 safe rollback | `arm-volume-rollback2051.log` | +| Forced eligibility, all 14 FR variants | 84/84 failed closed, zero effects | `arm-volume-forced.log` | + +K1 is a known base failure: candidate and published 2.0.51 both report +`run_admission_conflict` in 6/6 sweeps with effects `ABLC` and no duplicates +(`arm-volume-k1-head.log`, `arm-volume-k1-base2051.log`). Q6Pw, which failed +on fresh runs in review 6, now uses serial mode and completes 6/6. + +The forced run applied the reviewer's `parallelRunEligible` return-true mutation +to the built SDK. The separate execution-time body certificate rejected every +unsupported shape before admitting an effect. The pristine built file was +restored and byte-compared afterward. +The final local build matches the staged Docker build for the eligibility, +body, lifecycle, and step-graph modules byte-for-byte (`sdk-dist-hashes.log`). + +## Native timing + +`timing.mjs` runs three 300 ms routes, each with a 100 ms dependent, then a +join. It alternates published 2.0.51 and candidate runs in ten warm pairs, +after one warm-up of each. Journal `at_ms` values measure body and route spans; +wall time measures the CLI. See `arm-volume-timing.log` for all samples. + +| Metric | Published 2.0.51 | Candidate | +| --- | ---: | ---: | +| Body p50 / p95 | 1,379 / 1,400 ms | 463 / 499 ms | +| CLI p50 / p95 | 1,848 / 1,900 ms | 1,125 / 1,153 ms | +| Route start spread p50 | 662 ms | 5 ms | +| Route overlap | 0/10 | 10/10 | +| Dependent overlap | 0/10 | 10/10 | + +## Focused checks + +- `npm run build`, `npm run typecheck`, and `npm run typecheck:tests` passed + (`sdk-build.log`, `sdk-typecheck.log`, `sdk-typecheck-tests.log`). +- Seven focused Vitest files passed, 87 tests total, including the structural + frontier, source identity, and Promise-intrinsic assertions + (`sdk-focused-unit.log`). +- `authored-step-secrets-live.test.ts` passed both local-daemon tests, including + different grants in parallel shell children (`sdk-secrets-live.log`). +- A real `npm ci` completed in the SDK worktree. `node_modules` and its Surface + package are directories, and Surface resolves inside this worktree + (`sdk-npm-ci.log`, `workspace-resolution.log`). + +Four temporary source mutations were tested with the literal command +`bash evidence/native-parallel-review7/mutation-proof.sh > evidence/native-parallel-review7/mutation-proof.log 2>&1`. +The script captures each failing assertion, restores the source byte-for-byte +(`cmp` and SHA-256), and captures a passing rerun. `mutation-proof.log` has the +commands, hashes, and complete output. + +| Removed guard | Selected test result | Log | +| --- | --- | --- | +| User-built join refusal in `AuthoredStepGraph` | 1 failure: user-built join was trusted | `mut-f1-fail.log`, `mut-f1-pass.log` | +| Direct Surface import requirement | 1 failure: entry identity | `mut-f2-binding-fail.log`, `mut-f2-binding-pass.log` | +| Exact exported body comparison | 1 failure: entry identity | `mut-f2-body-fail.log`, `mut-f2-body-pass.log` | +| `Promise.resolve` identity check | 1 failure: replacement went undetected | `mut-f3-fail.log`, `mut-f3-pass.log` | + +The entry identity test uses the actual body with a missing or local Surface +binding, as well as a decoy body with a direct import. The step-graph test +distinguishes a user-built join from a certified branch call. The intrinsic +test replaces every Promise method plus the constructor. The forced FR matrix +checks the execution-time certificate independently of entry eligibility. + +An earlier attempt bind-mounted fixtures from the USB Paris Drive and Docker +Desktop became unresponsive after 31 clean R sweeps. The complete matrices +above use a named volume and did not repeat that host failure. diff --git a/evidence/native-parallel-review7/arm-volume-e.log b/evidence/native-parallel-review7/arm-volume-e.log new file mode 100644 index 000000000..29e075da2 --- /dev/null +++ b/evidence/native-parallel-review7/arm-volume-e.log @@ -0,0 +1,37 @@ +{"case":"E1factory","index":0,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"E1factory","index":1,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"E1factory","index":2,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"E1factory","index":3,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"E1factory","index":4,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"E1factory","index":5,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"E2helper","index":0,"mode":"serial","outcome":"resumed","before":"ba","after":"baZ"} +{"case":"E2helper","index":1,"mode":"serial","outcome":"resumed","before":"ba","after":"baZ"} +{"case":"E2helper","index":2,"mode":"serial","outcome":"resumed","before":"ba","after":"baZ"} +{"case":"E2helper","index":3,"mode":"serial","outcome":"resumed","before":"ba","after":"baZ"} +{"case":"E2helper","index":4,"mode":"serial","outcome":"resumed","before":"ba","after":"baZ"} +{"case":"E2helper","index":5,"mode":"serial","outcome":"resumed","before":"ba","after":"baZ"} +{"case":"E3dyn","index":0,"mode":"serial","outcome":"resumed","before":"ab","after":"abZ"} +{"case":"E3dyn","index":1,"mode":"serial","outcome":"resumed","before":"ab","after":"abZ"} +{"case":"E3dyn","index":2,"mode":"serial","outcome":"resumed","before":"ab","after":"abZ"} +{"case":"E3dyn","index":3,"mode":"serial","outcome":"resumed","before":"ab","after":"abZ"} +{"case":"E3dyn","index":4,"mode":"serial","outcome":"resumed","before":"ab","after":"abZ"} +{"case":"E3dyn","index":5,"mode":"serial","outcome":"resumed","before":"ab","after":"abZ"} +{"case":"E4json","index":0,"mode":"serial","outcome":"resumed","before":"abc","after":"abcZ"} +{"case":"E4json","index":1,"mode":"serial","outcome":"resumed","before":"abc","after":"abcZ"} +{"case":"E4json","index":2,"mode":"serial","outcome":"resumed","before":"abc","after":"abcZ"} +{"case":"E4json","index":3,"mode":"serial","outcome":"resumed","before":"abc","after":"abcZ"} +{"case":"E4json","index":4,"mode":"serial","outcome":"resumed","before":"abc","after":"abcZ"} +{"case":"E4json","index":5,"mode":"serial","outcome":"resumed","before":"abc","after":"abcZ"} +{"case":"E4jsonuse","index":0,"mode":"serial","outcome":"resumed","before":"ab","after":"abZ"} +{"case":"E4jsonuse","index":1,"mode":"serial","outcome":"resumed","before":"ab","after":"abZ"} +{"case":"E4jsonuse","index":2,"mode":"serial","outcome":"resumed","before":"ab","after":"abZ"} +{"case":"E4jsonuse","index":3,"mode":"serial","outcome":"resumed","before":"ab","after":"abZ"} +{"case":"E4jsonuse","index":4,"mode":"serial","outcome":"resumed","before":"ab","after":"abZ"} +{"case":"E4jsonuse","index":5,"mode":"serial","outcome":"resumed","before":"ab","after":"abZ"} +{"case":"E5ns","index":0,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"E5ns","index":1,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"E5ns","index":2,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"E5ns","index":3,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"E5ns","index":4,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"E5ns","index":5,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"done":true,"cases":["E1factory","E2helper","E3dyn","E4json","E4jsonuse","E5ns"],"repetitions":6,"forced":false} diff --git a/evidence/native-parallel-review7/arm-volume-forced.log b/evidence/native-parallel-review7/arm-volume-forced.log new file mode 100644 index 000000000..1e19f1889 --- /dev/null +++ b/evidence/native-parallel-review7/arm-volume-forced.log @@ -0,0 +1,85 @@ +{"case":"FRrace","index":0,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRrace","index":1,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRrace","index":2,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRrace","index":3,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRrace","index":4,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRrace","index":5,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRany","index":0,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRany","index":1,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRany","index":2,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRany","index":3,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRany","index":4,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRany","index":5,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRnestrace","index":0,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRnestrace","index":1,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRnestrace","index":2,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRnestrace","index":3,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRnestrace","index":4,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRnestrace","index":5,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRdefer","index":0,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRdefer","index":1,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRdefer","index":2,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRdefer","index":3,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRdefer","index":4,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRdefer","index":5,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRthen","index":0,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRthen","index":1,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRthen","index":2,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRthen","index":3,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRthen","index":4,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRthen","index":5,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRsettled","index":0,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRsettled","index":1,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRsettled","index":2,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRsettled","index":3,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRsettled","index":4,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRsettled","index":5,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRset","index":0,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRset","index":1,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRset","index":2,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRset","index":3,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRset","index":4,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRset","index":5,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRgen","index":0,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRgen","index":1,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRgen","index":2,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRgen","index":3,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRgen","index":4,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRgen","index":5,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRthenagg","index":0,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRthenagg","index":1,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRthenagg","index":2,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRthenagg","index":3,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRthenagg","index":4,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRthenagg","index":5,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRmicro","index":0,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRmicro","index":1,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRmicro","index":2,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRmicro","index":3,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRmicro","index":4,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRmicro","index":5,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRcatch","index":0,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRcatch","index":1,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRcatch","index":2,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRcatch","index":3,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRcatch","index":4,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRcatch","index":5,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRfinally","index":0,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRfinally","index":1,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRfinally","index":2,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRfinally","index":3,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRfinally","index":4,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRfinally","index":5,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRiter","index":0,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRiter","index":1,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRiter","index":2,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRiter","index":3,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRiter","index":4,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRiter","index":5,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRwrap","index":0,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRwrap","index":1,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRwrap","index":2,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRwrap","index":3,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRwrap","index":4,"mode":"parallel","outcome":"failed_closed","effects":""} +{"case":"FRwrap","index":5,"mode":"parallel","outcome":"failed_closed","effects":""} +{"done":true,"cases":["FRrace","FRany","FRnestrace","FRdefer","FRthen","FRcatch","FRwrap","FRsettled","FRset","FRgen","FRthenagg","FRfinally","FRiter","FRmicro"],"repetitions":6,"forced":true} diff --git a/evidence/native-parallel-review7/arm-volume-k1-base2051.log b/evidence/native-parallel-review7/arm-volume-k1-base2051.log new file mode 100644 index 000000000..12c6f8544 --- /dev/null +++ b/evidence/native-parallel-review7/arm-volume-k1-base2051.log @@ -0,0 +1,7 @@ +{"case":"K1","index":0,"outcome":"base_failure","effects":"ABLC"} +{"case":"K1","index":1,"outcome":"base_failure","effects":"ABLC"} +{"case":"K1","index":2,"outcome":"base_failure","effects":"ABLC"} +{"case":"K1","index":3,"outcome":"base_failure","effects":"ABLC"} +{"case":"K1","index":4,"outcome":"base_failure","effects":"ABLC"} +{"case":"K1","index":5,"outcome":"base_failure","effects":"ABLC"} +{"done":true,"cases":["K1"],"repetitions":6,"forced":false} diff --git a/evidence/native-parallel-review7/arm-volume-k1-head.log b/evidence/native-parallel-review7/arm-volume-k1-head.log new file mode 100644 index 000000000..116be6010 --- /dev/null +++ b/evidence/native-parallel-review7/arm-volume-k1-head.log @@ -0,0 +1,7 @@ +{"case":"K1","index":0,"mode":"serial","outcome":"base_failure","effects":"ABLC"} +{"case":"K1","index":1,"mode":"serial","outcome":"base_failure","effects":"ABLC"} +{"case":"K1","index":2,"mode":"serial","outcome":"base_failure","effects":"ABLC"} +{"case":"K1","index":3,"mode":"serial","outcome":"base_failure","effects":"ABLC"} +{"case":"K1","index":4,"mode":"serial","outcome":"base_failure","effects":"ABLC"} +{"case":"K1","index":5,"mode":"serial","outcome":"base_failure","effects":"ABLC"} +{"done":true,"cases":["K1"],"repetitions":6,"forced":false} diff --git a/evidence/native-parallel-review7/arm-volume-native.log b/evidence/native-parallel-review7/arm-volume-native.log new file mode 100644 index 000000000..811400165 --- /dev/null +++ b/evidence/native-parallel-review7/arm-volume-native.log @@ -0,0 +1,19 @@ +{"case":"A1","index":0,"mode":"parallel","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"A1","index":1,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"A1","index":2,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"A1","index":3,"mode":"parallel","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"A1","index":4,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"A1","index":5,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"B1","index":0,"mode":"parallel","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"B1","index":1,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"B1","index":2,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"B1","index":3,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"B1","index":4,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"B1","index":5,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"N2","index":0,"mode":"parallel","outcome":"resumed","before":"bca","after":"bcaZ"} +{"case":"N2","index":1,"mode":"parallel","outcome":"resumed","before":"bca","after":"bcaZ"} +{"case":"N2","index":2,"mode":"parallel","outcome":"resumed","before":"bca","after":"bcaZ"} +{"case":"N2","index":3,"mode":"parallel","outcome":"resumed","before":"bca","after":"bcaZ"} +{"case":"N2","index":4,"mode":"parallel","outcome":"resumed","before":"bca","after":"bcaZ"} +{"case":"N2","index":5,"mode":"parallel","outcome":"resumed","before":"bca","after":"bcaZ"} +{"done":true,"cases":["A1","B1","N2"],"repetitions":6,"forced":false} diff --git a/evidence/native-parallel-review7/arm-volume-prior-all.log b/evidence/native-parallel-review7/arm-volume-prior-all.log new file mode 100644 index 000000000..37f32e787 --- /dev/null +++ b/evidence/native-parallel-review7/arm-volume-prior-all.log @@ -0,0 +1,97 @@ +{"case":"P1","index":0,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P1","index":1,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P1","index":2,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P1","index":3,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P1","index":4,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P1","index":5,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P1h","index":0,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P1h","index":1,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P1h","index":2,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P1h","index":3,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P1h","index":4,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P1h","index":5,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P1c","index":0,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P1c","index":1,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P1c","index":2,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P1c","index":3,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P1c","index":4,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P1c","index":5,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P1n","index":0,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"P1n","index":1,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"P1n","index":2,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"P1n","index":3,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"P1n","index":4,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"P1n","index":5,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"P1bn","index":0,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"P1bn","index":1,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"P1bn","index":2,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"P1bn","index":3,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"P1bn","index":4,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"P1bn","index":5,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"P2","index":0,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P2","index":1,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P2","index":2,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P2","index":3,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P2","index":4,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"P2","index":5,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"C1e","index":0,"mode":"serial","outcome":"resumed","before":"XY","after":"XYZ"} +{"case":"C1e","index":1,"mode":"serial","outcome":"resumed","before":"XY","after":"XYZ"} +{"case":"C1e","index":2,"mode":"serial","outcome":"resumed","before":"XY","after":"XYZ"} +{"case":"C1e","index":3,"mode":"serial","outcome":"resumed","before":"XY","after":"XYZ"} +{"case":"C1e","index":4,"mode":"serial","outcome":"resumed","before":"XY","after":"XYZ"} +{"case":"C1e","index":5,"mode":"serial","outcome":"resumed","before":"XY","after":"XYZ"} +{"case":"G1","index":0,"mode":"serial","outcome":"resumed","before":"ABG","after":"ABGZ"} +{"case":"G1","index":1,"mode":"serial","outcome":"resumed","before":"ABG","after":"ABGZ"} +{"case":"G1","index":2,"mode":"serial","outcome":"resumed","before":"ABG","after":"ABGZ"} +{"case":"G1","index":3,"mode":"serial","outcome":"resumed","before":"ABG","after":"ABGZ"} +{"case":"G1","index":4,"mode":"serial","outcome":"resumed","before":"ABG","after":"ABGZ"} +{"case":"G1","index":5,"mode":"serial","outcome":"resumed","before":"ABG","after":"ABGZ"} +{"case":"H1","index":0,"mode":"serial","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"H1","index":1,"mode":"serial","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"H1","index":2,"mode":"serial","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"H1","index":3,"mode":"serial","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"H1","index":4,"mode":"serial","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"H1","index":5,"mode":"serial","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"H2","index":0,"mode":"serial","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"H2","index":1,"mode":"serial","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"H2","index":2,"mode":"serial","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"H2","index":3,"mode":"serial","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"H2","index":4,"mode":"serial","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"H2","index":5,"mode":"serial","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"K4","index":0,"mode":"serial","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"K4","index":1,"mode":"serial","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"K4","index":2,"mode":"serial","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"K4","index":3,"mode":"serial","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"K4","index":4,"mode":"serial","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"K4","index":5,"mode":"serial","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"I1","index":0,"mode":"serial","outcome":"resumed","before":"xyLR","after":"xyLRZ"} +{"case":"I1","index":1,"mode":"serial","outcome":"resumed","before":"xyLR","after":"xyLRZ"} +{"case":"I1","index":2,"mode":"serial","outcome":"resumed","before":"xyLR","after":"xyLRZ"} +{"case":"I1","index":3,"mode":"serial","outcome":"resumed","before":"xyLR","after":"xyLRZ"} +{"case":"I1","index":4,"mode":"serial","outcome":"resumed","before":"xyLR","after":"xyLRZ"} +{"case":"I1","index":5,"mode":"serial","outcome":"resumed","before":"xyLR","after":"xyLRZ"} +{"case":"K2b","index":0,"mode":"serial","outcome":"resumed","before":"ABC","after":"ABCZ"} +{"case":"K2b","index":1,"mode":"serial","outcome":"resumed","before":"ABC","after":"ABCZ"} +{"case":"K2b","index":2,"mode":"serial","outcome":"resumed","before":"ABC","after":"ABCZ"} +{"case":"K2b","index":3,"mode":"serial","outcome":"resumed","before":"ABC","after":"ABCZ"} +{"case":"K2b","index":4,"mode":"serial","outcome":"resumed","before":"ABC","after":"ABCZ"} +{"case":"K2b","index":5,"mode":"serial","outcome":"resumed","before":"ABC","after":"ABCZ"} +{"case":"K3","index":0,"mode":"serial","outcome":"resumed","before":"ab","after":"abZ"} +{"case":"K3","index":1,"mode":"serial","outcome":"resumed","before":"ab","after":"abZ"} +{"case":"K3","index":2,"mode":"serial","outcome":"resumed","before":"ab","after":"abZ"} +{"case":"K3","index":3,"mode":"serial","outcome":"resumed","before":"ab","after":"abZ"} +{"case":"K3","index":4,"mode":"serial","outcome":"resumed","before":"ab","after":"abZ"} +{"case":"K3","index":5,"mode":"serial","outcome":"resumed","before":"ab","after":"abZ"} +{"case":"K5b","index":0,"mode":"serial","outcome":"resumed","before":"AB","after":"ABZ"} +{"case":"K5b","index":1,"mode":"serial","outcome":"resumed","before":"AB","after":"ABZ"} +{"case":"K5b","index":2,"mode":"serial","outcome":"resumed","before":"AB","after":"ABZ"} +{"case":"K5b","index":3,"mode":"serial","outcome":"resumed","before":"AB","after":"ABZ"} +{"case":"K5b","index":4,"mode":"serial","outcome":"resumed","before":"AB","after":"ABZ"} +{"case":"K5b","index":5,"mode":"serial","outcome":"resumed","before":"AB","after":"ABZ"} +{"case":"K13b","index":0,"mode":"serial","outcome":"resumed","before":"BAC","after":"BACZ"} +{"case":"K13b","index":1,"mode":"serial","outcome":"resumed","before":"BAC","after":"BACZ"} +{"case":"K13b","index":2,"mode":"serial","outcome":"resumed","before":"BAC","after":"BACZ"} +{"case":"K13b","index":3,"mode":"serial","outcome":"resumed","before":"BAC","after":"BACZ"} +{"case":"K13b","index":4,"mode":"serial","outcome":"resumed","before":"BAC","after":"BACZ"} +{"case":"K13b","index":5,"mode":"serial","outcome":"resumed","before":"BAC","after":"BACZ"} +{"done":true,"cases":["P1","P1h","P1c","P1n","P1bn","P2","C1e","G1","H1","H2","K4","I1","K2b","K3","K5b","K13b"],"repetitions":6,"forced":false} diff --git a/evidence/native-parallel-review7/arm-volume-q.log b/evidence/native-parallel-review7/arm-volume-q.log new file mode 100644 index 000000000..fc5784a31 --- /dev/null +++ b/evidence/native-parallel-review7/arm-volume-q.log @@ -0,0 +1,43 @@ +{"case":"Q5","index":0,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5","index":1,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5","index":2,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5","index":3,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5","index":4,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5","index":5,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5n","index":0,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"Q5n","index":1,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"Q5n","index":2,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"Q5n","index":3,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"Q5n","index":4,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"Q5n","index":5,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"Q5h","index":0,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5h","index":1,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5h","index":2,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5h","index":3,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5h","index":4,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5h","index":5,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5w","index":0,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5w","index":1,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5w","index":2,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5w","index":3,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5w","index":4,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5w","index":5,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5wn","index":0,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"Q5wn","index":1,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"Q5wn","index":2,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"Q5wn","index":3,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"Q5wn","index":4,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"Q5wn","index":5,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"Q5wh","index":0,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5wh","index":1,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5wh","index":2,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5wh","index":3,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5wh","index":4,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q5wh","index":5,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"Q6Pw","index":0,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"Q6Pw","index":1,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"Q6Pw","index":2,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"Q6Pw","index":3,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"Q6Pw","index":4,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"Q6Pw","index":5,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"done":true,"cases":["Q5","Q5n","Q5h","Q5w","Q5wn","Q5wh","Q6Pw"],"repetitions":6,"forced":false} diff --git a/evidence/native-parallel-review7/arm-volume-r-all.log b/evidence/native-parallel-review7/arm-volume-r-all.log new file mode 100644 index 000000000..dec5af413 --- /dev/null +++ b/evidence/native-parallel-review7/arm-volume-r-all.log @@ -0,0 +1,55 @@ +{"case":"R1","index":0,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R1","index":1,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R1","index":2,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R1","index":3,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R1","index":4,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R1","index":5,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R1w","index":0,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R1w","index":1,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R1w","index":2,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R1w","index":3,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R1w","index":4,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R1w","index":5,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R1wn","index":0,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"R1wn","index":1,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"R1wn","index":2,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"R1wn","index":3,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"R1wn","index":4,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"R1wn","index":5,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"R2w","index":0,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R2w","index":1,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R2w","index":2,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R2w","index":3,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R2w","index":4,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R2w","index":5,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R3w","index":0,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R3w","index":1,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R3w","index":2,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R3w","index":3,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R3w","index":4,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R3w","index":5,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R3","index":0,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R3","index":1,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R3","index":2,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R3","index":3,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R3","index":4,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R3","index":5,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R4w","index":0,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R4w","index":1,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R4w","index":2,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R4w","index":3,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R4w","index":4,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R4w","index":5,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R1c","index":0,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R1c","index":1,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R1c","index":2,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R1c","index":3,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R1c","index":4,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R1c","index":5,"mode":"serial","outcome":"resumed","before":"X","after":"XZ"} +{"case":"R5n","index":0,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"R5n","index":1,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"R5n","index":2,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"R5n","index":3,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"R5n","index":4,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"case":"R5n","index":5,"mode":"serial","outcome":"resumed","before":"abcX","after":"abcXZ"} +{"done":true,"cases":["R1","R1w","R1wn","R2w","R3w","R3","R4w","R1c","R5n"],"repetitions":6,"forced":false} diff --git a/evidence/native-parallel-review7/arm-volume-rollback2050.log b/evidence/native-parallel-review7/arm-volume-rollback2050.log new file mode 100644 index 000000000..4e964c483 --- /dev/null +++ b/evidence/native-parallel-review7/arm-volume-rollback2050.log @@ -0,0 +1,31 @@ +{"case":"RBCI4","index":0,"mode":"serial","outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"RBCI4","index":1,"mode":"serial","outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"RBCI4","index":2,"mode":"serial","outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"RBCI4","index":3,"mode":"serial","outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"RBCI4","index":4,"mode":"serial","outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"RBCI4","index":5,"mode":"serial","outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"RBCI5","index":0,"mode":"serial","outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"RBCI5","index":1,"mode":"serial","outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"RBCI5","index":2,"mode":"serial","outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"RBCI5","index":3,"mode":"serial","outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"RBCI5","index":4,"mode":"serial","outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"RBCI5","index":5,"mode":"serial","outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"RBA1","index":0,"mode":"parallel","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"RBA1","index":1,"mode":"parallel","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"RBA1","index":2,"mode":"parallel","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"RBA1","index":3,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"RBA1","index":4,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"RBA1","index":5,"mode":"parallel","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"RBB1","index":0,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"RBB1","index":1,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"RBB1","index":2,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"RBB1","index":3,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"RBB1","index":4,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"RBB1","index":5,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"RBN2","index":0,"mode":"parallel","outcome":"resumed","before":"bca","after":"bcaZ"} +{"case":"RBN2","index":1,"mode":"parallel","outcome":"resumed","before":"bca","after":"bcaZ"} +{"case":"RBN2","index":2,"mode":"parallel","outcome":"resumed","before":"bca","after":"bcaZ"} +{"case":"RBN2","index":3,"mode":"parallel","outcome":"resumed","before":"bca","after":"bcaZ"} +{"case":"RBN2","index":4,"mode":"parallel","outcome":"resumed","before":"bca","after":"bcaZ"} +{"case":"RBN2","index":5,"mode":"parallel","outcome":"resumed","before":"bca","after":"bcaZ"} +{"done":true,"cases":["RBCI4","RBCI5","RBA1","RBB1","RBN2"],"repetitions":6,"forced":false} diff --git a/evidence/native-parallel-review7/arm-volume-rollback2051.log b/evidence/native-parallel-review7/arm-volume-rollback2051.log new file mode 100644 index 000000000..300308e8f --- /dev/null +++ b/evidence/native-parallel-review7/arm-volume-rollback2051.log @@ -0,0 +1,31 @@ +{"case":"RBCI4","index":0,"mode":"serial","outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"RBCI4","index":1,"mode":"serial","outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"RBCI4","index":2,"mode":"serial","outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"RBCI4","index":3,"mode":"serial","outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"RBCI4","index":4,"mode":"serial","outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"RBCI4","index":5,"mode":"serial","outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"RBCI5","index":0,"mode":"serial","outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"RBCI5","index":1,"mode":"serial","outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"RBCI5","index":2,"mode":"serial","outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"RBCI5","index":3,"mode":"serial","outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"RBCI5","index":4,"mode":"serial","outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"RBCI5","index":5,"mode":"serial","outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"RBA1","index":0,"mode":"parallel","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"RBA1","index":1,"mode":"parallel","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"RBA1","index":2,"mode":"parallel","outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"RBA1","index":3,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"RBA1","index":4,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"RBA1","index":5,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"RBB1","index":0,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"RBB1","index":1,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"RBB1","index":2,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"RBB1","index":3,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"RBB1","index":4,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"RBB1","index":5,"mode":"parallel","outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"RBN2","index":0,"mode":"parallel","outcome":"resumed","before":"bca","after":"bcaZ"} +{"case":"RBN2","index":1,"mode":"parallel","outcome":"resumed","before":"bca","after":"bcaZ"} +{"case":"RBN2","index":2,"mode":"parallel","outcome":"resumed","before":"bca","after":"bcaZ"} +{"case":"RBN2","index":3,"mode":"parallel","outcome":"resumed","before":"bca","after":"bcaZ"} +{"case":"RBN2","index":4,"mode":"parallel","outcome":"resumed","before":"bca","after":"bcaZ"} +{"case":"RBN2","index":5,"mode":"parallel","outcome":"resumed","before":"bca","after":"bcaZ"} +{"done":true,"cases":["RBCI4","RBCI5","RBA1","RBB1","RBN2"],"repetitions":6,"forced":false} diff --git a/evidence/native-parallel-review7/arm-volume-timing.log b/evidence/native-parallel-review7/arm-volume-timing.log new file mode 100644 index 000000000..b48d89263 --- /dev/null +++ b/evidence/native-parallel-review7/arm-volume-timing.log @@ -0,0 +1,22 @@ +{"kind":"base","number":0,"cliMs":1848.125501,"bodyMs":1379,"routeSpreadMs":665,"routesOverlap":false,"dependentsOverlap":false} +{"kind":"head","number":0,"cliMs":1146.583584,"bodyMs":457,"routeSpreadMs":5,"routesOverlap":true,"dependentsOverlap":true} +{"kind":"head","number":1,"cliMs":1144.3790010000002,"bodyMs":455,"routeSpreadMs":10,"routesOverlap":true,"dependentsOverlap":true} +{"kind":"base","number":1,"cliMs":1848.0953340000005,"bodyMs":1370,"routeSpreadMs":652,"routesOverlap":false,"dependentsOverlap":false} +{"kind":"base","number":2,"cliMs":1821.3622930000001,"bodyMs":1370,"routeSpreadMs":651,"routesOverlap":false,"dependentsOverlap":false} +{"kind":"head","number":2,"cliMs":1131.4559169999993,"bodyMs":464,"routeSpreadMs":5,"routesOverlap":true,"dependentsOverlap":true} +{"kind":"head","number":3,"cliMs":1152.8909999999996,"bodyMs":467,"routeSpreadMs":10,"routesOverlap":true,"dependentsOverlap":true} +{"kind":"base","number":3,"cliMs":1872.0480009999992,"bodyMs":1392,"routeSpreadMs":676,"routesOverlap":false,"dependentsOverlap":false} +{"kind":"base","number":4,"cliMs":1842.1947930000006,"bodyMs":1366,"routeSpreadMs":661,"routesOverlap":false,"dependentsOverlap":false} +{"kind":"head","number":4,"cliMs":1124.7279589999998,"bodyMs":453,"routeSpreadMs":2,"routesOverlap":true,"dependentsOverlap":true} +{"kind":"head","number":5,"cliMs":1137.3512499999997,"bodyMs":499,"routeSpreadMs":10,"routesOverlap":true,"dependentsOverlap":true} +{"kind":"base","number":5,"cliMs":1900.317626,"bodyMs":1400,"routeSpreadMs":668,"routesOverlap":false,"dependentsOverlap":false} +{"kind":"base","number":6,"cliMs":1872.781375999999,"bodyMs":1395,"routeSpreadMs":667,"routesOverlap":false,"dependentsOverlap":false} +{"kind":"head","number":6,"cliMs":1110.0066680000018,"bodyMs":463,"routeSpreadMs":4,"routesOverlap":true,"dependentsOverlap":true} +{"kind":"head","number":7,"cliMs":1110.932251000002,"bodyMs":457,"routeSpreadMs":5,"routesOverlap":true,"dependentsOverlap":true} +{"kind":"base","number":7,"cliMs":1817.4431250000016,"bodyMs":1346,"routeSpreadMs":648,"routesOverlap":false,"dependentsOverlap":false} +{"kind":"base","number":8,"cliMs":1889.8511259999977,"bodyMs":1393,"routeSpreadMs":662,"routesOverlap":false,"dependentsOverlap":false} +{"kind":"head","number":8,"cliMs":1106.0038339999992,"bodyMs":466,"routeSpreadMs":7,"routesOverlap":true,"dependentsOverlap":true} +{"kind":"head","number":9,"cliMs":1107.6074169999993,"bodyMs":470,"routeSpreadMs":3,"routesOverlap":true,"dependentsOverlap":true} +{"kind":"base","number":9,"cliMs":1877.2865009999987,"bodyMs":1392,"routeSpreadMs":665,"routesOverlap":false,"dependentsOverlap":false} +{"summary":"base","samples":10,"cliP50Ms":1848.125501,"cliP95Ms":1900.317626,"bodyP50Ms":1379,"bodyP95Ms":1400,"routeSpreadP50Ms":662,"routesOverlap":0,"dependentsOverlap":0} +{"summary":"head","samples":10,"cliP50Ms":1124.7279589999998,"cliP95Ms":1152.8909999999996,"bodyP50Ms":463,"bodyP95Ms":499,"routeSpreadP50Ms":5,"routesOverlap":10,"dependentsOverlap":10} diff --git a/evidence/native-parallel-review7/arm-volume-upgrade2050.log b/evidence/native-parallel-review7/arm-volume-upgrade2050.log new file mode 100644 index 000000000..65d290acd --- /dev/null +++ b/evidence/native-parallel-review7/arm-volume-upgrade2050.log @@ -0,0 +1,31 @@ +{"case":"UCI4","index":0,"outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"UCI4","index":1,"outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"UCI4","index":2,"outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"UCI4","index":3,"outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"UCI4","index":4,"outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"UCI4","index":5,"outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"UCI5","index":0,"outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"UCI5","index":1,"outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"UCI5","index":2,"outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"UCI5","index":3,"outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"UCI5","index":4,"outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"UCI5","index":5,"outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"UA1","index":0,"outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"UA1","index":1,"outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"UA1","index":2,"outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"UA1","index":3,"outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"UA1","index":4,"outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"UA1","index":5,"outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"UB1","index":0,"outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"UB1","index":1,"outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"UB1","index":2,"outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"UB1","index":3,"outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"UB1","index":4,"outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"UB1","index":5,"outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"UN2","index":0,"outcome":"resumed","before":"abc","after":"abcZ"} +{"case":"UN2","index":1,"outcome":"resumed","before":"abc","after":"abcZ"} +{"case":"UN2","index":2,"outcome":"resumed","before":"abc","after":"abcZ"} +{"case":"UN2","index":3,"outcome":"resumed","before":"abc","after":"abcZ"} +{"case":"UN2","index":4,"outcome":"resumed","before":"abc","after":"abcZ"} +{"case":"UN2","index":5,"outcome":"resumed","before":"abc","after":"abcZ"} +{"done":true,"cases":["UCI4","UCI5","UA1","UB1","UN2"],"repetitions":6,"forced":false} diff --git a/evidence/native-parallel-review7/arm-volume-upgrade2051.log b/evidence/native-parallel-review7/arm-volume-upgrade2051.log new file mode 100644 index 000000000..65d290acd --- /dev/null +++ b/evidence/native-parallel-review7/arm-volume-upgrade2051.log @@ -0,0 +1,31 @@ +{"case":"UCI4","index":0,"outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"UCI4","index":1,"outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"UCI4","index":2,"outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"UCI4","index":3,"outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"UCI4","index":4,"outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"UCI4","index":5,"outcome":"resumed","before":"abcd","after":"abcdyegZ"} +{"case":"UCI5","index":0,"outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"UCI5","index":1,"outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"UCI5","index":2,"outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"UCI5","index":3,"outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"UCI5","index":4,"outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"UCI5","index":5,"outcome":"resumed","before":"abcde","after":"abcdeyghZ"} +{"case":"UA1","index":0,"outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"UA1","index":1,"outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"UA1","index":2,"outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"UA1","index":3,"outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"UA1","index":4,"outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"UA1","index":5,"outcome":"resumed","before":"LR","after":"LRZ"} +{"case":"UB1","index":0,"outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"UB1","index":1,"outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"UB1","index":2,"outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"UB1","index":3,"outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"UB1","index":4,"outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"UB1","index":5,"outcome":"resumed","before":"RL","after":"RLZ"} +{"case":"UN2","index":0,"outcome":"resumed","before":"abc","after":"abcZ"} +{"case":"UN2","index":1,"outcome":"resumed","before":"abc","after":"abcZ"} +{"case":"UN2","index":2,"outcome":"resumed","before":"abc","after":"abcZ"} +{"case":"UN2","index":3,"outcome":"resumed","before":"abc","after":"abcZ"} +{"case":"UN2","index":4,"outcome":"resumed","before":"abc","after":"abcZ"} +{"case":"UN2","index":5,"outcome":"resumed","before":"abc","after":"abcZ"} +{"done":true,"cases":["UCI4","UCI5","UA1","UB1","UN2"],"repetitions":6,"forced":false} diff --git a/evidence/native-parallel-review7/mut-f1-fail.log b/evidence/native-parallel-review7/mut-f1-fail.log new file mode 100644 index 000000000..ac6f4afd7 --- /dev/null +++ b/evidence/native-parallel-review7/mut-f1-fail.log @@ -0,0 +1,32 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/authored-step-graph.test.ts (27 tests | 1 failed | 26 skipped) 4ms + × the authored step DAG > does not trust a user-built join merely because it is a combinator member 3ms + → expected false to be true // Object.is equality + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-step-graph.test.ts > the authored step DAG > does not trust a user-built join merely because it is a combinator member +AssertionError: expected false to be true // Object.is equality + +- Expected ++ Received + +- true ++ false + + ❯ tests/authored-step-graph.test.ts:88:59 + 86| const graph = new AuthoredStepGraph(id => id === 3 ? [2] : [], und… + 87| graph.registerAggregate(1, Promise.resolve(), 'all', [2]); + 88| expect(graph.predecessorsAt(3).unregisteredAggregate).toBe(true); + | ^ + 89| const certified = new AuthoredStepGraph(id => id === 3 ? [2] : [],… + 90| certified.registerAggregate(1, Promise.resolve(), 'all', [2]); + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed (1) + Tests 1 failed | 26 skipped (27) + Start at 23:49:49 + Duration 348ms (transform 69ms, setup 10ms, collect 68ms, tests 4ms, environment 0ms, prepare 70ms) diff --git a/evidence/native-parallel-review7/mut-f1-pass.log b/evidence/native-parallel-review7/mut-f1-pass.log new file mode 100644 index 000000000..e1178a3d3 --- /dev/null +++ b/evidence/native-parallel-review7/mut-f1-pass.log @@ -0,0 +1,9 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-step-graph.test.ts (27 tests | 26 skipped) 1ms + + Test Files 1 passed (1) + Tests 1 passed | 26 skipped (27) + Start at 23:49:49 + Duration 359ms (transform 47ms, setup 11ms, collect 52ms, tests 1ms, environment 0ms, prepare 101ms) diff --git a/evidence/native-parallel-review7/mut-f2-binding-fail.log b/evidence/native-parallel-review7/mut-f2-binding-fail.log new file mode 100644 index 000000000..924d689d8 --- /dev/null +++ b/evidence/native-parallel-review7/mut-f2-binding-fail.log @@ -0,0 +1,32 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/authored-parallel-eligibility.test.ts (9 tests | 1 failed | 8 skipped) 8ms + × parallel run admission > requires the exported arrow to be the actual body from the direct Surface binding 8ms + → expected true to be false // Object.is equality + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-parallel-eligibility.test.ts > parallel run admission > requires the exported arrow to be the actual body from the direct Surface binding +AssertionError: expected true to be false // Object.is equality + +- Expected ++ Received + +- false ++ true + + ❯ tests/authored-parallel-eligibility.test.ts:152:40 + 150| expect(eligible(candidate, `import { flow } from './wrap.ts'; ${de… + 151| expect(eligible(candidate, `import { flow } from '@relayflows/surf… + 152| expect(eligible(candidate, exact)).toBe(false); + | ^ + 153| expect(eligible(candidate, `const flow = () => impl; ${exact}`)).t… + 154| expect(eligible(candidate, `import { flow } from './wrap.ts'; ${ex… + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed (1) + Tests 1 failed | 8 skipped (9) + Start at 23:49:50 + Duration 670ms (transform 25ms, setup 9ms, collect 424ms, tests 8ms, environment 0ms, prepare 41ms) diff --git a/evidence/native-parallel-review7/mut-f2-binding-pass.log b/evidence/native-parallel-review7/mut-f2-binding-pass.log new file mode 100644 index 000000000..e1abe7243 --- /dev/null +++ b/evidence/native-parallel-review7/mut-f2-binding-pass.log @@ -0,0 +1,9 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-parallel-eligibility.test.ts (9 tests | 8 skipped) 7ms + + Test Files 1 passed (1) + Tests 1 passed | 8 skipped (9) + Start at 23:49:51 + Duration 517ms (transform 33ms, setup 11ms, collect 203ms, tests 7ms, environment 0ms, prepare 81ms) diff --git a/evidence/native-parallel-review7/mut-f2-body-fail.log b/evidence/native-parallel-review7/mut-f2-body-fail.log new file mode 100644 index 000000000..6971777e8 --- /dev/null +++ b/evidence/native-parallel-review7/mut-f2-body-fail.log @@ -0,0 +1,32 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/authored-parallel-eligibility.test.ts (9 tests | 1 failed | 8 skipped) 30ms + × parallel run admission > requires the exported arrow to be the actual body from the direct Surface binding 29ms + → expected true to be false // Object.is equality + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-parallel-eligibility.test.ts > parallel run admission > requires the exported arrow to be the actual body from the direct Surface binding +AssertionError: expected true to be false // Object.is equality + +- Expected ++ Received + +- false ++ true + + ❯ tests/authored-parallel-eligibility.test.ts:151:89 + 149| expect(eligible(candidate, `const flow = () => impl; ${decoy}`)).t… + 150| expect(eligible(candidate, `import { flow } from './wrap.ts'; ${de… + 151| expect(eligible(candidate, `import { flow } from '@relayflows/surf… + | ^ + 152| expect(eligible(candidate, exact)).toBe(false); + 153| expect(eligible(candidate, `const flow = () => impl; ${exact}`)).t… + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed (1) + Tests 1 failed | 8 skipped (9) + Start at 23:49:52 + Duration 510ms (transform 22ms, setup 8ms, collect 193ms, tests 30ms, environment 0ms, prepare 97ms) diff --git a/evidence/native-parallel-review7/mut-f2-body-pass.log b/evidence/native-parallel-review7/mut-f2-body-pass.log new file mode 100644 index 000000000..e5320c11c --- /dev/null +++ b/evidence/native-parallel-review7/mut-f2-body-pass.log @@ -0,0 +1,9 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-parallel-eligibility.test.ts (9 tests | 8 skipped) 6ms + + Test Files 1 passed (1) + Tests 1 passed | 8 skipped (9) + Start at 23:49:53 + Duration 408ms (transform 26ms, setup 12ms, collect 196ms, tests 6ms, environment 0ms, prepare 37ms) diff --git a/evidence/native-parallel-review7/mut-f3-fail.log b/evidence/native-parallel-review7/mut-f3-fail.log new file mode 100644 index 000000000..7943fadf3 --- /dev/null +++ b/evidence/native-parallel-review7/mut-f3-fail.log @@ -0,0 +1,32 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/authored-flow-lifecycle-executor.test.ts (44 tests | 1 failed | 43 skipped) 5ms + × authored flow lifecycle through the journal executor > detects replacement of every Promise primitive used by parallel joins 4ms + → resolve: expected true to be false // Object.is equality + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-flow-lifecycle-executor.test.ts > authored flow lifecycle through the journal executor > detects replacement of every Promise primitive used by parallel joins +AssertionError: resolve: expected true to be false // Object.is equality + +- Expected ++ Received + +- false ++ true + + ❯ tests/authored-flow-lifecycle-executor.test.ts:42:30 + 40| const detected = parallelPromiseIntrinsicsIntact(); + 41| target[name] = original; + 42| expect(detected, name).toBe(false); + | ^ + 43| } + 44| for (const name of ['then', 'catch', 'finally']) { + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed (1) + Tests 1 failed | 43 skipped (44) + Start at 23:49:54 + Duration 1.61s (transform 521ms, setup 9ms, collect 1.41s, tests 5ms, environment 0ms, prepare 36ms) diff --git a/evidence/native-parallel-review7/mut-f3-pass.log b/evidence/native-parallel-review7/mut-f3-pass.log new file mode 100644 index 000000000..97e3c52f8 --- /dev/null +++ b/evidence/native-parallel-review7/mut-f3-pass.log @@ -0,0 +1,9 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-flow-lifecycle-executor.test.ts (44 tests | 43 skipped) 3ms + + Test Files 1 passed (1) + Tests 1 passed | 43 skipped (44) + Start at 23:49:56 + Duration 1.28s (transform 410ms, setup 10ms, collect 1.04s, tests 3ms, environment 0ms, prepare 41ms) diff --git a/evidence/native-parallel-review7/mutation-proof.log b/evidence/native-parallel-review7/mutation-proof.log new file mode 100644 index 000000000..4d74d487c --- /dev/null +++ b/evidence/native-parallel-review7/mutation-proof.log @@ -0,0 +1,183 @@ +MUTATION f1 +COMMAND npx vitest run tests/authored-step-graph.test.ts -t does not trust a user-built join merely because it is a combinator member + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/authored-step-graph.test.ts (27 tests | 1 failed | 26 skipped) 4ms + × the authored step DAG > does not trust a user-built join merely because it is a combinator member 3ms + → expected false to be true // Object.is equality + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-step-graph.test.ts > the authored step DAG > does not trust a user-built join merely because it is a combinator member +AssertionError: expected false to be true // Object.is equality + +- Expected ++ Received + +- true ++ false + + ❯ tests/authored-step-graph.test.ts:88:59 + 86| const graph = new AuthoredStepGraph(id => id === 3 ? [2] : [], und… + 87| graph.registerAggregate(1, Promise.resolve(), 'all', [2]); + 88| expect(graph.predecessorsAt(3).unregisteredAggregate).toBe(true); + | ^ + 89| const certified = new AuthoredStepGraph(id => id === 3 ? [2] : [],… + 90| certified.registerAggregate(1, Promise.resolve(), 'all', [2]); + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed (1) + Tests 1 failed | 26 skipped (27) + Start at 23:49:49 + Duration 348ms (transform 69ms, setup 10ms, collect 68ms, tests 4ms, environment 0ms, prepare 70ms) + +RESTORED f1 SHA256 138ba3e8259e4d084251b02257f70c12e394e91d51625a03344ccd9a9e60c050 + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-step-graph.test.ts (27 tests | 26 skipped) 1ms + + Test Files 1 passed (1) + Tests 1 passed | 26 skipped (27) + Start at 23:49:49 + Duration 359ms (transform 47ms, setup 11ms, collect 52ms, tests 1ms, environment 0ms, prepare 101ms) + +MUTATION f2-binding +COMMAND npx vitest run tests/authored-parallel-eligibility.test.ts -t requires the exported arrow to be the actual body from the direct Surface binding + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/authored-parallel-eligibility.test.ts (9 tests | 1 failed | 8 skipped) 8ms + × parallel run admission > requires the exported arrow to be the actual body from the direct Surface binding 8ms + → expected true to be false // Object.is equality + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-parallel-eligibility.test.ts > parallel run admission > requires the exported arrow to be the actual body from the direct Surface binding +AssertionError: expected true to be false // Object.is equality + +- Expected ++ Received + +- false ++ true + + ❯ tests/authored-parallel-eligibility.test.ts:152:40 + 150| expect(eligible(candidate, `import { flow } from './wrap.ts'; ${de… + 151| expect(eligible(candidate, `import { flow } from '@relayflows/surf… + 152| expect(eligible(candidate, exact)).toBe(false); + | ^ + 153| expect(eligible(candidate, `const flow = () => impl; ${exact}`)).t… + 154| expect(eligible(candidate, `import { flow } from './wrap.ts'; ${ex… + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed (1) + Tests 1 failed | 8 skipped (9) + Start at 23:49:50 + Duration 670ms (transform 25ms, setup 9ms, collect 424ms, tests 8ms, environment 0ms, prepare 41ms) + +RESTORED f2-binding SHA256 3802b56d109ae111bc774928669409951a33f830c3c2bc16575597df904b26d2 + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-parallel-eligibility.test.ts (9 tests | 8 skipped) 7ms + + Test Files 1 passed (1) + Tests 1 passed | 8 skipped (9) + Start at 23:49:51 + Duration 517ms (transform 33ms, setup 11ms, collect 203ms, tests 7ms, environment 0ms, prepare 81ms) + +MUTATION f2-body +COMMAND npx vitest run tests/authored-parallel-eligibility.test.ts -t requires the exported arrow to be the actual body from the direct Surface binding + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/authored-parallel-eligibility.test.ts (9 tests | 1 failed | 8 skipped) 30ms + × parallel run admission > requires the exported arrow to be the actual body from the direct Surface binding 29ms + → expected true to be false // Object.is equality + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-parallel-eligibility.test.ts > parallel run admission > requires the exported arrow to be the actual body from the direct Surface binding +AssertionError: expected true to be false // Object.is equality + +- Expected ++ Received + +- false ++ true + + ❯ tests/authored-parallel-eligibility.test.ts:151:89 + 149| expect(eligible(candidate, `const flow = () => impl; ${decoy}`)).t… + 150| expect(eligible(candidate, `import { flow } from './wrap.ts'; ${de… + 151| expect(eligible(candidate, `import { flow } from '@relayflows/surf… + | ^ + 152| expect(eligible(candidate, exact)).toBe(false); + 153| expect(eligible(candidate, `const flow = () => impl; ${exact}`)).t… + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed (1) + Tests 1 failed | 8 skipped (9) + Start at 23:49:52 + Duration 510ms (transform 22ms, setup 8ms, collect 193ms, tests 30ms, environment 0ms, prepare 97ms) + +RESTORED f2-body SHA256 3802b56d109ae111bc774928669409951a33f830c3c2bc16575597df904b26d2 + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-parallel-eligibility.test.ts (9 tests | 8 skipped) 6ms + + Test Files 1 passed (1) + Tests 1 passed | 8 skipped (9) + Start at 23:49:53 + Duration 408ms (transform 26ms, setup 12ms, collect 196ms, tests 6ms, environment 0ms, prepare 37ms) + +MUTATION f3 +COMMAND npx vitest run tests/authored-flow-lifecycle-executor.test.ts -t detects replacement of every Promise primitive used by parallel joins + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/authored-flow-lifecycle-executor.test.ts (44 tests | 1 failed | 43 skipped) 5ms + × authored flow lifecycle through the journal executor > detects replacement of every Promise primitive used by parallel joins 4ms + → resolve: expected true to be false // Object.is equality + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-flow-lifecycle-executor.test.ts > authored flow lifecycle through the journal executor > detects replacement of every Promise primitive used by parallel joins +AssertionError: resolve: expected true to be false // Object.is equality + +- Expected ++ Received + +- false ++ true + + ❯ tests/authored-flow-lifecycle-executor.test.ts:42:30 + 40| const detected = parallelPromiseIntrinsicsIntact(); + 41| target[name] = original; + 42| expect(detected, name).toBe(false); + | ^ + 43| } + 44| for (const name of ['then', 'catch', 'finally']) { + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed (1) + Tests 1 failed | 43 skipped (44) + Start at 23:49:54 + Duration 1.61s (transform 521ms, setup 9ms, collect 1.41s, tests 5ms, environment 0ms, prepare 36ms) + +RESTORED f3 SHA256 14a9237ea459a67ca3f514492d63776aea798f97d15a8ac4c31fd9c7c846ada4 + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-flow-lifecycle-executor.test.ts (44 tests | 43 skipped) 3ms + + Test Files 1 passed (1) + Tests 1 passed | 43 skipped (44) + Start at 23:49:56 + Duration 1.28s (transform 410ms, setup 10ms, collect 1.04s, tests 3ms, environment 0ms, prepare 41ms) diff --git a/evidence/native-parallel-review7/mutation-proof.sh b/evidence/native-parallel-review7/mutation-proof.sh new file mode 100644 index 000000000..3c0669609 --- /dev/null +++ b/evidence/native-parallel-review7/mutation-proof.sh @@ -0,0 +1,74 @@ +#!/usr/bin/env bash +set -euo pipefail + +evidence_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +sdk_dir=$(cd "$evidence_dir/../../packages/sdk" && pwd) +cd "$sdk_dir" + +mutate_and_check() ( + set -euo pipefail + local label=$1 file=$2 original=$3 replacement=$4 expected=$5 + shift 5 + local backup before after failure_log pass_log + backup=$(mktemp) + cp "$file" "$backup" + trap 'cp "$backup" "$file"; rm -f "$backup"' EXIT + before=$(shasum -a 256 "$file" | awk '{print $1}') + failure_log="$evidence_dir/mut-$label-fail.log" + pass_log="$evidence_dir/mut-$label-pass.log" + + python3 - "$file" "$original" "$replacement" <<'PY' +from pathlib import Path +import sys +file, original, replacement = sys.argv[1:] +source = Path(file).read_text() +assert source.count(original) == 1, (file, original) +Path(file).write_text(source.replace(original, replacement)) +PY + + printf '%s\n' "MUTATION $label" "COMMAND npx vitest run $*" + if npx vitest run "$@" > "$failure_log" 2>&1; then + cat "$failure_log" + echo "ERROR: $label mutation did not fail" + exit 1 + fi + if ! rg -F "$expected" "$failure_log" >/dev/null; then + cat "$failure_log" + echo "ERROR: $label failed for a different reason" + exit 1 + fi + cat "$failure_log" + cp "$backup" "$file" + after=$(shasum -a 256 "$file" | awk '{print $1}') + test "$before" = "$after" + cmp "$backup" "$file" + printf '%s\n' "RESTORED $label SHA256 $after" + npx vitest run "$@" > "$pass_log" 2>&1 + cat "$pass_log" + trap - EXIT + rm -f "$backup" +) + +mutate_and_check f1 src/authored-step-graph.ts \ + '&& !this.registeredAggregates.has(current) && !this.certifiedMembers.has(current)' \ + '&& !this.registeredAggregates.has(current) && false' \ + 'expected false to be true' \ + tests/authored-step-graph.test.ts -t 'does not trust a user-built join merely because it is a combinator member' + +mutate_and_check f2-binding src/authored-parallel-eligibility.ts \ + 'return importsSurfaceFlow && definesDefaultBody && !unsafe;' \ + 'return definesDefaultBody && !unsafe;' \ + 'expected true to be false' \ + tests/authored-parallel-eligibility.test.ts -t 'requires the exported arrow to be the actual body from the direct Surface binding' + +mutate_and_check f2-body src/authored-parallel-eligibility.ts \ + 'if (args[args.length - 1]!.getText(file) !== bodySource) return false;' \ + '/* mutation: skip body identity */' \ + 'expected true to be false' \ + tests/authored-parallel-eligibility.test.ts -t 'requires the exported arrow to be the actual body from the direct Surface binding' + +mutate_and_check f3 src/authored-flow-lifecycle.ts \ + '|| Promise.resolve !== nativePromiseResolve || Promise.reject !== nativePromiseReject' \ + '|| Promise.reject !== nativePromiseReject' \ + 'resolve: expected true to be false' \ + tests/authored-flow-lifecycle-executor.test.ts -t 'detects replacement of every Promise primitive used by parallel joins' diff --git a/evidence/native-parallel-review7/raw-logs.tar.gz b/evidence/native-parallel-review7/raw-logs.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..0576a5f03b3dd9e26f761c9f56fa62392960518b GIT binary patch literal 6137 zcmZ{Fbx_oA`!(ItAV|Z~DIg&rB~nU;s&g z!~*R7a1hxGej86hqarGccfaX`6uwAO%k>#c*di3NH)Z!a5D<`e>9HfH3>SF>e zzZ6P`X^HtIFK!2MaC@)w53Jw_;(;_?KE9n|ZB}wlBDfC3$8fZO6C)oTDUCjvtlclg z3b6coJ0{`=rJlBRD+j+?fXSP|^+fyDj;Rl_@f+L?(eeSn$iiG?2tE2;XaIJX=iZI| z*R9zEJq}*?LL0@0jd~oP>$NyUOmePx4(? zdH}n1@y+wRG!-v(V@2sMb$`W%cJ(2#@%3Wv1>MJ;(D8Yl;*x+^ot=_^Xq|MDb3w)4 zT9Jd-ALCt{UPI#VHeKmeett^c9o3}q&#_~XqtA8pko0SlY%?W>gb}zm;r!=6?rU7$ z6t>2R<);`QvTS{muPNF@`lEQ-Pi+NeY3! zC^CwYL!$lS*=+sDcx{>tis%8F47}*M@n6Md0*2CHwx_l26y(FT?ReyiNhXhlmVf!o z@}?FTFq5TzHy|YY$-^uVCxoyfm^b){>&#>T!DV0?gSfyAoaM`w$18Cvde^&T!4v?IQcH(Igm2)*vx_VUv$)&H^S7H3oqxh!dxt(UlL%N*eC{ z=1(T4Eu?0=4v(suv7{1E-{PUiL5zW44wzz!AvK?{%7xe!8=7F-u(A6|fqI+SbQ(L4 zVH~F?mpu)$d{|wKWJndI4dCv}clZ;n@3OB<j96 zKV#`nx0U`|i#jfDPLQAn1oIir#hb-$b*J>tWO51ydM8_*HmaPWpB$OVv^m`LKcR+t z5#7O9&e13Rrk-O>5~ZH26Ta-tsIN0kHBigtLx=OO!?kmqLa2T;A5i;*-S!D=-jtu_ z+Ce`6l=pxL^cY*v-nyYgr-nd_Vd!mHa` z>;@^+eIHQtOiIveb{X9MB~lb!L*Xi@E3X`73~T^%hOqlc=xCpK9RcDaUK#owJ3t&0p5&g8CR=Fa4)BjmOW8pdW3 z-VkJSG^nLfd1?Mfet3BJ<~>in;$`ik?_n>6CasIy7m2Q<7-k4)*au`E z3nDEMbBf(pcPY{P3mPsZUVlN;MGN8-yQ%G>RrMEiU9?7=VmF>0db_-rDg2L6?8E%7 z6jCU2TzR-&+Pbv(>Gu}&-k2p^Z00$j3PX9L&{RbZh#Ppx<~A1IRRvfTECRtF{D2kS zK@2!u00mh8Um<&qq=Q0}%tg-O?{06IA)LdBAl&;29+Us%ddtX$7&GL;PHyJy+HI8!R3aAh;PRgd50A6?r30BP<0Mk4$`R(GEul_7 zZcoJy;B#*DS8ELQh0}YIClIuL9tH$TFxO4X)6gUk!DT9>OXJZ=cf z+f|Y{XO|15!fPe|F!^>-KW$3q?tZAm;ta8p3dbQ%#0ma67v)%7_a6SS<>12q`sdIK zp3waJUluxjFn7!{)R@3>tT43T8QZ`8-ZQ#CjjjGZy!F?!f4-|e4Evde$j_5V|8kkT z^DjZwK}Rro;5$_g@O1@{yv`i}o?=~*%E`dj+tE#M*d_%ZAoXt*j<~k{`YAcU=V}E= z841O@-meFO^KOsH=$)|}9h`N00jzE?Vn-&(7jadaQsKo%&PFfnI^T#iSJ`Yri2d$_ z7Pe(?4knz(Lq&J08Elo!ulsX{HEz!h3GU&bGtz`L8ytQU=Yhk*&u~g=ZYH)S7>003 z_9`ym%VCw3EDvXiy^b?wZWtrv%rU}S7uBf`;y7nxRVu?0?49x4!tg}&{lvD(CchDT zM6iPv9NEo!JML}RHH^OMReS{Z_t=qh3r3DH5pOk6-Cg+(HGi<2L1(%8fzX>mwXW^J zV!2@MH<#RdhjFI22Q_WHRvGU@DJtaI*e!D@`;PQP9vdrKx4jJE=K>23T;^j4s(wF6EHF7W2x5+s~OX{qu58e%E4RU)vT@g zW8fhlpm2y?sh>u`BV?meJ1y~qptQ!7 zjDp@+%}KVPo=n!KVrsoqDuk(z$w19`0}(3vwhlAUSH6m2XxjQ9SLy?@?iRccRVscQ zV}n5xVu)7r45Mg9SpAr+SyNVK>>9TQ6W9_92&p-iL>Dz$9@3P;`wA zrUNpsR=NQ`tn4ZL1MuwDdma2Q34SA!lh&GX>7dMPkGY+!y2_o)s_q8Te1=f~dm&rW zkgF{XGV8*9g~t`JDtgm1CmWeVzuBc2QZ*t*BqR#(4pj^7JrZ_Fl*;)WZ=*QqqTy|5 z8UjTItjC#SaSSv90s|gL0=e*HBL-*RZT%sx5{D^aod6|dh25|lwp{>v^p#QQ zm~hg`O!eN}e7K6>hPvLC01jIM(hRXUFLn9jwHVpO{Yzt^Us?y(Y*%uL`Q6{cdLkN*rNf|oX_HVn)EEG@%#(G?bDe`x85uw+XMJ(M zhru=i**w|zEKpy|Rq@pO#fk7=@22l({M|>dhw^*rbH;%c)gySC{neXTg!tM0kl#ZL z``VxBGWyctPO|Ak_1pb~hmq-?^>vFIE2#5NScCFJv-`;VZkDQPy_*?1!{Tn0(V4$L z$vmFEX(QahX*Qyq=0;w0xgU8%aK?}aQ@E55V;XSIByrf9{1`T&ZVRFh+ZJ)E=B_xPiF5D4WSz#nO-m;y8wT3G}2AlF_1 zZiofoz!@(FJh^A=(_KzhsS#AKHkz=gpIsp#O zlEC*#zUejT02kgf&h-*Cr}tfTR>YN$2x{v!#>yObYGUM4cfTpps%IFrGIi{z^uV*X zYdM4@%@Z_=g-KNz&@=51xgR}OtGS?kB)^&pQ_^fY=z%@ZEJ=Q=JO%62C7+N_J+yj0 zU18|{(*cP_@C34=eQ0T7%8EDpoGPk`uHU(Z@WH3~u}xqZd`-e%eP9r9qFcy#DxP}Y z){o-4K~@V_$_uZ)6if2tH)@T7$$u>-ohEG7%sEL92@XdwPm!uWxJC7!YNs-M;^&DF zEz7^X{LVg%q%lwn0gYa<1reky`b8tlQz z^)P|Q>{eNay+#V#c>N8y%ZCL|ZU8N4Aa*kND4qDw%x2!qMmrmd^oz7)Y!_*pvT-fH zY_7IrtQiBJoVsP=w5)?QC#F{bx-1rq>?x3Tm1{|rgd;KPgi~!xq%yh`+7(6SU2P|8 zWFORe@34(hyC>&{I9L~S*>Cx9M9n5SCA#tnTe%><{-ofOv^5YT`G}iJqe?s9vIr4WgvhW_ zl(%0LdwwgX9uW(j(2y)6;1%O!&H2QcQ5hf;{~@#rd7v?lx9csbr_)5=9K*-maUoeT z^G>>_fUi`KY@3&Ir&=wj=73f?Wb6Q%Cb_eGyW`vR zK480B)37_HDh})~0U7W^+X`X?U*AQ@9{YJfB*64TIU-z#JuZ@&^5X6D1m6J6RU931 zsGP<{91#s=%3Nx3YYCojbRTNfed2AARUDz}z1XsNw2UwhOa?as;6G@NxawIT0|Uq^ zVZqG6N&xycQoG&yFsAh-f5w6sQJF4UCKWZ_#+xR19UXjnIRWfDg(WKvIk3{zSOZ_3 zzPl1}d0`Ivp~(@B*-F1_8=*BZK#o)#|6(P|axAuRkjiG3nW;cK z%tpEmA@J9H1LIjsZQ)r%e)opoppoCHIxG^sm0Rs5_)=P;M^lFiiyu3|-e})@{z;oZ zs3K9aM=4+Np7u+rJ@fx?$Mt$Yef6)U9^oH|C6)GawkwiK zw0AIuqiEzMhQsv-7Ld3A>uU+mL8_KrBg(}EOAGNR(>1h~Bhm{k3bkmq2MC5&|G1^g4$YAW)CL|8XWEMhY9@g83`Bd zBdPn+?&90NP}5ipbfFk$Qlo2s&ZK0a~n}PmXD1s^j3hX&8 zlGFVnjIzFl*I(X%)AF`aaHT< zAlpKdG$z+Ynusj;waI3N6NGqC155!K^mGiDog&i@H{NdEl(q?~o3EH>E>5Ru6**{X zM$)UgP9@9Y9=l%zf$#A;2X?o~<5@?)B6!!Be$4mc>l2HhBHT=FSVmvN_dM%UUHM|4$WIt`Oo z6&aJZ;ZxzEor9K~vKxzSQvo|Y9XTaAn6c6uf2Q~B>Vc0ydNvIbtDTG`8=yOylVuY8 zI0_co`f}&Sa(&6aK@$h2BUih-e!f4ZYiCL?6OKv%e{X^`6fE@p6&2Pp9>{I`asi;XDZ1uN5U*+{Yn_ z>&wS$Jp=CoKqWkVYR`2XC>`s_8ZVSp0g{Z`v(ckwD6nAtCoEhD4IjI;`4%A^o4271!{g7ngAHzN^S-HRtTCHs&?};#J^1h0TllL>Fx6y1_$Bx89yqZ=?v2$Q zj3M$&MSO|6Nz(V}`}0DLwwa-7Rcj9$S t%7+}pe$(=g@<`nm-or{$5}$A%{Fa`4D)s+u2pa@|>wMa|h~tKf^FO5GLn#0N literal 0 HcmV?d00001 diff --git a/evidence/native-parallel-review7/review6-exact.mjs b/evidence/native-parallel-review7/review6-exact.mjs new file mode 100644 index 000000000..a42e2871d --- /dev/null +++ b/evidence/native-parallel-review7/review6-exact.mjs @@ -0,0 +1,231 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { execFileSync, spawn } from 'node:child_process'; +import scenarios from './s2.mjs'; +import baseScenarios from './s.mjs'; +import { SURF, NAT, W2, TAIL5 } from './s.mjs'; + +// Review 6 reported R5n's entry shape and exact patch module, but its +// generator block was not preserved. Reconstruct the entry from the report. +const r5n = { name: 'R5n', files: { + 'chain.flow.ts': `${SURF}\nimport './lib/p.mjs';\nexport default flow('r5n', async f => {\n${W2}${NAT}${TAIL5}`, + 'lib/p.mjs': String.raw`const I = Function('return this')()['Pro' + 'mise']; +const resolve = I.resolve; +let gate; +I.resolve = function (x) { + if (this !== I || !(x instanceof I) || !/at (Promise|Function)\.all /.test(new Error().stack)) return resolve.call(this, x); + if (gate === undefined) { let open; const g = new I(r => { open = r; }); g.open = open; gate = g; queueMicrotask(() => { gate = undefined; }); } + const g = gate; x.then(v => g.open(v), () => {}); return g; +}; +`, +} }; + +const bin = '/bench/node_modules/.bin/flows'; +const firstBin = process.env.FIRST_BIN ?? bin; +const resumeBin = process.env.RESUME_BIN ?? bin; +const finalBin = process.env.FINAL_BIN ?? resumeBin; +const daemon = process.env.RELAYFLOWD_BIN ?? '/bench/node_modules/@relayflows/runtime-linux-x64/bin/relayflowd'; +const firstDaemon = process.env.FIRST_DAEMON_BIN ?? daemon; +const resumeDaemon = process.env.RESUME_DAEMON_BIN ?? daemon; +const finalDaemon = process.env.FINAL_DAEMON_BIN ?? resumeDaemon; +const fixtureNodeModules = process.env.FIXTURE_NODE_MODULES ?? '/bench/node_modules'; +const selected = new Set((process.env.CASE ?? scenarios.map(s => s.name).join(',')).split(',')); +const forced = process.env.FORCE_ELIGIBLE === '1'; +const baseline = process.env.BASELINE === '1'; +const expectRefusal = process.env.EXPECT_ROLLBACK_REFUSAL === '1'; +const expectBaseFailure = process.env.EXPECT_BASE_FAILURE === '1'; +const parallelCases = new Set(['A1', 'B1', 'N2', 'RBA1', 'RBB1', 'RBN2']); +const delays = [0, 60, 130, 220, 330, 450]; +const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); + +if (forced) { + const file = '/bench/node_modules/@relayflows/sdk/dist/authored-parallel-eligibility.js'; + const source = fs.readFileSync(file, 'utf8'); + const changed = source.replace('export function parallelRunEligible(body, moduleSource) {', + 'export function parallelRunEligible(body, moduleSource) { return true;'); + if (changed === source) throw new Error('reviewer forced-eligibility mutation did not match'); + fs.writeFileSync(file, changed); +} + +function start(args, root, executable, daemonBin) { + const child = spawn(process.execPath, [executable, ...args], { + cwd: root, env: { ...process.env, RELAYFLOWD_BIN: daemonBin }, stdio: ['ignore', 'pipe', 'pipe'], + }); + let output = ''; + child.stdout.on('data', data => { output += data; }); + child.stderr.on('data', data => { output += data; }); + return { + child, + closed: new Promise(resolve => child.once('close', (code, signal) => resolve({ code, signal }))), + get output() { return output; }, + }; +} + +function killSweep(root) { + const connection = path.join(root, 'data/connection.json'); + const targets = new Set(); + if (fs.existsSync(connection)) targets.add(JSON.parse(fs.readFileSync(connection, 'utf8')).pid); + for (const entry of fs.readdirSync('/proc')) { + if (!/^\d+$/u.test(entry)) continue; + const pid = Number(entry); + if (pid === process.pid) continue; + try { + const cwd = fs.readlinkSync(`/proc/${pid}/cwd`); + const command = fs.readFileSync(`/proc/${pid}/cmdline`, 'utf8'); + if (cwd.startsWith(root) || command.includes(root)) targets.add(pid); + } catch { /* The process exited during the scan. */ } + } + for (const pid of targets) { + try { process.kill(pid, 'SIGKILL'); } + catch (error) { if (error.code !== 'ESRCH') throw error; } + } +} + +const sql = `import sqlite3,json,sys +db=sqlite3.connect(sys.argv[1]) +spawn=db.execute("select payload from entries where entry_type='run.spawned' order by seq limit 1").fetchone() +done=db.execute("select count(*) from entries where entry_type='step.completed'").fetchone()[0] +print(json.dumps({'spawned':json.loads(spawn[0]) if spawn else None,'completed':done}))`; +function journals(root) { + const directory = path.join(root, 'data/runs'); + if (!fs.existsSync(directory)) return []; + return fs.readdirSync(directory).filter(file => file.endsWith('.sqlite3')).sort().map(file => ({ + runId: file.slice(0, -8), + ...JSON.parse(execFileSync('python3', ['-c', sql, path.join(directory, file)], { encoding: 'utf8' })), + })); +} +const spec = record => record?.spawned?.spec ?? record?.spawned?.payload?.spec ?? record?.spawned?.run?.spec; +function rootRecord(records) { + return records.find(record => spec(record)?.steps?.[0]?.id === 'authored-root'); +} +function assertNoReplay(records, rootId) { + const seen = new Map(); + for (const record of records) { + if (record.runId === rootId) continue; + const step = spec(record)?.steps?.[0]; + if (!step?.command || !(step.id.startsWith('run-') || step.id.includes('--run-'))) continue; + // A dispatched child is a separate flow invocation: two children may + // intentionally run the same command under different dispatch prefixes. + const namespace = step.id.includes('--') ? step.id.slice(0, step.id.lastIndexOf('--')) : ''; + const key = `${namespace}|${step.command}`; + const earlier = seen.get(key); + if (earlier && earlier.id !== step.id && (earlier.completed > 0 || record.completed > 0)) { + throw new Error(`journal replay: ${step.command}: ${earlier.id} -> ${step.id}`); + } + seen.set(key, { id: step.id, completed: record.completed }); + } +} + +async function one(scenario, index) { + const root = fs.mkdtempSync(`/bench/review7-${scenario.name}-`); + const data = path.join(root, 'data'); + fs.writeFileSync(path.join(root, 'package.json'), '{"type":"module"}'); + fs.symlinkSync(fixtureNodeModules, path.join(root, 'node_modules')); + fs.writeFileSync(path.join(root, 'flows.json'), JSON.stringify({ + cli: path.join(root, 'adapter.mjs'), models: ['test-model'], + })); + fs.writeFileSync(path.join(root, 'adapter.mjs'), '#!/usr/bin/env node\nprocess.exit(0);\n', { mode: 0o755 }); + for (const [file, source] of Object.entries(scenario.files)) { + const target = path.join(root, file); + fs.mkdirSync(path.dirname(target), { recursive: true }); + fs.writeFileSync(target, source.replaceAll('', root)); + } + if (scenario.bluebird) { + const destination = path.join(root, 'bb'); + fs.cpSync('/bench/node_modules/bluebird/js/release', destination, { recursive: true }); + fs.writeFileSync(path.join(destination, 'package.json'), '{"type":"commonjs"}'); + } + let initial; + let passed = false; + try { + initial = start(['run', '--no-observer-link', '--json', ...(scenario.extraArgs ?? []), '--data-dir', data, + path.join(root, 'chain.flow.ts'), '--input', '{}'], root, firstBin, firstDaemon); + const deadline = Date.now() + 90_000; + let early; + while (!fs.existsSync(path.join(root, 'stalled'))) { + if (initial.child.exitCode !== null || initial.child.signalCode !== null) { + early = await initial.closed; + break; + } + if (Date.now() >= deadline) throw new Error(`fresh stall timeout: ${initial.output}`); + await sleep(15); + } + if (early) { + const effects = fs.existsSync(path.join(root, 'effects')) + ? fs.readFileSync(path.join(root, 'effects'), 'utf8') : ''; + const records = journals(root); + const rootRun = rootRecord(records); + const mode = rootRun ? JSON.parse(spec(rootRun).steps[0].instruction).executionMode : undefined; + if (expectBaseFailure && early.code !== 0 && /run_admission_conflict/u.test(initial.output) + && new Set(effects).size === effects.length) { + console.log(JSON.stringify({ case: scenario.name, index, mode, outcome: 'base_failure', effects })); + passed = true; + return; + } + if (!forced || !scenario.name.startsWith('FR') || early.code === 0 || effects !== '' || mode !== 'parallel') { + throw new Error(`base-working fresh run failed: mode=${mode}, effects=${effects}, exit=${early.code}: ${initial.output}`); + } + assertNoReplay(records, rootRun.runId); + console.log(JSON.stringify({ case: scenario.name, index, mode, outcome: 'failed_closed', effects })); + passed = true; + return; + } + await sleep(delays[index]); + initial.child.kill('SIGKILL'); + await Promise.race([initial.closed, sleep(2_000).then(() => { throw new Error('CLI kill timeout'); })]); + killSweep(root); + await sleep(100); + killSweep(root); + fs.writeFileSync(path.join(root, 'release'), ''); + const before = fs.existsSync(path.join(root, 'effects')) ? fs.readFileSync(path.join(root, 'effects'), 'utf8') : ''; + const records = journals(root); + const rootRun = rootRecord(records); + if (!rootRun) throw new Error('missing root journal'); + const mode = JSON.parse(spec(rootRun).steps[0].instruction).executionMode; + if (forced && mode !== 'parallel') throw new Error(`forced mode was ${mode}`); + const expectedMode = parallelCases.has(scenario.name) ? 'parallel' : 'serial'; + if (!forced && mode !== expectedMode && !(baseline && mode === undefined)) + throw new Error(`natural ${scenario.name} mode was ${mode}`); + const resumed = start(['resume', '--no-observer-link', '--json', ...(scenario.extraArgs ?? []), '--data-dir', data, + rootRun.runId], root, resumeBin, resumeDaemon); + const timeout = setTimeout(() => resumed.child.kill('SIGKILL'), 150_000); + const result = await resumed.closed; + clearTimeout(timeout); + if (expectRefusal && mode === 'parallel') { + if (result.code === 0 || !/malformed authority metadata|unsupported.*parallel|refus/iu.test(resumed.output)) { + throw new Error(`parallel rollback did not refuse: ${resumed.output}`); + } + const refusedEffects = fs.existsSync(path.join(root, 'effects')) + ? fs.readFileSync(path.join(root, 'effects'), 'utf8') : ''; + if (refusedEffects !== before) throw new Error(`rollback admitted an effect: ${before} -> ${refusedEffects}`); + const final = start(['resume', '--no-observer-link', '--json', ...(scenario.extraArgs ?? []), '--data-dir', data, + rootRun.runId], root, finalBin, finalDaemon); + const finalResult = await final.closed; + if (finalResult.code !== 0) throw new Error(`head could not resume after rollback refusal: ${final.output}`); + } else if (expectBaseFailure && result.code !== 0 + && /run_admission_conflict/u.test(resumed.output)) { + const effects = fs.existsSync(path.join(root, 'effects')) + ? fs.readFileSync(path.join(root, 'effects'), 'utf8') : ''; + if (new Set(effects).size !== effects.length) throw new Error(`effect replay before base failure: ${effects}`); + console.log(JSON.stringify({ case: scenario.name, index, mode, outcome: 'base_failure', effects })); + passed = true; + return; + } else if (result.code !== 0) throw new Error(`resume failed: ${resumed.output}`); + const after = fs.existsSync(path.join(root, 'effects')) ? fs.readFileSync(path.join(root, 'effects'), 'utf8') : ''; + if (after.length === 0 || !after.includes('Z') || new Set(after).size !== after.length) + throw new Error(`effect replay: before=${before}, after=${after}`); + assertNoReplay(journals(root), rootRun.runId); + console.log(JSON.stringify({ case: scenario.name, index, mode, outcome: 'resumed', before, after })); + passed = true; + } finally { + if (initial?.child.exitCode === null && initial.child.signalCode === null) initial.child.kill('SIGKILL'); + killSweep(root); + if (passed || process.env.KEEP_FAILURE !== '1') fs.rmSync(root, { recursive: true, force: true }); + else console.error(`preserved failed fixture: ${root}`); + } +} + +for (const scenario of [...scenarios, ...baseScenarios, r5n].filter(value => selected.has(value.name))) { + for (let index = 0; index < delays.length; index++) await one(scenario, index); +} +console.log(JSON.stringify({ done: true, cases: [...selected], repetitions: delays.length, forced })); diff --git a/evidence/native-parallel-review7/s.mjs b/evidence/native-parallel-review7/s.mjs new file mode 100644 index 000000000..1de1d721f --- /dev/null +++ b/evidence/native-parallel-review7/s.mjs @@ -0,0 +1,164 @@ +// Scenario definitions for review 6 of flows#667. +const STALL = ` await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success');`; +const SURF = `import { flow } from '@relayflows/surface';`; +const flowSrc = (name, body, { fnExpr = false, header = '', pre = '' } = {}) => `${SURF} +${pre}export default flow('${name}'${header}, ${fnExpr ? 'async function(f)' : 'async f =>'} {${body} +${STALL} +}); +`; +const ADAPTER = `#!/usr/bin/env node +import fs from 'node:fs'; +if (process.argv[2] === 'auth') process.exit(0); +if (process.argv[2] === '--relayflows-adapter-v1') { + process.stdout.write('relayflows-agent-cli-v1\\n'); + let input = ''; + for await (const chunk of process.stdin) input += chunk; + if (input.trim() === '') process.exit(0); + const request = JSON.parse(input); + if (request.protocol !== 'relayflows-agent-cli-v1') process.exit(2); + process.stdout.write('relayflows-agent-cli-v1-execute\\n'); + fs.appendFileSync('/calls', 'x'); + process.stdout.write('{"message":"ok"}'); +} +`; +const HS = [['head', 'head'], ['base', 'base']]; +const S = []; +const add = (s) => S.push({ sides: HS, ...s }); + +// ---- review-5 fixtures, verbatim ---- +const P_BIND = `const Promise = { all: globalThis.Promise.all.bind(globalThis.Promise) };`; +const P_HAND = `const Promise = { all: (xs) => new globalThis.Promise((res, rej) => { const out = []; let n = xs.length; xs.forEach((x, i) => globalThis.Promise.resolve(x).then(v => { out[i] = v; if (--n === 0) res(out); }, rej)); }) };`; +const CHAIN = `export { default } from './impl.ts';\n`; +const TAIL5 = ` await f.run('printf X >> effects'); + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +}); +`; +const G3 = ` await Promise.all([f.run('sleep 0.5; printf A'), f.run('printf B'), f.run('sleep 0.1; printf C')]);\n`; +const NAT = ` const a = async () => { await f.run('sleep 0.4; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.2; printf C'); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]);\n`; +const impl = (name, P, body) => `${SURF}\n${P}\nexport default flow('${name}', async f => {\n${body}${TAIL5}`; +const W2 = ` await f.run('sleep 0.2; printf W');\n`; +add({ name: 'Q5', files: { 'chain.flow.ts': CHAIN, 'impl.ts': impl('q5', P_BIND, G3) } }); +add({ name: 'Q5n', files: { 'chain.flow.ts': CHAIN, 'impl.ts': impl('q5n', P_BIND, NAT) } }); +add({ name: 'Q5h', files: { 'chain.flow.ts': CHAIN, 'impl.ts': impl('q5h', P_HAND, G3) } }); +add({ name: 'Q5w', files: { 'chain.flow.ts': CHAIN, 'impl.ts': impl('q5w', P_BIND, W2 + G3) } }); +add({ name: 'Q5wn', files: { 'chain.flow.ts': CHAIN, 'impl.ts': impl('q5wn', P_BIND, W2 + NAT) } }); +add({ name: 'Q5wh', files: { 'chain.flow.ts': CHAIN, 'impl.ts': impl('q5wh', P_HAND, W2 + G3) } }); +add({ name: 'Q6Pw', files: { + 'chain.flow.ts': `${SURF}\nimport './lib/patch.mjs';\nexport default flow('q6Pw', async f => {\n await f.run('sleep 0.3; printf W');\n${NAT}${TAIL5}`, + 'lib/patch.mjs': `const I = Function('return this')()['Pro' + 'mise']; +const intrinsicAll = I.all; +const t = setInterval(() => { if (I.all !== intrinsicAll) { clearInterval(t); I.all = function all(xs) { return intrinsicAll.call(I, xs); }; } }, 2); +t.unref(); +` } }); + +// ---- P-series (review 4) ---- +add({ name: 'P1', files: { 'chain.flow.ts': `${SURF}\n${P_BIND}\nexport default flow('p1', async f => {\n${G3}${TAIL5}` } }); +add({ name: 'P1h', files: { 'chain.flow.ts': `${SURF}\n${P_HAND}\nexport default flow('p1h', async f => {\n${G3}${TAIL5}` } }); +add({ name: 'P1c', files: { 'chain.flow.ts': `${SURF}\nclass Promise extends globalThis.Promise { static all(xs) { return globalThis.Promise.all.call(globalThis.Promise, xs); } }\nexport default flow('p1c', async f => {\n${G3}${TAIL5}` } }); +add({ name: 'P1n', files: { 'chain.flow.ts': `${SURF}\n${P_BIND}\nexport default flow('p1n', async f => {\n${NAT}${TAIL5}` } }); +add({ name: 'P1bn', files: { 'chain.flow.ts': `${SURF}\nimport Promise from './bb/bluebird.js';\nexport default flow('p1bn', async f => {\n${NAT}${TAIL5}` }, bluebird: true }); +add({ name: 'P2', files: { 'chain.flow.ts': flowSrc('p2', ` + const warm = async () => {}; + await Promise.all([warm(), warm()]); + await f.run('printf X >> effects');`) } }); + +// ---- prior matrix ---- +add({ name: 'A1', files: { 'chain.flow.ts': flowSrc('a1', ` + const left = async () => { + await Promise.all([f.run('sleep 0.3; printf A'), f.run('printf B')]); + await f.run('printf L >> effects'); + }; + const right = async () => { + await Promise.all([f.run('printf C'), f.run('sleep 0.3; printf D')]); + await f.run('printf R >> effects'); + }; + await Promise.all([left(), right()]);`) } }); +add({ name: 'B1', files: { 'chain.flow.ts': flowSrc('b1', ` + const left = async () => { + await f.run('printf A'); + await f.run('printf B'); + await f.run('printf L >> effects'); + }; + const right = async () => { + await Promise.all([f.run('printf C'), f.run('printf D')]); + await f.run('printf R >> effects'); + }; + await Promise.all([left(), right()]);`) } }); +const N2 = ` + const a = async () => { await f.run('sleep 0.3; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.2; printf C'); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]);`; +add({ name: 'N2', files: { 'chain.flow.ts': flowSrc('n2', N2) } }); +add({ name: 'C1e', files: { 'chain.flow.ts': flowSrc('c1e', ` + const background = (async () => { await f.run('printf X >> effects'); })(); + await new Promise(resolve => setTimeout(resolve, 300)); + await f.run('printf Y >> effects'); + await background;`) } }); +add({ name: 'G1', files: { 'chain.flow.ts': flowSrc('g1', ` + await Promise.race([f.run('printf A >> effects'), f.run('sleep 0.3; printf B >> effects')]); + await f.run('printf G >> effects');`) } }); +const LLM_OUT = `const output = { type: 'object', properties: { message: { type: 'string' } }, required: ['message'] };`; +add({ name: 'H1', adapter: true, extraArgs: ['--local-agent'], files: { 'adapter.mjs': ADAPTER, 'chain.flow.ts': flowSrc('h1', ` + ${LLM_OUT} + const left = async () => { await f.llm('left', { output, model: 'test-model' }); await f.run('printf L >> effects'); }; + const right = async () => { await f.llm('right', { output, model: 'test-model' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`) } }); +add({ name: 'H2', adapter: true, extraArgs: ['--local-agent'], files: { 'adapter.mjs': ADAPTER, 'chain.flow.ts': flowSrc('h2', ` + const left = async () => { await f.agent('left', { task: 'left', model: 'test-model' }); await f.run('printf L >> effects'); }; + const right = async () => { await f.agent('right', { task: 'right', model: 'test-model' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`) } }); +add({ name: 'K4', adapter: true, extraArgs: ['--local-agent'], files: { 'adapter.mjs': ADAPTER, 'chain.flow.ts': flowSrc('k4', ` + const g = arguments[0]; + ${LLM_OUT} + const left = async () => { await g.llm('left', { output, model: 'test-model' }); await f.run('printf L >> effects'); }; + const right = async () => { await g.llm('right', { output, model: 'test-model' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`, { fnExpr: true }) } }); +add({ name: 'I1', files: { + 'child.flow.ts': `${SURF} +export default flow('child', async (f, input) => { + await Promise.all([f.run('printf first'), f.run('printf second')]); + await f.run('printf ' + input.token + ' >> effects'); + f.done('success'); +}); +`, + 'chain.flow.ts': flowSrc('i1', ` + const left = async () => { await f.dispatch('child', { token: 'x' }); await f.run('printf L >> effects'); }; + const right = async () => { await f.dispatch('child', { token: 'y' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`, { header: `, { use: ['./child.flow.ts'] }` }) } }); +add({ name: 'K1', files: { 'chain.flow.ts': flowSrc('k1', ` + const pause = () => sleep(300); + const late = async () => { await Promise.all([pause(), pause()]); await f.run('printf L >> effects'); }; + const fast = async () => { await f.run('sleep 0.2; printf A >> effects'); await f.run('sleep 0.2; printf B >> effects'); await f.run('printf C >> effects'); }; + await Promise.all([fast(), late()]);`, { pre: `import { setTimeout as sleep } from 'node:timers/promises';\n` }) } }); +add({ name: 'K2b', files: { 'chain.flow.ts': flowSrc('k2b', ` + const a = async () => { await f.run('sleep 0.3; printf A >> effects'); signal(); }; + const b = async () => { await f.run('sleep 0.1; printf B >> effects'); signal(); }; + const c = async () => { await Promise.all([ready(), ready()]); await f.run('printf C >> effects'); }; + await Promise.all([a(), b(), c()]);`, { pre: `let signal; const first = new Promise(r => { signal = r; });\nconst ready = async () => { await first; };\n` }) } }); +add({ name: 'K3', files: { 'chain.flow.ts': flowSrc('k3', ` + const out = []; + const a = async () => { out.push(await f.run('sleep 0.3; printf a')); }; + const b = async () => { out.push(await f.run('sleep 0.1; printf b')); }; + await Promise.all([a(), b()]); + await f.run('printf ' + out.join('') + ' >> effects');`) }, expect: r => /^(ab|ba)Z$/.test(r.effects) }); +add({ name: 'K5b', files: { 'chain.flow.ts': flowSrc('k5b', ` + const tree = async (d) => { if (d === 0) return; await Promise.all([tree(d - 1), tree(d - 1)]); }; + await f.run('printf A >> effects'); + await tree(12); + try { await f.run('printf B >> effects'); } catch (e) { void e; }`) }, expect: r => r.effects.includes('B') }); +add({ name: 'K13b', files: { 'chain.flow.ts': `${SURF} +export default flow('k13b', async f => { + const b = async () => { await f.run('sleep 0.4; printf B >> effects'); await f.run('printf C >> effects'); }; + const a = async () => { await f.run('sleep 0.1; printf A >> effects'); await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); f.done('success'); }; + await Promise.all([b(), a()]); +}); +` } }); + +export default S; +export { STALL, SURF, flowSrc, ADAPTER, HS, P_BIND, P_HAND, CHAIN, TAIL5, G3, NAT, impl, W2, add }; diff --git a/evidence/native-parallel-review7/s2.mjs b/evidence/native-parallel-review7/s2.mjs new file mode 100644 index 000000000..79984a7ac --- /dev/null +++ b/evidence/native-parallel-review7/s2.mjs @@ -0,0 +1,181 @@ +// Review-6 attack scenarios. +import { STALL, SURF, flowSrc, HS, P_BIND, G3, NAT, TAIL5, W2, impl } from './s.mjs'; +const S = []; +const add = (s) => S.push({ sides: HS, ...s }); +const FORCED = [['forced', 'forced'], ['base', 'base']]; + +// ---------- entry-file rule bypass (natural, unforced) ---------- +// The entry defines `flow` locally; the screen sees `export default flow()`, +// but the loaded definition is impl.ts's, whose module scope binds Promise. +const BYPASS = `import impl from './impl.ts'; +const flow = (..._args: unknown[]) => impl; +export default flow('decoy', async f => { + await f.run('printf decoy'); +}); +`; +// A spec-exact Promise.all built only from registered combinators; its one +// unregistered join is a *member* of a registered all. +const P_WRAP = `const Promise = { all: (xs) => globalThis.Promise.all([new globalThis.Promise((res, rej) => { const out = []; let n = xs.length; xs.forEach((x, i) => globalThis.Promise.all([x]).then(([v]) => { out[i] = v; if (--n === 0) res(out); }, rej)); })]).then(([v]) => v) };`; +const P_RACE = `const Promise = { all: (xs) => globalThis.Promise.race(xs) };`; +add({ name: 'R1', files: { 'chain.flow.ts': BYPASS, 'impl.ts': impl('r1', P_WRAP, G3) } }); +add({ name: 'R1w', files: { 'chain.flow.ts': BYPASS, 'impl.ts': impl('r1w', P_WRAP, W2 + G3) } }); +add({ name: 'R1wn', files: { 'chain.flow.ts': BYPASS, 'impl.ts': impl('r1wn', P_WRAP, W2 + NAT) } }); +add({ name: 'R2w', files: { 'chain.flow.ts': BYPASS, 'impl.ts': impl('r2w', P_RACE, W2 + G3) } }); +add({ name: 'R3w', files: { 'chain.flow.ts': BYPASS, 'impl.ts': impl('r3w', P_BIND, W2 + G3) } }); +add({ name: 'R3', files: { 'chain.flow.ts': BYPASS, 'impl.ts': impl('r3', P_BIND, G3) } }); +// same bypass, `flow` imported from a local helper module +add({ name: 'R4w', files: { + 'chain.flow.ts': `import { flow } from './wrap.ts'; +export default flow('decoy', async f => { + await f.run('printf decoy'); +}); +`, + 'wrap.ts': `import impl from './impl.ts';\nexport const flow = (..._args: unknown[]) => impl;\n`, + 'impl.ts': impl('r4w', P_WRAP, W2 + G3) } }); +// Without the bypass the wrapped all is serial (control) +add({ name: 'R1c', files: { 'chain.flow.ts': `${SURF}\n${P_WRAP}\nexport default flow('r1c', async f => {\n${W2}${G3}${TAIL5}` } }); + +// ---------- runtime rule with eligibility forced on ---------- +const forced = (name, body, pre = '') => ({ name, sides: FORCED, files: { 'chain.flow.ts': flowSrc(name.toLowerCase(), body, { pre }) } }); +S.push(forced('FRrace', ` + await f.run('sleep 0.2; printf W'); + await Promise.race([f.run('sleep 0.3; printf A'), f.run('sleep 0.1; printf B')]); + await f.run('printf X >> effects');`)); +S.push(forced('FRany', ` + await f.run('sleep 0.2; printf W'); + await Promise.any([f.run('sleep 0.3; printf A'), f.run('sleep 0.1; printf B')]); + await f.run('printf X >> effects');`)); +S.push(forced('FRnestrace', ` + await f.run('sleep 0.2; printf W'); + await Promise.all([Promise.race([f.run('sleep 0.3; printf A'), f.run('sleep 0.1; printf B')]), f.run('printf C')]); + await f.run('printf X >> effects');`)); +S.push(forced('FRdefer', ` + await f.run('sleep 0.2; printf W'); + let signal; const first = new Promise(r => { signal = r; }); + const a = async () => { await f.run('sleep 0.3; printf A >> effects'); signal(); }; + const b = async () => { await f.run('sleep 0.1; printf B >> effects'); signal(); }; + const c = async () => { await Promise.all([first, f.run('printf c0')]); await f.run('printf C >> effects'); }; + await Promise.all([a(), b(), c()]);`)); +S.push(forced('FRthen', ` + await f.run('sleep 0.2; printf W'); + const sa = f.run('sleep 0.3; printf A'); + const th = { then: (r, j) => sa.then(r, j) }; + await Promise.all([th, f.run('sleep 0.1; printf B')]); + await f.run('printf X >> effects');`)); +S.push(forced('FRsettled', ` + await f.run('sleep 0.2; printf W'); + await Promise.allSettled([f.run('sleep 0.3; exit 3', { onNonZero: 'record' }), f.run('sleep 0.1; printf B')]); + await f.run('printf X >> effects');`)); +S.push(forced('FRset', ` + await f.run('sleep 0.2; printf W'); + await Promise.all(new Set([f.run('sleep 0.3; printf A'), f.run('sleep 0.1; printf B')])); + await f.run('printf X >> effects');`)); +S.push(forced('FRgen', ` + await f.run('sleep 0.2; printf W'); + function* g() { yield f.run('sleep 0.3; printf A'); yield f.run('sleep 0.1; printf B'); } + await Promise.all(g()); + await f.run('printf X >> effects');`)); +S.push(forced('FRthenagg', ` + await f.run('sleep 0.2; printf W'); + await Promise.all([f.run('sleep 0.3; printf A'), f.run('sleep 0.1; printf B')]).then(v => v); + await f.run('printf X >> effects');`)); +S.push(forced('FRmicro', ` + await f.run('sleep 0.2; printf W'); + const a = async () => { await f.run('sleep 0.3; printf A'); await new Promise(r => queueMicrotask(r)); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await new Promise(r => process.nextTick(r)); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.2; printf C'); await new Promise(r => setImmediate(r)); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]); + await f.run('printf X >> effects');`)); +S.push(forced('FRcatch', ` + await f.run('sleep 0.2; printf W'); + const a = async () => { await f.run('sleep 0.1; printf A'); throw new Error('a'); }; + const b = async () => { await f.run('sleep 0.3; printf B'); throw new Error('b'); }; + try { await Promise.all([a(), b()]); } catch (e) { void e; } + await f.run('sleep 0.5; printf X >> effects');`)); +S.push(forced('FRfinally', ` + await f.run('sleep 0.2; printf W'); + const a = async () => { try { await f.run('sleep 0.3; printf A'); } finally { await f.run('printf F >> effects'); } }; + const b = async () => { await f.run('sleep 0.1; printf B'); }; + await Promise.all([a(), b()]); + await f.run('printf X >> effects');`)); +S.push(forced('FRiter', ` + await f.run('sleep 0.2; printf W'); + const ps = [f.run('sleep 0.3; printf A'), f.run('sleep 0.1; printf B')]; + for await (const v of ps) { void v; } + await f.run('printf X >> effects');`)); +// forced wrapped-all directly in the entry (no bypass needed) +S.push({ name: 'FRwrap', sides: FORCED, files: { 'chain.flow.ts': `${SURF}\n${`const PW = ${P_WRAP.slice('const Promise = '.length).replace(/;$/, '')};`}\nexport default flow('frwrap', async f => {\n${W2} await PW.all([f.run('sleep 0.5; printf A'), f.run('printf B'), f.run('sleep 0.1; printf C')]);\n${TAIL5}` } }); + +// ---------- entry-file rule probes (natural) ---------- +add({ name: 'E1factory', files: { 'chain.flow.ts': `${SURF} +const make = () => flow('e1', async f => { +${NAT}${TAIL5.replace(/\}\);\n$/, '});')} +export default make(); +` } }); +add({ name: 'E2helper', files: { + 'chain.flow.ts': flowSrc('e2', ` + const a = async () => { await f.run('sleep 0.3; printf A'); await pause(); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + await Promise.all([a(), b()]);`, { pre: `import { pause } from './helper.ts';\n` }), + 'helper.ts': `export const pause = async () => { await new Promise(r => setTimeout(r, 50)); };\n` } }); +add({ name: 'E3dyn', files: { + 'chain.flow.ts': flowSrc('e3', ` + const a = async () => { await f.run('sleep 0.3; printf A'); await import('./helper.ts'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + await Promise.all([a(), b()]);`), + 'helper.ts': `export const x = 1;\n` } }); +add({ name: 'E4json', files: { + 'chain.flow.ts': flowSrc('e4', N2body(), { pre: `import data from './d.json' with { type: 'json' };\nvoid data;\n` }), + 'd.json': `{"k":"v"}` } }); +add({ name: 'E4jsonuse', files: { + 'chain.flow.ts': flowSrc('e4u', ` + const a = async () => { await f.run('sleep 0.3; printf A'); await f.run('printf ' + data.k + ' >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + await Promise.all([a(), b()]);`, { pre: `import data from './d.json' with { type: 'json' };\n` }), + 'd.json': `{"k":"a"}` } }); +add({ name: 'E5ns', files: { 'chain.flow.ts': `${SURF} +import * as surface from '@relayflows/surface'; +export default surface.flow('e5', async f => { +${NAT}${TAIL5}` } }); +function N2body() { return ` + const a = async () => { await f.run('sleep 0.3; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.2; printf C'); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]);`; } + +// ---------- upgrade / rollback ---------- +const UP = [['p2050', 'head'], ['p2051', 'head']]; +const CI4 = flowSrc('ci4', ` + await f.run('printf a >> effects'); + await Promise.resolve(f.run('printf b >> effects')); + await Promise.all([f.run('printf c >> effects'), f.run('printf d >> effects')]); + await f.run('test -f release || { touch stalled; sleep 120; }; printf y >> effects', { timeout: '5m' }); + await Promise.all([Promise.resolve(f.run('printf e >> effects')), Promise.resolve(f.run('printf g >> effects'))]);`); +const CI5 = flowSrc('ci5', ` + await f.run('printf a >> effects'); + await Promise.resolve(f.run('printf b >> effects')); + await Promise.all([f.run('printf c >> effects'), f.run('printf d >> effects')]); + await f.run('printf e >> effects'); + await f.run('test -f release || { touch stalled; sleep 120; }; printf y >> effects', { timeout: '5m' }); + await Promise.all([Promise.resolve(f.run('printf g >> effects')), Promise.resolve(f.run('printf h >> effects'))]);`); +const A1b = ` + const left = async () => { + await Promise.all([f.run('sleep 0.3; printf A'), f.run('printf B')]); + await f.run('printf L >> effects'); + }; + const right = async () => { + await Promise.all([f.run('printf C'), f.run('sleep 0.3; printf D')]); + await f.run('printf R >> effects'); + }; + await Promise.all([left(), right()]);`; +const B1b = ` + const left = async () => { await f.run('printf A'); await f.run('printf B'); await f.run('printf L >> effects'); }; + const right = async () => { await Promise.all([f.run('printf C'), f.run('printf D')]); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`; +for (const [n, src] of [['CI4', CI4], ['CI5', CI5], ['A1', flowSrc('a1', A1b)], ['B1', flowSrc('b1', B1b)], ['N2', flowSrc('n2', N2body())]]) { + S.push({ name: 'U' + n, sides: UP, files: { 'chain.flow.ts': src } }); + S.push({ name: 'RB' + n, sides: [['head', 'p2050'], ['head', 'p2051']], secondResume: 'head', + files: { 'chain.flow.ts': src } }); +} + +export default S; diff --git a/evidence/native-parallel-review7/sdk-build.log b/evidence/native-parallel-review7/sdk-build.log new file mode 100644 index 000000000..1647e84a1 --- /dev/null +++ b/evidence/native-parallel-review7/sdk-build.log @@ -0,0 +1,3 @@ + +> @relayflows/sdk@2.0.51 build +> tsc && node scripts/make-cli-executable.mjs diff --git a/evidence/native-parallel-review7/sdk-dist-hashes.log b/evidence/native-parallel-review7/sdk-dist-hashes.log new file mode 100644 index 000000000..3cee9e93b --- /dev/null +++ b/evidence/native-parallel-review7/sdk-dist-hashes.log @@ -0,0 +1,8 @@ +4f2f11a4ae67e3389eaf869b9fce97a74e17898ec7767153641fd6956767f2e5 packages/sdk/dist/authored-parallel-eligibility.js +28b2db372abff09f98e504ed3881dc02c2c8b858949213bef987150978f68d57 packages/sdk/dist/authored-parallel-body.js +d6938695ad30bbb46ee2b0d44f14ac079384f6fd3b35bb07f1549a05cca724c0 packages/sdk/dist/authored-flow-lifecycle.js +0ae20fb5ea97f98da49fd93ec933c6098e5d33a0bfa7835bbf491b0699504b0b packages/sdk/dist/authored-step-graph.js +4f2f11a4ae67e3389eaf869b9fce97a74e17898ec7767153641fd6956767f2e5 /bench/sdk-head/dist/authored-parallel-eligibility.js +28b2db372abff09f98e504ed3881dc02c2c8b858949213bef987150978f68d57 /bench/sdk-head/dist/authored-parallel-body.js +d6938695ad30bbb46ee2b0d44f14ac079384f6fd3b35bb07f1549a05cca724c0 /bench/sdk-head/dist/authored-flow-lifecycle.js +0ae20fb5ea97f98da49fd93ec933c6098e5d33a0bfa7835bbf491b0699504b0b /bench/sdk-head/dist/authored-step-graph.js diff --git a/evidence/native-parallel-review7/sdk-focused-unit.log b/evidence/native-parallel-review7/sdk-focused-unit.log new file mode 100644 index 000000000..7e50bb5ea --- /dev/null +++ b/evidence/native-parallel-review7/sdk-focused-unit.log @@ -0,0 +1,17 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-parallel-body.test.ts (3 tests) 8ms + ✓ tests/authored-parallel-eligibility.test.ts (9 tests) 19ms + ✓ tests/communication-feature-secret-scoping.test.ts (1 test) 29ms + ✓ tests/authored-step-graph.test.ts (27 tests) 559ms + ✓ tests/authored-step-secrets.test.ts (1 test) 14ms + ✓ tests/worker-feature-secret-scoping.test.ts (2 tests) 689ms + ✓ agent worker uses the negotiated daemon capability for its real child 357ms + ✓ llm worker uses the negotiated daemon capability for its real child 332ms + ✓ tests/authored-flow-lifecycle-executor.test.ts (44 tests) 564ms + + Test Files 7 passed (7) + Tests 87 passed (87) + Start at 23:51:32 + Duration 4.33s (transform 1.93s, setup 106ms, collect 12.07s, tests 1.88s, environment 1ms, prepare 581ms) diff --git a/evidence/native-parallel-review7/sdk-npm-ci.log b/evidence/native-parallel-review7/sdk-npm-ci.log new file mode 100644 index 000000000..d0206fcd4 --- /dev/null +++ b/evidence/native-parallel-review7/sdk-npm-ci.log @@ -0,0 +1,16 @@ +npm warn deprecated whatwg-encoding@3.1.1: Use @exodus/bytes instead for a more spec-conformant and faster implementation + +added 195 packages, and audited 196 packages in 14s + +65 packages are looking for funding + run `npm fund` for details + +13 vulnerabilities (6 moderate, 4 high, 3 critical) + +To address issues that do not require attention, run: + npm audit fix + +To address all issues (including breaking changes), run: + npm audit fix --force + +Run `npm audit` for details. diff --git a/evidence/native-parallel-review7/sdk-secrets-live.log b/evidence/native-parallel-review7/sdk-secrets-live.log new file mode 100644 index 000000000..f3892a75a --- /dev/null +++ b/evidence/native-parallel-review7/sdk-secrets-live.log @@ -0,0 +1,11 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-step-secrets-live.test.ts (2 tests) 2696ms + ✓ an authored shell child sees a delivered token only when its own f.run grants it 1144ms + ✓ parallel authored shell children keep their own secret grants 1551ms + + Test Files 1 passed (1) + Tests 2 passed (2) + Start at 23:51:38 + Duration 3.90s (transform 396ms, setup 9ms, collect 985ms, tests 2.70s, environment 0ms, prepare 60ms) diff --git a/evidence/native-parallel-review7/sdk-typecheck-tests.log b/evidence/native-parallel-review7/sdk-typecheck-tests.log new file mode 100644 index 000000000..3b1c199e9 --- /dev/null +++ b/evidence/native-parallel-review7/sdk-typecheck-tests.log @@ -0,0 +1,3 @@ + +> @relayflows/sdk@2.0.51 typecheck:tests +> tsc -p tsconfig.tests.json diff --git a/evidence/native-parallel-review7/sdk-typecheck.log b/evidence/native-parallel-review7/sdk-typecheck.log new file mode 100644 index 000000000..b41e9a5e0 --- /dev/null +++ b/evidence/native-parallel-review7/sdk-typecheck.log @@ -0,0 +1,3 @@ + +> @relayflows/sdk@2.0.51 typecheck +> tsc --noEmit && tsc -p tsconfig.type-tests.json diff --git a/evidence/native-parallel-review7/timing.mjs b/evidence/native-parallel-review7/timing.mjs new file mode 100644 index 000000000..666ff2b6f --- /dev/null +++ b/evidence/native-parallel-review7/timing.mjs @@ -0,0 +1,96 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { spawn, execFileSync } from 'node:child_process'; + +const head = '/bench/node_modules/@relayflows/sdk/dist/cli.js'; +const base = '/bench/sdk-base-2051/dist/cli.js'; +const daemon = '/bench/relayflowd'; +const source = `import { flow } from '@relayflows/surface'; +export default flow('native-timing', async f => { + const a = async () => { await f.run('sleep 0.3; printf A'); await f.run('sleep 0.1; printf a'); }; + const b = async () => { await f.run('sleep 0.3; printf B'); await f.run('sleep 0.1; printf b'); }; + const c = async () => { await f.run('sleep 0.3; printf C'); await f.run('sleep 0.1; printf c'); }; + await Promise.all([a(), b(), c()]); + await f.run('printf Z'); + f.done('success'); +}); +`; +const sql = `import sqlite3,json,sys,glob,os +out=[] +for file in glob.glob(sys.argv[1]+'/runs/*.sqlite3'): + c=sqlite3.connect(file) + rows=c.execute("select entry_type,at_ms,payload from entries where entry_type in ('run.spawned','step.attempt.started','step.completed') order by seq").fetchall() + spawn=next((json.loads(p) for t,_,p in rows if t=='run.spawned'),None) + spec=spawn.get('spec') if spawn else None + step=(spec or {}).get('steps',[{}])[0] + if not step.get('command'): continue + starts=[at for t,at,_ in rows if t=='step.attempt.started'] + dones=[at for t,at,_ in rows if t=='step.completed'] + if starts and dones: out.append({'command':step['command'],'start':starts[0],'done':dones[-1]}) +print(json.dumps(out))`; +const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); + +async function run(kind, number) { + const root = fs.mkdtempSync(`/bench/timing-${kind}-${number}-`); + const data = path.join(root, 'data'); + fs.writeFileSync(path.join(root, 'package.json'), '{"type":"module"}'); + fs.symlinkSync('/bench/node_modules', path.join(root, 'node_modules')); + fs.writeFileSync(path.join(root, 'chain.flow.ts'), source); + const binary = kind === 'base' ? base : head; + const start = performance.now(); + const child = spawn(process.execPath, [binary, 'run', '--no-observer-link', '--json', + '--data-dir', data, path.join(root, 'chain.flow.ts'), '--input', '{}'], { + cwd: root, env: { ...process.env, RELAYFLOWD_BIN: daemon }, stdio: ['ignore', 'pipe', 'pipe'], + }); + let output = ''; + child.stdout.on('data', chunk => { output += chunk; }); + child.stderr.on('data', chunk => { output += chunk; }); + const result = await new Promise(resolve => child.once('close', (code, signal) => resolve({ code, signal }))); + const cliMs = performance.now() - start; + try { + if (result.code !== 0) throw new Error(`${kind} run failed: ${output}`); + const rows = JSON.parse(execFileSync('python3', ['-c', sql, data], { encoding: 'utf8' })); + const route = rows.filter(row => /^sleep 0\.3; printf [ABC]$/u.test(row.command)); + const dependent = rows.filter(row => /^sleep 0\.1; printf [abc]$/u.test(row.command)); + if (route.length !== 3 || dependent.length !== 3) throw new Error(`missing timing steps: ${JSON.stringify(rows)}`); + const routesOverlap = Math.max(...route.map(row => row.start)) < Math.min(...route.map(row => row.done)); + const dependentsOverlap = Math.max(...dependent.map(row => row.start)) < Math.min(...dependent.map(row => row.done)); + return { kind, number, cliMs, bodyMs: Math.max(...dependent.map(row => row.done)) + - Math.min(...route.map(row => row.start)), routeSpreadMs: Math.max(...route.map(row => row.start)) + - Math.min(...route.map(row => row.start)), routesOverlap, dependentsOverlap }; + } finally { + try { + const { pid } = JSON.parse(fs.readFileSync(path.join(data, 'connection.json'), 'utf8')); + process.kill(pid, 'SIGKILL'); + } catch { /* The daemon may already have exited. */ } + await sleep(30); + fs.rmSync(root, { recursive: true, force: true }); + } +} + +const results = []; +await run('base', -1); +await run('head', -1); +for (let number = 0; number < 10; number++) { + const order = number % 2 === 0 ? ['base', 'head'] : ['head', 'base']; + for (const kind of order) { + const result = await run(kind, number); + results.push(result); + console.log(JSON.stringify(result)); + } +} +const percentile = (values, p) => { + const ordered = values.toSorted((a, b) => a - b); + return ordered[Math.ceil(p * ordered.length) - 1]; +}; +for (const kind of ['base', 'head']) { + const set = results.filter(result => result.kind === kind); + console.log(JSON.stringify({ summary: kind, samples: set.length, + cliP50Ms: percentile(set.map(result => result.cliMs), 0.5), + cliP95Ms: percentile(set.map(result => result.cliMs), 0.95), + bodyP50Ms: percentile(set.map(result => result.bodyMs), 0.5), + bodyP95Ms: percentile(set.map(result => result.bodyMs), 0.95), + routeSpreadP50Ms: percentile(set.map(result => result.routeSpreadMs), 0.5), + routesOverlap: set.filter(result => result.routesOverlap).length, + dependentsOverlap: set.filter(result => result.dependentsOverlap).length })); +} diff --git a/evidence/native-parallel-review7/workspace-resolution.log b/evidence/native-parallel-review7/workspace-resolution.log new file mode 100644 index 000000000..06d7610a0 --- /dev/null +++ b/evidence/native-parallel-review7/workspace-resolution.log @@ -0,0 +1,4 @@ +drwxr-xr-x 174 khaliqgant staff 5950 Oct 16 23:53 node_modules +drwxr-xr-x 4 khaliqgant staff 238 Oct 16 23:53 node_modules/@relayflows/surface +/Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk/node_modules/@relayflows/surface/dist/index.js +/Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk/node_modules/@relayflows/surface diff --git a/packages/sdk/src/authored-flow-executor.ts b/packages/sdk/src/authored-flow-executor.ts index b53f5eed5..bbdd46838 100644 --- a/packages/sdk/src/authored-flow-executor.ts +++ b/packages/sdk/src/authored-flow-executor.ts @@ -56,6 +56,7 @@ import { verifyAuthoredOperations, } from './authored-flow-operation.js'; import { AuthoredFlowLifecycle } from './authored-flow-lifecycle.js'; +import { instrumentParallelBody } from './authored-parallel-body.js'; import { AuthoredActivities } from './authored-activity.js'; import { displayLabel, type AuthoredStepEdges } from './authored-step-index.js'; import { JournalClient } from './journal-client.js'; @@ -322,7 +323,7 @@ export async function executeAuthoredFlow( if (options.executionMode !== 'parallel') return qualify(`${kind}-${sequence}`); if (kind !== 'run') rejectParallel(`parallel f.run body attempted ${kind} before admission`); if (!lifecycle.combinatorsObserved()) rejectParallel( - 'cannot assign a replay-stable f.run identity: the intrinsic Promise combinator observer was replaced'); + 'cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced'); const predecessors = lifecycle.invocationPredecessors(); if (predecessors.unregisteredAggregate) rejectParallel( 'cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate'); @@ -862,7 +863,10 @@ export async function executeAuthoredFlow( let bodyFailure: unknown; try { if (options.executionMode === 'parallel') queueMicrotask(() => { firstBodyTurn = false; }); - const bodyPromise = lifecycle.runBody(() => definition.body(context, input as Input)); + const body = options.executionMode === 'parallel' + ? instrumentParallelBody(definition.body, promise => lifecycle.certifyBranchPromise(promise)) + : definition.body; + const bodyPromise = lifecycle.runBody(() => body(context, input as Input)); await bodyPromise; } catch (error) { bodyFailed = true; diff --git a/packages/sdk/src/authored-flow-lifecycle.ts b/packages/sdk/src/authored-flow-lifecycle.ts index 7514d807e..c2bc7f2ee 100644 --- a/packages/sdk/src/authored-flow-lifecycle.ts +++ b/packages/sdk/src/authored-flow-lifecycle.ts @@ -15,7 +15,13 @@ export interface AuthoredOperationInvocation { bound: boolean; } +const nativePromiseConstructor = Promise; +const nativePromisePrototype = Promise.prototype; const nativePromiseThen = Promise.prototype.then; +const nativePromiseCatch = Promise.prototype.catch; +const nativePromiseFinally = Promise.prototype.finally; +const nativePromiseResolve = Promise.resolve; +const nativePromiseReject = Promise.reject; const activeLifecycle = new AsyncLocalStorage(); const stepOwners = new WeakMap = Object.fromEntri let combinatorObservers = 0; +/** An imported module must not substitute any primitive used to construct joins. */ +export function parallelPromiseIntrinsicsIntact(): boolean { + if (Promise !== nativePromiseConstructor || Promise.prototype !== nativePromisePrototype + || Promise.prototype.then !== nativePromiseThen + || Promise.prototype.catch !== nativePromiseCatch + || Promise.prototype.finally !== nativePromiseFinally + || Promise.resolve !== nativePromiseResolve || Promise.reject !== nativePromiseReject) return false; + return COMBINATORS.every(name => Promise[name] === (combinatorObservers > 0 + ? observedCombinators[name] : nativeCombinators[name]) as unknown); +} + /** * Drain an iterable into an array, reading `Symbol.iterator` exactly once. * @@ -184,6 +201,7 @@ export class AuthoredFlowLifecycle { const awaited = owner?.lifecycle === this ? this.operationPromises.get(owner.operation) : memberId; if (awaited !== undefined) awaitedMembers.push(awaited); if (owner?.lifecycle !== this) continue; + if (awaited !== undefined) this.stepGraph.certifyMember(awaited); let operationAggregates = this.promiseAllAggregates.get(owner.operation); if (operationAggregates === undefined) { operationAggregates = new Set(); @@ -207,6 +225,15 @@ export class AuthoredFlowLifecycle { return value; } + /** Mark the exact promise returned by a grammar-certified async branch call. */ + certifyBranchPromise(promise: Promise): void { + const id = this.graph.idOf(promise); + if (id === undefined) { + throw new AuthoredFlowExecutionError('step_failed', 'certified branch promise was not tracked'); + } + this.stepGraph.certifyMember(id); + } + /** * Record an operation's own promise and, for a step the run's DAG draws, its * place in that DAG. Called synchronously from the operation's constructor: @@ -244,8 +271,7 @@ export class AuthoredFlowLifecycle { /** The observation contract must still be installed when a child is admitted. */ combinatorsObserved(): boolean { - return Promise.all === (observedCombinators.all as unknown) - && Promise.allSettled === (observedCombinators.allSettled as unknown); + return combinatorObservers > 0 && parallelPromiseIntrinsicsIntact(); } registerInvocation( diff --git a/packages/sdk/src/authored-parallel-body.ts b/packages/sdk/src/authored-parallel-body.ts new file mode 100644 index 000000000..020f664da --- /dev/null +++ b/packages/sdk/src/authored-parallel-body.ts @@ -0,0 +1,66 @@ +import ts from 'typescript'; +import { AuthoredFlowExecutionError } from './authored-flow-error.js'; +import { parallelBodySyntaxEligible } from './authored-parallel-eligibility.js'; + +const functionSource = Function.prototype.toString; + +/** + * Execute a certified body with its branch-call promises marked at the call + * site. A combinator member is not evidence that it is a safe branch: it may + * be a hand-built join that resolves from whichever child finishes first. + * + * The closed grammar has no module captures, so re-evaluating this function + * preserves its meaning. Unknown source is refused before the first effect. + */ +export function instrumentParallelBody( + body: T, + certifyBranch: (promise: Promise) => void, +): T { + const source = functionSource.call(body); + if (!parallelBodySyntaxEligible(body)) { + throw new AuthoredFlowExecutionError('step_failed', 'parallel f.run body lost its source certificate'); + } + const prefix = 'const body = '; + const file = ts.createSourceFile('parallel-body.js', `${prefix}${source};`, + ts.ScriptTarget.ES2022, true, ts.ScriptKind.JS); + const declaration = file.statements[0]; + if (!declaration || !ts.isVariableStatement(declaration)) throw new Error('certified body parse failed'); + const arrow = declaration.declarationList.declarations[0]?.initializer; + if (!arrow || !ts.isArrowFunction(arrow) || !ts.isBlock(arrow.body)) throw new Error('certified body changed'); + const branches = new Set(); + for (const statement of arrow.body.statements) { + if (!ts.isVariableStatement(statement)) continue; + for (const item of statement.declarationList.declarations) { + if (ts.isIdentifier(item.name) && item.initializer && ts.isArrowFunction(item.initializer)) { + branches.add(item.name.text); + } + } + } + const calls: Array<{ start: number; end: number }> = []; + const visit = (node: ts.Node): void => { + if (ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression) + && ts.isIdentifier(node.expression.expression) && node.expression.expression.text === 'Promise' + && node.expression.name.text === 'all' && node.arguments.length === 1) { + const members = node.arguments[0]; + if (members && ts.isArrayLiteralExpression(members)) { + for (const member of members.elements) { + if (!ts.isCallExpression(member) || member.arguments.length !== 0) continue; + const named = ts.isIdentifier(member.expression) && branches.has(member.expression.text); + const inline = ts.isParenthesizedExpression(member.expression) + && ts.isArrowFunction(member.expression.expression); + if (named || inline) calls.push({ start: member.getStart(file) - prefix.length, + end: member.getEnd() - prefix.length }); + } + } + } + ts.forEachChild(node, visit); + }; + visit(arrow); + let instrumented = source; + for (const { start, end } of calls.sort((left, right) => right.start - left.start)) { + instrumented = `${instrumented.slice(0, start)}__certifyParallelBranch(${instrumented.slice(start, end)})${instrumented.slice(end)}`; + } + const factory = new Function('__certifyParallelBranch', `return (${instrumented});`) as + (record: (promise: Promise) => Promise) => T; + return factory((promise) => { certifyBranch(promise); return promise; }); +} diff --git a/packages/sdk/src/authored-parallel-eligibility.ts b/packages/sdk/src/authored-parallel-eligibility.ts index 076525b8b..b1951cfea 100644 --- a/packages/sdk/src/authored-parallel-eligibility.ts +++ b/packages/sdk/src/authored-parallel-eligibility.ts @@ -7,8 +7,14 @@ export function parallelRunEligible(body: Function, moduleSource: string): boole // Promise.all is intercepted only when `Promise` resolves to the intrinsic. // Function.toString cannot see a module-level lexical binding, so inspect // the complete source before using the body's narrower grammar. - if (!moduleUsesIntrinsicPromise(moduleSource)) return false; - const file = ts.createSourceFile('authored-body.js', `const body = ${functionSource.call(body)};`, + const bodySource = functionSource.call(body); + return moduleUsesIntrinsicPromise(moduleSource, bodySource) && parallelBodySyntaxEligible(body); +} + +/** Independently re-check the closed body grammar at execution time. */ +export function parallelBodySyntaxEligible(body: Function): boolean { + const bodySource = functionSource.call(body); + const file = ts.createSourceFile('authored-body.js', `const body = ${bodySource};`, ts.ScriptTarget.ES2022, true, ts.ScriptKind.JS); if (file.statements.length !== 1) return false; const declaration = file.statements[0]; @@ -20,6 +26,7 @@ export function parallelRunEligible(body: Function, moduleSource: string): boole const parameter = expression.parameters[0]?.name; if (parameter === undefined || !ts.isIdentifier(parameter) || expression.parameters.length !== 1) return false; const context = parameter.text; + if (['Promise', 'globalThis', 'global'].includes(context)) return false; const branches = new Map(); const rootValues = new Set(); let groups = 0; @@ -110,6 +117,7 @@ export function parallelRunEligible(body: Function, moduleSource: string): boole if (!ts.isVariableStatement(statement) || (statement.declarationList.flags & ts.NodeFlags.Const) === 0) return false; for (const item of statement.declarationList.declarations) { if (!ts.isIdentifier(item.name) || item.initializer === undefined) return false; + if (['Promise', 'globalThis', 'global'].includes(item.name.text)) return false; if (depth === 0 && ts.isArrowFunction(item.initializer)) { if (branches.has(item.name.text) || item.initializer.parameters.length !== 0 || item.initializer.modifiers?.some(modifier => modifier.kind === ts.SyntaxKind.AsyncKeyword) !== true @@ -137,7 +145,7 @@ export function parallelRunEligible(body: Function, moduleSource: string): boole } /** Reject any source that can change what a free `Promise` identifier means. */ -function moduleUsesIntrinsicPromise(source: string): boolean { +function moduleUsesIntrinsicPromise(source: string, bodySource: string): boolean { const file = ts.createSourceFile('authored-module.ts', source, ts.ScriptTarget.ES2022, true, ts.ScriptKind.TS); if (((file as ts.SourceFile & { parseDiagnostics?: readonly ts.Diagnostic[] }).parseDiagnostics?.length ?? 0) > 0) { return false; @@ -149,7 +157,21 @@ function moduleUsesIntrinsicPromise(source: string): boolean { return ts.forEachChild(node, touchesPromiseOutsideDefinition) === true; }; let definesDefaultBody = false; + let importsSurfaceFlow = false; for (const statement of file.statements) { + if (ts.isImportDeclaration(statement)) { + // Imports can execute code before the body starts. Only the direct, + // immutable Surface binding can certify the exported body's identity. + if (statement.moduleSpecifier.getText(file) !== "'@relayflows/surface'" + && statement.moduleSpecifier.getText(file) !== '"@relayflows/surface"') return false; + const bindings = statement.importClause?.namedBindings; + if (statement.importClause?.name !== undefined || bindings === undefined + || !ts.isNamedImports(bindings) || bindings.elements.length !== 1 + || bindings.elements[0]?.name.text !== 'flow' + || bindings.elements[0]?.propertyName !== undefined || importsSurfaceFlow) return false; + importsSurfaceFlow = true; + continue; + } if (ts.isExportAssignment(statement)) { // Only the final body argument is allowed to mention Promise.all. Do // not let an expression around flow() mutate Promise while we skip it. @@ -157,13 +179,17 @@ function moduleUsesIntrinsicPromise(source: string): boolean { if (statement.isExportEquals || !ts.isCallExpression(call) || !ts.isIdentifier(call.expression) || call.expression.text !== 'flow') return false; const args = call.arguments; + if (args.length !== 2 || !ts.isStringLiteral(args[0]!)) return false; if (!ts.isArrowFunction(args[args.length - 1]!)) return false; + if (args[args.length - 1]!.getText(file) !== bodySource) return false; if (args.slice(0, -1).some(touchesPromiseOutsideDefinition)) return false; if (definesDefaultBody) return false; definesDefaultBody = true; continue; } - if (touchesPromiseOutsideDefinition(statement)) return false; + // The certified body cannot use module captures. Other top-level code is + // unnecessary for it and may schedule a later mutation through an alias. + return false; } const forbidden = new Set(['Promise', 'globalThis']); const bindsForbidden = (name: ts.BindingName): boolean => ts.isIdentifier(name) @@ -201,5 +227,5 @@ function moduleUsesIntrinsicPromise(source: string): boolean { visit(file); // The body may come from another module, where a free Promise name can be // shadowed without appearing in this source. In that case use serial IDs. - return definesDefaultBody && !unsafe; + return importsSurfaceFlow && definesDefaultBody && !unsafe; } diff --git a/packages/sdk/src/authored-root.ts b/packages/sdk/src/authored-root.ts index 64f0ab246..432d2261a 100644 --- a/packages/sdk/src/authored-root.ts +++ b/packages/sdk/src/authored-root.ts @@ -24,6 +24,7 @@ import { readSubscriptionPark } from './authored-subscription-park.js'; import { localAgentCredentialEnvironment } from './local-agent-environment.js'; import { completedResult, rootKernelStep, rootStepIfPresent } from './authored-root-readback.js'; import { parallelRunEligible } from './authored-parallel-eligibility.js'; +import { parallelPromiseIntrinsicsIntact } from './authored-flow-lifecycle.js'; export type DurableAuthoredFlowResult = | (AuthoredFlowExecutionResult & { readonly rootRunId: string }) @@ -95,7 +96,8 @@ export async function executeDurableAuthoredFlow( }))); const definition = loaded.getDefinition(loaded.handle); const executionMode = loaded.graph.length === 1 && (loaded.extensions?.length ?? 0) === 0 - && definition.header.budget === undefined && parallelRunEligible(definition.body, source.toString('utf8')) + && definition.header.budget === undefined && parallelPromiseIntrinsicsIntact() + && parallelRunEligible(definition.body, source.toString('utf8')) ? 'parallel' : 'serial'; const metadata: AuthoredRootMetadata = Object.freeze({ kind: executionMode === 'parallel' ? AUTHORED_PARALLEL_ROOT_KIND : ROOT_KIND, diff --git a/packages/sdk/src/authored-step-graph.ts b/packages/sdk/src/authored-step-graph.ts index 75c4c9b42..8848589d0 100644 --- a/packages/sdk/src/authored-step-graph.ts +++ b/packages/sdk/src/authored-step-graph.ts @@ -64,6 +64,7 @@ const EXPANDS_ON: Readonly> = interface Aggregate { readonly promise: Promise; + readonly combinator: Combinator; /** Cached once settled: a settled promise never changes state. */ outcome?: Outcome; readonly expandsOn: Outcome | 'always'; @@ -75,7 +76,8 @@ export class AuthoredStepGraph { private readonly aggregates = new Map(); private readonly registeredAggregates = new Set(); private readonly registeredCombinatorInternals = new Set(); - private readonly registeredMembers = new Set(); + private readonly certifiedMembers = new Set(); + private readonly unsafeAggregates = new Set(); private readonly contexts = new Map(); private readonly nodes = new Map(); private readonly edges = new Map(); @@ -96,10 +98,15 @@ export class AuthoredStepGraph { ): void { this.registeredAggregates.add(aggregateId); for (const id of created) this.registeredCombinatorInternals.add(id); - for (const member of members) this.registeredMembers.add(member); + if (combinator === 'race' || combinator === 'any') this.unsafeAggregates.add(aggregateId); const expandsOn = EXPANDS_ON[combinator]; if (expandsOn === undefined || members.length === 0) return; - this.aggregates.set(aggregateId, { promise, expandsOn, members }); + this.aggregates.set(aggregateId, { promise, combinator, expandsOn, members }); + } + + /** Only direct steps and branch calls proven by the body grammar are safe members. */ + certifyMember(asyncId: number): void { + this.certifiedMembers.add(asyncId); } /** @@ -140,7 +147,8 @@ export class AuthoredStepGraph { this.aggregates.clear(); this.registeredAggregates.clear(); this.registeredCombinatorInternals.clear(); - this.registeredMembers.clear(); + this.certifiedMembers.clear(); + this.unsafeAggregates.clear(); this.contexts.clear(); this.nodes.clear(); } @@ -167,9 +175,13 @@ export class AuthoredStepGraph { // observer registered it before the promise settled. The creation and // resolution contexts also catch an unobserved join created after a // previous step, where root-adoption alone cannot detect it. - const possibleJoin = this.unobservedJoinShape(current) - && !this.registeredAggregates.has(current) && !this.registeredMembers.has(current) - && !this.registeredCombinatorInternals.has(current); + const aggregate = this.aggregates.get(current); + const rejectedAll = aggregate?.combinator === 'all' + && promiseOutcome(aggregate.promise) === 'rejected'; + const possibleJoin = this.unsafeAggregates.has(current) || rejectedAll + || (this.unobservedJoinShape(current) + && !this.registeredAggregates.has(current) && !this.certifiedMembers.has(current) + && !this.registeredCombinatorInternals.has(current)); unregisteredAggregate ||= possibleJoin; const answered = current === start ? undefined : this.contexts.get(current); if (answered !== undefined) { diff --git a/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts b/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts index 460395c8c..71cd383ff 100644 --- a/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts +++ b/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts @@ -3,6 +3,7 @@ import type { Server } from 'node:net'; import { flow, type Ctx, type FlowHandle, type Step } from '@relayflows/surface'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; import { executeAuthoredFlow, type ExecuteAuthoredFlowOptions } from '../src/authored-flow-executor.js'; +import { parallelPromiseIntrinsicsIntact } from '../src/authored-flow-lifecycle.js'; import { JournalClient } from '../src/journal-client.js'; import { kernelDialectError, @@ -25,6 +26,31 @@ const handmadeAll = (values: readonly PromiseLike[]): Promise => }); describe('authored flow lifecycle through the journal executor', () => { + it('detects replacement of every Promise primitive used by parallel joins', () => { + expect(parallelPromiseIntrinsicsIntact()).toBe(true); + const nativePromise = globalThis.Promise; + try { + globalThis.Promise = function ReplacedPromise() {} as unknown as PromiseConstructor; + expect(parallelPromiseIntrinsicsIntact(), 'constructor').toBe(false); + } finally { globalThis.Promise = nativePromise; } + for (const name of ['resolve', 'reject', 'all', 'allSettled', 'race', 'any']) { + const target = Promise as unknown as Record; + const original = target[name]; + target[name] = () => undefined; + const detected = parallelPromiseIntrinsicsIntact(); + target[name] = original; + expect(detected, name).toBe(false); + } + for (const name of ['then', 'catch', 'finally']) { + const target = Promise.prototype as unknown as Record; + const original = target[name]; + target[name] = () => undefined; + const detected = parallelPromiseIntrinsicsIntact(); + target[name] = original; + expect(detected, name).toBe(false); + } + expect(parallelPromiseIntrinsicsIntact()).toBe(true); + }); let path: string; let server: Server; let nextRun = 1; @@ -115,7 +141,7 @@ describe('authored flow lifecycle through the journal executor', () => { expect(startedSpecs).toHaveLength(startedBefore); }); - it('closes an already queued ninth child as soon as a violation is caught', async () => { + it('refuses generated fanout before admitting a child', async () => { const startedBefore = startedSpecs.length; await expect(execute(flow('parallel-queued-violation', async f => { const children = Array.from({ length: 9 }, (_, index) => f.run(`hold-${index}`)); @@ -127,9 +153,7 @@ describe('authored flow lifecycle through the journal executor', () => { await joined; f.done('success'); }), { executionMode: 'parallel' })).rejects.toMatchObject({ code: 'step_failed' }); - expect(startedSpecs.slice(startedBefore).map(spec => - (spec['steps'] as Array<{ command: string }>)[0]!.command)) - .toEqual(Array.from({ length: 8 }, (_, index) => `hold-${index}`)); + expect(startedSpecs).toHaveLength(startedBefore); }); it('refuses a parallel follow-up through an unobserved Promise.all', async () => { @@ -138,12 +162,9 @@ describe('authored flow lifecycle through the journal executor', () => { await unobservedAll([f.run('printf A'), f.run('printf B')]); await f.run('printf X'); f.done('success'); - }), { executionMode: 'parallel' })).rejects.toThrow(/unregistered aggregate/u); + }), { executionMode: 'parallel' })).rejects.toThrow(/lost its source certificate/u); const admitted = startedSpecs.slice(startedBefore).map(spec => spec['name']); - expect(admitted).toEqual([ - 'parallel-unobserved-aggregate/run-1', - 'parallel-unobserved-aggregate/run-2', - ]); + expect(admitted).toEqual([]); }); it('refuses an unobserved join after an earlier step', async () => { @@ -153,14 +174,9 @@ describe('authored flow lifecycle through the journal executor', () => { await unobservedAll([f.run('printf A'), f.run('printf B'), f.run('printf C')]); await f.run('printf X'); f.done('success'); - }), { executionMode: 'parallel' })).rejects.toThrow(/unregistered aggregate/u); + }), { executionMode: 'parallel' })).rejects.toThrow(/lost its source certificate/u); expect(startedSpecs.slice(startedBefore).map(spec => spec['name'])) - .toEqual([ - 'parallel-late-unobserved-aggregate/run-1', - expect.stringMatching(/^parallel-late-unobserved-aggregate\/run-after-/u), - expect.stringMatching(/^parallel-late-unobserved-aggregate\/run-after-/u), - expect.stringMatching(/^parallel-late-unobserved-aggregate\/run-after-/u), - ]); + .toEqual([]); }); it('refuses a hand-written join after an earlier step', async () => { @@ -170,17 +186,19 @@ describe('authored flow lifecycle through the journal executor', () => { await handmadeAll([f.run('printf A'), f.run('printf B')]); await f.run('printf X'); f.done('success'); - }), { executionMode: 'parallel' })).rejects.toThrow(/unregistered aggregate/u); - expect(startedSpecs.slice(startedBefore)).toHaveLength(3); + }), { executionMode: 'parallel' })).rejects.toThrow(/lost its source certificate/u); + expect(startedSpecs.slice(startedBefore)).toHaveLength(0); }); - it('admits sequential awaits in parallel mode', async () => { + it('refuses a sequential-only body forced into parallel mode', async () => { + const startedBefore = startedSpecs.length; await expect(execute(flow('parallel-sequential', async f => { await f.run('printf A'); await f.run('printf B'); await f.run('printf C'); f.done('success'); - }), { executionMode: 'parallel' })).resolves.toMatchObject({ completionReason: 'success' }); + }), { executionMode: 'parallel' })).rejects.toThrow(/lost its source certificate/u); + expect(startedSpecs).toHaveLength(startedBefore); }); it('admits branch dependents after a shared predecessor', async () => { @@ -194,7 +212,7 @@ describe('authored flow lifecycle through the journal executor', () => { }), { executionMode: 'parallel' })).resolves.toMatchObject({ completionReason: 'success' }); }); - it('refuses a follow-up after the Promise observer is replaced between steps', async () => { + it('refuses a body that writes Promise.all before its first child', async () => { const startedBefore = startedSpecs.length; await expect(execute(flow('parallel-replaced-observer', async f => { await f.run('printf W'); @@ -205,12 +223,12 @@ describe('authored flow lifecycle through the journal executor', () => { await f.run('printf X'); } finally { Promise.all = observed; } f.done('success'); - }), { executionMode: 'parallel' })).rejects.toThrow(/observer was replaced/u); + }), { executionMode: 'parallel' })).rejects.toThrow(/lost its source certificate/u); expect(startedSpecs.slice(startedBefore).map(spec => spec['name'])) - .toEqual(['parallel-replaced-observer/run-1']); + .toEqual([]); }); - it('also refuses a replaced Promise.allSettled observer before admission', async () => { + it('refuses a body that writes Promise.allSettled before its first child', async () => { const startedBefore = startedSpecs.length; await expect(execute(flow('parallel-replaced-all-settled', async f => { await f.run('printf W'); @@ -219,12 +237,13 @@ describe('authored flow lifecycle through the journal executor', () => { try { await f.run('printf X'); } finally { Promise.allSettled = observed; } f.done('success'); - }), { executionMode: 'parallel' })).rejects.toThrow(/observer was replaced/u); + }), { executionMode: 'parallel' })).rejects.toThrow(/lost its source certificate/u); expect(startedSpecs.slice(startedBefore).map(spec => spec['name'])) - .toEqual(['parallel-replaced-all-settled/run-1']); + .toEqual([]); }); - it('keeps an unrelated Promise.race replacement from changing certified all groups', async () => { + it('refuses a body that writes Promise.race before its first child', async () => { + const startedBefore = startedSpecs.length; await expect(execute(flow('parallel-unrelated-race-patch', async f => { await f.run('printf W'); const observed = Promise.race; @@ -234,7 +253,23 @@ describe('authored flow lifecycle through the journal executor', () => { await f.run('printf X'); } finally { Promise.race = observed; } f.done('success'); - }), { executionMode: 'parallel' })).resolves.toMatchObject({ completionReason: 'success' }); + }), { executionMode: 'parallel' })).rejects.toThrow(/lost its source certificate/u); + expect(startedSpecs.slice(startedBefore).map(spec => spec['name'])) + .toEqual([]); + }); + + it('refuses a body that writes Promise.resolve before its first child', async () => { + const startedBefore = startedSpecs.length; + await expect(execute(flow('parallel-replaced-resolve', async f => { + await f.run('printf W'); + const original = Promise.resolve; + Promise.resolve = ((value: unknown) => original.call(Promise, value)) as typeof Promise.resolve; + try { await f.run('printf X'); } + finally { Promise.resolve = original; } + f.done('success'); + }), { executionMode: 'parallel' })).rejects.toThrow(/lost its source certificate/u); + expect(startedSpecs.slice(startedBefore).map(spec => spec['name'])) + .toEqual([]); }); it('admits a parallel follow-up through the observed intrinsic Promise.all', async () => { diff --git a/packages/sdk/tests/authored-parallel-body.test.ts b/packages/sdk/tests/authored-parallel-body.test.ts new file mode 100644 index 000000000..9e4b5ef87 --- /dev/null +++ b/packages/sdk/tests/authored-parallel-body.test.ts @@ -0,0 +1,53 @@ +import { describe, expect, it } from 'vitest'; +import { instrumentParallelBody } from '../src/authored-parallel-body.js'; + +describe('certified authored parallel body', () => { + it('records the exact branch-call promises before the join is awaited', async () => { + const body = new Function(`return (async f => { + const left = async () => { await f.run('A'); await f.run('A2'); }; + const right = async () => { await f.run('B'); await f.run('B2'); }; + await Promise.all([left(), right()]); + f.done('success'); + });`)() as (ctx: { run: (command: string) => Promise; done: (reason: string) => void }) => Promise; + const certified: Promise[] = []; + const commands: string[] = []; + const executable = instrumentParallelBody(body, promise => certified.push(promise)); + const result = executable({ + run: async command => { commands.push(command); return command; }, + done: () => {}, + }); + expect(certified).toHaveLength(2); + expect(new Set(certified).size).toBe(2); + await result; + expect(commands).toEqual(['A', 'B', 'A2', 'B2']); + }); + + it('refuses an unsupported join before executing the body', () => { + const unsafe = new Function(`return (async f => { + await Promise.race([f.run('A'), f.run('B')]); + await f.run('X'); + f.done('success'); + });`)() as Function; + expect(() => instrumentParallelBody(unsafe, () => {})).toThrow(/lost its source certificate/u); + }); + + it('checks unsafe joins independently of the entry eligibility decision', () => { + const bodies = [ + `await Promise.race([f.run('A'), f.run('B')]);`, + `await Promise.any([f.run('A'), f.run('B')]);`, + `await Promise.all([Promise.race([f.run('A'), f.run('B')]), f.run('C')]);`, + `const first = new Promise(resolve => resolve()); + await Promise.all([first, f.run('A')]);`, + `const a = f.run('A'); const thenable = { then: resolve => a.then(resolve) }; + await Promise.all([thenable, f.run('B')]);`, + `await Promise.all(new Set([f.run('A'), f.run('B')]));`, + `await Promise.all([f.run('A'), f.run('B')]).then(value => value);`, + `const Promise = { all: values => globalThis.Promise.all(values) }; + await Promise.all([f.run('A'), f.run('B')]);`, + ]; + for (const source of bodies) { + const body = new Function(`return (async f => { ${source} f.done('success'); });`)() as Function; + expect(() => instrumentParallelBody(body, () => {}), source).toThrow(/lost its source certificate/u); + } + }); +}); diff --git a/packages/sdk/tests/authored-parallel-eligibility.test.ts b/packages/sdk/tests/authored-parallel-eligibility.test.ts index 86e5a854a..27e63a248 100644 --- a/packages/sdk/tests/authored-parallel-eligibility.test.ts +++ b/packages/sdk/tests/authored-parallel-eligibility.test.ts @@ -138,6 +138,25 @@ describe('parallel run admission', () => { expect(eligible(candidate, `import impl from './impl.ts'; export default impl;`)).toBe(false); }); + it('requires the exported arrow to be the actual body from the direct Surface binding', () => { + const candidate = body(`async f => { + await Promise.all([f.run('A'), f.run('B')]); + await f.run('X'); + f.done('success'); + }`); + const decoy = `export default flow('decoy', async f => { await f.run('decoy'); });`; + const exact = `export default flow('real', ${Function.prototype.toString.call(candidate)});`; + expect(eligible(candidate, `const flow = () => impl; ${decoy}`)).toBe(false); + expect(eligible(candidate, `import { flow } from './wrap.ts'; ${decoy}`)).toBe(false); + expect(eligible(candidate, `import { flow } from '@relayflows/surface'; ${decoy}`)).toBe(false); + expect(eligible(candidate, exact)).toBe(false); + expect(eligible(candidate, `const flow = () => impl; ${exact}`)).toBe(false); + expect(eligible(candidate, `import { flow } from './wrap.ts'; ${exact}`)).toBe(false); + expect(eligible(candidate, `import { flow } from '@relayflows/surface';\nimport './patch.mjs';\nexport default flow('real', ${Function.prototype.toString.call(candidate)});`)).toBe(false); + expect(eligible(candidate, `import { flow } from '@relayflows/surface';\nconst alias = Function('return this')();\nexport default flow('real', ${Function.prototype.toString.call(candidate)});`)).toBe(false); + expect(eligible(candidate, `import { flow } from '@relayflows/surface';\nexport default flow('real', { get extra() { throw new Error('side effect'); } }, ${Function.prototype.toString.call(candidate)});`)).toBe(false); + }); + it('keeps groups with empty async branches serial', () => { expect(eligible(body(`async f => { const warm = async () => {}; diff --git a/packages/sdk/tests/authored-parallel-run-live.test.ts b/packages/sdk/tests/authored-parallel-run-live.test.ts index dede1a4f0..8736b128c 100644 --- a/packages/sdk/tests/authored-parallel-run-live.test.ts +++ b/packages/sdk/tests/authored-parallel-run-live.test.ts @@ -72,7 +72,7 @@ export default flow('reexported-body', async f => { shape === 'after a first step' ? 'WXZ' : 'XZ'); }, 120_000); - it('refuses an imported Promise.all patch before admitting another parallel effect', () => { + it('keeps a flow with an imported Promise.all patch on the serial scheduler', () => { const fixture = chainFixture(); closes.push(() => fixture.close()); writeFileSync(`${fixture.root}/patch.mjs`, `const intrinsic = Promise.all; @@ -91,11 +91,11 @@ export default flow('imported-promise-patch', async f => { });\n`); const result = fixture.invoke('run', '--no-observer-link', '--json', '--data-dir', fixture.data, fixture.flowPath, '--input', '{}'); - expect(result.status, result.stderr + result.stdout).toBe(1); - expect(readFileSync(`${fixture.root}/effects`, 'utf8')).toBe('W'); + expect(result.status, result.stderr + result.stdout).toBe(0); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort().join('')).toBe('ABWX'); }, 60_000); - it('fails closed on the reviewer imported patch during a prior step', () => { + it('keeps the reviewer imported patch runnable in serial mode', () => { const fixture = chainFixture(); closes.push(() => fixture.close()); mkdirSync(`${fixture.root}/lib`); @@ -112,14 +112,13 @@ export default flow('q6Pw', async f => { const c = async () => { await f.run('sleep 0.2; printf C'); await f.run('printf c >> effects'); }; await Promise.all([a(), b(), c()]); await f.run('printf X >> effects'); - await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + await f.run('printf Z >> effects'); f.done('success'); });\n`); const result = fixture.invoke('run', '--no-observer-link', '--json', '--data-dir', fixture.data, fixture.flowPath, '--input', '{}'); - expect(result.status, result.stderr + result.stdout).toBe(1); - const effects = existsSync(`${fixture.root}/effects`) ? readFileSync(`${fixture.root}/effects`, 'utf8') : ''; - expect(effects).not.toContain('X'); + expect(result.status, result.stderr + result.stdout).toBe(0); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort().join('')).toBe('XZabc'); }, 60_000); it('overlaps two sleep 2 commands started in Promise.all', () => { diff --git a/packages/sdk/tests/authored-step-graph.test.ts b/packages/sdk/tests/authored-step-graph.test.ts index 362a54cf9..234a7f867 100644 --- a/packages/sdk/tests/authored-step-graph.test.ts +++ b/packages/sdk/tests/authored-step-graph.test.ts @@ -72,6 +72,26 @@ async function graphOf(body: (op: Op) => Promise, { stepsFail = false } = const after = (...labels: string[]) => ({ after: labels.sort(), truncated: false }); describe('the authored step DAG', () => { + it('marks race, any, and rejected all as unsafe parallel frontiers', () => { + for (const kind of ['race', 'any', 'all'] as const) { + const aggregate = kind === 'all' ? Promise.reject(new Error('failed')) : Promise.resolve('winner'); + void aggregate.catch(() => {}); + const graph = new AuthoredStepGraph(id => id === 2 ? [1] : []); + graph.registerAggregate(1, aggregate, kind, kind === 'all' ? [4] : []); + expect(graph.predecessorsAt(2).unregisteredAggregate, kind).toBe(true); + } + }); + + it('does not trust a user-built join merely because it is a combinator member', () => { + const graph = new AuthoredStepGraph(id => id === 3 ? [2] : [], undefined, id => id === 2); + graph.registerAggregate(1, Promise.resolve(), 'all', [2]); + expect(graph.predecessorsAt(3).unregisteredAggregate).toBe(true); + const certified = new AuthoredStepGraph(id => id === 3 ? [2] : [], undefined, id => id === 2); + certified.registerAggregate(1, Promise.resolve(), 'all', [2]); + certified.certifyMember(2); + expect(certified.predecessorsAt(3).unregisteredAggregate).toBe(false); + }); + it('draws no edge between siblings of a parallel fan-out', async () => { const graph = await graphOf(async (op) => { const a = op('a', 15); From 3e008e9e08a6c546053158d0d35603aa0af21933 Mon Sep 17 00:00:00 2001 From: Miya Date: Sat, 17 Oct 2026 00:59:35 +0200 Subject: [PATCH 11/18] Guard certified parallel joins against untracked promises and preloads --- docs/SURFACE.md | 10 +- evidence/native-parallel-review8/COMMANDS.md | 66 ++++++ evidence/native-parallel-review8/README.md | 96 ++++++++ .../native-parallel-review8/f5-mutated.log | 2 + .../f5-mutation-proof.log | 4 + .../f5-mutation-proof.sh | 63 +++++ .../native-parallel-review8/f5-restored.log | 1 + .../native-parallel-review8/f5-stage-id.log | 1 + evidence/native-parallel-review8/f5-stage.log | 1 + .../h7-base-fail-controls.log | 21 ++ .../native-parallel-review8/h7-f5-before.log | 7 + .../native-parallel-review8/h7-f5-mutant.log | 2 + .../h7-f5-restored.log | 7 + evidence/native-parallel-review8/h7-f5.mjs | 217 ++++++++++++++++++ .../h7-i1-base-control.log | 7 + .../h7-k1-controls.log | 14 ++ .../native-parallel-review8/h7-prior-deep.log | 98 ++++++++ .../native-parallel-review8/h7-prior-e.log | 42 ++++ .../native-parallel-review8/h7-prior-fb.log | 56 +++++ .../native-parallel-review8/h7-prior-fr.log | 98 ++++++++ .../h7-prior-native.log | 21 ++ .../native-parallel-review8/h7-prior-p.log | 112 +++++++++ .../native-parallel-review8/h7-prior-q.log | 49 ++++ .../native-parallel-review8/h7-prior-r.log | 56 +++++ .../native-parallel-review8/h7-prior-r5n.log | 7 + .../h7-prior-secrets.log | 28 +++ evidence/native-parallel-review8/h7-probe.log | 28 +++ .../h7-rollback-pinned.log | 70 ++++++ .../native-parallel-review8/h7-s7-head.log | 189 +++++++++++++++ .../native-parallel-review8/h7-timing.log | 22 ++ .../h7-upgrade-pinned.log | 70 ++++++ evidence/native-parallel-review8/h7.mjs | 217 ++++++++++++++++++ .../mut-f1-parens-fail.log | 32 +++ .../mut-f1-parens-pass.log | 9 + .../mut-f2-name-fail.log | 36 +++ .../mut-f2-name-pass.log | 9 + .../mut-f3-preload-fail.log | 32 +++ .../mut-f3-preload-pass.log | 9 + .../mut-f4-member-fail.log | 32 +++ .../mut-f4-member-pass.log | 9 + .../mut-f6-descriptors-fail.log | 32 +++ .../mut-f6-descriptors-pass.log | 9 + .../mutation-proof.log | 16 ++ .../native-parallel-review8/mutation-proof.py | 83 +++++++ evidence/native-parallel-review8/probe.mjs | 128 +++++++++++ .../published-2051-pin.log | 5 + .../native-parallel-review8/raw-logs.tar.gz | Bin 0 -> 55162 bytes evidence/native-parallel-review8/s.mjs | 164 +++++++++++++ evidence/native-parallel-review8/s2.mjs | 181 +++++++++++++++ evidence/native-parallel-review8/s3.mjs | 55 +++++ evidence/native-parallel-review8/s4.mjs | 20 ++ evidence/native-parallel-review8/s7.mjs | 182 +++++++++++++++ .../native-parallel-review8/sdk-build.log | 3 + .../sdk-dist-hashes.log | 8 + .../sdk-focused-unit.log | 20 ++ .../sdk-secrets-live.log | 11 + .../sdk-typecheck-tests.log | 3 + .../native-parallel-review8/sdk-typecheck.log | 3 + evidence/native-parallel-review8/timing7.mjs | 55 +++++ packages/sdk/src/authored-flow-executor.ts | 24 +- packages/sdk/src/authored-flow-lifecycle.ts | 51 +++- packages/sdk/src/authored-parallel-body.ts | 10 +- .../sdk/src/authored-parallel-eligibility.ts | 18 +- .../authored-flow-lifecycle-executor.test.ts | 57 ++++- .../sdk/tests/authored-parallel-body.test.ts | 34 +++ .../authored-parallel-eligibility.test.ts | 12 + packages/sdk/tests/authored-root.test.ts | 23 +- 67 files changed, 3036 insertions(+), 21 deletions(-) create mode 100644 evidence/native-parallel-review8/COMMANDS.md create mode 100644 evidence/native-parallel-review8/README.md create mode 100644 evidence/native-parallel-review8/f5-mutated.log create mode 100644 evidence/native-parallel-review8/f5-mutation-proof.log create mode 100644 evidence/native-parallel-review8/f5-mutation-proof.sh create mode 100644 evidence/native-parallel-review8/f5-restored.log create mode 100644 evidence/native-parallel-review8/f5-stage-id.log create mode 100644 evidence/native-parallel-review8/f5-stage.log create mode 100644 evidence/native-parallel-review8/h7-base-fail-controls.log create mode 100644 evidence/native-parallel-review8/h7-f5-before.log create mode 100644 evidence/native-parallel-review8/h7-f5-mutant.log create mode 100644 evidence/native-parallel-review8/h7-f5-restored.log create mode 100644 evidence/native-parallel-review8/h7-f5.mjs create mode 100644 evidence/native-parallel-review8/h7-i1-base-control.log create mode 100644 evidence/native-parallel-review8/h7-k1-controls.log create mode 100644 evidence/native-parallel-review8/h7-prior-deep.log create mode 100644 evidence/native-parallel-review8/h7-prior-e.log create mode 100644 evidence/native-parallel-review8/h7-prior-fb.log create mode 100644 evidence/native-parallel-review8/h7-prior-fr.log create mode 100644 evidence/native-parallel-review8/h7-prior-native.log create mode 100644 evidence/native-parallel-review8/h7-prior-p.log create mode 100644 evidence/native-parallel-review8/h7-prior-q.log create mode 100644 evidence/native-parallel-review8/h7-prior-r.log create mode 100644 evidence/native-parallel-review8/h7-prior-r5n.log create mode 100644 evidence/native-parallel-review8/h7-prior-secrets.log create mode 100644 evidence/native-parallel-review8/h7-probe.log create mode 100644 evidence/native-parallel-review8/h7-rollback-pinned.log create mode 100644 evidence/native-parallel-review8/h7-s7-head.log create mode 100644 evidence/native-parallel-review8/h7-timing.log create mode 100644 evidence/native-parallel-review8/h7-upgrade-pinned.log create mode 100644 evidence/native-parallel-review8/h7.mjs create mode 100644 evidence/native-parallel-review8/mut-f1-parens-fail.log create mode 100644 evidence/native-parallel-review8/mut-f1-parens-pass.log create mode 100644 evidence/native-parallel-review8/mut-f2-name-fail.log create mode 100644 evidence/native-parallel-review8/mut-f2-name-pass.log create mode 100644 evidence/native-parallel-review8/mut-f3-preload-fail.log create mode 100644 evidence/native-parallel-review8/mut-f3-preload-pass.log create mode 100644 evidence/native-parallel-review8/mut-f4-member-fail.log create mode 100644 evidence/native-parallel-review8/mut-f4-member-pass.log create mode 100644 evidence/native-parallel-review8/mut-f6-descriptors-fail.log create mode 100644 evidence/native-parallel-review8/mut-f6-descriptors-pass.log create mode 100644 evidence/native-parallel-review8/mutation-proof.log create mode 100644 evidence/native-parallel-review8/mutation-proof.py create mode 100644 evidence/native-parallel-review8/probe.mjs create mode 100644 evidence/native-parallel-review8/published-2051-pin.log create mode 100644 evidence/native-parallel-review8/raw-logs.tar.gz create mode 100644 evidence/native-parallel-review8/s.mjs create mode 100644 evidence/native-parallel-review8/s2.mjs create mode 100644 evidence/native-parallel-review8/s3.mjs create mode 100644 evidence/native-parallel-review8/s4.mjs create mode 100644 evidence/native-parallel-review8/s7.mjs create mode 100644 evidence/native-parallel-review8/sdk-build.log create mode 100644 evidence/native-parallel-review8/sdk-dist-hashes.log create mode 100644 evidence/native-parallel-review8/sdk-focused-unit.log create mode 100644 evidence/native-parallel-review8/sdk-secrets-live.log create mode 100644 evidence/native-parallel-review8/sdk-typecheck-tests.log create mode 100644 evidence/native-parallel-review8/sdk-typecheck.log create mode 100644 evidence/native-parallel-review8/timing7.mjs diff --git a/docs/SURFACE.md b/docs/SURFACE.md index d6161f63b..91d7c0e10 100644 --- a/docs/SURFACE.md +++ b/docs/SURFACE.md @@ -957,9 +957,9 @@ concurrent flow closes. - *Behaviour:* the replacement delegates to the intrinsic and is specified to behave identically. A non-iterable argument is handed straight through, so `Promise.all(5)` and `Promise.all(null)` return the same rejected promises the - intrinsic returns; `name` and `length` match. If `Promise.all` has already been - replaced by something else, the flow refuses to start rather than fighting over - the intrinsic. + intrinsic returns; `name` and `length` match. A replacement after the observer + is installed violates the authored lifecycle contract. A process that starts + with a Promise preload uses the existing serial scheduler for new roots. If a process-wide intrinsic replacement is unacceptable in your deployment, do not run authored TypeScript bodies in that process; the declarative YAML path @@ -984,7 +984,9 @@ their body's Promise binding cannot be certified from the entry file. Other imports also use serial mode because they may alter Promise before the body starts. The defining module must leave the intrinsic `Promise` and `globalThis.Promise` unshadowed; a module that binds either name uses serial -mode. Generated arrays such as `Array.from` use serial mode. Branches may not +mode. An authored process started with a `--import`, `--require`, or loader +preload, or with an already replaced Promise intrinsic, also admits new roots +in serial mode. Generated arrays such as `Array.from` use serial mode. Branches may not mutate shared values, await timers or other promises, or call `f.done`; completion belongs at the end of the root body. The check is conservative: an unrecognized source form uses diff --git a/evidence/native-parallel-review8/COMMANDS.md b/evidence/native-parallel-review8/COMMANDS.md new file mode 100644 index 000000000..8e4a70a30 --- /dev/null +++ b/evidence/native-parallel-review8/COMMANDS.md @@ -0,0 +1,66 @@ +# Literal verification commands + +Commands below were run from the Flows worktree root unless a section says +`packages/sdk`. Each redirection is to the complete stdout/stderr log in this +directory. The existing named volume was prepared by the previous +[review-6 evidence](../native-parallel-review7/COMMANDS.md): native arm64 +daemon, current-head and published-2.0.51 SDK builds, and published 2.0.50 +SDK/daemon. This run copied the rebuilt `packages/sdk/dist` and exact fixture +files into that volume with `docker cp`, then linked `/w/head/packages/sdk` to +the candidate copy and `/w/base/packages/sdk` to the published 2.0.51 copy. +The corrected `/w/p2051/node_modules/@relayflows/sdk` link points to +`/w/sdk-base-2051`; `published-2051-pin.log` records its hash and version. + +## Exact review-7 and prior fixtures + +```sh +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/w -w /w/review8 node:22-trixie node --no-warnings h7.mjs s7.mjs all --reps=6 --conc=3 --tag=r8s7head --sides=head:head > evidence/native-parallel-review8/h7-s7-head.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/w -w /w/review8 node:22-trixie node --no-warnings h7.mjs s7.mjs PL3sub,PL4ctor,SEC7 --reps=6 --conc=3 --tag=r8basefail --sides=base:base > evidence/native-parallel-review8/h7-base-fail-controls.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/w -w /w/review8 node:22-trixie node --no-warnings h7.mjs s2.mjs R1,R1w,R1wn,R2w,R3,R3w,R4w,R1c --reps=6 --conc=3 --tag=r8prior-r --sides=head:head > evidence/native-parallel-review8/h7-prior-r.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/w -w /w/review8 node:22-trixie node --no-warnings h7.mjs s4.mjs R5n --reps=6 --conc=3 --tag=r8prior-r5n --sides=head:head > evidence/native-parallel-review8/h7-prior-r5n.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/w -w /w/review8 node:22-trixie node --no-warnings h7.mjs s.mjs Q5,Q5n,Q5h,Q5w,Q5wn,Q5wh,Q6Pw --reps=6 --conc=3 --tag=r8prior-q --sides=head:head > evidence/native-parallel-review8/h7-prior-q.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/w -w /w/review8 node:22-trixie node --no-warnings h7.mjs s2.mjs E1factory,E2helper,E3dyn,E4json,E4jsonuse,E5ns --reps=6 --conc=3 --tag=r8prior-e --sides=head:head > evidence/native-parallel-review8/h7-prior-e.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/w -w /w/review8 node:22-trixie node --no-warnings h7.mjs s.mjs P1,P1h,P1c,P1n,P1bn,P2,C1e,G1,H1,H2,K4,I1,K2b,K3,K5b,K13b --reps=6 --conc=3 --tag=r8prior-p --sides=head:head > evidence/native-parallel-review8/h7-prior-p.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/w -w /w/review8 node:22-trixie node --no-warnings h7.mjs s.mjs I1 --reps=6 --conc=3 --tag=r8i1base --sides=base:base > evidence/native-parallel-review8/h7-i1-base-control.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/w -w /w/review8 node:22-trixie node --no-warnings h7.mjs s.mjs K1 --reps=6 --conc=3 --tag=r8k1 > evidence/native-parallel-review8/h7-k1-controls.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/w -w /w/review8 node:22-trixie node --no-warnings h7.mjs s.mjs A1,B1,N2 --reps=6 --conc=3 --tag=r8prior-native --sides=head:head > evidence/native-parallel-review8/h7-prior-native.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/w -w /w/review8 node:22-trixie node --no-warnings h7.mjs s2.mjs FRrace,FRany,FRnestrace,FRdefer,FRthen,FRsettled,FRset,FRgen,FRthenagg,FRmicro,FRcatch,FRfinally,FRiter,FRwrap --reps=6 --conc=3 --tag=r8prior-fr --sides=forced:forced > evidence/native-parallel-review8/h7-prior-fr.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/w -w /w/review8 node:22-trixie node --no-warnings h7.mjs s2.mjs FRrace,FRany,FRnestrace,FRdefer,FRthen,FRsettled,FRset,FRgen,FRthenagg,FRmicro,FRcatch,FRfinally,FRiter,FRwrap --reps=6 --conc=3 --tag=r8prior-deep --sides=deep:deep > evidence/native-parallel-review8/h7-prior-deep.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/w -w /w/review8 node:22-trixie node --no-warnings h7.mjs s3.mjs FB1,FB2,FB3,FB3c,FB4,FB6,FB7,FB8 --reps=6 --conc=3 --tag=r8prior-fb --sides=forced:forced > evidence/native-parallel-review8/h7-prior-fb.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/w -w /w/review8 node:22-trixie node --no-warnings h7.mjs s3.mjs S1,S2missing --reps=6 --conc=3 --tag=r8secrets-prior > evidence/native-parallel-review8/h7-prior-secrets.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/w -w /w/review8 node:22-trixie node --no-warnings h7.mjs s2.mjs UCI4,UCI5,UA1,UB1,UN2 --reps=6 --conc=3 --tag=r8upgrade-pinned > evidence/native-parallel-review8/h7-upgrade-pinned.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/w -w /w/review8 node:22-trixie node --no-warnings h7.mjs s2.mjs RBCI4,RBCI5,RBA1,RBB1,RBN2 --reps=6 --conc=3 --tag=r8rollback-pinned > evidence/native-parallel-review8/h7-rollback-pinned.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/w -w /w/review8 node:22-trixie node timing7.mjs 10 > evidence/native-parallel-review8/h7-timing.log 2>&1 +docker run --rm --init --platform linux/arm64 -v ms-flows-parallel-r7:/w -w /w/review8 node:22-trixie node --no-warnings probe.mjs > evidence/native-parallel-review8/h7-probe.log 2>&1 +``` + +The `forced` copy changes only `parallelRunEligible` to return true. The `deep` +copy additionally changes `parallelBodySyntaxEligible` to return true. Both +were scratch `dist` copies inside the volume; the worktree source and built +candidate were untouched. The F5 script makes its own scratch copy. + +## Mutation proofs and SDK checks + +```sh +python3 evidence/native-parallel-review8/mutation-proof.py > evidence/native-parallel-review8/mutation-proof.log 2>&1 +bash evidence/native-parallel-review8/f5-mutation-proof.sh > evidence/native-parallel-review8/f5-mutation-proof.log 2>&1 +``` + +The following commands ran from `packages/sdk`: + +```sh +npm run build > ../../evidence/native-parallel-review8/sdk-build.log 2>&1 +npm run typecheck > ../../evidence/native-parallel-review8/sdk-typecheck.log 2>&1 +npm run typecheck:tests > ../../evidence/native-parallel-review8/sdk-typecheck-tests.log 2>&1 +npx vitest run tests/authored-parallel-body.test.ts tests/authored-parallel-eligibility.test.ts tests/authored-step-graph.test.ts tests/authored-flow-lifecycle-executor.test.ts tests/authored-root.test.ts tests/authored-step-secrets.test.ts tests/communication-feature-secret-scoping.test.ts tests/worker-feature-secret-scoping.test.ts > ../../evidence/native-parallel-review8/sdk-focused-unit.log 2>&1 +RELAYFLOWD_BIN="$HOME/.relayflows-toolchain/target/ms-step-secrets/debug/relayflowd" npx vitest run tests/authored-step-secrets-live.test.ts > ../../evidence/native-parallel-review8/sdk-secrets-live.log 2>&1 +``` + +The final candidate and published-base identity checks ran from the worktree +root: + +```sh +shasum -a 256 packages/sdk/dist/authored-flow-executor.js packages/sdk/dist/authored-flow-lifecycle.js packages/sdk/dist/authored-parallel-body.js packages/sdk/dist/authored-parallel-eligibility.js > evidence/native-parallel-review8/sdk-dist-hashes.log +docker run --rm --platform linux/arm64 -v ms-flows-parallel-r7:/w node:22-trixie sha256sum /w/sdk-head/dist/authored-flow-executor.js /w/sdk-head/dist/authored-flow-lifecycle.js /w/sdk-head/dist/authored-parallel-body.js /w/sdk-head/dist/authored-parallel-eligibility.js >> evidence/native-parallel-review8/sdk-dist-hashes.log +docker run --rm --platform linux/arm64 -v ms-flows-parallel-r7:/w node:22-trixie sh -c 'sha256sum /w/p2051/node_modules/@relayflows/sdk/dist/authored-root.js /w/sdk-base-2051/dist/authored-root.js /w/sdk-head/dist/authored-root.js; node -p "require(\"/w/p2051/node_modules/@relayflows/sdk/package.json\").version"; node -p "require(\"/w/p2051/node_modules/@relayflows/surface/package.json\").version"' > evidence/native-parallel-review8/published-2051-pin.log 2>&1 +``` diff --git a/evidence/native-parallel-review8/README.md b/evidence/native-parallel-review8/README.md new file mode 100644 index 000000000..52af565b5 --- /dev/null +++ b/evidence/native-parallel-review8/README.md @@ -0,0 +1,96 @@ +# Review 7 repair evidence for #667 + +This bundle tests the six review-7 fixes on the SDK working tree above +`e3503c08`. The production source changes are SDK-only. The Linux arm64 +`relayflowd` in the named Docker volume is the prior branch build; the kernel +source is unchanged. The rebuilt candidate SDK `dist` in that volume matches +the final local build byte-for-byte for the four changed runtime modules +(`sdk-dist-hashes.log`). Published 2.0.50 and 2.0.51 SDKs and Surface packages +were used for compatibility checks. `published-2051-pin.log` shows that the +2.0.51 side differs from the candidate and matches the published base copy. + +All Docker runs used native arm64 `node:22-trixie`, one container at a time, +with fixtures and journals in the `ms-flows-parallel-r7` named volume. No Paris +Drive paths were bind-mounted. `COMMANDS.md` records the literal test commands +and names their complete captured stdout/stderr logs. `h7.mjs`, `s7.mjs`, +`probe.mjs`, and `timing7.mjs` are the reviewer's exact code fences from +`~/relay-briefs/ms-flows-parallel-667-review7-fixtures.md`. The prior `s.mjs`, +`s2.mjs`, `s3.mjs`, and `s4.mjs` are the review-6 generators, including its +recorded E1factory and rollback-expectation patch to `s2.mjs`. +`raw-logs.tar.gz` preserves the captured log bytes; the browsable `.log` files +have trailing whitespace and extra blank lines trimmed for `git diff --check`. + +## Review-7 fixes + +| Fix | Check and result | +| --- | --- | +| F1: parenthesized branch calls | The grammar and instrumenter share one unwrap helper. PAR1/PAR2 resumed 6/6 in parallel mode; `probe.mjs` reports two wrapped calls for each. | +| F2: certifier name capture | A body referencing `__certifyParallelBranch` uses serial mode. HY1/HY1s/HY2 completed 6/6 without duplicate effects. | +| F3: preloaded Promise patches | New roots use serial mode if native intrinsics or preload flags cannot be certified. PL1r5, PL2then, PL7mid, PL7neutral, PL6child, PL6late completed 6/6 in serial mode without replay. | +| F4: unknown combinator members | A member with no owned step or tracked promise id is refused before its `then` is read. Deep-forced FRthen failed before X in 6/6, with no replay. A proxy-thenable unit test proves its getter is not invoked. | +| F5: prompt root failure | The executor races the body against a violation signal. With only preload admission deliberately bypassed, PL7mid failed promptly in 6/6; removing the race hung until the shortened harness timeout, then byte-for-byte restoration restored prompt failure. | +| F6: species and constructor | The snapshot includes `Promise[Symbol.species]`, `Promise.prototype.constructor`, their descriptors, and `Function.prototype.toString`. Targeted tests catch each replacement. | + +The exact `s7.mjs` head matrix ran 27 scenarios × 6 kill offsets = 162 runs +(`h7-s7-head.log`). It reported no replay. Twenty-four scenarios met their +fixture expectation in all six runs. The remaining three—PL3sub, PL4ctor, +SEC7—had the **same code and effects on published 2.0.51** in the six-run +base controls (`h7-base-fail-controls.log`). PL3sub and PL4ctor write `abcXZ` +but exit 1 on both sides. SEC7 omits `RELAY_SECRET_ENV_NAMES`; its ungranted +children see the ambient token on both sides, so the reviewer's scoping +expectation fails. SEC7m, with the manifest, passed 6/6 in parallel mode with +only the granted children receiving the token. SEC7miss refused before a child. + +## Prior replay and compatibility gate + +| Matrix | Result | Log | +| --- | --- | --- | +| R1/R1w/R1wn/R2w/R3/R3w/R4w/R1c, plus R5n | 54/54 clean, serial | `h7-prior-r.log`, `h7-prior-r5n.log` | +| Q5/Q5n/Q5h/Q5w/Q5wn/Q5wh/Q6Pw | 42/42 clean, serial | `h7-prior-q.log` | +| E1factory/E2helper/E3dyn/E4json/E4jsonuse/E5ns | 36/36 clean, serial | `h7-prior-e.log` | +| P/C/G/H/K/I prior shapes | 90/96 pass the reviewer's checker; I1's six flags are identical on base | `h7-prior-p.log`, `h7-i1-base-control.log` | +| A1/B1/N2 | 18/18 clean, parallel | `h7-prior-native.log` | +| Forced eligibility FR ×14 | 84/84 failed closed before any effect, zero replay | `h7-prior-fr.log` | +| Deep-forced FR ×14 | 84/84 no replay; FRthen now refuses | `h7-prior-deep.log` | +| Forced FB guards | FB1/2/3/3c/4/6/8 meet their 6/6 expectations | `h7-prior-fb.log` | +| Published 2.0.50/2.0.51 → candidate, five shapes | 60/60 clean | `h7-upgrade-pinned.log` | +| Candidate → published 2.0.50/2.0.51, five shapes | 60/60 safe; 36 parallel refusals, 24 accepted serial roots | `h7-rollback-pinned.log` | +| Prior S1/S2missing secret cases, head and base | 24/24 match | `h7-prior-secrets.log` | + +I1's checker flags two identical dispatched child completion-marker commands +as a replay. Head and published base both finish `xyLRZ` 6/6 with no repeated +effect letter; the same false positive is documented by review 7. K1 is an +existing base failure: both head and base report `run_admission_conflict` +6/6, effects `ABLC`, no replay (`h7-k1-controls.log`). FB7 is an artificial +forced-eligibility case with a module-level Promise binding; it completes +`XZ` without replay, but the fixture expects refusal. Natural admission keeps +that source serial. For rollback, the reviewer's RBCI4/RBCI5 predicate expects +the old CLI to refuse, while these are serial v2 roots that the old CLIs +correctly accept; all 24 complete once with no replay. + +## Native overlap and focused checks + +The exact review-7 timing driver alternated ten warm head/base pairs. Three +300 ms routes each had a 100 ms dependent. Shell timestamps show body p50 +460 ms at head versus 1,376 ms on published base; CLI p50 was 1,128 versus +1,860 ms. Route start spread p50 was 5 versus 660 ms. Routes and dependents +overlapped in 10/10 head runs and 0/10 base runs (`h7-timing.log`). + +`npm run build`, `npm run typecheck`, `npm run typecheck:tests`, eight focused +Vitest files (130 tests), and both local-daemon secret live tests passed. The +source-faithful authored-root fixture retains its parallel expectation; a +separate synthetic-source fixture checks serial fallback. Logs are +`sdk-build.log`, `sdk-typecheck.log`, `sdk-typecheck-tests.log`, +`sdk-focused-unit.log`, and `sdk-secrets-live.log`. A real `npm ci` and +directory-based SDK dependencies were already recorded in the previous +[review-6 evidence](../native-parallel-review7/README.md). + +`mutation-proof.py` temporarily removed F1, F2, F3, F4, and F6 guards. Each +selected assertion failed, the original source was restored byte-for-byte +with a matching SHA-256, and the assertion passed. `mutation-proof.log` plus +the `mut-*-fail.log`/`mut-*-pass.log` files capture each command and output. +`f5-mutation-proof.sh` used a scratch SDK and a shortened copy of the exact +harness (`h7-f5.mjs`, changing only the SDK path and stall deadline): 6/6 +prompt failures before mutation, 1/1 timeout with the race removed, and 6/6 +prompt failures after restoring the compiled module byte-for-byte. Its logs +and matching hashes are in `f5-*.log` and `h7-f5-*.log`. diff --git a/evidence/native-parallel-review8/f5-mutated.log b/evidence/native-parallel-review8/f5-mutated.log new file mode 100644 index 000000000..f774509df --- /dev/null +++ b/evidence/native-parallel-review8/f5-mutated.log @@ -0,0 +1,2 @@ +561: await bodyPromise; +563: await bodyPromise; diff --git a/evidence/native-parallel-review8/f5-mutation-proof.log b/evidence/native-parallel-review8/f5-mutation-proof.log new file mode 100644 index 000000000..971712b9f --- /dev/null +++ b/evidence/native-parallel-review8/f5-mutation-proof.log @@ -0,0 +1,4 @@ +SUMMARY PL7mid deep>deep ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY PL7mid deep>deep ok=0/1 replay=0 fresh=1 mode=parallel codes=timeout effects= +SUMMARY PL7mid deep>deep ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +F5: 6/6 prompt failures before mutation, 1/1 timeout with race removed, 6/6 prompt failures after byte-for-byte restore diff --git a/evidence/native-parallel-review8/f5-mutation-proof.sh b/evidence/native-parallel-review8/f5-mutation-proof.sh new file mode 100644 index 000000000..d7d2e6a92 --- /dev/null +++ b/evidence/native-parallel-review8/f5-mutation-proof.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash +set -euo pipefail + +repo_root=$(cd "$(dirname "$0")/../.." && pwd) +evidence_dir="$repo_root/evidence/native-parallel-review8" +volume=ms-flows-parallel-r7 +stage=ms-flows-parallel-f5-stage + +# Deep forcing isolates the executor's early-failure rule. Bypass only the +# preload admission gate in this scratch SDK so PL7mid pins parallel mode; +# keep its later intrinsic-integrity check intact. +docker run -d --rm --platform linux/arm64 -v "$volume:/w" --name "$stage" node:22-trixie sleep infinity > "$evidence_dir/f5-stage-id.log" +docker cp "$evidence_dir/h7-f5.mjs" "$stage:/w/review8/h7-f5.mjs" +docker exec "$stage" sh -c ' + rm -rf /w/deep-f5/packages/sdk + mkdir -p /w/deep-f5/packages + cp -a /w/deep/packages/sdk /w/deep-f5/packages/ + sed -i "s/function authoredProcessHasPreload() {/function authoredProcessHasPreload() { return false;/" /w/deep-f5/packages/sdk/dist/authored-flow-lifecycle.js + cp /w/deep-f5/packages/sdk/dist/authored-flow-executor.js /w/deep-f5/packages/sdk/dist/authored-flow-executor.js.pristine + sha256sum /w/deep-f5/packages/sdk/dist/authored-flow-executor.js +' > "$evidence_dir/f5-stage.log" +docker stop "$stage" > /dev/null + +run_case() { + local tag=$1 + local reps=$2 + local log=$3 + docker run --rm --init --platform linux/arm64 -v "$volume:/w" -w /w/review8 node:22-trixie \ + node --no-warnings h7-f5.mjs s7.mjs PL7mid --reps="$reps" --conc=3 --tag="$tag" --sides=deep:deep \ + > "$evidence_dir/$log" 2>&1 + rg '^SUMMARY' "$evidence_dir/$log" +} + +run_case r8f5-before 6 h7-f5-before.log +docker run --rm --platform linux/arm64 -v "$volume:/w" node:22-trixie sh -c ' + sed -i "s/await Promise.race(\[bodyPromise, parallelFailure\]);/await bodyPromise;/" /w/deep-f5/packages/sdk/dist/authored-flow-executor.js + ! cmp -s /w/deep-f5/packages/sdk/dist/authored-flow-executor.js.pristine /w/deep-f5/packages/sdk/dist/authored-flow-executor.js + ! grep -Fq "await Promise.race([bodyPromise, parallelFailure]);" /w/deep-f5/packages/sdk/dist/authored-flow-executor.js + grep -n "await bodyPromise;" /w/deep-f5/packages/sdk/dist/authored-flow-executor.js +' > "$evidence_dir/f5-mutated.log" +run_case r8f5-mutant 1 h7-f5-mutant.log +docker run --rm --platform linux/arm64 -v "$volume:/w" node:22-trixie sh -c ' + cp /w/deep-f5/packages/sdk/dist/authored-flow-executor.js.pristine /w/deep-f5/packages/sdk/dist/authored-flow-executor.js + cmp /w/deep-f5/packages/sdk/dist/authored-flow-executor.js.pristine /w/deep-f5/packages/sdk/dist/authored-flow-executor.js + sha256sum /w/deep-f5/packages/sdk/dist/authored-flow-executor.js +' > "$evidence_dir/f5-restored.log" +run_case r8f5-restored 6 h7-f5-restored.log + +python3 - "$evidence_dir" <<'PY' +from pathlib import Path +import json, sys +root=Path(sys.argv[1]) +def read(name): + return [json.loads(line) for line in (root/name).read_text().splitlines() if line.startswith('{')] +for name in ['h7-f5-before.log','h7-f5-restored.log']: + rows=read(name) + assert len(rows)==6 and all(row['fresh'] and row['code']==1 and row['mode']=='parallel' + and not row['replay'] for row in rows), name +rows=read('h7-f5-mutant.log') +assert len(rows)==1 and rows[0]['fresh'] and rows[0]['code']=='timeout', rows +assert (root/'f5-stage.log').read_text()==(root/'f5-restored.log').read_text() +print('F5: 6/6 prompt failures before mutation, 1/1 timeout with race removed, 6/6 prompt failures after byte-for-byte restore') +PY diff --git a/evidence/native-parallel-review8/f5-restored.log b/evidence/native-parallel-review8/f5-restored.log new file mode 100644 index 000000000..f77882bab --- /dev/null +++ b/evidence/native-parallel-review8/f5-restored.log @@ -0,0 +1 @@ +ecb110f1d229eb85433719e449299b3deb882157e8b751f1e8c896e6491ca0e8 /w/deep-f5/packages/sdk/dist/authored-flow-executor.js diff --git a/evidence/native-parallel-review8/f5-stage-id.log b/evidence/native-parallel-review8/f5-stage-id.log new file mode 100644 index 000000000..e53a61c36 --- /dev/null +++ b/evidence/native-parallel-review8/f5-stage-id.log @@ -0,0 +1 @@ +285026e4a6cf6a698b09f0c40af1ce8273dbddd6db9d8deedc4e4769ebe40af1 diff --git a/evidence/native-parallel-review8/f5-stage.log b/evidence/native-parallel-review8/f5-stage.log new file mode 100644 index 000000000..f77882bab --- /dev/null +++ b/evidence/native-parallel-review8/f5-stage.log @@ -0,0 +1 @@ +ecb110f1d229eb85433719e449299b3deb882157e8b751f1e8c896e6491ca0e8 /w/deep-f5/packages/sdk/dist/authored-flow-executor.js diff --git a/evidence/native-parallel-review8/h7-base-fail-controls.log b/evidence/native-parallel-review8/h7-base-fail-controls.log new file mode 100644 index 000000000..98e16a4f1 --- /dev/null +++ b/evidence/native-parallel-review8/h7-base-fail-controls.log @@ -0,0 +1,21 @@ +{"s":"PL3sub","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"pl3sub\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl3sub\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E7GNRD7M2VAAVV6RS3Y28\",\"runId\":\"01M53E7GNRD7M2VAAVV6RS3Y28\",\"socketPath\":\"/tmp/relayflowd-cd96166d7234.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2191} +{"s":"PL3sub","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"pl3sub\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl3sub\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E7GNRMVBVR8K4YN9KRJMZ\",\"runId\":\"01M53E7GNRMVBVR8K4YN9KRJMZ\",\"socketPath\":\"/tmp/relayflowd-f8b0c2021513.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2290} +{"s":"PL3sub","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"pl3sub\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl3sub\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E7GNRXM20691J67V0JWGC\",\"runId\":\"01M53E7GNRXM20691J67V0JWGC\",\"socketPath\":\"/tmp/relayflowd-f03754cf63fc.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2359} +{"s":"PL3sub","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"pl3sub\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl3sub\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E7JQH5AXRC7JCW83PEKNF\",\"runId\":\"01M53E7JQH5AXRC7JCW83PEKNF\",\"socketPath\":\"/tmp/relayflowd-62298b4f3242.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2315} +{"s":"PL3sub","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"pl3sub\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl3sub\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E7JT6FX004S1W2K6N12P5\",\"runId\":\"01M53E7JT6FX004S1W2K6N12P5\",\"socketPath\":\"/tmp/relayflowd-6469cf058196.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2282} +{"s":"PL3sub","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"pl3sub\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl3sub\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E7JW3A7RRVGF10P6EYDN5\",\"runId\":\"01M53E7JW3A7RRVGF10P6EYDN5\",\"socketPath\":\"/tmp/relayflowd-26f102a2f153.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2450} +{"s":"PL4ctor","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"4ctor\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl4ctor\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E7MZ3G1DGGHA4N12AE6PD\",\"runId\":\"01M53E7MZ3G1DGGHA4N12AE6PD\",\"socketPath\":\"/tmp/relayflowd-1bd31f3ef7f4.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2042} +{"s":"PL4ctor","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"4ctor\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl4ctor\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E7N165VY402CJYF1SM58B\",\"runId\":\"01M53E7N165VY402CJYF1SM58B\",\"socketPath\":\"/tmp/relayflowd-59e73643eac0.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2162} +{"s":"PL4ctor","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"4ctor\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl4ctor\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E7N8Y53C9JNGHQZ8W1ACF\",\"runId\":\"01M53E7N8Y53C9JNGHQZ8W1ACF\",\"socketPath\":\"/tmp/relayflowd-9191dde4039c.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2212} +{"s":"PL4ctor","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"4ctor\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl4ctor\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E7PZVXJFSPTCXAKJ1MVHZ\",\"runId\":\"01M53E7PZVXJFSPTCXAKJ1MVHZ\",\"socketPath\":\"/tmp/relayflowd-01b2e983feb8.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2256} +{"s":"PL4ctor","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"4ctor\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl4ctor\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E7Q448T6Y9ZD2WKCMZEW3\",\"runId\":\"01M53E7Q448T6Y9ZD2WKCMZEW3\",\"socketPath\":\"/tmp/relayflowd-5328dbc0d32c.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2367} +{"s":"PL4ctor","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"4ctor\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl4ctor\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E7QE2AEBBC6WMV615CS7B\",\"runId\":\"01M53E7QE2AEBBC6WMV615CS7B\",\"socketPath\":\"/tmp/relayflowd-95fe9bc72acd.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2505} +{"s":"SEC7","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E7S5E2SFESMVA2NHANGKT\",\"runId\":\"01M53E7S5E2SFESMVA2NHANGKT\",\"socketPath\":\"/tmp/relayflowd-52dab1affc31.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"absent","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf G","run-4 c=1 sleep 0.15; printf U","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-0/g","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-0/u","run-5 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-0/g","run-6 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-0/u","run-7 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-0/l","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:LEAK ungranted2:LEAK later:LEAK","ok":false,"ms":1860} +{"s":"SEC7","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E7SEG0N6F6MTKY8W4MWQ2\",\"runId\":\"01M53E7SEG0N6F6MTKY8W4MWQ2\",\"socketPath\":\"/tmp/relayflowd-89173f56838a.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"absent","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf G","run-4 c=1 sleep 0.15; printf U","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-1/g","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-1/u","run-5 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-1/g","run-6 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-1/u","run-7 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-1/l","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:LEAK ungranted2:LEAK later:LEAK","ok":false,"ms":1903} +{"s":"SEC7","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E7SVWX8ZY9TCZ1WT97NMD\",\"runId\":\"01M53E7SVWX8ZY9TCZ1WT97NMD\",\"socketPath\":\"/tmp/relayflowd-63f4ca2da891.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"absent","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf G","run-4 c=1 sleep 0.15; printf U","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-2/g","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-2/u","run-5 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-2/g","run-6 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-2/u","run-7 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-2/l","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:LEAK ungranted2:LEAK later:LEAK","ok":false,"ms":1968} +{"s":"SEC7","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E7TZBACAYMKDMHAMZCGQF\",\"runId\":\"01M53E7TZBACAYMKDMHAMZCGQF\",\"socketPath\":\"/tmp/relayflowd-3fb153c2aeef.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"absent","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf G","run-4 c=1 sleep 0.15; printf U","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-3/g","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-3/u","run-5 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-3/g","run-6 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-3/u","run-7 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-3/l","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:LEAK ungranted2:LEAK later:LEAK","ok":false,"ms":2020} +{"s":"SEC7","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E7VAXXHB4QFA8PAM0QF5Z\",\"runId\":\"01M53E7VAXXHB4QFA8PAM0QF5Z\",\"socketPath\":\"/tmp/relayflowd-44c855e8abeb.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"absent","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf G","run-4 c=1 sleep 0.15; printf U","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-4/g","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-4/u","run-5 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-4/g","run-6 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-4/u","run-7 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-4/l","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:LEAK ungranted2:LEAK later:LEAK","ok":false,"ms":2159} +{"s":"SEC7","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E7VSN4KSWNGAD335875YP\",\"runId\":\"01M53E7VSN4KSWNGAD335875YP\",\"socketPath\":\"/tmp/relayflowd-39d474de9616.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"absent","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf G","run-4 c=1 sleep 0.15; printf U","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-5/g","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-5/u","run-5 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-5/g","run-6 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-5/u","run-7 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8basefail/SEC7/base-base-5/l","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:LEAK ungranted2:LEAK later:LEAK","ok":false,"ms":2274} +SUMMARY PL3sub base>base ok=0/6 replay=0 fresh=0 mode=absent codes=1 effects=abcXZ +SUMMARY PL4ctor base>base ok=0/6 replay=0 fresh=0 mode=absent codes=1 effects=abcXZ +SUMMARY SEC7 base>base ok=0/6 replay=0 fresh=0 mode=absent codes=0 effects=Z diff --git a/evidence/native-parallel-review8/h7-f5-before.log b/evidence/native-parallel-review8/h7-f5-before.log new file mode 100644 index 000000000..6ae2e75c3 --- /dev/null +++ b/evidence/native-parallel-review8/h7-f5-before.log @@ -0,0 +1,7 @@ +{"s":"PL7mid","start":"deep","resume":"deep","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\"}],\"path\":\"/w/runs/r8f5-before/PL7mid/deep-deep-0/chain.flow.ts\",\"rootRunId\":\"01M53ESF0J62RQ8ZC1P0KKSP7T\",\"socketPath\":\"/tmp/relayflowd-735b11945e9a.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8f5-before/PL7mid/deep-deep-0/wstart; sleep 0.3; printf"],"letterDup":false,"replay":false,"ok":false,"ms":994} +{"s":"PL7mid","start":"deep","resume":"deep","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\"}],\"path\":\"/w/runs/r8f5-before/PL7mid/deep-deep-1/chain.flow.ts\",\"rootRunId\":\"01M53ESF0S8Q9WCKK9H9KJ7HCW\",\"socketPath\":\"/tmp/relayflowd-13ed193b793b.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8f5-before/PL7mid/deep-deep-1/wstart; sleep 0.3; printf"],"letterDup":false,"replay":false,"ok":false,"ms":994} +{"s":"PL7mid","start":"deep","resume":"deep","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\"}],\"path\":\"/w/runs/r8f5-before/PL7mid/deep-deep-2/chain.flow.ts\",\"rootRunId\":\"01M53ESF0Y532PEH5CMZY1NZQ9\",\"socketPath\":\"/tmp/relayflowd-b8418666ff92.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8f5-before/PL7mid/deep-deep-2/wstart; sleep 0.3; printf"],"letterDup":false,"replay":false,"ok":false,"ms":995} +{"s":"PL7mid","start":"deep","resume":"deep","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\"}],\"path\":\"/w/runs/r8f5-before/PL7mid/deep-deep-3/chain.flow.ts\",\"rootRunId\":\"01M53ESFZA221VYQS0TPFFW9YF\",\"socketPath\":\"/tmp/relayflowd-9fc962a89c56.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8f5-before/PL7mid/deep-deep-3/wstart; sleep 0.3; printf"],"letterDup":false,"replay":false,"ok":false,"ms":968} +{"s":"PL7mid","start":"deep","resume":"deep","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\"}],\"path\":\"/w/runs/r8f5-before/PL7mid/deep-deep-4/chain.flow.ts\",\"rootRunId\":\"01M53ESFZJE9FNVSNA9HAJ12RK\",\"socketPath\":\"/tmp/relayflowd-ae0d4f7f4f4e.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8f5-before/PL7mid/deep-deep-4/wstart; sleep 0.3; printf"],"letterDup":false,"replay":false,"ok":false,"ms":967} +{"s":"PL7mid","start":"deep","resume":"deep","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\"}],\"path\":\"/w/runs/r8f5-before/PL7mid/deep-deep-5/chain.flow.ts\",\"rootRunId\":\"01M53ESFZAPF2R4G06V4ZHRSQH\",\"socketPath\":\"/tmp/relayflowd-0278964ab146.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8f5-before/PL7mid/deep-deep-5/wstart; sleep 0.3; printf"],"letterDup":false,"replay":false,"ok":false,"ms":966} +SUMMARY PL7mid deep>deep ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= diff --git a/evidence/native-parallel-review8/h7-f5-mutant.log b/evidence/native-parallel-review8/h7-f5-mutant.log new file mode 100644 index 000000000..9ce0ba6ab --- /dev/null +++ b/evidence/native-parallel-review8/h7-f5-mutant.log @@ -0,0 +1,2 @@ +{"s":"PL7mid","start":"deep","resume":"deep","i":0,"fresh":true,"code1":"timeout","code":"timeout","effects":"","effects1":"","out1":"","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8f5-mutant/PL7mid/deep-deep-0/wstart; sleep 0.3; printf"],"letterDup":false,"replay":false,"ok":false,"ms":8018} +SUMMARY PL7mid deep>deep ok=0/1 replay=0 fresh=1 mode=parallel codes=timeout effects= diff --git a/evidence/native-parallel-review8/h7-f5-restored.log b/evidence/native-parallel-review8/h7-f5-restored.log new file mode 100644 index 000000000..a2c803991 --- /dev/null +++ b/evidence/native-parallel-review8/h7-f5-restored.log @@ -0,0 +1,7 @@ +{"s":"PL7mid","start":"deep","resume":"deep","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\"}],\"path\":\"/w/runs/r8f5-restored/PL7mid/deep-deep-0/chain.flow.ts\",\"rootRunId\":\"01M53ESSQ76FGCX0EJQRHBJF71\",\"socketPath\":\"/tmp/relayflowd-ee87f25a212e.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8f5-restored/PL7mid/deep-deep-0/wstart; sleep 0.3; prin"],"letterDup":false,"replay":false,"ok":false,"ms":1112} +{"s":"PL7mid","start":"deep","resume":"deep","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\"}],\"path\":\"/w/runs/r8f5-restored/PL7mid/deep-deep-1/chain.flow.ts\",\"rootRunId\":\"01M53ESSQ4JG1PK0Z80W8QHNG6\",\"socketPath\":\"/tmp/relayflowd-3f5191a2afe2.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8f5-restored/PL7mid/deep-deep-1/wstart; sleep 0.3; prin"],"letterDup":false,"replay":false,"ok":false,"ms":1112} +{"s":"PL7mid","start":"deep","resume":"deep","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\"}],\"path\":\"/w/runs/r8f5-restored/PL7mid/deep-deep-2/chain.flow.ts\",\"rootRunId\":\"01M53ESSQ3WCAHDCE7H3WTG3QG\",\"socketPath\":\"/tmp/relayflowd-34cff2091e8c.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8f5-restored/PL7mid/deep-deep-2/wstart; sleep 0.3; prin"],"letterDup":false,"replay":false,"ok":false,"ms":1112} +{"s":"PL7mid","start":"deep","resume":"deep","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\"}],\"path\":\"/w/runs/r8f5-restored/PL7mid/deep-deep-3/chain.flow.ts\",\"rootRunId\":\"01M53ESTQA2E52HPSCRDG2VG9S\",\"socketPath\":\"/tmp/relayflowd-5a0db1553f81.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8f5-restored/PL7mid/deep-deep-3/wstart; sleep 0.3; prin"],"letterDup":false,"replay":false,"ok":false,"ms":996} +{"s":"PL7mid","start":"deep","resume":"deep","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\"}],\"path\":\"/w/runs/r8f5-restored/PL7mid/deep-deep-4/chain.flow.ts\",\"rootRunId\":\"01M53ESTQFAQ2ZEK6YJ9TN5WFQ\",\"socketPath\":\"/tmp/relayflowd-477b1f6e7401.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8f5-restored/PL7mid/deep-deep-4/wstart; sleep 0.3; prin"],"letterDup":false,"replay":false,"ok":false,"ms":996} +{"s":"PL7mid","start":"deep","resume":"deep","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\"}],\"path\":\"/w/runs/r8f5-restored/PL7mid/deep-deep-5/chain.flow.ts\",\"rootRunId\":\"01M53ESTQJD05NZDQEFQS1C06A\",\"socketPath\":\"/tmp/relayflowd-1026362a8cc8.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8f5-restored/PL7mid/deep-deep-5/wstart; sleep 0.3; prin"],"letterDup":false,"replay":false,"ok":false,"ms":995} +SUMMARY PL7mid deep>deep ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= diff --git a/evidence/native-parallel-review8/h7-f5.mjs b/evidence/native-parallel-review8/h7-f5.mjs new file mode 100644 index 000000000..55d918c88 --- /dev/null +++ b/evidence/native-parallel-review8/h7-f5.mjs @@ -0,0 +1,217 @@ +// Review-7 crash/resume harness for flows#667. Runs inside node:22-trixie. +// usage: node --no-warnings h7.mjs [--reps=6] [--conc=3] [--tag=x] [--sides=a:b/c:d] [--keep] +import fs from 'node:fs'; +import path from 'node:path'; +import { spawn } from 'node:child_process'; +import { createRequire } from 'node:module'; +import { DatabaseSync } from 'node:sqlite'; +globalThis.require = createRequire(import.meta.url); + +const args = process.argv.slice(2); +const opt = (k, d) => { const a = args.find(x => x.startsWith(`--${k}=`)); return a ? a.slice(k.length + 3) : d; }; +const file = args[0]; +const names = args[1]; +const reps = Number(opt('reps', '6')); +const conc = Number(opt('conc', '3')); +const tag = opt('tag', 't'); +const sidesOverride = opt('sides', undefined)?.split('/').map(p => p.split(':')); +const keep = args.includes('--keep'); +const DELAYS = [0, 60, 130, 220, 330, 450, 30, 180, 270, 400]; + +const SIDES = { + head: { cli: '/w/head/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + base: { cli: '/w/base/packages/sdk/dist/cli.js', nm: '/w/base/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + forced: { cli: '/w/forced/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + fix: { cli: '/w/fix/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + deep: { cli: '/w/deep-f5/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + p2050: { cli: '/w/p2050/node_modules/@relayflows/sdk/dist/cli.js', nm: '/w/p2050/node_modules', daemon: '/w/relayflowd-2050' }, + p2051: { cli: '/w/p2051/node_modules/@relayflows/sdk/dist/cli.js', nm: '/w/p2051/node_modules', daemon: '/w/relayflowd-main' }, +}; + +const sleep = ms => new Promise(r => setTimeout(r, ms)); +const read = p => { try { return fs.readFileSync(p, 'utf8'); } catch { return ''; } }; + +function start(side, argv, root, env = {}) { + const s = SIDES[side]; + const child = spawn(process.execPath, [s.cli, ...argv], { + cwd: root, env: { ...process.env, ...env, RELAYFLOWD_BIN: s.daemon }, stdio: ['ignore', 'pipe', 'pipe'], + }); + let out = ''; + child.stdout.on('data', d => { out += d; }); + child.stderr.on('data', d => { out += d; }); + return { child, closed: new Promise(r => child.once('close', (code, signal) => r({ code, signal }))), get out() { return out; } }; +} + +function sweep(root) { + const targets = new Set(); + try { targets.add(JSON.parse(read(path.join(root, 'data/connection.json'))).pid); } catch {} + for (const e of fs.readdirSync('/proc')) { + if (!/^\d+$/.test(e)) continue; + const pid = Number(e); + if (pid === process.pid) continue; + try { + const cwd = fs.readlinkSync(`/proc/${pid}/cwd`); + const cmd = fs.readFileSync(`/proc/${pid}/cmdline`, 'utf8'); + if (cwd === root || cwd.startsWith(root + '/') || cmd.includes(root)) targets.add(pid); + } catch {} + } + for (const pid of targets) { try { if (pid) process.kill(pid, 'SIGKILL'); } catch {} } +} + +function journals(root) { + const dir = path.join(root, 'data/runs'); + if (!fs.existsSync(dir)) return []; + return fs.readdirSync(dir).filter(f => f.endsWith('.sqlite3')).sort().map(f => { + let db; + try { db = new DatabaseSync(path.join(dir, f), { readOnly: true }); } catch { return { runId: f.slice(0, -8), step: undefined, completed: 0 }; } + try { + if (!db.prepare("select name from sqlite_master where type='table' and name='entries'").get()) return { runId: f.slice(0, -8), step: undefined, completed: 0 }; + const sp = db.prepare("select payload from entries where entry_type='run.spawned' order by seq limit 1").get(); + const done = db.prepare("select count(*) as n from entries where entry_type='step.completed'").get().n; + const payload = sp ? JSON.parse(sp.payload) : undefined; + const spec = payload?.spec ?? payload?.payload?.spec ?? payload?.run?.spec; + return { runId: f.slice(0, -8), step: spec?.steps?.[0], completed: Number(done) }; + } finally { db.close(); } + }); +} + +function rootOf(js) { return js.find(j => j.step?.id === 'authored-root'); } +function modeOf(r) { + try { const m = JSON.parse(r.step.instruction); return m.executionMode ?? (m.identityVersion ? 'v2?' : 'absent'); } catch { return 'unknown'; } +} + +function replayCheck(js, rootId, expected = {}) { + const seen = new Map(); + const ids = []; + let replay = false; + const dups = []; + for (const j of js) { + if (j.runId === rootId || !j.step) continue; + const st = j.step; + const cmd = st.command ?? st.instruction ?? ''; + ids.push(`${st.id} c=${j.completed} ${String(cmd).slice(0, 70)}`); + if (!st.command) continue; + const ns = st.id.includes('--') ? st.id.slice(0, st.id.lastIndexOf('--')) : ''; + const key = `${ns}|${st.command}`; + const prev = seen.get(key) ?? []; + prev.push({ id: st.id, completed: j.completed }); + seen.set(key, prev); + const distinct = new Set(prev.map(p => p.id)); + if (distinct.size > (expected[st.command] ?? 1) && prev.some(p => p.completed > 0)) { + replay = true; dups.push(`${st.command.slice(0, 50)}: ${[...distinct].join(' & ')}`); + } + } + return { replay, ids, dups }; +} + +async function one(sc, startSide, resumeSide, i) { + const root = `/w/runs/${tag}/${sc.name}/${startSide}-${resumeSide}-${i}`; + fs.rmSync(root, { recursive: true, force: true }); + fs.mkdirSync(root, { recursive: true }); + const nmSide = sc.nmSide ?? startSide; + fs.writeFileSync(path.join(root, 'package.json'), '{"type":"module"}'); + fs.symlinkSync(SIDES[nmSide].nm, path.join(root, 'node_modules')); + fs.writeFileSync(path.join(root, 'flows.json'), JSON.stringify({ cli: path.join(root, 'adapter.mjs'), models: ['test-model'] })); + fs.writeFileSync(path.join(root, 'adapter.mjs'), '#!/usr/bin/env node\nprocess.exit(0);\n', { mode: 0o755 }); + for (const [f, src] of Object.entries(sc.files)) { + const t = path.join(root, f); + fs.mkdirSync(path.dirname(t), { recursive: true }); + fs.writeFileSync(t, src.replaceAll('', root)); + if (f.endsWith('adapter.mjs')) fs.chmodSync(t, 0o755); + } + if (sc.bluebird) { + const d = path.join(root, 'bb'); + fs.cpSync('/w/head/packages/sdk/node_modules/bluebird/js/release', d, { recursive: true }); + fs.writeFileSync(path.join(d, 'package.json'), '{"type":"commonjs"}'); + } + const env = Object.fromEntries(Object.entries(sc.env ?? {}).map(([k, v]) => [k, String(v).replaceAll('', root)])); + const entry = path.join(root, sc.entry ?? 'chain.flow.ts'); + const res = { s: sc.name, start: startSide, resume: resumeSide, i }; + const t0 = Date.now(); + const first = start(startSide, ['run', '--no-observer-link', '--json', ...(sc.extraArgs ?? []), '--data-dir', path.join(root, 'data'), entry, '--input', '{}'], root, env); + let early; + const deadline = Date.now() + 8_000; + while (!fs.existsSync(path.join(root, 'stalled'))) { + if (first.child.exitCode !== null || first.child.signalCode !== null) { early = await first.closed; break; } + if (Date.now() > deadline) { first.child.kill('SIGKILL'); early = { code: 'timeout' }; break; } + await sleep(15); + } + try { + if (early) { + res.fresh = true; res.code1 = early.code; res.code = early.code; + res.effects1 = res.effects = read(path.join(root, 'effects')); + res.out1 = first.out.slice(-600); + } else { + res.fresh = false; + await sleep(sc.delays?.[i] ?? DELAYS[i % DELAYS.length]); + first.child.kill('SIGKILL'); + await Promise.race([first.closed, sleep(2000)]); + sweep(root); await sleep(100); sweep(root); + res.code1 = 'killed'; + res.effects1 = read(path.join(root, 'effects')); + fs.writeFileSync(path.join(root, 'release'), ''); + const r0 = rootOf(journals(root)); + if (!r0) throw new Error('no root journal'); + const resumed = start(resumeSide, ['resume', '--no-observer-link', '--json', ...(sc.extraArgs ?? []), '--data-dir', path.join(root, 'data'), r0.runId], root, env); + const to = setTimeout(() => resumed.child.kill('SIGKILL'), 150_000); + const rr = await resumed.closed; clearTimeout(to); + res.code = rr.code; res.out = resumed.out.slice(-600); + sweep(root); + if (sc.secondResume) { + res.effects0 = res.effects1; + res.effectsMid = read(path.join(root, 'effects')); + res.code1 = rr.code; res.effects1 = res.effectsMid; + const fin = start(sc.secondResume, ['resume', '--no-observer-link', '--json', ...(sc.extraArgs ?? []), '--data-dir', path.join(root, 'data'), r0.runId], root, env); + const to2 = setTimeout(() => fin.child.kill('SIGKILL'), 150_000); + const fr = await fin.closed; clearTimeout(to2); + res.code = fr.code; res.out2 = fin.out.slice(-400); + sweep(root); + } + res.effects = read(path.join(root, 'effects')); + } + const js = journals(root); + const r = rootOf(js); + res.mode = r ? modeOf(r) : 'noroot'; + const rc = replayCheck(js, r?.runId, sc.expectedCounts); + res.journalReplay = rc.replay; res.dups = rc.dups; res.ids = rc.ids; + const letters = [...res.effects].filter(c => /[A-Za-z]/.test(c)); + res.letterDup = new Set(letters).size !== letters.length; + res.replay = res.journalReplay || (res.letterDup && !sc.allowDupLetters); + if (sc.extraCheck) Object.assign(res, sc.extraCheck(root)); + const okDefault = r => r.code === 0 && !r.replay && (sc.noZ || r.effects.includes('Z')); + res.ok = sc.okIf ? (sc.okIf(res) && !res.replay) : sc.expect ? (sc.expect(res) && !res.replay && res.code === 0) : okDefault(res); + } catch (e) { + res.error = String(e?.stack ?? e).slice(0, 400); res.ok = false; + } finally { + try { first.child.kill('SIGKILL'); } catch {} + sweep(root); + res.ms = Date.now() - t0; + if (!keep && res.ok) fs.rmSync(root, { recursive: true, force: true }); + } + return res; +} + +const mod = await import(path.resolve(file)); +let scen = mod.default; +if (names !== 'all') { const want = names.split(','); scen = want.map(n => { const s = scen.find(x => x.name === n); if (!s) throw new Error(`no scenario ${n}`); return s; }); } +const jobs = []; +for (const sc of scen) for (const [a, b] of (sidesOverride ?? sc.sides)) for (let i = 0; i < reps; i++) jobs.push([sc, a, b, i]); +const results = []; +let next = 0; +await Promise.all(Array.from({ length: conc }, async () => { + while (next < jobs.length) { + const [sc, a, b, i] = jobs[next++]; + const r = await one(sc, a, b, i); + results.push(r); + console.log(JSON.stringify(r)); + } +})); +const groups = new Map(); +for (const r of results) { + const k = `${r.s} ${r.start}>${r.resume}`; + const g = groups.get(k) ?? { ok: 0, n: 0, replay: 0, fresh: 0, modes: new Set(), effects: new Set(), codes: new Set() }; + g.n++; if (r.ok) g.ok++; if (r.replay) g.replay++; if (r.fresh) g.fresh++; + g.modes.add(r.mode); g.effects.add(r.effects); g.codes.add(String(r.code)); + groups.set(k, g); +} +for (const [k, g] of groups) console.log(`SUMMARY ${k} ok=${g.ok}/${g.n} replay=${g.replay} fresh=${g.fresh} mode=${[...g.modes]} codes=${[...g.codes]} effects=${[...g.effects].join('|')}`); diff --git a/evidence/native-parallel-review8/h7-i1-base-control.log b/evidence/native-parallel-review8/h7-i1-base-control.log new file mode 100644 index 000000000..3bdb4a456 --- /dev/null +++ b/evidence/native-parallel-review8/h7-i1-base-control.log @@ -0,0 +1,7 @@ +{"s":"I1","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"xyLR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EVAMJABC8V2BW2CC00T7A\",\"runId\":\"01M53EVAMJABC8V2BW2CC00T7A\",\"socketPath\":\"/tmp/relayflowd-42eadcd31d74.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"xyLRZ","mode":"absent","journalReplay":true,"dups":["printf '%s' '{\"name\":\"child\",\"completionReason\":\"s: dispatch-1 & dispatch-2"],"ids":["dispatch-1--run-1 c=1 printf first","dispatch-1--run-2 c=1 printf second","dispatch-2--run-1 c=1 printf first","dispatch-2--run-2 c=1 printf second","dispatch-1--run-3 c=1 printf x >> effects","dispatch-2--run-3 c=1 printf y >> effects","dispatch-1--complete-4 c=1 :","dispatch-2--complete-4 c=1 :","dispatch-1 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","dispatch-2 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":true,"ok":false,"ms":1697} +{"s":"I1","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"xyLR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EVAMJTK5N93666BCKYSSF\",\"runId\":\"01M53EVAMJTK5N93666BCKYSSF\",\"socketPath\":\"/tmp/relayflowd-8eeb85153538.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"xyLRZ","mode":"absent","journalReplay":true,"dups":["printf '%s' '{\"name\":\"child\",\"completionReason\":\"s: dispatch-1 & dispatch-2"],"ids":["dispatch-1--run-1 c=1 printf first","dispatch-1--run-2 c=1 printf second","dispatch-2--run-1 c=1 printf first","dispatch-2--run-2 c=1 printf second","dispatch-1--run-3 c=1 printf x >> effects","dispatch-2--run-3 c=1 printf y >> effects","dispatch-1--complete-4 c=1 :","dispatch-2--complete-4 c=1 :","dispatch-1 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","dispatch-2 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":true,"ok":false,"ms":1753} +{"s":"I1","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"xyLR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EVAMJF1TNGD7PP7RPPYQE\",\"runId\":\"01M53EVAMJF1TNGD7PP7RPPYQE\",\"socketPath\":\"/tmp/relayflowd-c689795c2e00.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"xyLRZ","mode":"absent","journalReplay":true,"dups":["printf '%s' '{\"name\":\"child\",\"completionReason\":\"s: dispatch-1 & dispatch-2"],"ids":["dispatch-1--run-1 c=1 printf first","dispatch-1--run-2 c=1 printf second","dispatch-2--run-1 c=1 printf first","dispatch-2--run-2 c=1 printf second","dispatch-1--run-3 c=1 printf x >> effects","dispatch-2--run-3 c=1 printf y >> effects","dispatch-1--complete-4 c=1 :","dispatch-2--complete-4 c=1 :","dispatch-1 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","dispatch-2 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":true,"ok":false,"ms":1798} +{"s":"I1","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"xyLR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EVC7EMW3S8SFG515R0BFP\",\"runId\":\"01M53EVC7EMW3S8SFG515R0BFP\",\"socketPath\":\"/tmp/relayflowd-df27ef2f9aad.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"xyLRZ","mode":"absent","journalReplay":true,"dups":["printf '%s' '{\"name\":\"child\",\"completionReason\":\"s: dispatch-1 & dispatch-2"],"ids":["dispatch-1--run-1 c=1 printf first","dispatch-1--run-2 c=1 printf second","dispatch-2--run-1 c=1 printf first","dispatch-2--run-2 c=1 printf second","dispatch-1--run-3 c=1 printf x >> effects","dispatch-2--run-3 c=1 printf y >> effects","dispatch-1--complete-4 c=1 :","dispatch-2--complete-4 c=1 :","dispatch-1 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","dispatch-2 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":true,"ok":false,"ms":1814} +{"s":"I1","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"xyLR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EVC9C6D2F7KC65NTRF2TF\",\"runId\":\"01M53EVC9C6D2F7KC65NTRF2TF\",\"socketPath\":\"/tmp/relayflowd-0ab4b9e16ce0.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"xyLRZ","mode":"absent","journalReplay":true,"dups":["printf '%s' '{\"name\":\"child\",\"completionReason\":\"s: dispatch-1 & dispatch-2"],"ids":["dispatch-1--run-1 c=1 printf first","dispatch-1--run-2 c=1 printf second","dispatch-2--run-1 c=1 printf first","dispatch-2--run-2 c=1 printf second","dispatch-1--run-3 c=1 printf x >> effects","dispatch-2--run-3 c=1 printf y >> effects","dispatch-1--complete-4 c=1 :","dispatch-2--complete-4 c=1 :","dispatch-1 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","dispatch-2 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":true,"ok":false,"ms":1880} +{"s":"I1","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"xyLR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EVCADF2KHTXK721NK10PB\",\"runId\":\"01M53EVCADF2KHTXK721NK10PB\",\"socketPath\":\"/tmp/relayflowd-57839275b68d.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"xyLRZ","mode":"absent","journalReplay":true,"dups":["printf '%s' '{\"name\":\"child\",\"completionReason\":\"s: dispatch-1 & dispatch-2"],"ids":["dispatch-1--run-1 c=1 printf first","dispatch-1--run-2 c=1 printf second","dispatch-2--run-1 c=1 printf first","dispatch-2--run-2 c=1 printf second","dispatch-1--run-3 c=1 printf x >> effects","dispatch-2--run-3 c=1 printf y >> effects","dispatch-1--complete-4 c=1 :","dispatch-2--complete-4 c=1 :","dispatch-1 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","dispatch-2 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":true,"ok":false,"ms":1935} +SUMMARY I1 base>base ok=0/6 replay=6 fresh=0 mode=absent codes=0 effects=xyLRZ diff --git a/evidence/native-parallel-review8/h7-k1-controls.log b/evidence/native-parallel-review8/h7-k1-controls.log new file mode 100644 index 000000000..d6162c12b --- /dev/null +++ b/evidence/native-parallel-review8/h7-k1-controls.log @@ -0,0 +1,14 @@ +{"s":"K1","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"ABLC","code":1,"out":"uthored-child:d3a8731662dfe6ec3b5682c2add0b78da1db4dc5f3bef2bab1f371c9258cad27\" is already bound to a different spec\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: run_admission_conflict: run admission key \\\"authored-child:d3a8731662dfe6ec3b5682c2add0b78da1db4dc5f3bef2bab1f371c9258cad27\\\" is already bound to a different spec\"}],\"rootRunId\":\"01M53EVR1DSMH5J56BS3B819MM\",\"runId\":\"01M53EVR1DSMH5J56BS3B819MM\",\"socketPath\":\"/tmp/relayflowd-6d1b87a43050.sock\",\"subscriptions\":[]}\n","effects":"ABLC","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.2; printf B >> effects","run-3 c=1 printf L >> effects","run-4 c=1 printf C >> effects","run-5 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2214} +{"s":"K1","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"ABLC","code":1,"out":"uthored-child:c441507bc27b39597b270180dfb3a24d3ce346f15c107e70b4ebe6f5a0be59ba\" is already bound to a different spec\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: run_admission_conflict: run admission key \\\"authored-child:c441507bc27b39597b270180dfb3a24d3ce346f15c107e70b4ebe6f5a0be59ba\\\" is already bound to a different spec\"}],\"rootRunId\":\"01M53EVR1DB5Q4EDT2K3JVM35R\",\"runId\":\"01M53EVR1DB5Q4EDT2K3JVM35R\",\"socketPath\":\"/tmp/relayflowd-c533fc0cb3cd.sock\",\"subscriptions\":[]}\n","effects":"ABLC","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.2; printf B >> effects","run-3 c=1 printf L >> effects","run-4 c=1 printf C >> effects","run-5 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2238} +{"s":"K1","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"ABLC","code":1,"out":"uthored-child:77e61892638e8b94199af37b0a62dcd8347a1bddbaf5df3b6e923fdfde9a5e07\" is already bound to a different spec\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: run_admission_conflict: run admission key \\\"authored-child:77e61892638e8b94199af37b0a62dcd8347a1bddbaf5df3b6e923fdfde9a5e07\\\" is already bound to a different spec\"}],\"rootRunId\":\"01M53EVR1DEYC5FG3GY7S8E50G\",\"runId\":\"01M53EVR1DEYC5FG3GY7S8E50G\",\"socketPath\":\"/tmp/relayflowd-db9341fe789c.sock\",\"subscriptions\":[]}\n","effects":"ABLC","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.2; printf B >> effects","run-3 c=1 printf L >> effects","run-4 c=1 printf C >> effects","run-5 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2284} +{"s":"K1","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"ABLC","code":1,"out":"uthored-child:64db3f8502ce572299ca4b8bc9e1a8f6de5f8b1dcebc0595652f6c0281350d5c\" is already bound to a different spec\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: run_admission_conflict: run admission key \\\"authored-child:64db3f8502ce572299ca4b8bc9e1a8f6de5f8b1dcebc0595652f6c0281350d5c\\\" is already bound to a different spec\"}],\"rootRunId\":\"01M53EVT5AAYJEFN1MVAJ2CGQ8\",\"runId\":\"01M53EVT5AAYJEFN1MVAJ2CGQ8\",\"socketPath\":\"/tmp/relayflowd-ec23c6e9fc7a.sock\",\"subscriptions\":[]}\n","effects":"ABLC","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.2; printf B >> effects","run-3 c=1 printf L >> effects","run-4 c=1 printf C >> effects","run-5 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2437} +{"s":"K1","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"ABLC","code":1,"out":"uthored-child:666c6b2543b54f8005620f7df0bb938b0df767d4cb17e215600734d1d41229aa\" is already bound to a different spec\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: run_admission_conflict: run admission key \\\"authored-child:666c6b2543b54f8005620f7df0bb938b0df767d4cb17e215600734d1d41229aa\\\" is already bound to a different spec\"}],\"rootRunId\":\"01M53EVT5PER9J9HAFRFGZAE4W\",\"runId\":\"01M53EVT5PER9J9HAFRFGZAE4W\",\"socketPath\":\"/tmp/relayflowd-fbd391c68375.sock\",\"subscriptions\":[]}\n","effects":"ABLC","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.2; printf B >> effects","run-3 c=1 printf L >> effects","run-4 c=1 printf C >> effects","run-5 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2458} +{"s":"K1","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"ABLC","code":1,"out":"uthored-child:1cd8486ed30cf452071f119ec4d429e77e0f03acd783e13c566746186afee436\" is already bound to a different spec\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: run_admission_conflict: run admission key \\\"authored-child:1cd8486ed30cf452071f119ec4d429e77e0f03acd783e13c566746186afee436\\\" is already bound to a different spec\"}],\"rootRunId\":\"01M53EVT6YNFFZGK3KQ7RYNKYA\",\"runId\":\"01M53EVT6YNFFZGK3KQ7RYNKYA\",\"socketPath\":\"/tmp/relayflowd-253c8fd00343.sock\",\"subscriptions\":[]}\n","effects":"ABLC","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.2; printf B >> effects","run-3 c=1 printf L >> effects","run-4 c=1 printf C >> effects","run-5 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2549} +{"s":"K1","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"ABLC","code":1,"out":"uthored-child:52d8921ac3f2c5dacae4a0e957e3b4ed93e42faf65fb9d6554528ea6b2aa52ea\" is already bound to a different spec\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: run_admission_conflict: run admission key \\\"authored-child:52d8921ac3f2c5dacae4a0e957e3b4ed93e42faf65fb9d6554528ea6b2aa52ea\\\" is already bound to a different spec\"}],\"rootRunId\":\"01M53EVWBDYW6DW6DSBF8VRP2R\",\"runId\":\"01M53EVWBDYW6DW6DSBF8VRP2R\",\"socketPath\":\"/tmp/relayflowd-95dbfd1955de.sock\",\"subscriptions\":[]}\n","effects":"ABLC","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.2; printf B >> effects","run-3 c=1 printf L >> effects","run-4 c=1 printf C >> effects","run-5 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1690} +{"s":"K1","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"ABLC","code":1,"out":"uthored-child:cd4550086384ec07c4ae26d8cd4d6e485fa3d94fbbcd3d34af9d5edf34511996\" is already bound to a different spec\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: run_admission_conflict: run admission key \\\"authored-child:cd4550086384ec07c4ae26d8cd4d6e485fa3d94fbbcd3d34af9d5edf34511996\\\" is already bound to a different spec\"}],\"rootRunId\":\"01M53EVWCRZNT117E7VA3F50XJ\",\"runId\":\"01M53EVWCRZNT117E7VA3F50XJ\",\"socketPath\":\"/tmp/relayflowd-e1190b8952ae.sock\",\"subscriptions\":[]}\n","effects":"ABLC","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.2; printf B >> effects","run-3 c=1 printf L >> effects","run-4 c=1 printf C >> effects","run-5 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1738} +{"s":"K1","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"ABLC","code":1,"out":"uthored-child:5269b2ae08389a8e18feb82e5045ba2631966d95697ca2bf63929b7d39243549\" is already bound to a different spec\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: run_admission_conflict: run admission key \\\"authored-child:5269b2ae08389a8e18feb82e5045ba2631966d95697ca2bf63929b7d39243549\\\" is already bound to a different spec\"}],\"rootRunId\":\"01M53EVWGKCQMYT1ZDK2X2KXCV\",\"runId\":\"01M53EVWGKCQMYT1ZDK2X2KXCV\",\"socketPath\":\"/tmp/relayflowd-bfed5f04dc16.sock\",\"subscriptions\":[]}\n","effects":"ABLC","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.2; printf B >> effects","run-3 c=1 printf L >> effects","run-4 c=1 printf C >> effects","run-5 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1817} +{"s":"K1","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"ABLC","code":1,"out":"uthored-child:e539002869f33587d781bc60e152d474a209342646268740b27b080fb6908a96\" is already bound to a different spec\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: run_admission_conflict: run admission key \\\"authored-child:e539002869f33587d781bc60e152d474a209342646268740b27b080fb6908a96\\\" is already bound to a different spec\"}],\"rootRunId\":\"01M53EVXZRP9MMHG2GQ6K0W0H2\",\"runId\":\"01M53EVXZRP9MMHG2GQ6K0W0H2\",\"socketPath\":\"/tmp/relayflowd-e8af8ebc5b92.sock\",\"subscriptions\":[]}\n","effects":"ABLC","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.2; printf B >> effects","run-3 c=1 printf L >> effects","run-4 c=1 printf C >> effects","run-5 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1893} +{"s":"K1","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"ABLC","code":1,"out":"uthored-child:cf9be65499e45c7c2b2168e476ebf6d2900976f7fb62537f0ac8403039364b76\" is already bound to a different spec\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: run_admission_conflict: run admission key \\\"authored-child:cf9be65499e45c7c2b2168e476ebf6d2900976f7fb62537f0ac8403039364b76\\\" is already bound to a different spec\"}],\"rootRunId\":\"01M53EVY2FN2FE3MWDWFXC7WK1\",\"runId\":\"01M53EVY2FN2FE3MWDWFXC7WK1\",\"socketPath\":\"/tmp/relayflowd-9afc57b8d771.sock\",\"subscriptions\":[]}\n","effects":"ABLC","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.2; printf B >> effects","run-3 c=1 printf L >> effects","run-4 c=1 printf C >> effects","run-5 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1999} +{"s":"K1","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"ABLC","code":1,"out":"uthored-child:7e6cb395fc3ed06fcc1866bca1b12282625adc707e4ea59ca082b5ac8a612825\" is already bound to a different spec\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: run_admission_conflict: run admission key \\\"authored-child:7e6cb395fc3ed06fcc1866bca1b12282625adc707e4ea59ca082b5ac8a612825\\\" is already bound to a different spec\"}],\"rootRunId\":\"01M53EVY9S2QJ4KZ1CGDPH9317\",\"runId\":\"01M53EVY9S2QJ4KZ1CGDPH9317\",\"socketPath\":\"/tmp/relayflowd-2c00aec2462b.sock\",\"subscriptions\":[]}\n","effects":"ABLC","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.2; printf B >> effects","run-3 c=1 printf L >> effects","run-4 c=1 printf C >> effects","run-5 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2175} +SUMMARY K1 head>head ok=0/6 replay=0 fresh=0 mode=serial codes=1 effects=ABLC +SUMMARY K1 base>base ok=0/6 replay=0 fresh=0 mode=absent codes=1 effects=ABLC diff --git a/evidence/native-parallel-review8/h7-prior-deep.log b/evidence/native-parallel-review8/h7-prior-deep.log new file mode 100644 index 000000000..57b5dc99b --- /dev/null +++ b/evidence/native-parallel-review8/h7-prior-deep.log @@ -0,0 +1,98 @@ +{"s":"FRrace","start":"deep","resume":"deep","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRrace/deep-deep-1/chain.flow.ts\",\"rootRunId\":\"01M53EGK72KG3Z319B88JFGKXP\",\"socketPath\":\"/tmp/relayflowd-f36a21fe96e3.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B"],"letterDup":false,"replay":false,"ok":false,"ms":1251} +{"s":"FRrace","start":"deep","resume":"deep","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRrace/deep-deep-2/chain.flow.ts\",\"rootRunId\":\"01M53EGK6TC9TGPPM90S9N29NF\",\"socketPath\":\"/tmp/relayflowd-18bdd64632e3.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B"],"letterDup":false,"replay":false,"ok":false,"ms":1252} +{"s":"FRrace","start":"deep","resume":"deep","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRrace/deep-deep-0/chain.flow.ts\",\"rootRunId\":\"01M53EGK6ZX1QTJ7J9T34Q61C1\",\"socketPath\":\"/tmp/relayflowd-31021f129b29.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A"],"letterDup":false,"replay":false,"ok":false,"ms":1257} +{"s":"FRrace","start":"deep","resume":"deep","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRrace/deep-deep-3/chain.flow.ts\",\"rootRunId\":\"01M53EGMDT4604D0Z0H634SAQH\",\"socketPath\":\"/tmp/relayflowd-ee641c068e79.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B"],"letterDup":false,"replay":false,"ok":false,"ms":1215} +{"s":"FRrace","start":"deep","resume":"deep","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRrace/deep-deep-4/chain.flow.ts\",\"rootRunId\":\"01M53EGMDFZAQNE5N20PBQ2F23\",\"socketPath\":\"/tmp/relayflowd-7bc870aaafb6.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A"],"letterDup":false,"replay":false,"ok":false,"ms":1215} +{"s":"FRrace","start":"deep","resume":"deep","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRrace/deep-deep-5/chain.flow.ts\",\"rootRunId\":\"01M53EGMDT1ZZGZV98TWT1M38F\",\"socketPath\":\"/tmp/relayflowd-ae024b8dd1f6.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B"],"letterDup":false,"replay":false,"ok":false,"ms":1215} +{"s":"FRany","start":"deep","resume":"deep","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRany/deep-deep-1/chain.flow.ts\",\"rootRunId\":\"01M53EGNKNRE2JJ62AZDG125GF\",\"socketPath\":\"/tmp/relayflowd-7e12e3092731.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A"],"letterDup":false,"replay":false,"ok":false,"ms":1192} +{"s":"FRany","start":"deep","resume":"deep","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRany/deep-deep-2/chain.flow.ts\",\"rootRunId\":\"01M53EGNK9BFBWYPYJ70T7YC1W\",\"socketPath\":\"/tmp/relayflowd-19dec5bc3716.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A"],"letterDup":false,"replay":false,"ok":false,"ms":1192} +{"s":"FRany","start":"deep","resume":"deep","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRany/deep-deep-0/chain.flow.ts\",\"rootRunId\":\"01M53EGNKNB2MXG98KXMEZZCW7\",\"socketPath\":\"/tmp/relayflowd-3bf93246f4b6.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A"],"letterDup":false,"replay":false,"ok":false,"ms":1212} +{"s":"FRany","start":"deep","resume":"deep","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRany/deep-deep-5/chain.flow.ts\",\"rootRunId\":\"01M53EGPS0SAB6HXA9K175TCGD\",\"socketPath\":\"/tmp/relayflowd-e6ead760a438.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A"],"letterDup":false,"replay":false,"ok":false,"ms":1191} +{"s":"FRany","start":"deep","resume":"deep","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRany/deep-deep-3/chain.flow.ts\",\"rootRunId\":\"01M53EGPS0B7XAP5P1QQV49H49\",\"socketPath\":\"/tmp/relayflowd-224ebe34aca3.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B"],"letterDup":false,"replay":false,"ok":false,"ms":1210} +{"s":"FRany","start":"deep","resume":"deep","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRany/deep-deep-4/chain.flow.ts\",\"rootRunId\":\"01M53EGPRD5N421GVGDX2FE7XP\",\"socketPath\":\"/tmp/relayflowd-ec2c6651b358.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B"],"letterDup":false,"replay":false,"ok":false,"ms":1211} +{"s":"FRnestrace","start":"deep","resume":"deep","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRnestrace/deep-deep-0/chain.flow.ts\",\"rootRunId\":\"01M53EGQY02QYRSZD7VQZYTDW2\",\"socketPath\":\"/tmp/relayflowd-6df53d5f9d57.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B"],"letterDup":false,"replay":false,"ok":false,"ms":1211} +{"s":"FRnestrace","start":"deep","resume":"deep","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRnestrace/deep-deep-1/chain.flow.ts\",\"rootRunId\":\"01M53EGQYE5AR8Q4RV5F0GH582\",\"socketPath\":\"/tmp/relayflowd-661c63fd891d.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 printf C"],"letterDup":false,"replay":false,"ok":false,"ms":1211} +{"s":"FRnestrace","start":"deep","resume":"deep","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRnestrace/deep-deep-2/chain.flow.ts\",\"rootRunId\":\"01M53EGQYEFSTGZZAC53KV5HJW\",\"socketPath\":\"/tmp/relayflowd-0504cc1db830.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B"],"letterDup":false,"replay":false,"ok":false,"ms":1211} +{"s":"FRnestrace","start":"deep","resume":"deep","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRnestrace/deep-deep-3/chain.flow.ts\",\"rootRunId\":\"01M53EGS4PT4F5A5RSTW99A67Z\",\"socketPath\":\"/tmp/relayflowd-64cbd01c5160.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 printf C"],"letterDup":false,"replay":false,"ok":false,"ms":1230} +{"s":"FRnestrace","start":"deep","resume":"deep","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRnestrace/deep-deep-4/chain.flow.ts\",\"rootRunId\":\"01M53EGS4MKBM98KW7D8PMEKMF\",\"socketPath\":\"/tmp/relayflowd-da7996ec77f6.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 printf C"],"letterDup":false,"replay":false,"ok":false,"ms":1230} +{"s":"FRnestrace","start":"deep","resume":"deep","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRnestrace/deep-deep-5/chain.flow.ts\",\"rootRunId\":\"01M53EGS4QVY04V4XWYHWFE565\",\"socketPath\":\"/tmp/relayflowd-e436aca29b2b.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 printf C"],"letterDup":false,"replay":false,"ok":false,"ms":1230} +{"s":"FRdefer","start":"deep","resume":"deep","i":0,"fresh":true,"code1":1,"code":1,"effects":"BA","effects1":"BA","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRdefer/deep-deep-0/chain.flow.ts\",\"rootRunId\":\"01M53EGTBXZ2F3641QTXJ91YKQ\",\"socketPath\":\"/tmp/relayflowd-50ddced0f318.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 printf c0","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1283} +{"s":"FRdefer","start":"deep","resume":"deep","i":1,"fresh":true,"code1":1,"code":1,"effects":"BA","effects1":"BA","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRdefer/deep-deep-1/chain.flow.ts\",\"rootRunId\":\"01M53EGTBXWD703WMD18JFS1Y1\",\"socketPath\":\"/tmp/relayflowd-6f1ca0cff9aa.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 printf c0"],"letterDup":false,"replay":false,"ok":false,"ms":1283} +{"s":"FRdefer","start":"deep","resume":"deep","i":2,"fresh":true,"code1":1,"code":1,"effects":"BA","effects1":"BA","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRdefer/deep-deep-2/chain.flow.ts\",\"rootRunId\":\"01M53EGTBXVPGJ6XABBV5RFKHE\",\"socketPath\":\"/tmp/relayflowd-fa9202ac5b6f.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 printf c0","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1283} +{"s":"FRdefer","start":"deep","resume":"deep","i":3,"fresh":true,"code1":1,"code":1,"effects":"BA","effects1":"BA","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRdefer/deep-deep-3/chain.flow.ts\",\"rootRunId\":\"01M53EGVKMH4RP0JCNNF3NV8BH\",\"socketPath\":\"/tmp/relayflowd-b73d69ed45c5.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 printf c0","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1270} +{"s":"FRdefer","start":"deep","resume":"deep","i":4,"fresh":true,"code1":1,"code":1,"effects":"BA","effects1":"BA","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRdefer/deep-deep-4/chain.flow.ts\",\"rootRunId\":\"01M53EGVKM7DTGKJZGSNF49EHT\",\"socketPath\":\"/tmp/relayflowd-812c906fb9da.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 printf c0","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1269} +{"s":"FRdefer","start":"deep","resume":"deep","i":5,"fresh":true,"code1":1,"code":1,"effects":"BA","effects1":"BA","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRdefer/deep-deep-5/chain.flow.ts\",\"rootRunId\":\"01M53EGVKR4DQ1W0HXRF1E9J0Y\",\"socketPath\":\"/tmp/relayflowd-779c68237585.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 printf c0"],"letterDup":false,"replay":false,"ok":false,"ms":1270} +{"s":"FRthen","start":"deep","resume":"deep","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r8prior-deep/FRthen/deep-deep-0/chain.flow.ts\",\"rootRunId\":\"01M53EGWTPC8MVQ3V5EY3MAZN1\",\"socketPath\":\"/tmp/relayflowd-93484a3fe486.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W"],"letterDup":false,"replay":false,"ok":false,"ms":862} +{"s":"FRthen","start":"deep","resume":"deep","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r8prior-deep/FRthen/deep-deep-1/chain.flow.ts\",\"rootRunId\":\"01M53EGWTPE5FYG8ZC6XH2R98M\",\"socketPath\":\"/tmp/relayflowd-54fba742b795.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W"],"letterDup":false,"replay":false,"ok":false,"ms":863} +{"s":"FRthen","start":"deep","resume":"deep","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r8prior-deep/FRthen/deep-deep-2/chain.flow.ts\",\"rootRunId\":\"01M53EGWTT79MD9S5T6WSYSKQ1\",\"socketPath\":\"/tmp/relayflowd-4e2b1b50f307.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W"],"letterDup":false,"replay":false,"ok":false,"ms":862} +{"s":"FRthen","start":"deep","resume":"deep","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r8prior-deep/FRthen/deep-deep-3/chain.flow.ts\",\"rootRunId\":\"01M53EGXM3JK0HQEYD9MX2ED71\",\"socketPath\":\"/tmp/relayflowd-63cec4a8646a.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W"],"letterDup":false,"replay":false,"ok":false,"ms":813} +{"s":"FRthen","start":"deep","resume":"deep","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r8prior-deep/FRthen/deep-deep-4/chain.flow.ts\",\"rootRunId\":\"01M53EGXM4QQ7KJFJJA32FQQJY\",\"socketPath\":\"/tmp/relayflowd-4f116afbe646.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W"],"letterDup":false,"replay":false,"ok":false,"ms":814} +{"s":"FRthen","start":"deep","resume":"deep","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r8prior-deep/FRthen/deep-deep-5/chain.flow.ts\",\"rootRunId\":\"01M53EGXNT0QH2NZ29RYSD32WE\",\"socketPath\":\"/tmp/relayflowd-b6160c62b1e7.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W"],"letterDup":false,"replay":false,"ok":false,"ms":846} +{"s":"FRsettled","start":"deep","resume":"deep","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EGYF0SB7NW7ZNGR6PTB20\",\"runId\":\"01M53EGYF0SB7NW7ZNGR6PTB20\",\"socketPath\":\"/tmp/relayflowd-acbee880187b.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; exit 3","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1955} +{"s":"FRsettled","start":"deep","resume":"deep","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EGYDFCHXT70DZSQGHCD68\",\"runId\":\"01M53EGYDFCHXT70DZSQGHCD68\",\"socketPath\":\"/tmp/relayflowd-7b3c7d2a887b.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; exit 3","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1972} +{"s":"FRsettled","start":"deep","resume":"deep","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EGYFQCCFCBGJQD0W3R4XB\",\"runId\":\"01M53EGYFQCCFCBGJQD0W3R4XB\",\"socketPath\":\"/tmp/relayflowd-89d726ba4e81.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; exit 3","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2074} +{"s":"FRsettled","start":"deep","resume":"deep","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EH0BG4QEXGW3M6DYBCWR8\",\"runId\":\"01M53EH0BG4QEXGW3M6DYBCWR8\",\"socketPath\":\"/tmp/relayflowd-66cf3cf86ede.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; exit 3","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2181} +{"s":"FRsettled","start":"deep","resume":"deep","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EH0C4QQ7P5T6SB14Y36HV\",\"runId\":\"01M53EH0C4QQ7P5T6SB14Y36HV\",\"socketPath\":\"/tmp/relayflowd-4f50ba4886f0.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; exit 3","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2307} +{"s":"FRsettled","start":"deep","resume":"deep","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EH0FF0B0YG7X377078TE9\",\"runId\":\"01M53EH0FF0B0YG7X377078TE9\",\"socketPath\":\"/tmp/relayflowd-d37000681b7c.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; exit 3","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2395} +{"s":"FRset","start":"deep","resume":"deep","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EH2G815DNX6VYGZRG0ZNZ\",\"runId\":\"01M53EH2G815DNX6VYGZRG0ZNZ\",\"socketPath\":\"/tmp/relayflowd-ab7e465cda87.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1977} +{"s":"FRset","start":"deep","resume":"deep","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EH2KZTJ6D2X3PRDRGSSNZ\",\"runId\":\"01M53EH2KZTJ6D2X3PRDRGSSNZ\",\"socketPath\":\"/tmp/relayflowd-cf5f89954f72.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1979} +{"s":"FRset","start":"deep","resume":"deep","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EH2TZQN6KS95663KKKSR0\",\"runId\":\"01M53EH2TZQN6KS95663KKKSR0\",\"socketPath\":\"/tmp/relayflowd-cebaaaee9cba.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2095} +{"s":"FRset","start":"deep","resume":"deep","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EH4D88BQ05QGFCYCFKFPX\",\"runId\":\"01M53EH4D88BQ05QGFCYCFKFPX\",\"socketPath\":\"/tmp/relayflowd-b82696b5dde7.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2158} +{"s":"FRset","start":"deep","resume":"deep","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EH4HCYKEEHXX4JNATA5FX\",\"runId\":\"01M53EH4HCYKEEHXX4JNATA5FX\",\"socketPath\":\"/tmp/relayflowd-792951618235.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2295} +{"s":"FRset","start":"deep","resume":"deep","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EH4VMAD2ZF9H52FGHN521\",\"runId\":\"01M53EH4VMAD2ZF9H52FGHN521\",\"socketPath\":\"/tmp/relayflowd-08c732bc7517.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2332} +{"s":"FRgen","start":"deep","resume":"deep","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EH6H5MJMQDKXKRBEW2RDS\",\"runId\":\"01M53EH6H5MJMQDKXKRBEW2RDS\",\"socketPath\":\"/tmp/relayflowd-8bac1749cf8c.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1926} +{"s":"FRgen","start":"deep","resume":"deep","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EH6SWJM32BA89Q3CQC7E0\",\"runId\":\"01M53EH6SWJM32BA89Q3CQC7E0\",\"socketPath\":\"/tmp/relayflowd-f38a94597433.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2021} +{"s":"FRgen","start":"deep","resume":"deep","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EH753GB0FY8J7XJBN4TEZ\",\"runId\":\"01M53EH753GB0FY8J7XJBN4TEZ\",\"socketPath\":\"/tmp/relayflowd-807c46cc4f1b.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2026} +{"s":"FRgen","start":"deep","resume":"deep","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EH8D22PXAEJ9FS5EYG8K2\",\"runId\":\"01M53EH8D22PXAEJ9FS5EYG8K2\",\"socketPath\":\"/tmp/relayflowd-b362565e2fc7.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2116} +{"s":"FRgen","start":"deep","resume":"deep","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EH8RD9AE6XND4FQ2R6SRP\",\"runId\":\"01M53EH8RD9AE6XND4FQ2R6SRP\",\"socketPath\":\"/tmp/relayflowd-4b4df3acf5d4.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2268} +{"s":"FRgen","start":"deep","resume":"deep","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EH94BM8PRCDWJX62G0TMF\",\"runId\":\"01M53EH94BM8PRCDWJX62G0TMF\",\"socketPath\":\"/tmp/relayflowd-7f50bc81b534.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2402} +{"s":"FRthenagg","start":"deep","resume":"deep","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EHAGK9E6MHNMCNYM094P9\",\"runId\":\"01M53EHAGK9E6MHNMCNYM094P9\",\"socketPath\":\"/tmp/relayflowd-f953533f2e22.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2015} +{"s":"FRthenagg","start":"deep","resume":"deep","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EHB04H0DYPSB8XV08VGJZ\",\"runId\":\"01M53EHB04H0DYPSB8XV08VGJZ\",\"socketPath\":\"/tmp/relayflowd-9dc624911837.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2012} +{"s":"FRthenagg","start":"deep","resume":"deep","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EHBGXXDN4PQB7TFWQERP7\",\"runId\":\"01M53EHBGXXDN4PQB7TFWQERP7\",\"socketPath\":\"/tmp/relayflowd-eafc42a7d3e4.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2093} +{"s":"FRthenagg","start":"deep","resume":"deep","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EHCDW6AZG9YG85QH4J13P\",\"runId\":\"01M53EHCDW6AZG9YG85QH4J13P\",\"socketPath\":\"/tmp/relayflowd-f5e0a68fc454.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2159} +{"s":"FRthenagg","start":"deep","resume":"deep","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EHCZ5PA9E48NQ20NN6HQD\",\"runId\":\"01M53EHCZ5PA9E48NQ20NN6HQD\",\"socketPath\":\"/tmp/relayflowd-a30c6cdf3a13.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2267} +{"s":"FRmicro","start":"deep","resume":"deep","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRmicro/deep-deep-0/chain.flow.ts\",\"rootRunId\":\"01M53EHEHWPM6HP6ZDM3VSKX3J\",\"socketPath\":\"/tmp/relayflowd-1188a9f4a2af.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C"],"letterDup":false,"replay":false,"ok":false,"ms":1152} +{"s":"FRthenagg","start":"deep","resume":"deep","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EHDHA2VH3QD78FETASZT4\",\"runId\":\"01M53EHDHA2VH3QD78FETASZT4\",\"socketPath\":\"/tmp/relayflowd-42d4874fdc65.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2348} +{"s":"FRmicro","start":"deep","resume":"deep","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRmicro/deep-deep-1/chain.flow.ts\",\"rootRunId\":\"01M53EHF4VPX5J108QXS0DP3PV\",\"socketPath\":\"/tmp/relayflowd-9703515befda.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B"],"letterDup":false,"replay":false,"ok":false,"ms":1130} +{"s":"FRmicro","start":"deep","resume":"deep","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRmicro/deep-deep-2/chain.flow.ts\",\"rootRunId\":\"01M53EHFP799W3ZXE2MKHPAB5Y\",\"socketPath\":\"/tmp/relayflowd-b075ab1c7ac4.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B"],"letterDup":false,"replay":false,"ok":false,"ms":1162} +{"s":"FRmicro","start":"deep","resume":"deep","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRmicro/deep-deep-3/chain.flow.ts\",\"rootRunId\":\"01M53EHFSS8MJ1PS11E1K1720C\",\"socketPath\":\"/tmp/relayflowd-1729d9ad1937.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B"],"letterDup":false,"replay":false,"ok":false,"ms":1122} +{"s":"FRmicro","start":"deep","resume":"deep","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRmicro/deep-deep-4/chain.flow.ts\",\"rootRunId\":\"01M53EHG845W8CP1YYMSM3PE0K\",\"socketPath\":\"/tmp/relayflowd-6efe285ae199.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C"],"letterDup":false,"replay":false,"ok":false,"ms":1140} +{"s":"FRmicro","start":"deep","resume":"deep","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRmicro/deep-deep-5/chain.flow.ts\",\"rootRunId\":\"01M53EHGT0HENPXFMBZK170ZVR\",\"socketPath\":\"/tmp/relayflowd-8b4f990db860.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C"],"letterDup":false,"replay":false,"ok":false,"ms":1146} +{"s":"FRcatch","start":"deep","resume":"deep","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRcatch/deep-deep-0/chain.flow.ts\",\"rootRunId\":\"01M53EHGX7824146H5WD63TWR8\",\"socketPath\":\"/tmp/relayflowd-f6327bb5c0f0.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.1; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.3; printf B"],"letterDup":false,"replay":false,"ok":false,"ms":1127} +{"s":"FRcatch","start":"deep","resume":"deep","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRcatch/deep-deep-1/chain.flow.ts\",\"rootRunId\":\"01M53EHHC7K4BDAQ9WV8QRC0Y3\",\"socketPath\":\"/tmp/relayflowd-24ad3d4e7f10.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.3; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.1; printf A"],"letterDup":false,"replay":false,"ok":false,"ms":1164} +{"s":"FRcatch","start":"deep","resume":"deep","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRcatch/deep-deep-2/chain.flow.ts\",\"rootRunId\":\"01M53EHHXP4KMB5GV5M9145KRE\",\"socketPath\":\"/tmp/relayflowd-dd1ca89f2583.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.1; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.3; printf B"],"letterDup":false,"replay":false,"ok":false,"ms":1125} +{"s":"FRcatch","start":"deep","resume":"deep","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRcatch/deep-deep-3/chain.flow.ts\",\"rootRunId\":\"01M53EHJ0G5GYG250CTX8XN5W3\",\"socketPath\":\"/tmp/relayflowd-f9b40e8aa3bb.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.1; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.3; printf B"],"letterDup":false,"replay":false,"ok":false,"ms":1128} +{"s":"FRcatch","start":"deep","resume":"deep","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRcatch/deep-deep-4/chain.flow.ts\",\"rootRunId\":\"01M53EHJGJQ1F6P6N6AT57S656\",\"socketPath\":\"/tmp/relayflowd-5b2a84ed2d52.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.1; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.3; printf B"],"letterDup":false,"replay":false,"ok":false,"ms":1144} +{"s":"FRcatch","start":"deep","resume":"deep","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r8prior-deep/FRcatch/deep-deep-5/chain.flow.ts\",\"rootRunId\":\"01M53EHK1308QE0QFZSV8JJBVS\",\"socketPath\":\"/tmp/relayflowd-1083986b7305.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.3; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.1; printf A"],"letterDup":false,"replay":false,"ok":false,"ms":1139} +{"s":"FRfinally","start":"deep","resume":"deep","i":0,"fresh":false,"code1":"killed","effects1":"FX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EHK40Y828VHX1439E0583\",\"runId\":\"01M53EHK40Y828VHX1439E0583\",\"socketPath\":\"/tmp/relayflowd-e23048de37ee.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"FXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf F >> effects","run-after-905b4c76d9cd97ff237f742cdf9e2aae10be1283518b918b370ce2ee309cc1ea-1 c=1 printf X >> effects","run-after-94aefc6dfaf31ee9ec7322caea3cc6769c99a4f79793976e95d590235ae799ed-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1947} +{"s":"FRfinally","start":"deep","resume":"deep","i":1,"fresh":false,"code1":"killed","effects1":"FX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EHKMANA3VQ8KYV52A7XE8\",\"runId\":\"01M53EHKMANA3VQ8KYV52A7XE8\",\"socketPath\":\"/tmp/relayflowd-51b098dd6a81.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"FXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf F >> effects","run-after-905b4c76d9cd97ff237f742cdf9e2aae10be1283518b918b370ce2ee309cc1ea-1 c=1 printf X >> effects","run-after-94aefc6dfaf31ee9ec7322caea3cc6769c99a4f79793976e95d590235ae799ed-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2103} +{"s":"FRfinally","start":"deep","resume":"deep","i":2,"fresh":false,"code1":"killed","effects1":"FX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EHM4G39BCHQSNG02XF37Y\",\"runId\":\"01M53EHM4G39BCHQSNG02XF37Y\",\"socketPath\":\"/tmp/relayflowd-e810d3a34eb1.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"FXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf F >> effects","run-after-905b4c76d9cd97ff237f742cdf9e2aae10be1283518b918b370ce2ee309cc1ea-1 c=1 printf X >> effects","run-after-94aefc6dfaf31ee9ec7322caea3cc6769c99a4f79793976e95d590235ae799ed-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2102} +{"s":"FRfinally","start":"deep","resume":"deep","i":3,"fresh":false,"code1":"killed","effects1":"FX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EHN2A75SJEFACZ4904SEZ\",\"runId\":\"01M53EHN2A75SJEFACZ4904SEZ\",\"socketPath\":\"/tmp/relayflowd-bad4a62b7ccd.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"FXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf F >> effects","run-after-905b4c76d9cd97ff237f742cdf9e2aae10be1283518b918b370ce2ee309cc1ea-1 c=1 printf X >> effects","run-after-94aefc6dfaf31ee9ec7322caea3cc6769c99a4f79793976e95d590235ae799ed-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2171} +{"s":"FRfinally","start":"deep","resume":"deep","i":4,"fresh":false,"code1":"killed","effects1":"FX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EHNNSX1R4VKRN2K694RBH\",\"runId\":\"01M53EHNNSX1R4VKRN2K694RBH\",\"socketPath\":\"/tmp/relayflowd-ca3f67a655ca.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"FXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf F >> effects","run-after-905b4c76d9cd97ff237f742cdf9e2aae10be1283518b918b370ce2ee309cc1ea-1 c=1 printf X >> effects","run-after-94aefc6dfaf31ee9ec7322caea3cc6769c99a4f79793976e95d590235ae799ed-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2237} +{"s":"FRfinally","start":"deep","resume":"deep","i":5,"fresh":false,"code1":"killed","effects1":"FX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EHP5PNGYKC8E1AF04ZSS4\",\"runId\":\"01M53EHP5PNGYKC8E1AF04ZSS4\",\"socketPath\":\"/tmp/relayflowd-ca44e1053c93.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"FXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf F >> effects","run-after-905b4c76d9cd97ff237f742cdf9e2aae10be1283518b918b370ce2ee309cc1ea-1 c=1 printf X >> effects","run-after-94aefc6dfaf31ee9ec7322caea3cc6769c99a4f79793976e95d590235ae799ed-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2350} +{"s":"FRiter","start":"deep","resume":"deep","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EHQ580XFH7BTV1EAFQQSA\",\"runId\":\"01M53EHQ580XFH7BTV1EAFQQSA\",\"socketPath\":\"/tmp/relayflowd-e93d836d69de.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 printf X >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2027} +{"s":"FRiter","start":"deep","resume":"deep","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EHQVY9Z1GJNW8P82C0P8F\",\"runId\":\"01M53EHQVY9Z1GJNW8P82C0P8F\",\"socketPath\":\"/tmp/relayflowd-b49140cecf7e.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 printf X >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2083} +{"s":"FRiter","start":"deep","resume":"deep","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EHRF9ZYM77P30ZX5K78KD\",\"runId\":\"01M53EHRF9ZYM77P30ZX5K78KD\",\"socketPath\":\"/tmp/relayflowd-0ddd9341e2c2.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 printf X >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2101} +{"s":"FRiter","start":"deep","resume":"deep","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EHS3F7XWMHRQX3KC5SR3X\",\"runId\":\"01M53EHS3F7XWMHRQX3KC5SR3X\",\"socketPath\":\"/tmp/relayflowd-16dfa8828712.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 printf X >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2173} +{"s":"FRwrap","start":"deep","resume":"deep","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: PW is not defined\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: PW is not defined\"}],\"path\":\"/w/runs/r8prior-deep/FRwrap/deep-deep-0/chain.flow.ts\",\"rootRunId\":\"01M53EHV85NA54CGQ4SX41VV2B\",\"socketPath\":\"/tmp/relayflowd-ba79f2fbe192.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W"],"letterDup":false,"replay":false,"ok":false,"ms":800} +{"s":"FRiter","start":"deep","resume":"deep","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EHSW530GSZD4FZXHTJSA1\",\"runId\":\"01M53EHSW530GSZD4FZXHTJSA1\",\"socketPath\":\"/tmp/relayflowd-5199046868cc.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 printf X >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2300} +{"s":"FRwrap","start":"deep","resume":"deep","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: PW is not defined\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: PW is not defined\"}],\"path\":\"/w/runs/r8prior-deep/FRwrap/deep-deep-1/chain.flow.ts\",\"rootRunId\":\"01M53EHW20WJT26W0JJ0XK5TKZ\",\"socketPath\":\"/tmp/relayflowd-b0ba2b55f651.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W"],"letterDup":false,"replay":false,"ok":false,"ms":849} +{"s":"FRwrap","start":"deep","resume":"deep","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: PW is not defined\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: PW is not defined\"}],\"path\":\"/w/runs/r8prior-deep/FRwrap/deep-deep-2/chain.flow.ts\",\"rootRunId\":\"01M53EHW4MWSCY7NGJRSHHNCKH\",\"socketPath\":\"/tmp/relayflowd-02014fadc497.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W"],"letterDup":false,"replay":false,"ok":false,"ms":800} +{"s":"FRiter","start":"deep","resume":"deep","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EHTGVGZWCK5SVSB3PT0W0\",\"runId\":\"01M53EHTGVGZWCK5SVSB3PT0W0\",\"socketPath\":\"/tmp/relayflowd-e23bb1270d53.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 printf X >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2461} +{"s":"FRwrap","start":"deep","resume":"deep","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: PW is not defined\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: PW is not defined\"}],\"path\":\"/w/runs/r8prior-deep/FRwrap/deep-deep-3/chain.flow.ts\",\"rootRunId\":\"01M53EHWW8VSAKB5WJ480C2521\",\"socketPath\":\"/tmp/relayflowd-1304a2ca44c4.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W"],"letterDup":false,"replay":false,"ok":false,"ms":826} +{"s":"FRwrap","start":"deep","resume":"deep","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: PW is not defined\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: PW is not defined\"}],\"path\":\"/w/runs/r8prior-deep/FRwrap/deep-deep-4/chain.flow.ts\",\"rootRunId\":\"01M53EHWY851N3HG2RA2M776ZE\",\"socketPath\":\"/tmp/relayflowd-fb542b764fba.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W"],"letterDup":false,"replay":false,"ok":false,"ms":812} +{"s":"FRwrap","start":"deep","resume":"deep","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: PW is not defined\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: PW is not defined\"}],\"path\":\"/w/runs/r8prior-deep/FRwrap/deep-deep-5/chain.flow.ts\",\"rootRunId\":\"01M53EHWYQEYBWEM3XPFJJC2XW\",\"socketPath\":\"/tmp/relayflowd-afc6d4f0bb13.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W"],"letterDup":false,"replay":false,"ok":false,"ms":821} +SUMMARY FRrace deep>deep ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRany deep>deep ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRnestrace deep>deep ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRdefer deep>deep ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects=BA +SUMMARY FRthen deep>deep ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRsettled deep>deep ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=XZ +SUMMARY FRset deep>deep ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=XZ +SUMMARY FRgen deep>deep ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=XZ +SUMMARY FRthenagg deep>deep ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=XZ +SUMMARY FRmicro deep>deep ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRcatch deep>deep ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRfinally deep>deep ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=FXZ +SUMMARY FRiter deep>deep ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=XZ +SUMMARY FRwrap deep>deep ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= diff --git a/evidence/native-parallel-review8/h7-prior-e.log b/evidence/native-parallel-review8/h7-prior-e.log new file mode 100644 index 000000000..87d70e74a --- /dev/null +++ b/evidence/native-parallel-review8/h7-prior-e.log @@ -0,0 +1,42 @@ +{"s":"E1factory","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBT1DXRFM84MC3GJN0V2A\",\"runId\":\"01M53EBT1DXRFM84MC3GJN0V2A\",\"socketPath\":\"/tmp/relayflowd-4207f87ee3f1.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2508} +{"s":"E1factory","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBT1DDWB29HAKRGP7F9BZ\",\"runId\":\"01M53EBT1DDWB29HAKRGP7F9BZ\",\"socketPath\":\"/tmp/relayflowd-8cd683392cbd.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2584} +{"s":"E1factory","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBT1DQXG25TNP523KQG1J\",\"runId\":\"01M53EBT1DQXG25TNP523KQG1J\",\"socketPath\":\"/tmp/relayflowd-12541f06bf7c.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2626} +{"s":"E1factory","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBWARZ0RM5T4JKGCFH1A9\",\"runId\":\"01M53EBWARZ0RM5T4JKGCFH1A9\",\"socketPath\":\"/tmp/relayflowd-b2e228a9bcc9.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2479} +{"s":"E1factory","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBWCXBRQE9XCP4DB6Z51Q\",\"runId\":\"01M53EBWCXBRQE9XCP4DB6Z51Q\",\"socketPath\":\"/tmp/relayflowd-de3721acaa8c.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2513} +{"s":"E1factory","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBWE84F0XKGWRSPACNYZ6\",\"runId\":\"01M53EBWE84F0XKGWRSPACNYZ6\",\"socketPath\":\"/tmp/relayflowd-bac7cbf42f7a.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2595} +{"s":"E2helper","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"ba","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBYS3GBBX0TVDGKBX4HT8\",\"runId\":\"01M53EBYS3GBBX0TVDGKBX4HT8\",\"socketPath\":\"/tmp/relayflowd-719c48d49f1e.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 printf b >> effects","run-4 c=1 printf a >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1989} +{"s":"E2helper","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"ba","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBYVZDPPRC33DD3KHQ9RH\",\"runId\":\"01M53EBYVZDPPRC33DD3KHQ9RH\",\"socketPath\":\"/tmp/relayflowd-e7242f019175.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 printf b >> effects","run-4 c=1 printf a >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2024} +{"s":"E2helper","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"ba","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBYZPYZT9Z1PEBKG818VJ\",\"runId\":\"01M53EBYZPYZT9Z1PEBKG818VJ\",\"socketPath\":\"/tmp/relayflowd-4e2993d189ab.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 printf b >> effects","run-4 c=1 printf a >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2083} +{"s":"E2helper","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"ba","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EC0MJARNJZ1FP3G1TDNZK\",\"runId\":\"01M53EC0MJARNJZ1FP3G1TDNZK\",\"socketPath\":\"/tmp/relayflowd-15a1cde2c4fc.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 printf b >> effects","run-4 c=1 printf a >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2116} +{"s":"E2helper","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"ba","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EC0SCHW4G6Y5269D385C5\",\"runId\":\"01M53EC0SCHW4G6Y5269D385C5\",\"socketPath\":\"/tmp/relayflowd-ff451826267d.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 printf b >> effects","run-4 c=1 printf a >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2214} +{"s":"E2helper","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"ba","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EC10105VSVNX6BVZKS9N1\",\"runId\":\"01M53EC10105VSVNX6BVZKS9N1\",\"socketPath\":\"/tmp/relayflowd-0263d70501ee.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 printf b >> effects","run-4 c=1 printf a >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2334} +{"s":"E3dyn","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EC2QDCY5D9ZX8MKBM516C\",\"runId\":\"01M53EC2QDCY5D9ZX8MKBM516C\",\"socketPath\":\"/tmp/relayflowd-cbacbf84b929.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 printf a >> effects","run-4 c=1 printf b >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1801} +{"s":"E3dyn","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EC2ZKTS4BY048KSSBAH31\",\"runId\":\"01M53EC2ZKTS4BY048KSSBAH31\",\"socketPath\":\"/tmp/relayflowd-caad45c36200.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 printf a >> effects","run-4 c=1 printf b >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1932} +{"s":"E3dyn","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EC38KXH8499Y11CYCTSQD\",\"runId\":\"01M53EC38KXH8499Y11CYCTSQD\",\"socketPath\":\"/tmp/relayflowd-ce07692398b1.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 printf a >> effects","run-4 c=1 printf b >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1947} +{"s":"E3dyn","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EC4GFKWC2A9Y9MET8XS79\",\"runId\":\"01M53EC4GFKWC2A9Y9MET8XS79\",\"socketPath\":\"/tmp/relayflowd-38a5ac5dede6.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 printf a >> effects","run-4 c=1 printf b >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2059} +{"s":"E3dyn","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EC4VSN320B48275PK54TQ\",\"runId\":\"01M53EC4VSN320B48275PK54TQ\",\"socketPath\":\"/tmp/relayflowd-d39083477b3b.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 printf a >> effects","run-4 c=1 printf b >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2162} +{"s":"E3dyn","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EC56ATRHDBKMSRGGHBC04\",\"runId\":\"01M53EC56ATRHDBKMSRGGHBC04\",\"socketPath\":\"/tmp/relayflowd-9c42673a6106.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 printf a >> effects","run-4 c=1 printf b >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2256} +{"s":"E4json","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abc","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EC6G78FRWCFV1ZVX2FRFW\",\"runId\":\"01M53EC6G78FRWCFV1ZVX2FRFW\",\"socketPath\":\"/tmp/relayflowd-15316e43961b.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2056} +{"s":"E4json","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abc","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EC6ZBEVK0ZC5GTFSCM9AP\",\"runId\":\"01M53EC6ZBEVK0ZC5GTFSCM9AP\",\"socketPath\":\"/tmp/relayflowd-e81efea9ebb8.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2154} +{"s":"E4json","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abc","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EC7C8YEK5Z6TMYCVJ61HA\",\"runId\":\"01M53EC7C8YEK5Z6TMYCVJ61HA\",\"socketPath\":\"/tmp/relayflowd-e56ddf7bde56.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2217} +{"s":"E4json","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abc","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EC8H1TSBSVTX9MW72S3TR\",\"runId\":\"01M53EC8H1TSBSVTX9MW72S3TR\",\"socketPath\":\"/tmp/relayflowd-2419bd07bffb.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2392} +{"s":"E4json","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abc","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EC920W2DMFPVXRJ13GBZ2\",\"runId\":\"01M53EC920W2DMFPVXRJ13GBZ2\",\"socketPath\":\"/tmp/relayflowd-b37e7ea1dea2.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2418} +{"s":"E4json","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abc","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EC9HCA4V88363CDFD4AMR\",\"runId\":\"01M53EC9HCA4V88363CDFD4AMR\",\"socketPath\":\"/tmp/relayflowd-f04a4af5085e.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2530} +{"s":"E4jsonuse","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECAVG38RZ7MW47BMH6TQY\",\"runId\":\"01M53ECAVG38RZ7MW47BMH6TQY\",\"socketPath\":\"/tmp/relayflowd-b4b7bc91ffac.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 printf a >> effects","run-4 c=1 printf b >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1827} +{"s":"E4jsonuse","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECBDN105N6VH1X0CNWYXH\",\"runId\":\"01M53ECBDN105N6VH1X0CNWYXH\",\"socketPath\":\"/tmp/relayflowd-79451e8ffdf3.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 printf a >> effects","run-4 c=1 printf b >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1863} +{"s":"E4jsonuse","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECC0S6BS5WSYAW2VXNGQ2\",\"runId\":\"01M53ECC0S6BS5WSYAW2VXNGQ2\",\"socketPath\":\"/tmp/relayflowd-818c4db781d5.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 printf a >> effects","run-4 c=1 printf b >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1946} +{"s":"E4jsonuse","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECCMNM2XJ12MR9EKKBAZJ\",\"runId\":\"01M53ECCMNM2XJ12MR9EKKBAZJ\",\"socketPath\":\"/tmp/relayflowd-460832c0fd30.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 printf a >> effects","run-4 c=1 printf b >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2009} +{"s":"E4jsonuse","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECD81B12KMCT8PNQ0PNY4\",\"runId\":\"01M53ECD81B12KMCT8PNQ0PNY4\",\"socketPath\":\"/tmp/relayflowd-7da3f5227fed.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 printf a >> effects","run-4 c=1 printf b >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2131} +{"s":"E4jsonuse","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECDXCJYJF6BRDFZH4X6JY\",\"runId\":\"01M53ECDXCJYJF6BRDFZH4X6JY\",\"socketPath\":\"/tmp/relayflowd-a4eb7bd49379.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 printf a >> effects","run-4 c=1 printf b >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2288} +{"s":"E5ns","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECEK5MHG8WJX80NTZYAJ7\",\"runId\":\"01M53ECEK5MHG8WJX80NTZYAJ7\",\"socketPath\":\"/tmp/relayflowd-d42d1053f0af.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2123} +{"s":"E5ns","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECFB0YMHSPHAJ6PWT76VH\",\"runId\":\"01M53ECFB0YMHSPHAJ6PWT76VH\",\"socketPath\":\"/tmp/relayflowd-7f8815207905.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2187} +{"s":"E5ns","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECG4NGDMQYF3NAMEZESSF\",\"runId\":\"01M53ECG4NGDMQYF3NAMEZESSF\",\"socketPath\":\"/tmp/relayflowd-68395168f554.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2239} +{"s":"E5ns","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECGNRDAYETXVY8P7XJ8SN\",\"runId\":\"01M53ECGNRDAYETXVY8P7XJ8SN\",\"socketPath\":\"/tmp/relayflowd-66e65a4b5b76.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2320} +{"s":"E5ns","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECHFHEGBQ16ZXR5V3F7Q6\",\"runId\":\"01M53ECHFHEGBQ16ZXR5V3F7Q6\",\"socketPath\":\"/tmp/relayflowd-1e12d8fbc8e2.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2484} +{"s":"E5ns","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECJAW0RFFFP7N5Y0ZERAY\",\"runId\":\"01M53ECJAW0RFFFP7N5Y0ZERAY\",\"socketPath\":\"/tmp/relayflowd-4dbea96fbb31.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2598} +SUMMARY E1factory head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY E2helper head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=baZ +SUMMARY E3dyn head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abZ +SUMMARY E4json head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcZ +SUMMARY E4jsonuse head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abZ +SUMMARY E5ns head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ diff --git a/evidence/native-parallel-review8/h7-prior-fb.log b/evidence/native-parallel-review8/h7-prior-fb.log new file mode 100644 index 000000000..cc5a95201 --- /dev/null +++ b/evidence/native-parallel-review8/h7-prior-fb.log @@ -0,0 +1,56 @@ +{"s":"FB1","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB1/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EJ3CM22K52VE8M0QKXM5X\",\"socketPath\":\"/tmp/relayflowd-3da977523269.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"calls":0,"ok":true,"ms":672} +{"s":"FB1","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB1/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EJ3CNC9JNSADC6T8BEYMB\",\"socketPath\":\"/tmp/relayflowd-3c260755b6eb.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"calls":0,"ok":true,"ms":672} +{"s":"FB1","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB1/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EJ3CD181RYS6S0RS77TPH\",\"socketPath\":\"/tmp/relayflowd-dc81b4731bd9.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"calls":0,"ok":true,"ms":672} +{"s":"FB1","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB1/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EJ3Y5P66Q1RXQX9Z7JA6R\",\"socketPath\":\"/tmp/relayflowd-5b6c23a9115d.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"calls":0,"ok":true,"ms":552} +{"s":"FB1","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB1/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EJ3ZWWB465G3ZHGTGP0XN\",\"socketPath\":\"/tmp/relayflowd-40a027ad826d.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"calls":0,"ok":true,"ms":617} +{"s":"FB1","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB1/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EJ4002121D3QE7ASTSW9R\",\"socketPath\":\"/tmp/relayflowd-7f217e0d943f.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"calls":0,"ok":true,"ms":617} +{"s":"FB2","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB2/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EJ4G73XVB7E0CRZKYWTFF\",\"socketPath\":\"/tmp/relayflowd-aa4d5ad93e68.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":574} +{"s":"FB2","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB2/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EJ4JVXCD8NK4P0K74B6GN\",\"socketPath\":\"/tmp/relayflowd-64183bd46b30.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":607} +{"s":"FB2","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB2/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EJ4JNPFGS3C39J331GSG9\",\"socketPath\":\"/tmp/relayflowd-7d758e2b5ecc.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":607} +{"s":"FB2","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB2/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EJ52Q3311JB17P1AWTV44\",\"socketPath\":\"/tmp/relayflowd-678995e3516d.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":593} +{"s":"FB2","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB2/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EJ55ZDR0VB7FSYREW5TT9\",\"socketPath\":\"/tmp/relayflowd-301df3b3ecd9.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":611} +{"s":"FB2","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB2/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EJ56AE4DGKGJSWRT4K78B\",\"socketPath\":\"/tmp/relayflowd-8adcd5068c47.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":625} +{"s":"FB3","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB3/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EJ5NMDH6X3TRFECNKV5ME\",\"socketPath\":\"/tmp/relayflowd-7c6f862df646.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":606} +{"s":"FB3","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB3/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EJ5RZ8B7M0871YCM8J30G\",\"socketPath\":\"/tmp/relayflowd-4142545e0043.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":620} +{"s":"FB3","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB3/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EJ5SEEY5K7H0BHEH8C61N\",\"socketPath\":\"/tmp/relayflowd-623f31df11ee.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":605} +{"s":"FB3","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB3/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EJ68DQKE0CM5EDV1STK4Z\",\"socketPath\":\"/tmp/relayflowd-c8596f2308fc.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":603} +{"s":"FB3","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB3/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EJ6CE8R4YHJ6XXAWTY4Z7\",\"socketPath\":\"/tmp/relayflowd-76d11f014a3c.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":638} +{"s":"FB3","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB3/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EJ6CCW0452V04NKTV3EC4\",\"socketPath\":\"/tmp/relayflowd-c43d9d7de21a.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":638} +{"s":"FB3c","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB3c/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EJ6W19KYRSJ9Y5AB4Y1TP\",\"socketPath\":\"/tmp/relayflowd-753ce469c15f.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":646} +{"s":"FB3c","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB3c/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EJ7063V97W1ZN6NM051S5\",\"socketPath\":\"/tmp/relayflowd-68cd45802c75.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":621} +{"s":"FB3c","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB3c/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EJ705XDCXMWQ0CP00FDP2\",\"socketPath\":\"/tmp/relayflowd-f7056391fb5e.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":622} +{"s":"FB3c","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB3c/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EJ7G98D7ARMVD5X96EZY3\",\"socketPath\":\"/tmp/relayflowd-ca31b1cbc3ae.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":659} +{"s":"FB3c","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB3c/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EJ7NN57JZ49YAWF41Z6Q5\",\"socketPath\":\"/tmp/relayflowd-b010002dd8ed.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":668} +{"s":"FB3c","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB3c/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EJ7MZMPWXWX7TWDR8CPWN\",\"socketPath\":\"/tmp/relayflowd-abc4825d5dbc.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":668} +{"s":"FB4","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB4/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EJ85ZF540C3DDDG7FVVJW\",\"socketPath\":\"/tmp/relayflowd-144127a11435.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":667} +{"s":"FB4","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB4/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EJ8B4X35CMWP268QVABWC\",\"socketPath\":\"/tmp/relayflowd-3c16c81fd77f.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":703} +{"s":"FB4","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB4/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EJ8B3B1TREZ50M675KETZ\",\"socketPath\":\"/tmp/relayflowd-cad94e021834.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":704} +{"s":"FB4","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB4/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EJ8W0FNQWNTBKPWXP334P\",\"socketPath\":\"/tmp/relayflowd-4725601564a3.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":704} +{"s":"FB4","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB4/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EJ90V34Z34A8523VDTSZQ\",\"socketPath\":\"/tmp/relayflowd-9366736a7dca.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":669} +{"s":"FB4","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB4/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EJ91CQZ0C6JBNTC2WAVNE\",\"socketPath\":\"/tmp/relayflowd-7018de20b102.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":700} +{"s":"FB6","start":"forced","resume":"forced","i":0,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EJ9JE56EXM8HMX4P3DEPV\",\"runId\":\"01M53EJ9JE56EXM8HMX4P3DEPV\",\"socketPath\":\"/tmp/relayflowd-5aa344db661f.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf B","run-1 c=1 sleep 0.4; printf A","run-3 c=1 sleep 0.2; printf C","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2028} +{"s":"FB6","start":"forced","resume":"forced","i":1,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EJ9Q0HDRFMF710SS1QX1M\",\"runId\":\"01M53EJ9Q0HDRFMF710SS1QX1M\",\"socketPath\":\"/tmp/relayflowd-c83ee11e5cb4.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2057} +{"s":"FB6","start":"forced","resume":"forced","i":2,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EJ9QNR08FSM6QYZ4SFVFD\",\"runId\":\"01M53EJ9QNR08FSM6QYZ4SFVFD\",\"socketPath\":\"/tmp/relayflowd-d59751f118c3.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-1 c=1 sleep 0.4; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2128} +{"s":"FB6","start":"forced","resume":"forced","i":3,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EJBEZ0WGWAVTR0YS071F2\",\"runId\":\"01M53EJBEZ0WGWAVTR0YS071F2\",\"socketPath\":\"/tmp/relayflowd-e9f489771fb5.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-3 c=1 sleep 0.2; printf C","run-2 c=1 printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2141} +{"s":"FB6","start":"forced","resume":"forced","i":4,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EJBM1KG65RWHZHXHYBK72\",\"runId\":\"01M53EJBM1KG65RWHZHXHYBK72\",\"socketPath\":\"/tmp/relayflowd-da27e866eb30.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf B","run-1 c=1 sleep 0.4; printf A","run-3 c=1 sleep 0.2; printf C","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2242} +{"s":"FB6","start":"forced","resume":"forced","i":5,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EJBQ1YYFSWX25X85166W9\",\"runId\":\"01M53EJBQ1YYFSWX25X85166W9\",\"socketPath\":\"/tmp/relayflowd-8a59ac25b5b3.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.2; printf C","run-2 c=1 printf B","run-1 c=1 sleep 0.4; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2337} +{"s":"FB7","start":"forced","resume":"forced","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EJDJ66N7J6FV6QY9H4H5W\",\"runId\":\"01M53EJDJ66N7J6FV6QY9H4H5W\",\"socketPath\":\"/tmp/relayflowd-ac204e8a97d0.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf B","run-1 c=1 sleep 0.5; printf A","run-3 c=1 sleep 0.1; printf C","run-after-f2f25a43d095012b1401192411775ae0d83e26fd7aabb6add8b49db34db7d765-1 c=1 printf X >> effects","run-after-b99aafbc3f01763b118691e219a345ce36c250fb2c15f7a43b4b33c4473aaeeb-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2030} +{"s":"FB7","start":"forced","resume":"forced","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EJDTYYNPMSZDXTQ3WYFKM\",\"runId\":\"01M53EJDTYYNPMSZDXTQ3WYFKM\",\"socketPath\":\"/tmp/relayflowd-583de8aa55c6.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-1 c=1 sleep 0.5; printf A","run-after-f2f25a43d095012b1401192411775ae0d83e26fd7aabb6add8b49db34db7d765-1 c=1 printf X >> effects","run-after-b99aafbc3f01763b118691e219a345ce36c250fb2c15f7a43b4b33c4473aaeeb-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2070} +{"s":"FB7","start":"forced","resume":"forced","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EJE16AHTB8SMZKX19BFN8\",\"runId\":\"01M53EJE16AHTB8SMZKX19BFN8\",\"socketPath\":\"/tmp/relayflowd-86ece0f025df.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf B","run-1 c=1 sleep 0.5; printf A","run-3 c=1 sleep 0.1; printf C","run-after-f2f25a43d095012b1401192411775ae0d83e26fd7aabb6add8b49db34db7d765-1 c=1 printf X >> effects","run-after-b99aafbc3f01763b118691e219a345ce36c250fb2c15f7a43b4b33c4473aaeeb-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2116} +{"s":"FB7","start":"forced","resume":"forced","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EJFGWF9VNRT5ZPMHKZAWR\",\"runId\":\"01M53EJFGWF9VNRT5ZPMHKZAWR\",\"socketPath\":\"/tmp/relayflowd-868db2f529e9.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf C","run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-after-f2f25a43d095012b1401192411775ae0d83e26fd7aabb6add8b49db34db7d765-1 c=1 printf X >> effects","run-after-b99aafbc3f01763b118691e219a345ce36c250fb2c15f7a43b4b33c4473aaeeb-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2197} +{"s":"FB7","start":"forced","resume":"forced","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EJFTHS4V0QCY5VWQH9KFP\",\"runId\":\"01M53EJFTHS4V0QCY5VWQH9KFP\",\"socketPath\":\"/tmp/relayflowd-fb46ea28f209.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-3 c=1 sleep 0.1; printf C","run-2 c=1 printf B","run-after-f2f25a43d095012b1401192411775ae0d83e26fd7aabb6add8b49db34db7d765-1 c=1 printf X >> effects","run-after-b99aafbc3f01763b118691e219a345ce36c250fb2c15f7a43b4b33c4473aaeeb-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2299} +{"s":"FB8","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB8/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EJHNA4JXW2TSG1RG344MW\",\"socketPath\":\"/tmp/relayflowd-dd382c207e9e.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":608} +{"s":"FB7","start":"forced","resume":"forced","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EJG2CBC784SZJ06YXYFBS\",\"runId\":\"01M53EJG2CBC784SZJ06YXYFBS\",\"socketPath\":\"/tmp/relayflowd-64f78374acf1.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf C","run-2 c=1 printf B","run-1 c=1 sleep 0.5; printf A","run-after-f2f25a43d095012b1401192411775ae0d83e26fd7aabb6add8b49db34db7d765-1 c=1 printf X >> effects","run-after-b99aafbc3f01763b118691e219a345ce36c250fb2c15f7a43b4b33c4473aaeeb-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2399} +{"s":"FB8","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB8/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EJJ3DZX5ETCNSAHJSQQ0W\",\"socketPath\":\"/tmp/relayflowd-ad071bc8d190.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":633} +{"s":"FB8","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB8/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EJJ90FBMJXQG8WP39J0X9\",\"socketPath\":\"/tmp/relayflowd-2d57db1e49ab.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":630} +{"s":"FB8","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB8/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EJJDGM08SY79D0HXCBBH4\",\"socketPath\":\"/tmp/relayflowd-49f365506645.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":627} +{"s":"FB8","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB8/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EJJPHRFJ5DCN1RNGKEY3G\",\"socketPath\":\"/tmp/relayflowd-ef46e13ed523.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":601} +{"s":"FB8","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fb/FB8/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EJJVZYDRDMNRSAGQF88VZ\",\"socketPath\":\"/tmp/relayflowd-bbd8218eb95d.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":true,"ms":590} +SUMMARY FB1 forced>forced ok=6/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FB2 forced>forced ok=6/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FB3 forced>forced ok=6/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FB3c forced>forced ok=6/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FB4 forced>forced ok=6/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FB6 forced>forced ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=bcaZ +SUMMARY FB7 forced>forced ok=0/6 replay=0 fresh=0 mode=parallel codes=0 effects=XZ +SUMMARY FB8 forced>forced ok=6/6 replay=0 fresh=6 mode=parallel codes=1 effects= diff --git a/evidence/native-parallel-review8/h7-prior-fr.log b/evidence/native-parallel-review8/h7-prior-fr.log new file mode 100644 index 000000000..d46eec30f --- /dev/null +++ b/evidence/native-parallel-review8/h7-prior-fr.log @@ -0,0 +1,98 @@ +{"s":"FRrace","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRrace/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EFRCRD544DF4SZKJ28F8P\",\"socketPath\":\"/tmp/relayflowd-ef8f6dfef369.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":721} +{"s":"FRrace","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRrace/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EFRCXD76406KTYSP8CCG6\",\"socketPath\":\"/tmp/relayflowd-71496bcf93e3.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":740} +{"s":"FRrace","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRrace/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EFRCXM69BYC64HK18SEBF\",\"socketPath\":\"/tmp/relayflowd-1769ac7ddd94.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":739} +{"s":"FRrace","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRrace/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EFS12BTK54CHWQGCP10A4\",\"socketPath\":\"/tmp/relayflowd-072a95418fd1.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":650} +{"s":"FRrace","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRrace/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EFS1R27QRNF3XP8PW3N46\",\"socketPath\":\"/tmp/relayflowd-794f24d976d1.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":669} +{"s":"FRrace","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRrace/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EFS21ZENAVJ3NGJ38CYHK\",\"socketPath\":\"/tmp/relayflowd-482eac1d5aab.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":668} +{"s":"FRany","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRany/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EFSNWJXEDXZYKQKES2TCQ\",\"socketPath\":\"/tmp/relayflowd-c0d7908c6672.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":656} +{"s":"FRany","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRany/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EFSPPX8730382RHRHJEQ5\",\"socketPath\":\"/tmp/relayflowd-d24db9a60679.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":655} +{"s":"FRany","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRany/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EFSQ09HHJB9B4JR7DFAVE\",\"socketPath\":\"/tmp/relayflowd-2bed2c8a9a2b.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":670} +{"s":"FRany","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRany/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EFT9STVPGBWCEYC4CTM2J\",\"socketPath\":\"/tmp/relayflowd-a7ea5ecdb24f.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":606} +{"s":"FRany","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRany/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EFT92MP3WRNESR04DTEM7\",\"socketPath\":\"/tmp/relayflowd-708e134595a7.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":640} +{"s":"FRany","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRany/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EFTA1X2GRRECYKN617NFW\",\"socketPath\":\"/tmp/relayflowd-99508ed8ed37.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":605} +{"s":"FRnestrace","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRnestrace/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EFTWW2YMS4MT9N1Q1S31K\",\"socketPath\":\"/tmp/relayflowd-41ea13453524.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":622} +{"s":"FRnestrace","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRnestrace/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EFTWXT0EPTSD5GQT9M3FS\",\"socketPath\":\"/tmp/relayflowd-0c6f5fb00083.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":622} +{"s":"FRnestrace","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRnestrace/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EFTX5VNJMGCTQK1KPMDZ5\",\"socketPath\":\"/tmp/relayflowd-e81e45d8b269.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":622} +{"s":"FRnestrace","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRnestrace/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EFVGSFKD1RQ10JGV5S1NK\",\"socketPath\":\"/tmp/relayflowd-bf38c24b88f2.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":644} +{"s":"FRnestrace","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRnestrace/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EFVGZ1NCNQT9V6GTYDT49\",\"socketPath\":\"/tmp/relayflowd-5bd07f982b22.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":628} +{"s":"FRnestrace","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRnestrace/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EFVGS898Q3H5639TZRXFJ\",\"socketPath\":\"/tmp/relayflowd-1e2501a1475b.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":645} +{"s":"FRdefer","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRdefer/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EFW4NPBRTZ6Q7BTS2A19Y\",\"socketPath\":\"/tmp/relayflowd-80a38ffadc87.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":624} +{"s":"FRdefer","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRdefer/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EFW4NP1J2P821X71MMRC8\",\"socketPath\":\"/tmp/relayflowd-7df521220dff.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":627} +{"s":"FRdefer","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRdefer/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EFW4NH12H4KW32M0DFH2B\",\"socketPath\":\"/tmp/relayflowd-d3fb8f01a295.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":627} +{"s":"FRdefer","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRdefer/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EFWQZDT25B7M794JMT998\",\"socketPath\":\"/tmp/relayflowd-3348be4c8844.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":621} +{"s":"FRdefer","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRdefer/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EFWRC9SR4V65WNB9H1WCV\",\"socketPath\":\"/tmp/relayflowd-32afaffe8c6c.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":639} +{"s":"FRdefer","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRdefer/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EFWR96R5N6P7PQWYQ75BH\",\"socketPath\":\"/tmp/relayflowd-2bf5cda594a3.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":639} +{"s":"FRthen","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRthen/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EFXB3W29E2YSQ2Z8RR34D\",\"socketPath\":\"/tmp/relayflowd-a82f41414043.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":608} +{"s":"FRthen","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRthen/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EFXBMMV4BFNNQA62AVQJN\",\"socketPath\":\"/tmp/relayflowd-656a464cf427.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":608} +{"s":"FRthen","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRthen/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EFXBEEDBZDXXE5R48YYG7\",\"socketPath\":\"/tmp/relayflowd-6132e68dd447.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":608} +{"s":"FRthen","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRthen/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EFXY5WPCRK91N69S924JA\",\"socketPath\":\"/tmp/relayflowd-89eae2512bcd.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":648} +{"s":"FRthen","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRthen/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EFXZ2SH3VAKCBQ05E1SVT\",\"socketPath\":\"/tmp/relayflowd-3a9bb3bb01e9.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":652} +{"s":"FRthen","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRthen/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EFXYWF587BF4WV4Y8KD5A\",\"socketPath\":\"/tmp/relayflowd-94d8591208bc.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":653} +{"s":"FRsettled","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRsettled/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EFYHT82PYQCM4R2TT2C66\",\"socketPath\":\"/tmp/relayflowd-9531ec15f9f1.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":581} +{"s":"FRsettled","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRsettled/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EFYJY7P0H23V51Q0CETTX\",\"socketPath\":\"/tmp/relayflowd-6e3b11c20763.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":605} +{"s":"FRsettled","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRsettled/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EFYK7F84PFQ38QPM65V45\",\"socketPath\":\"/tmp/relayflowd-11aff392c1f3.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":622} +{"s":"FRsettled","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRsettled/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EFZ4BD6DWPDF3RZBX0TKP\",\"socketPath\":\"/tmp/relayflowd-e4f96a13b364.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":600} +{"s":"FRsettled","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRsettled/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EFZ5SKQG79XGVHZTXEGW9\",\"socketPath\":\"/tmp/relayflowd-1f3f077bbfe7.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":602} +{"s":"FRsettled","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRsettled/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EFZ67YE03ZQY8BD7R0ZA6\",\"socketPath\":\"/tmp/relayflowd-5d82223b55e1.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":601} +{"s":"FRset","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRset/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EFZQ623FT7K39RW2QYQQZ\",\"socketPath\":\"/tmp/relayflowd-9a21a43ac183.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":596} +{"s":"FRset","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRset/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EFZRFAQG89371VF0WHAQV\",\"socketPath\":\"/tmp/relayflowd-0e8680f0c285.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":596} +{"s":"FRset","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRset/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EFZRW10092JH8AX4N0X7C\",\"socketPath\":\"/tmp/relayflowd-0ea03af049a7.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":596} +{"s":"FRset","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRset/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EG0A5V9MB3RX97SCJ1BXW\",\"socketPath\":\"/tmp/relayflowd-f5290210bc48.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":608} +{"s":"FRset","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRset/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EG0BYE3Q6RQ5X49DFC99R\",\"socketPath\":\"/tmp/relayflowd-e6f2f751d591.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":624} +{"s":"FRset","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRset/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EG0C3Q4GQ6CWTRTF2PV4K\",\"socketPath\":\"/tmp/relayflowd-cea1e3ecf704.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":623} +{"s":"FRgen","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRgen/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EG0WTHNZJAW1ZGXAAS1QT\",\"socketPath\":\"/tmp/relayflowd-83b63f702081.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":600} +{"s":"FRgen","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRgen/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EG0ZBW79R5REBACCX7KQ8\",\"socketPath\":\"/tmp/relayflowd-81fa915ff0e8.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":603} +{"s":"FRgen","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRgen/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EG0Z2749B033PHX3QNXAG\",\"socketPath\":\"/tmp/relayflowd-3655f0cd28cf.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":621} +{"s":"FRgen","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRgen/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EG1FECZ7KMPBYZVMPKDM3\",\"socketPath\":\"/tmp/relayflowd-e3759844f142.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":612} +{"s":"FRgen","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRgen/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EG1H346PGNT7BVWB8C22T\",\"socketPath\":\"/tmp/relayflowd-e8cc17c34b75.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":574} +{"s":"FRgen","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRgen/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EG1JKV98D3SBJYKN3AVD3\",\"socketPath\":\"/tmp/relayflowd-789ca72f8532.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":623} +{"s":"FRthenagg","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRthenagg/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EG222CWDQ7RWEQYK1AEA2\",\"socketPath\":\"/tmp/relayflowd-bfc77bdd5d0a.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":582} +{"s":"FRthenagg","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRthenagg/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EG24207YHSP357KT714HJ\",\"socketPath\":\"/tmp/relayflowd-f77f2a0e8474.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":599} +{"s":"FRthenagg","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRthenagg/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EG254X0S6X17AD1DTY7ZJ\",\"socketPath\":\"/tmp/relayflowd-04f13333b6df.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":601} +{"s":"FRthenagg","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRthenagg/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EG2N4XF1NHEM55979G3P1\",\"socketPath\":\"/tmp/relayflowd-03508662d8d4.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":609} +{"s":"FRthenagg","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRthenagg/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EG2PDRP15VZQSD6DQ1DVM\",\"socketPath\":\"/tmp/relayflowd-61669021e367.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":578} +{"s":"FRthenagg","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRthenagg/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EG2QSEQ9PETMY6Z2EJ30C\",\"socketPath\":\"/tmp/relayflowd-bdbbd074cc9b.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":593} +{"s":"FRmicro","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRmicro/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EG388G8QKC7ZWN0NWSKQD\",\"socketPath\":\"/tmp/relayflowd-4b2ae86996e5.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":625} +{"s":"FRmicro","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRmicro/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EG3988Z0NEJTJ6VQ81C59\",\"socketPath\":\"/tmp/relayflowd-fa931950b766.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":608} +{"s":"FRmicro","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRmicro/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EG3AHD8TXTJB97MMD0C5V\",\"socketPath\":\"/tmp/relayflowd-de8679addb8b.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":592} +{"s":"FRmicro","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRmicro/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EG3V9SFR7DEP729SDMHXY\",\"socketPath\":\"/tmp/relayflowd-fa8d12c64eb2.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":594} +{"s":"FRmicro","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRmicro/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EG3VXPT9C7KY5TXHX8WG3\",\"socketPath\":\"/tmp/relayflowd-ceca3079368f.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":593} +{"s":"FRmicro","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRmicro/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EG3X3TKGZ6YG1WRYH5DHP\",\"socketPath\":\"/tmp/relayflowd-c6ce2669b63f.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":593} +{"s":"FRcatch","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRcatch/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EG4DY8JJ44XA21Y7547P5\",\"socketPath\":\"/tmp/relayflowd-b5595a7ac9f2.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":596} +{"s":"FRcatch","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRcatch/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EG4EG7GCY4J45R0RBW7Y7\",\"socketPath\":\"/tmp/relayflowd-5a295ef2c8c9.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":597} +{"s":"FRcatch","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRcatch/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EG4FKTMTPHEX720J16YT2\",\"socketPath\":\"/tmp/relayflowd-efe2784645b7.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":597} +{"s":"FRcatch","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRcatch/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EG50EEM1HRSVCFCG6ZPB0\",\"socketPath\":\"/tmp/relayflowd-4ff0aeccd0b6.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":598} +{"s":"FRcatch","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRcatch/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EG510FGX98VEQ8JAPM2BR\",\"socketPath\":\"/tmp/relayflowd-ffe0d43dfa2b.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":599} +{"s":"FRcatch","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRcatch/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EG525DWXMYB8VA6M25GS7\",\"socketPath\":\"/tmp/relayflowd-f77cebdaf568.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":583} +{"s":"FRfinally","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRfinally/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EG5KKQW4SQRAB18ETP664\",\"socketPath\":\"/tmp/relayflowd-78f23a91a69e.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":600} +{"s":"FRfinally","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRfinally/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EG5KHMD7CPQYWY90SGATX\",\"socketPath\":\"/tmp/relayflowd-aaf6199e1b87.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":617} +{"s":"FRfinally","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRfinally/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EG5MD94FY64RTF4GYCJJ8\",\"socketPath\":\"/tmp/relayflowd-8ab012461c59.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":585} +{"s":"FRfinally","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRfinally/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EG67CYHXKP5BFD5NWGDBW\",\"socketPath\":\"/tmp/relayflowd-01e58ae103e0.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":607} +{"s":"FRfinally","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRfinally/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EG6761DAFZH75K148SSXP\",\"socketPath\":\"/tmp/relayflowd-1da02d183a2a.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":627} +{"s":"FRfinally","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRfinally/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EG676MRHY5MBDM4SW74SX\",\"socketPath\":\"/tmp/relayflowd-ae77d3455d4a.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":626} +{"s":"FRiter","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRiter/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EG6TG4D9ZCB4NRVWFFPSZ\",\"socketPath\":\"/tmp/relayflowd-c37efe21e778.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":614} +{"s":"FRiter","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRiter/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EG6TGY3Z4PAJ6YZ2JJZ1M\",\"socketPath\":\"/tmp/relayflowd-85aeaa772084.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":613} +{"s":"FRiter","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRiter/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EG6TG24W86NF33N2BTTM1\",\"socketPath\":\"/tmp/relayflowd-a282e6a736d8.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":631} +{"s":"FRiter","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRiter/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EG7DFTVAVGMZJVGVTMR15\",\"socketPath\":\"/tmp/relayflowd-4a93f71fcc15.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":613} +{"s":"FRiter","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRiter/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EG7DFHEN5CZWHEN4V68SK\",\"socketPath\":\"/tmp/relayflowd-cef9b5edfd3e.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":613} +{"s":"FRiter","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRiter/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EG7DWPNG6T66QEM0PZVGF\",\"socketPath\":\"/tmp/relayflowd-8037ab7cc5cc.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":611} +{"s":"FRwrap","start":"forced","resume":"forced","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRwrap/forced-forced-1/chain.flow.ts\",\"rootRunId\":\"01M53EG80YY6SRDAHQYJPDP6SG\",\"socketPath\":\"/tmp/relayflowd-833bf5fb6e81.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":622} +{"s":"FRwrap","start":"forced","resume":"forced","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRwrap/forced-forced-0/chain.flow.ts\",\"rootRunId\":\"01M53EG816CBETSVYDTXT5RK1M\",\"socketPath\":\"/tmp/relayflowd-3e2b302183b8.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":641} +{"s":"FRwrap","start":"forced","resume":"forced","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRwrap/forced-forced-2/chain.flow.ts\",\"rootRunId\":\"01M53EG81BRKHX6DYEDE8YGD34\",\"socketPath\":\"/tmp/relayflowd-fb8fbbacf75d.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":626} +{"s":"FRwrap","start":"forced","resume":"forced","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRwrap/forced-forced-3/chain.flow.ts\",\"rootRunId\":\"01M53EG8M71P8Z74ZT2YWQQXDA\",\"socketPath\":\"/tmp/relayflowd-4a684c262af7.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":606} +{"s":"FRwrap","start":"forced","resume":"forced","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRwrap/forced-forced-5/chain.flow.ts\",\"rootRunId\":\"01M53EG8MWJ5XZPMX8DY48NR32\",\"socketPath\":\"/tmp/relayflowd-95fd8b3a5c37.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":604} +{"s":"FRwrap","start":"forced","resume":"forced","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel f.run body lost its source certificate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel f.run body lost its source certificate\"}],\"path\":\"/w/runs/r8prior-fr/FRwrap/forced-forced-4/chain.flow.ts\",\"rootRunId\":\"01M53EG8MZ3CK0AP5ZEWC14ZT9\",\"socketPath\":\"/tmp/relayflowd-3685b68a3436.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"ok":false,"ms":623} +SUMMARY FRrace forced>forced ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRany forced>forced ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRnestrace forced>forced ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRdefer forced>forced ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRthen forced>forced ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRsettled forced>forced ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRset forced>forced ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRgen forced>forced ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRthenagg forced>forced ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRmicro forced>forced ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRcatch forced>forced ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRfinally forced>forced ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRiter forced>forced ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FRwrap forced>forced ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= diff --git a/evidence/native-parallel-review8/h7-prior-native.log b/evidence/native-parallel-review8/h7-prior-native.log new file mode 100644 index 000000000..5b3f3f6fb --- /dev/null +++ b/evidence/native-parallel-review8/h7-prior-native.log @@ -0,0 +1,21 @@ +{"s":"A1","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EF6WX4MSM80Z0V5HPVJYN\",\"runId\":\"01M53EF6WX4MSM80Z0V5HPVJYN\",\"socketPath\":\"/tmp/relayflowd-9721cd49b9a5.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 printf C","run-4 c=1 sleep 0.3; printf D","run-2 c=1 printf B","run-1 c=1 sleep 0.3; printf A","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf L >> effects","run-after-bf7bec01bcf69109cfbd318614946e3436d603d63c10c71c4cb6f3bf3d3f46c0-1 c=1 printf R >> effects","run-after-155808aba9d437c1d9cd0fd909c22d3d7ad7e1f138f940e0d9f792bfdd832c63-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1928} +{"s":"A1","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EF6W8Z5F5F7J6288BH3R4\",\"runId\":\"01M53EF6W8Z5F5F7J6288BH3R4\",\"socketPath\":\"/tmp/relayflowd-8f7d5be14ed1.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 printf C","run-1 c=1 sleep 0.3; printf A","run-4 c=1 sleep 0.3; printf D","run-2 c=1 printf B","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf L >> effects","run-after-bf7bec01bcf69109cfbd318614946e3436d603d63c10c71c4cb6f3bf3d3f46c0-1 c=1 printf R >> effects","run-after-155808aba9d437c1d9cd0fd909c22d3d7ad7e1f138f940e0d9f792bfdd832c63-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1965} +{"s":"A1","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EF6X4CR5MRB2QSSWSAZEG\",\"runId\":\"01M53EF6X4CR5MRB2QSSWSAZEG\",\"socketPath\":\"/tmp/relayflowd-f7d358fbe7e8.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-4 c=1 sleep 0.3; printf D","run-3 c=1 printf C","run-2 c=1 printf B","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf L >> effects","run-after-bf7bec01bcf69109cfbd318614946e3436d603d63c10c71c4cb6f3bf3d3f46c0-1 c=1 printf R >> effects","run-after-155808aba9d437c1d9cd0fd909c22d3d7ad7e1f138f940e0d9f792bfdd832c63-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2030} +{"s":"A1","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EF8PZT8SAB7NS5VQ2QH6Q\",\"runId\":\"01M53EF8PZT8SAB7NS5VQ2QH6Q\",\"socketPath\":\"/tmp/relayflowd-7d1b416cf03c.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-3 c=1 printf C","run-4 c=1 sleep 0.3; printf D","run-2 c=1 printf B","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf L >> effects","run-after-bf7bec01bcf69109cfbd318614946e3436d603d63c10c71c4cb6f3bf3d3f46c0-1 c=1 printf R >> effects","run-after-155808aba9d437c1d9cd0fd909c22d3d7ad7e1f138f940e0d9f792bfdd832c63-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2082} +{"s":"A1","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EF8QJ7K7XJBE74BD0N5MZ\",\"runId\":\"01M53EF8QJ7K7XJBE74BD0N5MZ\",\"socketPath\":\"/tmp/relayflowd-293d408be262.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-4 c=1 sleep 0.3; printf D","run-2 c=1 printf B","run-3 c=1 printf C","run-1 c=1 sleep 0.3; printf A","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf L >> effects","run-after-bf7bec01bcf69109cfbd318614946e3436d603d63c10c71c4cb6f3bf3d3f46c0-1 c=1 printf R >> effects","run-after-155808aba9d437c1d9cd0fd909c22d3d7ad7e1f138f940e0d9f792bfdd832c63-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2123} +{"s":"A1","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EF8STFDJ1R0SPQ6DYXXS6\",\"runId\":\"01M53EF8STFDJ1R0SPQ6DYXXS6\",\"socketPath\":\"/tmp/relayflowd-570e8c4aa488.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 printf C","run-2 c=1 printf B","run-1 c=1 sleep 0.3; printf A","run-4 c=1 sleep 0.3; printf D","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf L >> effects","run-after-bf7bec01bcf69109cfbd318614946e3436d603d63c10c71c4cb6f3bf3d3f46c0-1 c=1 printf R >> effects","run-after-155808aba9d437c1d9cd0fd909c22d3d7ad7e1f138f940e0d9f792bfdd832c63-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2217} +{"s":"B1","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"RL","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EFAQKM3N030ZWPBPD5SBS\",\"runId\":\"01M53EFAQKM3N030ZWPBPD5SBS\",\"socketPath\":\"/tmp/relayflowd-56f5d35a8dee.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-2 c=1 printf C","run-3 c=1 printf D","run-after-69473275150109f1e821854612e8fcc96c0bc028e8a5691afc753fd33685ae48-1 c=1 printf R >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf B","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf L >> effects","run-after-bc05bd49c1a49d986489d67d572c6e1e20d66cda81c621b30d495a9b7cd1c835-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1469} +{"s":"B1","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"RL","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EFAT2DVRS2E3P2B5PVNMW\",\"runId\":\"01M53EFAT2DVRS2E3P2B5PVNMW\",\"socketPath\":\"/tmp/relayflowd-b061d6029d21.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-3 c=1 printf D","run-2 c=1 printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf B","run-after-69473275150109f1e821854612e8fcc96c0bc028e8a5691afc753fd33685ae48-1 c=1 printf R >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf L >> effects","run-after-bc05bd49c1a49d986489d67d572c6e1e20d66cda81c621b30d495a9b7cd1c835-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1548} +{"s":"B1","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"RL","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EFAYG20ERFT4EFVR7EM2J\",\"runId\":\"01M53EFAYG20ERFT4EFVR7EM2J\",\"socketPath\":\"/tmp/relayflowd-4c8168298686.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-2 c=1 printf C","run-3 c=1 printf D","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf B","run-after-69473275150109f1e821854612e8fcc96c0bc028e8a5691afc753fd33685ae48-1 c=1 printf R >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf L >> effects","run-after-bc05bd49c1a49d986489d67d572c6e1e20d66cda81c621b30d495a9b7cd1c835-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1579} +{"s":"B1","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"RL","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EFC5N6FEV4JN28CD6YXTE\",\"runId\":\"01M53EFC5N6FEV4JN28CD6YXTE\",\"socketPath\":\"/tmp/relayflowd-acbe232d33a4.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-3 c=1 printf D","run-2 c=1 printf C","run-after-69473275150109f1e821854612e8fcc96c0bc028e8a5691afc753fd33685ae48-1 c=1 printf R >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf B","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf L >> effects","run-after-bc05bd49c1a49d986489d67d572c6e1e20d66cda81c621b30d495a9b7cd1c835-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1750} +{"s":"B1","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"RL","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EFCB3VRS8NRRZZGFF84TA\",\"runId\":\"01M53EFCB3VRS8NRRZZGFF84TA\",\"socketPath\":\"/tmp/relayflowd-824597c4da7d.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 printf D","run-1 c=1 printf A","run-2 c=1 printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf B","run-after-69473275150109f1e821854612e8fcc96c0bc028e8a5691afc753fd33685ae48-1 c=1 printf R >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf L >> effects","run-after-bc05bd49c1a49d986489d67d572c6e1e20d66cda81c621b30d495a9b7cd1c835-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1875} +{"s":"B1","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"RL","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EFCFJZSF0G6T0BJF53QH7\",\"runId\":\"01M53EFCFJZSF0G6T0BJF53QH7\",\"socketPath\":\"/tmp/relayflowd-b5ef702fa02c.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-3 c=1 printf D","run-2 c=1 printf C","run-after-69473275150109f1e821854612e8fcc96c0bc028e8a5691afc753fd33685ae48-1 c=1 printf R >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf B","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf L >> effects","run-after-bc05bd49c1a49d986489d67d572c6e1e20d66cda81c621b30d495a9b7cd1c835-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1854} +{"s":"N2","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EFDTT4MJ1TZHZY2VCAMHT\",\"runId\":\"01M53EFDTT4MJ1TZHZY2VCAMHT\",\"socketPath\":\"/tmp/relayflowd-748a2eb1c1b0.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.2; printf C","run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1750} +{"s":"N2","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EFE51YKGVRM1M9DEJQFYB\",\"runId\":\"01M53EFE51YKGVRM1M9DEJQFYB\",\"socketPath\":\"/tmp/relayflowd-070b9fc00d8e.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.2; printf C","run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1935} +{"s":"N2","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EFE9JNYGFYZS6EZ0GSWDQ\",\"runId\":\"01M53EFE9JNYGFYZS6EZ0GSWDQ\",\"socketPath\":\"/tmp/relayflowd-64c31bd377e6.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1997} +{"s":"N2","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EFFNRKBNQX3FWYFDW3FMA\",\"runId\":\"01M53EFFNRKBNQX3FWYFDW3FMA\",\"socketPath\":\"/tmp/relayflowd-43119069e9bc.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2124} +{"s":"N2","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EFG11F0G83X5NJS1N7RHC\",\"runId\":\"01M53EFG11F0G83X5NJS1N7RHC\",\"socketPath\":\"/tmp/relayflowd-870728702fc0.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.2; printf C","run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2130} +{"s":"N2","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EFG9CQRGX8563AZ7KVY6S\",\"runId\":\"01M53EFG9CQRGX8563AZ7KVY6S\",\"socketPath\":\"/tmp/relayflowd-36587cacfe8b.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.2; printf C","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2229} +SUMMARY A1 head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=LRZ +SUMMARY B1 head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=RLZ +SUMMARY N2 head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=bcaZ diff --git a/evidence/native-parallel-review8/h7-prior-p.log b/evidence/native-parallel-review8/h7-prior-p.log new file mode 100644 index 000000000..70b4e9827 --- /dev/null +++ b/evidence/native-parallel-review8/h7-prior-p.log @@ -0,0 +1,112 @@ +{"s":"P1","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECV9485S3Y99MQZ2BF9XS\",\"runId\":\"01M53ECV9485S3Y99MQZ2BF9XS\",\"socketPath\":\"/tmp/relayflowd-d788ee909986.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2127} +{"s":"P1","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECV91PVBCT65J1J8Y1R9V\",\"runId\":\"01M53ECV91PVBCT65J1J8Y1R9V\",\"socketPath\":\"/tmp/relayflowd-369d70b6fc78.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2204} +{"s":"P1","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECV97090N33JR2FEK9VQB\",\"runId\":\"01M53ECV97090N33JR2FEK9VQB\",\"socketPath\":\"/tmp/relayflowd-85f8f36e4ff6.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2270} +{"s":"P1","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECXA4X95T61T2MH0H04VV\",\"runId\":\"01M53ECXA4X95T61T2MH0H04VV\",\"socketPath\":\"/tmp/relayflowd-20f5241d4aaf.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2345} +{"s":"P1","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECXC64HZENJGCFKM0HDAW\",\"runId\":\"01M53ECXC64HZENJGCFKM0HDAW\",\"socketPath\":\"/tmp/relayflowd-c9460525f17f.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2380} +{"s":"P1","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECXE1DES89CA5261ZCPKQ\",\"runId\":\"01M53ECXE1DES89CA5261ZCPKQ\",\"socketPath\":\"/tmp/relayflowd-0bab381cfb30.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2506} +{"s":"P1h","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECZKEB230QV6X8CSE0XQ0\",\"runId\":\"01M53ECZKEB230QV6X8CSE0XQ0\",\"socketPath\":\"/tmp/relayflowd-2e5efe7b08e4.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2103} +{"s":"P1h","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECZPM2Y1CHJHAY5YE0TM4\",\"runId\":\"01M53ECZPM2Y1CHJHAY5YE0TM4\",\"socketPath\":\"/tmp/relayflowd-b6e46afdc04a.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2065} +{"s":"P1h","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ECZWXVJ3JPEG4ZK16MXJZ\",\"runId\":\"01M53ECZWXVJ3JPEG4ZK16MXJZ\",\"socketPath\":\"/tmp/relayflowd-ccd25c5b6800.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2180} +{"s":"P1h","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ED1MSNWTP3T7MKYW1Z098\",\"runId\":\"01M53ED1MSNWTP3T7MKYW1Z098\",\"socketPath\":\"/tmp/relayflowd-6c7d1810117a.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2261} +{"s":"P1h","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ED1PNKGJCPA7VVQG0TA2Z\",\"runId\":\"01M53ED1PNKGJCPA7VVQG0TA2Z\",\"socketPath\":\"/tmp/relayflowd-147fa0cbc367.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2364} +{"s":"P1h","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ED219VKP1TH21H4Z113W9\",\"runId\":\"01M53ED219VKP1TH21H4Z113W9\",\"socketPath\":\"/tmp/relayflowd-3b44001bfc42.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2510} +{"s":"P1c","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ED3W0CKR9FRTD5WTVA36T\",\"runId\":\"01M53ED3W0CKR9FRTD5WTVA36T\",\"socketPath\":\"/tmp/relayflowd-1632ff16b641.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2025} +{"s":"P1c","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ED40GEGZRMWBKH5JQXBS8\",\"runId\":\"01M53ED40GEGZRMWBKH5JQXBS8\",\"socketPath\":\"/tmp/relayflowd-48f2c4103ba1.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2080} +{"s":"P1c","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ED4FEKQ0A0AP67AN3T4VQ\",\"runId\":\"01M53ED4FEKQ0A0AP67AN3T4VQ\",\"socketPath\":\"/tmp/relayflowd-c4af98f6e924.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2158} +{"s":"P1c","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ED5SDZDGA3T0E37Q7HZP6\",\"runId\":\"01M53ED5SDZDGA3T0E37Q7HZP6\",\"socketPath\":\"/tmp/relayflowd-c90d1343cc2d.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2172} +{"s":"P1c","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ED61JNTMGSNHXT5XBX07H\",\"runId\":\"01M53ED61JNTMGSNHXT5XBX07H\",\"socketPath\":\"/tmp/relayflowd-1f29aa40bf4c.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2333} +{"s":"P1c","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ED6J2KENXXBGAERFGCA4V\",\"runId\":\"01M53ED6J2KENXXBGAERFGCA4V\",\"socketPath\":\"/tmp/relayflowd-a7e3b10f0640.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2492} +{"s":"P1n","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ED7Y2KKAHR1QBRE04F98E\",\"runId\":\"01M53ED7Y2KKAHR1QBRE04F98E\",\"socketPath\":\"/tmp/relayflowd-db9c9612787d.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2116} +{"s":"P1n","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ED8BW9XSX7H7PGRNMYKGE\",\"runId\":\"01M53ED8BW9XSX7H7PGRNMYKGE\",\"socketPath\":\"/tmp/relayflowd-67496eb84444.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2182} +{"s":"P1n","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ED9118DFK86ZN4H12RN67\",\"runId\":\"01M53ED9118DFK86ZN4H12RN67\",\"socketPath\":\"/tmp/relayflowd-36177f9ccd5f.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2249} +{"s":"P1n","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ED9ZP33XR6ETT374A91PP\",\"runId\":\"01M53ED9ZP33XR6ETT374A91PP\",\"socketPath\":\"/tmp/relayflowd-3ccc2392c849.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2254} +{"s":"P1n","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDAF6KE5W6XPNBAX6C21W\",\"runId\":\"01M53EDAF6KE5W6XPNBAX6C21W\",\"socketPath\":\"/tmp/relayflowd-b1a279f3d0fa.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2425} +{"s":"P1n","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDB6GJKD6GWFNYGVNGVE0\",\"runId\":\"01M53EDB6GJKD6GWFNYGVNGVE0\",\"socketPath\":\"/tmp/relayflowd-3cf274edbc3b.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2515} +{"s":"P1bn","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDC7H5NGFYNPNMJ77C3BS\",\"runId\":\"01M53EDC7H5NGFYNPNMJ77C3BS\",\"socketPath\":\"/tmp/relayflowd-293a160eab0c.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2098} +{"s":"P1bn","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDCT5GJ5K4R7119S7ZK3S\",\"runId\":\"01M53EDCT5GJ5K4R7119S7ZK3S\",\"socketPath\":\"/tmp/relayflowd-0af0140b307a.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2164} +{"s":"P1bn","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDDN8TFJAXAY2X1M1ARX8\",\"runId\":\"01M53EDDN8TFJAXAY2X1M1ARX8\",\"socketPath\":\"/tmp/relayflowd-3c6ef6abd22e.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2264} +{"s":"P1bn","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDE8F3JEXB65WTAVG1R0S\",\"runId\":\"01M53EDE8F3JEXB65WTAVG1R0S\",\"socketPath\":\"/tmp/relayflowd-89872b9d396f.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2322} +{"s":"P1bn","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDEXYC9G9PY82PXD68WKZ\",\"runId\":\"01M53EDEXYC9G9PY82PXD68WKZ\",\"socketPath\":\"/tmp/relayflowd-bfc44bf5dbcf.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2402} +{"s":"P2","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDGHNS8QHB0KZYG4M4TFZ\",\"runId\":\"01M53EDGHNS8QHB0KZYG4M4TFZ\",\"socketPath\":\"/tmp/relayflowd-00293bf57c8d.sock\",\"completedSteps\":3,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf X >> effects","run-2 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-3 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1344} +{"s":"P1bn","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDFWAD2TWRV7WG1MN7WAJ\",\"runId\":\"01M53EDFWAD2TWRV7WG1MN7WAJ\",\"socketPath\":\"/tmp/relayflowd-77363b63918e.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2575} +{"s":"P2","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDH9V4GX4RH9W1SPFC1VZ\",\"runId\":\"01M53EDH9V4GX4RH9W1SPFC1VZ\",\"socketPath\":\"/tmp/relayflowd-61923a3c0180.sock\",\"completedSteps\":3,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf X >> effects","run-2 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-3 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1396} +{"s":"P2","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDHVGSKQ3HFSDNKKCV138\",\"runId\":\"01M53EDHVGSKQ3HFSDNKKCV138\",\"socketPath\":\"/tmp/relayflowd-a6def754e689.sock\",\"completedSteps\":3,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf X >> effects","run-2 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-3 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1461} +{"s":"P2","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDJD7Q9M1X7SQTTH16C13\",\"runId\":\"01M53EDJD7Q9M1X7SQTTH16C13\",\"socketPath\":\"/tmp/relayflowd-341c211dd00a.sock\",\"completedSteps\":3,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf X >> effects","run-2 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-3 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1576} +{"s":"P2","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDJNGCDNAF3CZDGS95V4D\",\"runId\":\"01M53EDJNGCDNAF3CZDGS95V4D\",\"socketPath\":\"/tmp/relayflowd-dba68dede23f.sock\",\"completedSteps\":3,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf X >> effects","run-2 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-3 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1678} +{"s":"P2","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDK8Z51PVBA8SX2YNVPC6\",\"runId\":\"01M53EDK8Z51PVBA8SX2YNVPC6\",\"socketPath\":\"/tmp/relayflowd-27d28de7f4b8.sock\",\"completedSteps\":3,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf X >> effects","run-2 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-3 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1768} +{"s":"C1e","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"XY","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDKYEXX4BDNV44JTAQ64B\",\"runId\":\"01M53EDKYEXX4BDNV44JTAQ64B\",\"socketPath\":\"/tmp/relayflowd-f45b3645026e.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XYZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf X >> effects","run-2 c=1 printf Y >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2008} +{"s":"C1e","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"XY","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDM9Z7NV4J0VCWMPYYH81\",\"runId\":\"01M53EDM9Z7NV4J0VCWMPYYH81\",\"socketPath\":\"/tmp/relayflowd-2c1dc14d9964.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XYZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf X >> effects","run-2 c=1 printf Y >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2001} +{"s":"C1e","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"XY","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDN1TEJVMDY03W1VQTZN2\",\"runId\":\"01M53EDN1TEJVMDY03W1VQTZN2\",\"socketPath\":\"/tmp/relayflowd-5f52e79093e4.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XYZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf X >> effects","run-2 c=1 printf Y >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2093} +{"s":"C1e","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"XY","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDNWNRVQR9EC22YNAE8FQ\",\"runId\":\"01M53EDNWNRVQR9EC22YNAE8FQ\",\"socketPath\":\"/tmp/relayflowd-4a3427bb4bfd.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XYZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf X >> effects","run-2 c=1 printf Y >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2137} +{"s":"C1e","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"XY","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDP7NSZM1ZRDQ0JPCKC80\",\"runId\":\"01M53EDP7NSZM1ZRDQ0JPCKC80\",\"socketPath\":\"/tmp/relayflowd-b3febb836dbb.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XYZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf X >> effects","run-2 c=1 printf Y >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2200} +{"s":"C1e","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"XY","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDQ1KRNRZCNKW25TVR71R\",\"runId\":\"01M53EDQ1KRNRZCNKW25TVR71R\",\"socketPath\":\"/tmp/relayflowd-d5417b092319.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XYZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf X >> effects","run-2 c=1 printf Y >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2386} +{"s":"G1","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"ABG","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDQXABH6WQT7J6FGMX441\",\"runId\":\"01M53EDQXABH6WQT7J6FGMX441\",\"socketPath\":\"/tmp/relayflowd-7021ef6e9255.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABGZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A >> effects","run-2 c=1 sleep 0.3; printf B >> effects","run-3 c=1 printf G >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1595} +{"s":"G1","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"ABG","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDRCVGVQEMYK1DZB13NSC\",\"runId\":\"01M53EDRCVGVQEMYK1DZB13NSC\",\"socketPath\":\"/tmp/relayflowd-7cc96ccdc2b3.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABGZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A >> effects","run-2 c=1 sleep 0.3; printf B >> effects","run-3 c=1 printf G >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1749} +{"s":"G1","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"ABG","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDSCXMGGZKMVPDM43G1D5\",\"runId\":\"01M53EDSCXMGGZKMVPDM43G1D5\",\"socketPath\":\"/tmp/relayflowd-39821569d380.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABGZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A >> effects","run-2 c=1 sleep 0.3; printf B >> effects","run-3 c=1 printf G >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1812} +{"s":"G1","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"ABG","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDSHQAK0EX0WKH4XA1Q0B\",\"runId\":\"01M53EDSHQAK0EX0WKH4XA1Q0B\",\"socketPath\":\"/tmp/relayflowd-91bf43d3df63.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABGZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A >> effects","run-2 c=1 sleep 0.3; printf B >> effects","run-3 c=1 printf G >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1911} +{"s":"G1","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"ABG","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDT3Q1975D1DF3YJ42FTF\",\"runId\":\"01M53EDT3Q1975D1DF3YJ42FTF\",\"socketPath\":\"/tmp/relayflowd-673edef8fcfd.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABGZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A >> effects","run-2 c=1 sleep 0.3; printf B >> effects","run-3 c=1 printf G >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1965} +{"s":"H1","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDVCAS3ZAPP8DE1TVG4EC\",\"runId\":\"01M53EDVCAS3ZAPP8DE1TVG4EC\",\"socketPath\":\"/tmp/relayflowd-b60a3233efce.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"serial","journalReplay":false,"dups":[],"ids":["llm-1 c=1 ","llm-2 c=1 ","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1703} +{"s":"G1","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"ABG","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDV5VAWXYZSXHZCPXDP7F\",\"runId\":\"01M53EDV5VAWXYZSXHZCPXDP7F\",\"socketPath\":\"/tmp/relayflowd-61aaee8ee743.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABGZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A >> effects","run-2 c=1 sleep 0.3; printf B >> effects","run-3 c=1 printf G >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2189} +{"s":"H1","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDW13WNT13E2QWBWD5K8P\",\"runId\":\"01M53EDW13WNT13E2QWBWD5K8P\",\"socketPath\":\"/tmp/relayflowd-701c5bf7944b.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"serial","journalReplay":false,"dups":[],"ids":["llm-1 c=1 ","llm-2 c=1 ","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1851} +{"s":"H1","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDX3NFYJF43RJ8AZFAJDS\",\"runId\":\"01M53EDX3NFYJF43RJ8AZFAJDS\",\"socketPath\":\"/tmp/relayflowd-14d139472097.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"serial","journalReplay":false,"dups":[],"ids":["llm-1 c=1 ","llm-2 c=1 ","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1920} +{"s":"H1","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDXANTHWXSWGXSGFY105C\",\"runId\":\"01M53EDXANTHWXSWGXSGFY105C\",\"socketPath\":\"/tmp/relayflowd-3536c04d552d.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"serial","journalReplay":false,"dups":[],"ids":["llm-1 c=1 ","llm-2 c=1 ","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1983} +{"s":"H1","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDXVPK41C1EBJQ9R46W7S\",\"runId\":\"01M53EDXVPK41C1EBJQ9R46W7S\",\"socketPath\":\"/tmp/relayflowd-85cf1e9c3a81.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"serial","journalReplay":false,"dups":[],"ids":["llm-1 c=1 ","llm-2 c=1 ","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2133} +{"s":"H2","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDZ7HX8M9T5X21JSEXP8X\",\"runId\":\"01M53EDZ7HX8M9T5X21JSEXP8X\",\"socketPath\":\"/tmp/relayflowd-9149e73fd573.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"serial","journalReplay":false,"dups":[],"ids":["agent-1 c=1 left","agent-2 c=1 right","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1534} +{"s":"H1","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDYYVCTK1RYEJBY6S0EHF\",\"runId\":\"01M53EDYYVCTK1RYEJBY6S0EHF\",\"socketPath\":\"/tmp/relayflowd-cbaa6f6ef590.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"serial","journalReplay":false,"dups":[],"ids":["llm-1 c=1 ","llm-2 c=1 ","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2279} +{"s":"H2","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EDZXHXN8JSRGMRW0CQZQT\",\"runId\":\"01M53EDZXHXN8JSRGMRW0CQZQT\",\"socketPath\":\"/tmp/relayflowd-bcc642719905.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"serial","journalReplay":false,"dups":[],"ids":["agent-1 c=1 left","agent-2 c=1 right","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1591} +{"s":"H2","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EE0Q1BNJMCWF7ED32TFEH\",\"runId\":\"01M53EE0Q1BNJMCWF7ED32TFEH\",\"socketPath\":\"/tmp/relayflowd-85b28a4f716b.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"serial","journalReplay":false,"dups":[],"ids":["agent-1 c=1 left","agent-2 c=1 right","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1640} +{"s":"H2","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EE15W026B75AY335NN57Z\",\"runId\":\"01M53EE15W026B75AY335NN57Z\",\"socketPath\":\"/tmp/relayflowd-153eadca5d63.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"serial","journalReplay":false,"dups":[],"ids":["agent-1 c=1 left","agent-2 c=1 right","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1777} +{"s":"H2","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EE1FHJAQB4F6VJ9GAB0DS\",\"runId\":\"01M53EE1FHJAQB4F6VJ9GAB0DS\",\"socketPath\":\"/tmp/relayflowd-af5a5b5759e1.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"serial","journalReplay":false,"dups":[],"ids":["agent-1 c=1 left","agent-2 c=1 right","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1818} +{"s":"H2","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EE2AV7S64533A4M9M354Y\",\"runId\":\"01M53EE2AV7S64533A4M9M354Y\",\"socketPath\":\"/tmp/relayflowd-d9fe10ce2e38.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"serial","journalReplay":false,"dups":[],"ids":["agent-1 c=1 left","agent-2 c=1 right","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1995} +{"s":"K4","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EE2X97HMS2N2RWJ4AAGPV\",\"runId\":\"01M53EE2X97HMS2N2RWJ4AAGPV\",\"socketPath\":\"/tmp/relayflowd-2d7b34803205.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"serial","journalReplay":false,"dups":[],"ids":["llm-1 c=1 ","llm-2 c=1 ","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1786} +{"s":"K4","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EE3907ARKWB1KRAK2N1J8\",\"runId\":\"01M53EE3907ARKWB1KRAK2N1J8\",\"socketPath\":\"/tmp/relayflowd-3eaa3303c590.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"serial","journalReplay":false,"dups":[],"ids":["llm-1 c=1 ","llm-2 c=1 ","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1912} +{"s":"K4","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EE4ACVPKCE5KQVXKJK24V\",\"runId\":\"01M53EE4ACVPKCE5KQVXKJK24V\",\"socketPath\":\"/tmp/relayflowd-104ce6e40731.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"serial","journalReplay":false,"dups":[],"ids":["llm-1 c=1 ","llm-2 c=1 ","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1971} +{"s":"K4","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EE4PAVZXBBGNRSXXC5JS1\",\"runId\":\"01M53EE4PAVZXBBGNRSXXC5JS1\",\"socketPath\":\"/tmp/relayflowd-2a0273957223.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"serial","journalReplay":false,"dups":[],"ids":["llm-1 c=1 ","llm-2 c=1 ","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2049} +{"s":"K4","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EE545PHF3F5K7YS5ZYRK5\",\"runId\":\"01M53EE545PHF3F5K7YS5ZYRK5\",\"socketPath\":\"/tmp/relayflowd-139e1228b69d.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"serial","journalReplay":false,"dups":[],"ids":["llm-1 c=1 ","llm-2 c=1 ","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2126} +{"s":"K4","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EE65VRE95CMAKDJQWDXQ8\",\"runId\":\"01M53EE65VRE95CMAKDJQWDXQ8\",\"socketPath\":\"/tmp/relayflowd-1e48f0df1eb5.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"serial","journalReplay":false,"dups":[],"ids":["llm-1 c=1 ","llm-2 c=1 ","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2397} +{"s":"I1","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"xyLR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EE6RTBQ6562D8B6QEB1PZ\",\"runId\":\"01M53EE6RTBQ6562D8B6QEB1PZ\",\"socketPath\":\"/tmp/relayflowd-9418dd9c7236.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"xyLRZ","mode":"serial","journalReplay":true,"dups":["printf '%s' '{\"name\":\"child\",\"completionReason\":\"s: dispatch-1 & dispatch-2"],"ids":["dispatch-1--run-1 c=1 printf first","dispatch-1--run-2 c=1 printf second","dispatch-2--run-1 c=1 printf first","dispatch-2--run-2 c=1 printf second","dispatch-1--run-3 c=1 printf x >> effects","dispatch-2--run-3 c=1 printf y >> effects","dispatch-1--complete-4 c=1 :","dispatch-2--complete-4 c=1 :","dispatch-1 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","dispatch-2 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":true,"ok":false,"ms":1956} +{"s":"I1","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"xyLR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EE78XTATN985MQHDDVZK2\",\"runId\":\"01M53EE78XTATN985MQHDDVZK2\",\"socketPath\":\"/tmp/relayflowd-4abc1b800473.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"xyLRZ","mode":"serial","journalReplay":true,"dups":["printf '%s' '{\"name\":\"child\",\"completionReason\":\"s: dispatch-1 & dispatch-2"],"ids":["dispatch-1--run-1 c=1 printf first","dispatch-1--run-2 c=1 printf second","dispatch-2--run-1 c=1 printf first","dispatch-2--run-2 c=1 printf second","dispatch-1--run-3 c=1 printf x >> effects","dispatch-2--run-3 c=1 printf y >> effects","dispatch-1--complete-4 c=1 :","dispatch-2--complete-4 c=1 :","dispatch-1 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","dispatch-2 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":true,"ok":false,"ms":1941} +{"s":"I1","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"xyLR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EE8MFNHW7W8KFW3084APZ\",\"runId\":\"01M53EE8MFNHW7W8KFW3084APZ\",\"socketPath\":\"/tmp/relayflowd-3c2abe22b662.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"xyLRZ","mode":"serial","journalReplay":true,"dups":["printf '%s' '{\"name\":\"child\",\"completionReason\":\"s: dispatch-1 & dispatch-2"],"ids":["dispatch-1--run-1 c=1 printf first","dispatch-1--run-2 c=1 printf second","dispatch-2--run-1 c=1 printf first","dispatch-2--run-2 c=1 printf second","dispatch-1--run-3 c=1 printf x >> effects","dispatch-2--run-3 c=1 printf y >> effects","dispatch-1--complete-4 c=1 :","dispatch-2--complete-4 c=1 :","dispatch-1 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","dispatch-2 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":true,"ok":false,"ms":2044} +{"s":"I1","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"xyLR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EE8MKH95QQBTBNT876AFG\",\"runId\":\"01M53EE8MKH95QQBTBNT876AFG\",\"socketPath\":\"/tmp/relayflowd-8b3d7e15196b.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"xyLRZ","mode":"serial","journalReplay":true,"dups":["printf '%s' '{\"name\":\"child\",\"completionReason\":\"s: dispatch-1 & dispatch-2"],"ids":["dispatch-1--run-1 c=1 printf first","dispatch-1--run-2 c=1 printf second","dispatch-2--run-1 c=1 printf first","dispatch-2--run-2 c=1 printf second","dispatch-1--run-3 c=1 printf x >> effects","dispatch-2--run-3 c=1 printf y >> effects","dispatch-1--complete-4 c=1 :","dispatch-2--complete-4 c=1 :","dispatch-1 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","dispatch-2 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":true,"ok":false,"ms":2098} +{"s":"I1","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"xyLR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EE96DN6ZMTV5MB47D98DC\",\"runId\":\"01M53EE96DN6ZMTV5MB47D98DC\",\"socketPath\":\"/tmp/relayflowd-e93f0aca7924.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"xyLRZ","mode":"serial","journalReplay":true,"dups":["printf '%s' '{\"name\":\"child\",\"completionReason\":\"s: dispatch-1 & dispatch-2"],"ids":["dispatch-1--run-1 c=1 printf first","dispatch-1--run-2 c=1 printf second","dispatch-2--run-1 c=1 printf first","dispatch-2--run-2 c=1 printf second","dispatch-1--run-3 c=1 printf x >> effects","dispatch-2--run-3 c=1 printf y >> effects","dispatch-1--complete-4 c=1 :","dispatch-2--complete-4 c=1 :","dispatch-1 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","dispatch-2 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":true,"ok":false,"ms":2215} +{"s":"K2b","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"ABC","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EEAKY2CWKAMASB3KF32QP\",\"runId\":\"01M53EEAKY2CWKAMASB3KF32QP\",\"socketPath\":\"/tmp/relayflowd-761754f4ba3b.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABCZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=1 printf C >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1754} +{"s":"I1","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"xyLR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EEAMAZWRVD0TH89BZ1DJ8\",\"runId\":\"01M53EEAMAZWRVD0TH89BZ1DJ8\",\"socketPath\":\"/tmp/relayflowd-9e9174fed728.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"xyLRZ","mode":"serial","journalReplay":true,"dups":["printf '%s' '{\"name\":\"child\",\"completionReason\":\"s: dispatch-1 & dispatch-2"],"ids":["dispatch-1--run-1 c=1 printf first","dispatch-1--run-2 c=1 printf second","dispatch-2--run-1 c=1 printf first","dispatch-2--run-2 c=1 printf second","dispatch-1--run-3 c=1 printf x >> effects","dispatch-2--run-3 c=1 printf y >> effects","dispatch-1--complete-4 c=1 :","dispatch-2--complete-4 c=1 :","dispatch-1 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","dispatch-2 c=1 printf '%s' '{\"name\":\"child\",\"completionReason\":\"success\"}'","run-3 c=1 printf L >> effects","run-4 c=1 printf R >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":true,"ok":false,"ms":2274} +{"s":"K2b","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"ABC","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EEB88DQCDX5CJ433HGBCR\",\"runId\":\"01M53EEB88DQCDX5CJ433HGBCR\",\"socketPath\":\"/tmp/relayflowd-d07bd1f61610.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABCZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=1 printf C >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1860} +{"s":"K2b","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"ABC","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EECASF5QCAASS4K1B51TQ\",\"runId\":\"01M53EECASF5QCAASS4K1B51TQ\",\"socketPath\":\"/tmp/relayflowd-b5ce8419fb13.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABCZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=1 printf C >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1938} +{"s":"K2b","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"ABC","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EECRHF859WXPF07WYV62G\",\"runId\":\"01M53EECRHF859WXPF07WYV62G\",\"socketPath\":\"/tmp/relayflowd-8c6df50d2448.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABCZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=1 printf C >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2085} +{"s":"K2b","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"ABC","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EED2A77ES3AFZ15RZV3Z0\",\"runId\":\"01M53EED2A77ES3AFZ15RZV3Z0\",\"socketPath\":\"/tmp/relayflowd-d05d50ce3da8.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABCZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=1 printf C >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2124} +{"s":"K2b","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"ABC","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EEE7QXG2NEJMV1Y7G7422\",\"runId\":\"01M53EEE7QXG2NEJMV1Y7G7422\",\"socketPath\":\"/tmp/relayflowd-3fb2f76298e7.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABCZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=1 printf C >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2373} +{"s":"K3","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EEESX12ZCYVJ6Q1CX7DGT\",\"runId\":\"01M53EEESX12ZCYVJ6Q1CX7DGT\",\"socketPath\":\"/tmp/relayflowd-471c3ed8e2bd.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf a","run-2 c=1 sleep 0.1; printf b","run-3 c=1 printf ab >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1859} +{"s":"K3","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EEF43HH9YYBE6QVNH1EF6\",\"runId\":\"01M53EEF43HH9YYBE6QVNH1EF6\",\"socketPath\":\"/tmp/relayflowd-ac15e5f418b0.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf a","run-2 c=1 sleep 0.1; printf b","run-3 c=1 printf ab >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1952} +{"s":"K3","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EEGJ7WME7VW0ZAQR1QZWQ\",\"runId\":\"01M53EEGJ7WME7VW0ZAQR1QZWQ\",\"socketPath\":\"/tmp/relayflowd-6a564080f806.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf a","run-2 c=1 sleep 0.1; printf b","run-3 c=1 printf ab >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2032} +{"s":"K3","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EEGMVDS3MC730MSWMS672\",\"runId\":\"01M53EEGMVDS3MC730MSWMS672\",\"socketPath\":\"/tmp/relayflowd-f2e7b2cefbea.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf a","run-2 c=1 sleep 0.1; printf b","run-3 c=1 printf ab >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2073} +{"s":"K3","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EEH2G5EBYDJJ7JMCGFM5Z\",\"runId\":\"01M53EEH2G5EBYDJJ7JMCGFM5Z\",\"socketPath\":\"/tmp/relayflowd-e6d58894ad27.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf a","run-2 c=1 sleep 0.1; printf b","run-3 c=1 printf ab >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2188} +{"s":"K5b","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"AB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EEJNXEPJGKETEZ4Z9WGBA\",\"runId\":\"01M53EEJNXEPJGKETEZ4Z9WGBA\",\"socketPath\":\"/tmp/relayflowd-931a19cff610.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A >> effects","run-2 c=1 printf B >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1676} +{"s":"K3","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EEJJNTV7XK8Z3CGWXN5EJ\",\"runId\":\"01M53EEJJNTV7XK8Z3CGWXN5EJ\",\"socketPath\":\"/tmp/relayflowd-c6c06698c5f2.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf a","run-2 c=1 sleep 0.1; printf b","run-3 c=1 printf ab >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2334} +{"s":"K5b","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"AB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EEK7H8ZARR0N6ANSJ310A\",\"runId\":\"01M53EEK7H8ZARR0N6ANSJ310A\",\"socketPath\":\"/tmp/relayflowd-5d38ef58bdd8.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A >> effects","run-2 c=1 printf B >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1705} +{"s":"K5b","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"AB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EEM9FSRKRJQZWMX727DVM\",\"runId\":\"01M53EEM9FSRKRJQZWMX727DVM\",\"socketPath\":\"/tmp/relayflowd-130a1959b540.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A >> effects","run-2 c=1 printf B >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1780} +{"s":"K5b","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"AB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EEMSZCF9D10TXVYMH9HVS\",\"runId\":\"01M53EEMSZCF9D10TXVYMH9HVS\",\"socketPath\":\"/tmp/relayflowd-6e9e38491014.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A >> effects","run-2 c=1 printf B >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1838} +{"s":"K5b","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"AB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EEMVQRWZWJHCFRPNJRC7F\",\"runId\":\"01M53EEMVQRWZWJHCFRPNJRC7F\",\"socketPath\":\"/tmp/relayflowd-c97403f459ff.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A >> effects","run-2 c=1 printf B >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1950} +{"s":"K5b","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"AB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EEP141R48CWSGSCQPTG3M\",\"runId\":\"01M53EEP141R48CWSGSCQPTG3M\",\"socketPath\":\"/tmp/relayflowd-3d489f2dbcb6.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A >> effects","run-2 c=1 printf B >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2078} +{"s":"K13b","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"BAC","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EEPKGNA9THV6X5C63NH12\",\"runId\":\"01M53EEPKGNA9THV6X5C63NH12\",\"socketPath\":\"/tmp/relayflowd-57890ba9f802.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BACZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf B >> effects","run-2 c=1 sleep 0.1; printf A >> effects","run-3 c=1 printf C >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1880} +{"s":"K13b","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"BAC","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EEPR0HAEAYAJCMGBSVMTV\",\"runId\":\"01M53EEPR0HAEAYAJCMGBSVMTV\",\"socketPath\":\"/tmp/relayflowd-2c022cea6866.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BACZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf B >> effects","run-2 c=1 sleep 0.1; printf A >> effects","run-3 c=1 printf C >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1957} +{"s":"K13b","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"BAC","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EER2T31HHMX4523KBZ07K\",\"runId\":\"01M53EER2T31HHMX4523KBZ07K\",\"socketPath\":\"/tmp/relayflowd-107ed442c3d5.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BACZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf B >> effects","run-2 c=1 sleep 0.1; printf A >> effects","run-3 c=1 printf C >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2055} +{"s":"K13b","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"BAC","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EERE9SYDAA4B65NQ1P7ZF\",\"runId\":\"01M53EERE9SYDAA4B65NQ1P7ZF\",\"socketPath\":\"/tmp/relayflowd-d81917e68861.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BACZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf B >> effects","run-2 c=1 sleep 0.1; printf A >> effects","run-3 c=1 printf C >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2142} +{"s":"K13b","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"BAC","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EERNA94PDKS35HM3DAWGX\",\"runId\":\"01M53EERNA94PDKS35HM3DAWGX\",\"socketPath\":\"/tmp/relayflowd-9062162aa602.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BACZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf B >> effects","run-2 c=1 sleep 0.1; printf A >> effects","run-3 c=1 printf C >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2205} +{"s":"K13b","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"BAC","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EET2CKPZ0P5M6EGVT5JFB\",\"runId\":\"01M53EET2CKPZ0P5M6EGVT5JFB\",\"socketPath\":\"/tmp/relayflowd-3b64e477e87a.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BACZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf B >> effects","run-2 c=1 sleep 0.1; printf A >> effects","run-3 c=1 printf C >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2532} +SUMMARY P1 head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=XZ +SUMMARY P1h head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=XZ +SUMMARY P1c head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=XZ +SUMMARY P1n head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY P1bn head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY P2 head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=XZ +SUMMARY C1e head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=XYZ +SUMMARY G1 head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=ABGZ +SUMMARY H1 head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=LRZ +SUMMARY H2 head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=LRZ +SUMMARY K4 head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=LRZ +SUMMARY I1 head>head ok=0/6 replay=6 fresh=0 mode=serial codes=0 effects=xyLRZ +SUMMARY K2b head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=ABCZ +SUMMARY K3 head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abZ +SUMMARY K5b head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=ABZ +SUMMARY K13b head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=BACZ diff --git a/evidence/native-parallel-review8/h7-prior-q.log b/evidence/native-parallel-review8/h7-prior-q.log new file mode 100644 index 000000000..ca6860b07 --- /dev/null +++ b/evidence/native-parallel-review8/h7-prior-q.log @@ -0,0 +1,49 @@ +{"s":"Q5","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EAHWVK6XGDJ0HWGVXY5YN\",\"runId\":\"01M53EAHWVK6XGDJ0HWGVXY5YN\",\"socketPath\":\"/tmp/relayflowd-b3e5591922fb.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2235} +{"s":"Q5","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EAHWTXY9GYFETKQDGBMAE\",\"runId\":\"01M53EAHWTXY9GYFETKQDGBMAE\",\"socketPath\":\"/tmp/relayflowd-135ccf445036.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2292} +{"s":"Q5","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EAHWVTW2QRJWHVMFYQ7FQ\",\"runId\":\"01M53EAHWVTW2QRJWHVMFYQ7FQ\",\"socketPath\":\"/tmp/relayflowd-ed652cc325a4.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2355} +{"s":"Q5","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EAM20Z4Q3HCP40PZG43KZ\",\"runId\":\"01M53EAM20Z4Q3HCP40PZG43KZ\",\"socketPath\":\"/tmp/relayflowd-98f519f5d54c.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2403} +{"s":"Q5","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EAM3R7P6JX03TP0HDQ2X9\",\"runId\":\"01M53EAM3R7P6JX03TP0HDQ2X9\",\"socketPath\":\"/tmp/relayflowd-b64a522e9e72.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2415} +{"s":"Q5","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EAM53RHDYMSHCRJAN32FV\",\"runId\":\"01M53EAM53RHDYMSHCRJAN32FV\",\"socketPath\":\"/tmp/relayflowd-07eea13fb647.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2560} +{"s":"Q5n","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EAPED1G8M8HRNG3YPQRTD\",\"runId\":\"01M53EAPED1G8M8HRNG3YPQRTD\",\"socketPath\":\"/tmp/relayflowd-87ebef836d64.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2400} +{"s":"Q5n","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EAPEPN9TT24W90DEVB7RG\",\"runId\":\"01M53EAPEPN9TT24W90DEVB7RG\",\"socketPath\":\"/tmp/relayflowd-023d1f0a221e.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2361} +{"s":"Q5n","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EAPQJH84A5XAEQWNNRRMH\",\"runId\":\"01M53EAPQJH84A5XAEQWNNRRMH\",\"socketPath\":\"/tmp/relayflowd-cfdaef6a996e.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2390} +{"s":"Q5n","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EARSZK4CNSSNACNDR2JJH\",\"runId\":\"01M53EARSZK4CNSSNACNDR2JJH\",\"socketPath\":\"/tmp/relayflowd-ee6fb3de28da.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2514} +{"s":"Q5n","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EART95Y381NPDXKSYEZ1M\",\"runId\":\"01M53EART95Y381NPDXKSYEZ1M\",\"socketPath\":\"/tmp/relayflowd-93f9d7968fe9.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2585} +{"s":"Q5n","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EAS1319BF6SDAF48KJ7RT\",\"runId\":\"01M53EAS1319BF6SDAF48KJ7RT\",\"socketPath\":\"/tmp/relayflowd-a9a88d785959.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.4; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=1 printf X >> effects","run-8 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2673} +{"s":"Q5h","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EAV6WKT9J8WXSPXXH24P3\",\"runId\":\"01M53EAV6WKT9J8WXSPXXH24P3\",\"socketPath\":\"/tmp/relayflowd-6e9eae696a4f.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2069} +{"s":"Q5h","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EAV982Y76MPS8FCF40P4A\",\"runId\":\"01M53EAV982Y76MPS8FCF40P4A\",\"socketPath\":\"/tmp/relayflowd-8e2378e45c60.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2120} +{"s":"Q5h","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EAVKKSEBH5DP4FSESCZQ9\",\"runId\":\"01M53EAVKKSEBH5DP4FSESCZQ9\",\"socketPath\":\"/tmp/relayflowd-87fdb343a4cf.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2145} +{"s":"Q5h","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EAX6AK3PM6JT9YPSVYN95\",\"runId\":\"01M53EAX6AK3PM6JT9YPSVYN95\",\"socketPath\":\"/tmp/relayflowd-be31fb84ef07.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2354} +{"s":"Q5h","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EAXBT0033FEEJT536PZ0A\",\"runId\":\"01M53EAXBT0033FEEJT536PZ0A\",\"socketPath\":\"/tmp/relayflowd-c14793518acd.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2449} +{"s":"Q5h","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EAXPNM5YE9VBKEX7SKMEA\",\"runId\":\"01M53EAXPNM5YE9VBKEX7SKMEA\",\"socketPath\":\"/tmp/relayflowd-f28afe8460de.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2544} +{"s":"Q5w","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EAZJ39C02ZNCE80W5JZYP\",\"runId\":\"01M53EAZJ39C02ZNCE80W5JZYP\",\"socketPath\":\"/tmp/relayflowd-fad2bdec956c.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2302} +{"s":"Q5w","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EAZRSV8CQ6BTWG848SSB8\",\"runId\":\"01M53EAZRSV8CQ6BTWG848SSB8\",\"socketPath\":\"/tmp/relayflowd-1b13f5e07cfa.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2374} +{"s":"Q5w","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EB05CK513BHDYY8Y574XY\",\"runId\":\"01M53EB05CK513BHDYY8Y574XY\",\"socketPath\":\"/tmp/relayflowd-436a4432e45c.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2374} +{"s":"Q5w","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EB1QTB7A2CZ18QESR31HJ\",\"runId\":\"01M53EB1QTB7A2CZ18QESR31HJ\",\"socketPath\":\"/tmp/relayflowd-53945fca4327.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2473} +{"s":"Q5w","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EB218Q8GM3ZQ2F0SN355G\",\"runId\":\"01M53EB218Q8GM3ZQ2F0SN355G\",\"socketPath\":\"/tmp/relayflowd-05b250ebc5dd.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2566} +{"s":"Q5w","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EB2FXX8N06M6HVGBH48RW\",\"runId\":\"01M53EB2FXX8N06M6HVGBH48RW\",\"socketPath\":\"/tmp/relayflowd-c03c9d10b53f.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2654} +{"s":"Q5wn","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EB45217VCQWRR75BAB5K2\",\"runId\":\"01M53EB45217VCQWRR75BAB5K2\",\"socketPath\":\"/tmp/relayflowd-9a8bfb709d39.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2338} +{"s":"Q5wn","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EB4HF1A9GCZVFR3D3BRZT\",\"runId\":\"01M53EB4HF1A9GCZVFR3D3BRZT\",\"socketPath\":\"/tmp/relayflowd-c8201a47ed80.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2383} +{"s":"Q5wn","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EB53510ASY1BDNGF1XH7Y\",\"runId\":\"01M53EB53510ASY1BDNGF1XH7Y\",\"socketPath\":\"/tmp/relayflowd-c0abd1eaa4e1.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2499} +{"s":"Q5wn","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EB6E4798BSDYWD4FQM5WQ\",\"runId\":\"01M53EB6E4798BSDYWD4FQM5WQ\",\"socketPath\":\"/tmp/relayflowd-7e6eb69a37ac.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2532} +{"s":"Q5wn","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EB6X1JZTJR6FA9HSGJCJQ\",\"runId\":\"01M53EB6X1JZTJR6FA9HSGJCJQ\",\"socketPath\":\"/tmp/relayflowd-7a1a6951c98b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2753} +{"s":"Q5wn","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EB7GQK3B58TPGV4XRP69M\",\"runId\":\"01M53EB7GQK3B58TPGV4XRP69M\",\"socketPath\":\"/tmp/relayflowd-beb524311525.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2787} +{"s":"Q5wh","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EB8ZD6SJHHFTY5FBS7NZG\",\"runId\":\"01M53EB8ZD6SJHHFTY5FBS7NZG\",\"socketPath\":\"/tmp/relayflowd-e46beef835e6.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2297} +{"s":"Q5wh","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EB9JHP519TB6KKSTEQAJ0\",\"runId\":\"01M53EB9JHP519TB6KKSTEQAJ0\",\"socketPath\":\"/tmp/relayflowd-ddcb44f95bf4.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2284} +{"s":"Q5wh","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBA88P7E1AXPK5DPX7KZJ\",\"runId\":\"01M53EBA88P7E1AXPK5DPX7KZJ\",\"socketPath\":\"/tmp/relayflowd-cbfa81e43c43.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2368} +{"s":"Q5wh","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBB5YZR94MQ9PE7JFW3XE\",\"runId\":\"01M53EBB5YZR94MQ9PE7JFW3XE\",\"socketPath\":\"/tmp/relayflowd-45c3e373c024.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2491} +{"s":"Q5wh","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBBTNE2HY4B08EM7086MF\",\"runId\":\"01M53EBBTNE2HY4B08EM7086MF\",\"socketPath\":\"/tmp/relayflowd-a92d06fa43f0.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2605} +{"s":"Q5wh","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBCJ04PGP6ANW2WEKSZS5\",\"runId\":\"01M53EBCJ04PGP6ANW2WEKSZS5\",\"socketPath\":\"/tmp/relayflowd-430c538b2201.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2729} +{"s":"Q6Pw","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBDJM2RTZJV8J1N705JMJ\",\"runId\":\"01M53EBDJM2RTZJV8J1N705JMJ\",\"socketPath\":\"/tmp/relayflowd-9f6a4b9cce29.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2395} +{"s":"Q6Pw","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBEB88KFRQB2VTP5WGNQT\",\"runId\":\"01M53EBEB88KFRQB2VTP5WGNQT\",\"socketPath\":\"/tmp/relayflowd-fb7089ec8bdf.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2529} +{"s":"Q6Pw","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBF6GMXZHPA5BT3PA09FB\",\"runId\":\"01M53EBF6GMXZHPA5BT3PA09FB\",\"socketPath\":\"/tmp/relayflowd-fee025307850.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2568} +{"s":"Q6Pw","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBFXK1FJ407J3Q0D0H24M\",\"runId\":\"01M53EBFXK1FJ407J3Q0D0H24M\",\"socketPath\":\"/tmp/relayflowd-e89b886ae725.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2635} +{"s":"Q6Pw","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBGTRP7BV9R04D1H512G4\",\"runId\":\"01M53EBGTRP7BV9R04D1H512G4\",\"socketPath\":\"/tmp/relayflowd-70fde2547e0f.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2798} +{"s":"Q6Pw","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EBHQBR96NN8Y5B9GV9G7P\",\"runId\":\"01M53EBHQBR96NN8Y5B9GV9G7P\",\"socketPath\":\"/tmp/relayflowd-30a91e31dae6.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2969} +SUMMARY Q5 head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=XZ +SUMMARY Q5n head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY Q5h head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=XZ +SUMMARY Q5w head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=XZ +SUMMARY Q5wn head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY Q5wh head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=XZ +SUMMARY Q6Pw head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ diff --git a/evidence/native-parallel-review8/h7-prior-r.log b/evidence/native-parallel-review8/h7-prior-r.log new file mode 100644 index 000000000..e40770758 --- /dev/null +++ b/evidence/native-parallel-review8/h7-prior-r.log @@ -0,0 +1,56 @@ +{"s":"R1","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E8S3MXYBHBK209XBP3FYD\",\"runId\":\"01M53E8S3MXYBHBK209XBP3FYD\",\"socketPath\":\"/tmp/relayflowd-d519d775b241.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2281} +{"s":"R1","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E8S3M1SF519GZCB4AV85K\",\"runId\":\"01M53E8S3M1SF519GZCB4AV85K\",\"socketPath\":\"/tmp/relayflowd-5e1e0263cfb7.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2310} +{"s":"R1","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E8S3MVTSWJ58FVYTR06FB\",\"runId\":\"01M53E8S3MVTSWJ58FVYTR06FB\",\"socketPath\":\"/tmp/relayflowd-cf7c2d7bc996.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2396} +{"s":"R1","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E8V6604YPGW3FZZV8SJ5A\",\"runId\":\"01M53E8V6604YPGW3FZZV8SJ5A\",\"socketPath\":\"/tmp/relayflowd-2f2829b7033f.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2260} +{"s":"R1","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E8V7KPAQVJ7YJY2QW78PK\",\"runId\":\"01M53E8V7KPAQVJ7YJY2QW78PK\",\"socketPath\":\"/tmp/relayflowd-1a8bdec81ebc.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2372} +{"s":"R1","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E8V99CTSXAP68DSZ24BVF\",\"runId\":\"01M53E8V99CTSXAP68DSZ24BVF\",\"socketPath\":\"/tmp/relayflowd-ea64af6445cd.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2469} +{"s":"R1w","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E8XBHCRG71M6K8EE7GHEB\",\"runId\":\"01M53E8XBHCRG71M6K8EE7GHEB\",\"socketPath\":\"/tmp/relayflowd-82a8ec49964a.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2285} +{"s":"R1w","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E8XH40MMAN952DYHBYHT6\",\"runId\":\"01M53E8XH40MMAN952DYHBYHT6\",\"socketPath\":\"/tmp/relayflowd-e60b3e64fbbb.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2314} +{"s":"R1w","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E8XPTBE4C1SB8M8H6GHRA\",\"runId\":\"01M53E8XPTBE4C1SB8M8H6GHRA\",\"socketPath\":\"/tmp/relayflowd-2ff485a06f7f.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2410} +{"s":"R1w","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E8ZJMY7HX838EHH6HADPS\",\"runId\":\"01M53E8ZJMY7HX838EHH6HADPS\",\"socketPath\":\"/tmp/relayflowd-aa6c08135d36.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2456} +{"s":"R1w","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E8ZS8AYPCYDMXCXADDF9Z\",\"runId\":\"01M53E8ZS8AYPCYDMXCXADDF9Z\",\"socketPath\":\"/tmp/relayflowd-469fab75311d.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2818} +{"s":"R1w","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E902Y9R9HMPXTN7N137WV\",\"runId\":\"01M53E902Y9R9HMPXTN7N137WV\",\"socketPath\":\"/tmp/relayflowd-635993cd616c.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2903} +{"s":"R1wn","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9270EAXADV8913J8NQ3M\",\"runId\":\"01M53E9270EAXADV8913J8NQ3M\",\"socketPath\":\"/tmp/relayflowd-bc74b2db54b6.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2551} +{"s":"R1wn","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E92JHRPN27T9N7XJX4EHB\",\"runId\":\"01M53E92JHRPN27T9N7XJX4EHB\",\"socketPath\":\"/tmp/relayflowd-2d0cd68ebafd.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2481} +{"s":"R1wn","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E92XG6XRE4ARC38CJK711\",\"runId\":\"01M53E92XG6XRE4ARC38CJK711\",\"socketPath\":\"/tmp/relayflowd-e65e238eb90b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2496} +{"s":"R1wn","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E94G8057BCXNJPSFF47AG\",\"runId\":\"01M53E94G8057BCXNJPSFF47AG\",\"socketPath\":\"/tmp/relayflowd-f613dc110618.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2506} +{"s":"R1wn","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E94ZF8N4EYE5FK40QV5NX\",\"runId\":\"01M53E94ZF8N4EYE5FK40QV5NX\",\"socketPath\":\"/tmp/relayflowd-0760df87a16a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2651} +{"s":"R1wn","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E95BA15R2DA5W1TNV7XY4\",\"runId\":\"01M53E95BA15R2DA5W1TNV7XY4\",\"socketPath\":\"/tmp/relayflowd-fad0ca6a39f0.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2799} +{"s":"R2w","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E96YSXKYV3T3SWN8BCX91\",\"runId\":\"01M53E96YSXKYV3T3SWN8BCX91\",\"socketPath\":\"/tmp/relayflowd-4a7cb4ccc0f8.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2223} +{"s":"R2w","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E97H8NE0HKG9HB46EXFGZ\",\"runId\":\"01M53E97H8NE0HKG9HB46EXFGZ\",\"socketPath\":\"/tmp/relayflowd-5a462a8b021d.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2259} +{"s":"R2w","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E982BBEC7M21N0HB812DA\",\"runId\":\"01M53E982BBEC7M21N0HB812DA\",\"socketPath\":\"/tmp/relayflowd-0ce32a74779c.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2365} +{"s":"R2w","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E994BXZGERA2N1AM5AQ9W\",\"runId\":\"01M53E994BXZGERA2N1AM5AQ9W\",\"socketPath\":\"/tmp/relayflowd-c6462e33a2b2.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2469} +{"s":"R2w","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E99RBCRGJ0TFWKKA22BJD\",\"runId\":\"01M53E99RBCRGJ0TFWKKA22BJD\",\"socketPath\":\"/tmp/relayflowd-e2de6d35f4c8.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2518} +{"s":"R2w","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9ACHFPEK9PXB1A49AKR5\",\"runId\":\"01M53E9ACHFPEK9PXB1A49AKR5\",\"socketPath\":\"/tmp/relayflowd-8580480df24f.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2700} +{"s":"R3","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9BHJD38G9NQ4BET4ENCW\",\"runId\":\"01M53E9BHJD38G9NQ4BET4ENCW\",\"socketPath\":\"/tmp/relayflowd-2ae78323fcda.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2006} +{"s":"R3","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9C772PVSQ66Z0XW7F2WH\",\"runId\":\"01M53E9C772PVSQ66Z0XW7F2WH\",\"socketPath\":\"/tmp/relayflowd-d007c577fced.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2059} +{"s":"R3","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9D0AVX366P5JK522NE5X\",\"runId\":\"01M53E9D0AVX366P5JK522NE5X\",\"socketPath\":\"/tmp/relayflowd-e158391cc0aa.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2119} +{"s":"R3","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9DGK9WXGC4E2V8A7MTNS\",\"runId\":\"01M53E9DGK9WXGC4E2V8A7MTNS\",\"socketPath\":\"/tmp/relayflowd-a18effb6cbfa.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2224} +{"s":"R3","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9E74DKBF0W1PCQW7TFDB\",\"runId\":\"01M53E9E74DKBF0W1PCQW7TFDB\",\"socketPath\":\"/tmp/relayflowd-ef00d01e2401.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2313} +{"s":"R3","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9F2W3H5VMY38YTETTHKH\",\"runId\":\"01M53E9F2W3H5VMY38YTETTHKH\",\"socketPath\":\"/tmp/relayflowd-6975af09dfaa.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.5; printf A","run-2 c=1 printf B","run-3 c=1 sleep 0.1; printf C","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2446} +{"s":"R3w","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9FNMYEMZ59TN286QRW96\",\"runId\":\"01M53E9FNMYEMZ59TN286QRW96\",\"socketPath\":\"/tmp/relayflowd-b66344c1121a.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2253} +{"s":"R3w","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9GFAVPG75X42JXWQA0GD\",\"runId\":\"01M53E9GFAVPG75X42JXWQA0GD\",\"socketPath\":\"/tmp/relayflowd-0b2d06eab82e.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2319} +{"s":"R3w","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9HEZNZ5ZD5FYB3CBNWXJ\",\"runId\":\"01M53E9HEZNZ5ZD5FYB3CBNWXJ\",\"socketPath\":\"/tmp/relayflowd-31ee253eb34f.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2494} +{"s":"R3w","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9HVVNRJBHB9MQ5PS3JPZ\",\"runId\":\"01M53E9HVVNRJBHB9MQ5PS3JPZ\",\"socketPath\":\"/tmp/relayflowd-198fb71b36ee.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2542} +{"s":"R3w","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9JRFK3GE02TGNRWTR3MD\",\"runId\":\"01M53E9JRFK3GE02TGNRWTR3MD\",\"socketPath\":\"/tmp/relayflowd-378a4f67357a.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2633} +{"s":"R4w","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9MBSD8DXA579WPDEHR03\",\"runId\":\"01M53E9MBSD8DXA579WPDEHR03\",\"socketPath\":\"/tmp/relayflowd-a2dcc287095e.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2225} +{"s":"R3w","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9KXJE0XW6TQN5B21M8VR\",\"runId\":\"01M53E9KXJE0XW6TQN5B21M8VR\",\"socketPath\":\"/tmp/relayflowd-a31a35171f84.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2732} +{"s":"R4w","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9NB1KNKGJMS3JN0VHWM9\",\"runId\":\"01M53E9NB1KNKGJMS3JN0VHWM9\",\"socketPath\":\"/tmp/relayflowd-6225b7ca4de8.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2341} +{"s":"R4w","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9PG1FJCBM2HP2TZFQSAV\",\"runId\":\"01M53E9PG1FJCBM2HP2TZFQSAV\",\"socketPath\":\"/tmp/relayflowd-a2edc5576dc2.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2367} +{"s":"R4w","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9PJZNK7XW59D2HVPKCTH\",\"runId\":\"01M53E9PJZNK7XW59D2HVPKCTH\",\"socketPath\":\"/tmp/relayflowd-5861f11252e0.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2462} +{"s":"R4w","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9QKNEV94NMBW4FH28E79\",\"runId\":\"01M53E9QKNEV94NMBW4FH28E79\",\"socketPath\":\"/tmp/relayflowd-6d5c936aa624.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2560} +{"s":"R1c","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9S01SWQ34V55EJFQACK3\",\"runId\":\"01M53E9S01SWQ34V55EJFQACK3\",\"socketPath\":\"/tmp/relayflowd-14de157fa55f.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2234} +{"s":"R4w","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9RVESW7HA1DYZTGRXATB\",\"runId\":\"01M53E9RVESW7HA1DYZTGRXATB\",\"socketPath\":\"/tmp/relayflowd-b03701f296c8.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2706} +{"s":"R1c","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9T44VFW9AFJEGCSCV8TH\",\"runId\":\"01M53E9T44VFW9AFJEGCSCV8TH\",\"socketPath\":\"/tmp/relayflowd-1477822c460c.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2297} +{"s":"R1c","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9V63GWYWRQF7YE5SEPRX\",\"runId\":\"01M53E9V63GWYWRQF7YE5SEPRX\",\"socketPath\":\"/tmp/relayflowd-5b2f61f34bde.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2385} +{"s":"R1c","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9VG614KZS152EBW1G6XY\",\"runId\":\"01M53E9VG614KZS152EBW1G6XY\",\"socketPath\":\"/tmp/relayflowd-ce2e572e0d81.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2473} +{"s":"R1c","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9WB60C2G5NC9DYDG4P44\",\"runId\":\"01M53E9WB60C2G5NC9DYDG4P44\",\"socketPath\":\"/tmp/relayflowd-7a7ede6e17a1.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2587} +{"s":"R1c","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E9XGHWWGGQFMW65NNFD3W\",\"runId\":\"01M53E9XGHWWGGQFMW65NNFD3W\",\"socketPath\":\"/tmp/relayflowd-20afe854da01.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.5; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.1; printf C","run-5 c=1 printf X >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2723} +SUMMARY R1 head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=XZ +SUMMARY R1w head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=XZ +SUMMARY R1wn head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY R2w head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=XZ +SUMMARY R3 head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=XZ +SUMMARY R3w head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=XZ +SUMMARY R4w head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=XZ +SUMMARY R1c head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=XZ diff --git a/evidence/native-parallel-review8/h7-prior-r5n.log b/evidence/native-parallel-review8/h7-prior-r5n.log new file mode 100644 index 000000000..e1a23cf61 --- /dev/null +++ b/evidence/native-parallel-review8/h7-prior-r5n.log @@ -0,0 +1,7 @@ +{"s":"R5n","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EA73SEEDM4JWFF7TSAKGG\",\"runId\":\"01M53EA73SEEDM4JWFF7TSAKGG\",\"socketPath\":\"/tmp/relayflowd-df6421e4072a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2522} +{"s":"R5n","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EA73N4M2ZCE22TW6T1MR8\",\"runId\":\"01M53EA73N4M2ZCE22TW6T1MR8\",\"socketPath\":\"/tmp/relayflowd-8b2d0f486c3b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2579} +{"s":"R5n","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EA72RTGYHSASVY7C0WHZE\",\"runId\":\"01M53EA72RTGYHSASVY7C0WHZE\",\"socketPath\":\"/tmp/relayflowd-1c8e9dee4081.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2642} +{"s":"R5n","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EA9H8KA48K27PY9NZGXRP\",\"runId\":\"01M53EA9H8KA48K27PY9NZGXRP\",\"socketPath\":\"/tmp/relayflowd-2f478e2fb574.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2706} +{"s":"R5n","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EA9K75D0HFEYZ1K0X081Z\",\"runId\":\"01M53EA9K75D0HFEYZ1K0X081Z\",\"socketPath\":\"/tmp/relayflowd-a90562bc7dc5.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2732} +{"s":"R5n","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EA9MDFFFGKQP53CCQEPR9\",\"runId\":\"01M53EA9MDFFFGKQP53CCQEPR9\",\"socketPath\":\"/tmp/relayflowd-80e95b210d6a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2801} +SUMMARY R5n head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ diff --git a/evidence/native-parallel-review8/h7-prior-secrets.log b/evidence/native-parallel-review8/h7-prior-secrets.log new file mode 100644 index 000000000..01ced3ea6 --- /dev/null +++ b/evidence/native-parallel-review8/h7-prior-secrets.log @@ -0,0 +1,28 @@ +{"s":"S1","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EW67MACP3RW7JCDN7ND1E\",\"runId\":\"01M53EW67MACP3RW7JCDN7ND1E\",\"socketPath\":\"/tmp/relayflowd-3034ffffc246.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/head-head-","run-2 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/head-head-","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/head-head-","run-after-4015931d1cbfe824b3715e3bde0bc2582a6a4310b79beb4fee6f63477777ec80-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"sec":"G:ok U:LEAK L:LEAK","ok":true,"ms":1695} +{"s":"S1","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EW67K2EEHP3BHM0HFCNVV\",\"runId\":\"01M53EW67K2EEHP3BHM0HFCNVV\",\"socketPath\":\"/tmp/relayflowd-79b3078c8ed4.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/head-head-","run-2 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/head-head-","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/head-head-","run-after-4015931d1cbfe824b3715e3bde0bc2582a6a4310b79beb4fee6f63477777ec80-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"sec":"G:ok U:LEAK L:LEAK","ok":true,"ms":1759} +{"s":"S1","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EW67KQJ8PZ6F5MAC0GVQ6\",\"runId\":\"01M53EW67KQJ8PZ6F5MAC0GVQ6\",\"socketPath\":\"/tmp/relayflowd-1b04f63df517.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/head-head-","run-1 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/head-head-","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/head-head-","run-after-4015931d1cbfe824b3715e3bde0bc2582a6a4310b79beb4fee6f63477777ec80-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"sec":"G:ok U:LEAK L:LEAK","ok":true,"ms":1804} +{"s":"S1","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EW7V3Y5K6FRXXR4NVPG3R\",\"runId\":\"01M53EW7V3Y5K6FRXXR4NVPG3R\",\"socketPath\":\"/tmp/relayflowd-f98fc409395d.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/head-head-","run-2 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/head-head-","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/head-head-","run-after-4015931d1cbfe824b3715e3bde0bc2582a6a4310b79beb4fee6f63477777ec80-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"sec":"G:ok U:LEAK L:LEAK","ok":true,"ms":1881} +{"s":"S1","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EW7X2KY150ND99PKDQQGA\",\"runId\":\"01M53EW7X2KY150ND99PKDQQGA\",\"socketPath\":\"/tmp/relayflowd-24419f980ced.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/head-head-","run-2 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/head-head-","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/head-head-","run-after-4015931d1cbfe824b3715e3bde0bc2582a6a4310b79beb4fee6f63477777ec80-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"sec":"G:ok U:LEAK L:LEAK","ok":true,"ms":1883} +{"s":"S1","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EW7YJ8MTQ35S3PSNM2K2B\",\"runId\":\"01M53EW7YJ8MTQ35S3PSNM2K2B\",\"socketPath\":\"/tmp/relayflowd-a00e9fc0477f.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/head-head-","run-2 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/head-head-","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/head-head-","run-after-4015931d1cbfe824b3715e3bde0bc2582a6a4310b79beb4fee6f63477777ec80-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"sec":"G:ok U:LEAK L:LEAK","ok":true,"ms":2120} +{"s":"S1","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EW9JEQA5TZGZEESD7A447\",\"runId\":\"01M53EW9JEQA5TZGZEESD7A447\",\"socketPath\":\"/tmp/relayflowd-2470977423ad.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/base-base-","run-2 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/base-base-","run-3 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/base-base-","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"sec":"G:ok U:LEAK L:LEAK","ok":true,"ms":1386} +{"s":"S1","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EW9MBR2BWEMMMHP1RXB0W\",\"runId\":\"01M53EW9MBR2BWEMMMHP1RXB0W\",\"socketPath\":\"/tmp/relayflowd-750b3dccc9cb.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/base-base-","run-2 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/base-base-","run-3 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/base-base-","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"sec":"G:ok U:LEAK L:LEAK","ok":true,"ms":1468} +{"s":"S1","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EW9VRRA6PSHJDTVGTJ484\",\"runId\":\"01M53EW9VRRA6PSHJDTVGTJ484\",\"socketPath\":\"/tmp/relayflowd-8bbf338c10c3.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/base-base-","run-2 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/base-base-","run-3 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/base-base-","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"sec":"G:ok U:LEAK L:LEAK","ok":true,"ms":1489} +{"s":"S1","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EWAWB8P5R1EYRVRXZN1E1\",\"runId\":\"01M53EWAWB8P5R1EYRVRXZN1E1\",\"socketPath\":\"/tmp/relayflowd-4c4c2779d313.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/base-base-","run-2 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/base-base-","run-3 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/base-base-","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"sec":"G:ok U:LEAK L:LEAK","ok":true,"ms":1613} +{"s":"S1","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EWB03DDH8MTKJXVGHGCA5\",\"runId\":\"01M53EWB03DDH8MTKJXVGHGCA5\",\"socketPath\":\"/tmp/relayflowd-5299113ce9b2.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/base-base-","run-2 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/base-base-","run-3 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/base-base-","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"sec":"G:ok U:LEAK L:LEAK","ok":true,"ms":1682} +{"s":"S2missing","start":"head","resume":"head","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R6_ABSENT\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R6_ABSENT\\\" is not available to this run\"}],\"path\":\"/w/runs/r8secrets-prior/S2missing/head-head-0/chain.flow.ts\",\"rootRunId\":\"01M53EWCM3HFN9N413R19P0K08\",\"socketPath\":\"/tmp/relayflowd-c1d07fdfc4c6.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"G:missing U:missing L:missing","ok":true,"ms":599} +{"s":"S1","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EWB9Y1BBC8RQHV6HQT3NR\",\"runId\":\"01M53EWB9Y1BBC8RQHV6HQT3NR\",\"socketPath\":\"/tmp/relayflowd-fa48922d1853.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/base-base-","run-2 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/base-base-","run-3 c=1 printf \"%s\" \"${R6_TOK:-unset}\" > /w/runs/r8secrets-prior/S1/base-base-","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"sec":"G:ok U:LEAK L:LEAK","ok":true,"ms":1797} +{"s":"S2missing","start":"head","resume":"head","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R6_ABSENT\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R6_ABSENT\\\" is not available to this run\"}],\"path\":\"/w/runs/r8secrets-prior/S2missing/head-head-1/chain.flow.ts\",\"rootRunId\":\"01M53EWCTN87H67KXJ8KYT7QNP\",\"socketPath\":\"/tmp/relayflowd-58f993e57dbd.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"G:missing U:missing L:missing","ok":true,"ms":604} +{"s":"S2missing","start":"head","resume":"head","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R6_ABSENT\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R6_ABSENT\\\" is not available to this run\"}],\"path\":\"/w/runs/r8secrets-prior/S2missing/head-head-2/chain.flow.ts\",\"rootRunId\":\"01M53EWD61X01HDG8BEW527QBV\",\"socketPath\":\"/tmp/relayflowd-c61a7ba37c11.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"G:missing U:missing L:missing","ok":true,"ms":582} +{"s":"S2missing","start":"head","resume":"head","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R6_ABSENT\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R6_ABSENT\\\" is not available to this run\"}],\"path\":\"/w/runs/r8secrets-prior/S2missing/head-head-3/chain.flow.ts\",\"rootRunId\":\"01M53EWD8BZ94JVS9WFKA1TRGS\",\"socketPath\":\"/tmp/relayflowd-2d2c982a111e.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"G:missing U:missing L:missing","ok":true,"ms":617} +{"s":"S2missing","start":"head","resume":"head","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R6_ABSENT\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R6_ABSENT\\\" is not available to this run\"}],\"path\":\"/w/runs/r8secrets-prior/S2missing/head-head-4/chain.flow.ts\",\"rootRunId\":\"01M53EWDE9QRHRTEG15GME0E6B\",\"socketPath\":\"/tmp/relayflowd-ea6986fa4364.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"G:missing U:missing L:missing","ok":true,"ms":616} +{"s":"S2missing","start":"base","resume":"base","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R6_ABSENT\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R6_ABSENT\\\" is not available to this run\"}],\"path\":\"/w/runs/r8secrets-prior/S2missing/base-base-0/chain.flow.ts\",\"rootRunId\":\"01M53EWDNS75W0Z94QSYTN5KXN\",\"socketPath\":\"/tmp/relayflowd-19aceb6f8227.sock\",\"subscriptions\":[]}\n","mode":"absent","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"G:missing U:missing L:missing","ok":true,"ms":423} +{"s":"S2missing","start":"head","resume":"head","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R6_ABSENT\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R6_ABSENT\\\" is not available to this run\"}],\"path\":\"/w/runs/r8secrets-prior/S2missing/head-head-5/chain.flow.ts\",\"rootRunId\":\"01M53EWDRT9S56JS61AH712EA1\",\"socketPath\":\"/tmp/relayflowd-c1c13da8f3cd.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"G:missing U:missing L:missing","ok":true,"ms":590} +{"s":"S2missing","start":"base","resume":"base","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R6_ABSENT\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R6_ABSENT\\\" is not available to this run\"}],\"path\":\"/w/runs/r8secrets-prior/S2missing/base-base-1/chain.flow.ts\",\"rootRunId\":\"01M53EWDV3TJZ1XWS6QGTYCE9W\",\"socketPath\":\"/tmp/relayflowd-83e05ce3d927.sock\",\"subscriptions\":[]}\n","mode":"absent","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"G:missing U:missing L:missing","ok":true,"ms":416} +{"s":"S2missing","start":"base","resume":"base","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R6_ABSENT\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R6_ABSENT\\\" is not available to this run\"}],\"path\":\"/w/runs/r8secrets-prior/S2missing/base-base-2/chain.flow.ts\",\"rootRunId\":\"01M53EWE30FQMF5ZVTKXFHYVBV\",\"socketPath\":\"/tmp/relayflowd-d49f48fd71a3.sock\",\"subscriptions\":[]}\n","mode":"absent","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"G:missing U:missing L:missing","ok":true,"ms":425} +{"s":"S2missing","start":"base","resume":"base","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R6_ABSENT\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R6_ABSENT\\\" is not available to this run\"}],\"path\":\"/w/runs/r8secrets-prior/S2missing/base-base-3/chain.flow.ts\",\"rootRunId\":\"01M53EWE5P6515FHSTW906R9K8\",\"socketPath\":\"/tmp/relayflowd-d47af72ceee4.sock\",\"subscriptions\":[]}\n","mode":"absent","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"G:missing U:missing L:missing","ok":true,"ms":409} +{"s":"S2missing","start":"base","resume":"base","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R6_ABSENT\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R6_ABSENT\\\" is not available to this run\"}],\"path\":\"/w/runs/r8secrets-prior/S2missing/base-base-4/chain.flow.ts\",\"rootRunId\":\"01M53EWE8EARE206C54B2G70Q3\",\"socketPath\":\"/tmp/relayflowd-d7d34d432ae6.sock\",\"subscriptions\":[]}\n","mode":"absent","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"G:missing U:missing L:missing","ok":true,"ms":411} +{"s":"S2missing","start":"base","resume":"base","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R6_ABSENT\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R6_ABSENT\\\" is not available to this run\"}],\"path\":\"/w/runs/r8secrets-prior/S2missing/base-base-5/chain.flow.ts\",\"rootRunId\":\"01M53EWEGQ42JYQA0MMDADWQ79\",\"socketPath\":\"/tmp/relayflowd-97da0f407157.sock\",\"subscriptions\":[]}\n","mode":"absent","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"G:missing U:missing L:missing","ok":true,"ms":423} +SUMMARY S1 head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=Z +SUMMARY S1 base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=Z +SUMMARY S2missing head>head ok=6/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY S2missing base>base ok=6/6 replay=0 fresh=6 mode=absent codes=1 effects= diff --git a/evidence/native-parallel-review8/h7-probe.log b/evidence/native-parallel-review8/h7-probe.log new file mode 100644 index 000000000..a9dd68b19 --- /dev/null +++ b/evidence/native-parallel-review8/h7-probe.log @@ -0,0 +1,28 @@ +baseline_native: certified=true grammar=true wrappedCalls=2 +hygiene_branch: certified=false grammar=false wrappedCalls= +hygiene_value: certified=false grammar=false wrappedCalls= +paren_member: certified=true grammar=true wrappedCalls=2 +paren_iife: certified=true grammar=true wrappedCalls=2 +twice: certified=true grammar=true wrappedCalls=2 +ret_values: certified=true grammar=true wrappedCalls=2 +mid_return: certified=true grammar=true wrappedCalls=2 +expr_branch: certified=true grammar=true wrappedCalls=2 +sync_throw: certified=true grammar=true wrappedCalls=2 +type_import: LOAD ERROR flow is not defined +inline_type_import: LOAD ERROR flow is not defined +unicode_escape: certified=true grammar=true wrappedCalls=2 +optional_chain: certified=true grammar=true wrappedCalls=2 +done_last: certified=true grammar=true wrappedCalls=2 +getter_obj: certified=false grammar=false wrappedCalls= +labelled: certified=false grammar=false wrappedCalls= +arguments_nested: certified=false grammar=false wrappedCalls= +loop_literal: certified=false grammar=false wrappedCalls= +value_member: certified=true grammar=true wrappedCalls=2 +record_branch: certified=true grammar=true wrappedCalls=2 +shebang: certified=true grammar=true wrappedCalls=2 +comment_before_import: certified=true grammar=true wrappedCalls=2 +twelve: certified=true grammar=true wrappedCalls=12 +optional_call_member: certified=true grammar=true wrappedCalls=2 +comment_iife: certified=true grammar=true wrappedCalls=2 +multi_decl: certified=true grammar=true wrappedCalls=2 +paren_group: certified=true grammar=true wrappedCalls=2 diff --git a/evidence/native-parallel-review8/h7-rollback-pinned.log b/evidence/native-parallel-review8/h7-rollback-pinned.log new file mode 100644 index 000000000..e0eb9a52d --- /dev/null +++ b/evidence/native-parallel-review8/h7-rollback-pinned.log @@ -0,0 +1,70 @@ +{"s":"RBCI4","start":"head","resume":"p2050","i":0,"fresh":false,"code1":0,"effects1":"abcdyegZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQVC97XVKZGHXHGBB5PNW\",\"runId\":\"01M53EQVC97XVKZGHXHGBB5PNW\",\"socketPath\":\"/tmp/relayflowd-67c49c3dea1b.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcd","effectsMid":"abcdyegZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQVC97XVKZGHXHGBB5PNW\",\"runId\":\"01M53EQVC97XVKZGHXHGBB5PNW\",\"socketPath\":\"/tmp/relayflowd-67c49c3dea1b.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2067} +{"s":"RBCI4","start":"head","resume":"p2050","i":1,"fresh":false,"code1":0,"effects1":"abcdyegZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQVC9H6R3S0AW33F0SEXB\",\"runId\":\"01M53EQVC9H6R3S0AW33F0SEXB\",\"socketPath\":\"/tmp/relayflowd-6b1de63d9231.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcd","effectsMid":"abcdyegZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQVC9H6R3S0AW33F0SEXB\",\"runId\":\"01M53EQVC9H6R3S0AW33F0SEXB\",\"socketPath\":\"/tmp/relayflowd-6b1de63d9231.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2095} +{"s":"RBCI4","start":"head","resume":"p2050","i":2,"fresh":false,"code1":0,"effects1":"abcdyegZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQVC9AQGRC0W870WHHJC0\",\"runId\":\"01M53EQVC9AQGRC0W870WHHJC0\",\"socketPath\":\"/tmp/relayflowd-8aa781ab85ac.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcd","effectsMid":"abcdyegZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQVC9AQGRC0W870WHHJC0\",\"runId\":\"01M53EQVC9AQGRC0W870WHHJC0\",\"socketPath\":\"/tmp/relayflowd-8aa781ab85ac.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2125} +{"s":"RBCI4","start":"head","resume":"p2050","i":3,"fresh":false,"code1":0,"effects1":"abcdyegZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQXCNKRXPXT8J4HP5R0KE\",\"runId\":\"01M53EQXCNKRXPXT8J4HP5R0KE\",\"socketPath\":\"/tmp/relayflowd-21f2d75cba25.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcd","effectsMid":"abcdyegZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQXCNKRXPXT8J4HP5R0KE\",\"runId\":\"01M53EQXCNKRXPXT8J4HP5R0KE\",\"socketPath\":\"/tmp/relayflowd-21f2d75cba25.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2222} +{"s":"RBCI4","start":"head","resume":"p2050","i":4,"fresh":false,"code1":0,"effects1":"abcdyegZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQXD46Q4JR77XGE70AP1J\",\"runId\":\"01M53EQXD46Q4JR77XGE70AP1J\",\"socketPath\":\"/tmp/relayflowd-91ed26afe092.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcd","effectsMid":"abcdyegZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQXD46Q4JR77XGE70AP1J\",\"runId\":\"01M53EQXD46Q4JR77XGE70AP1J\",\"socketPath\":\"/tmp/relayflowd-91ed26afe092.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2301} +{"s":"RBCI4","start":"head","resume":"p2050","i":5,"fresh":false,"code1":0,"effects1":"abcdyegZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQXDQNCP2ZQ9PYFGS0BC6\",\"runId\":\"01M53EQXDQNCP2ZQ9PYFGS0BC6\",\"socketPath\":\"/tmp/relayflowd-ae1a46b3419c.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcd","effectsMid":"abcdyegZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQXDQNCP2ZQ9PYFGS0BC6\",\"runId\":\"01M53EQXDQNCP2ZQ9PYFGS0BC6\",\"socketPath\":\"/tmp/relayflowd-ae1a46b3419c.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2445} +{"s":"RBCI4","start":"head","resume":"p2051","i":0,"fresh":false,"code1":0,"effects1":"abcdyegZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQZGJ1Y3TG10WHNG3HR1E\",\"runId\":\"01M53EQZGJ1Y3TG10WHNG3HR1E\",\"socketPath\":\"/tmp/relayflowd-daebd84fdc7c.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcd","effectsMid":"abcdyegZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQZGJ1Y3TG10WHNG3HR1E\",\"runId\":\"01M53EQZGJ1Y3TG10WHNG3HR1E\",\"socketPath\":\"/tmp/relayflowd-daebd84fdc7c.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":1851} +{"s":"RBCI4","start":"head","resume":"p2051","i":1,"fresh":false,"code1":0,"effects1":"abcdyegZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQZKHTSQASKEBX5YWKSDA\",\"runId\":\"01M53EQZKHTSQASKEBX5YWKSDA\",\"socketPath\":\"/tmp/relayflowd-9314c890fd0c.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcd","effectsMid":"abcdyegZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQZKHTSQASKEBX5YWKSDA\",\"runId\":\"01M53EQZKHTSQASKEBX5YWKSDA\",\"socketPath\":\"/tmp/relayflowd-9314c890fd0c.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":1907} +{"s":"RBCI4","start":"head","resume":"p2051","i":2,"fresh":false,"code1":0,"effects1":"abcdyegZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQZR1TNXZ4J3J16DM0HMZ\",\"runId\":\"01M53EQZR1TNXZ4J3J16DM0HMZ\",\"socketPath\":\"/tmp/relayflowd-928b5c572650.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcd","effectsMid":"abcdyegZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQZR1TNXZ4J3J16DM0HMZ\",\"runId\":\"01M53EQZR1TNXZ4J3J16DM0HMZ\",\"socketPath\":\"/tmp/relayflowd-928b5c572650.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":1963} +{"s":"RBCI4","start":"head","resume":"p2051","i":3,"fresh":false,"code1":0,"effects1":"abcdyegZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER19PXDQGBP4FHRYX962C\",\"runId\":\"01M53ER19PXDQGBP4FHRYX962C\",\"socketPath\":\"/tmp/relayflowd-8689d93b1e83.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcd","effectsMid":"abcdyegZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER19PXDQGBP4FHRYX962C\",\"runId\":\"01M53ER19PXDQGBP4FHRYX962C\",\"socketPath\":\"/tmp/relayflowd-8689d93b1e83.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2068} +{"s":"RBCI4","start":"head","resume":"p2051","i":4,"fresh":false,"code1":0,"effects1":"abcdyegZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER1F2S2RQ7M19P0F1348G\",\"runId\":\"01M53ER1F2S2RQ7M19P0F1348G\",\"socketPath\":\"/tmp/relayflowd-c93e3d8ccfe4.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcd","effectsMid":"abcdyegZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER1F2S2RQ7M19P0F1348G\",\"runId\":\"01M53ER1F2S2RQ7M19P0F1348G\",\"socketPath\":\"/tmp/relayflowd-c93e3d8ccfe4.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2231} +{"s":"RBCI4","start":"head","resume":"p2051","i":5,"fresh":false,"code1":0,"effects1":"abcdyegZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER1NRRQ602KXR70ZT44Q5\",\"runId\":\"01M53ER1NRRQ602KXR70ZT44Q5\",\"socketPath\":\"/tmp/relayflowd-ef8478317fbd.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcd","effectsMid":"abcdyegZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER1NRRQ602KXR70ZT44Q5\",\"runId\":\"01M53ER1NRRQ602KXR70ZT44Q5\",\"socketPath\":\"/tmp/relayflowd-ef8478317fbd.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2178} +{"s":"RBCI5","start":"head","resume":"p2050","i":0,"fresh":false,"code1":0,"effects1":"abcdeyghZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER3ATM9G5ECR8X72SFJHB\",\"runId\":\"01M53ER3ATM9G5ECR8X72SFJHB\",\"socketPath\":\"/tmp/relayflowd-fd97d01b381d.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcde","effectsMid":"abcdeyghZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER3ATM9G5ECR8X72SFJHB\",\"runId\":\"01M53ER3ATM9G5ECR8X72SFJHB\",\"socketPath\":\"/tmp/relayflowd-fd97d01b381d.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":1919} +{"s":"RBCI5","start":"head","resume":"p2050","i":1,"fresh":false,"code1":0,"effects1":"abcdeyghZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER3MQ2HM139QS1A6P2Q1D\",\"runId\":\"01M53ER3MQ2HM139QS1A6P2Q1D\",\"socketPath\":\"/tmp/relayflowd-c4b8c2413e97.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcde","effectsMid":"abcdeyghZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER3MQ2HM139QS1A6P2Q1D\",\"runId\":\"01M53ER3MQ2HM139QS1A6P2Q1D\",\"socketPath\":\"/tmp/relayflowd-c4b8c2413e97.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2020} +{"s":"RBCI5","start":"head","resume":"p2050","i":2,"fresh":false,"code1":0,"effects1":"abcdeyghZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER3TFKHZB7NQ88C4ZATTH\",\"runId\":\"01M53ER3TFKHZB7NQ88C4ZATTH\",\"socketPath\":\"/tmp/relayflowd-4af63ade329c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcde","effectsMid":"abcdeyghZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER3TFKHZB7NQ88C4ZATTH\",\"runId\":\"01M53ER3TFKHZB7NQ88C4ZATTH\",\"socketPath\":\"/tmp/relayflowd-4af63ade329c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2094} +{"s":"RBCI5","start":"head","resume":"p2050","i":3,"fresh":false,"code1":0,"effects1":"abcdeyghZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER557CDSP3MN2CBWKQ9HD\",\"runId\":\"01M53ER557CDSP3MN2CBWKQ9HD\",\"socketPath\":\"/tmp/relayflowd-18c434769114.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcde","effectsMid":"abcdeyghZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER557CDSP3MN2CBWKQ9HD\",\"runId\":\"01M53ER557CDSP3MN2CBWKQ9HD\",\"socketPath\":\"/tmp/relayflowd-18c434769114.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2034} +{"s":"RBCI5","start":"head","resume":"p2050","i":4,"fresh":false,"code1":0,"effects1":"abcdeyghZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER5KQJES7F1N3E94Y6439\",\"runId\":\"01M53ER5KQJES7F1N3E94Y6439\",\"socketPath\":\"/tmp/relayflowd-349c36146f2b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcde","effectsMid":"abcdeyghZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER5KQJES7F1N3E94Y6439\",\"runId\":\"01M53ER5KQJES7F1N3E94Y6439\",\"socketPath\":\"/tmp/relayflowd-349c36146f2b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2219} +{"s":"RBCI5","start":"head","resume":"p2050","i":5,"fresh":false,"code1":0,"effects1":"abcdeyghZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER5W2YM9G0MMDCCFJC9HN\",\"runId\":\"01M53ER5W2YM9G0MMDCCFJC9HN\",\"socketPath\":\"/tmp/relayflowd-f429a8c5a045.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcde","effectsMid":"abcdeyghZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER5W2YM9G0MMDCCFJC9HN\",\"runId\":\"01M53ER5W2YM9G0MMDCCFJC9HN\",\"socketPath\":\"/tmp/relayflowd-f429a8c5a045.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2330} +{"s":"RBCI5","start":"head","resume":"p2051","i":0,"fresh":false,"code1":0,"effects1":"abcdeyghZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER75HQX00G6VH9NAF5D6Z\",\"runId\":\"01M53ER75HQX00G6VH9NAF5D6Z\",\"socketPath\":\"/tmp/relayflowd-cd08faab492a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcde","effectsMid":"abcdeyghZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER75HQX00G6VH9NAF5D6Z\",\"runId\":\"01M53ER75HQX00G6VH9NAF5D6Z\",\"socketPath\":\"/tmp/relayflowd-cd08faab492a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":1891} +{"s":"RBCI5","start":"head","resume":"p2051","i":1,"fresh":false,"code1":0,"effects1":"abcdeyghZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER7SG6Q4S6QKTYQ1WE664\",\"runId\":\"01M53ER7SG6Q4S6QKTYQ1WE664\",\"socketPath\":\"/tmp/relayflowd-c0c893446a75.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcde","effectsMid":"abcdeyghZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER7SG6Q4S6QKTYQ1WE664\",\"runId\":\"01M53ER7SG6Q4S6QKTYQ1WE664\",\"socketPath\":\"/tmp/relayflowd-c0c893446a75.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":1971} +{"s":"RBCI5","start":"head","resume":"p2051","i":2,"fresh":false,"code1":0,"effects1":"abcdeyghZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER85MSV71H3B4CVNJQBCK\",\"runId\":\"01M53ER85MSV71H3B4CVNJQBCK\",\"socketPath\":\"/tmp/relayflowd-e1312cab9ae7.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcde","effectsMid":"abcdeyghZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER85MSV71H3B4CVNJQBCK\",\"runId\":\"01M53ER85MSV71H3B4CVNJQBCK\",\"socketPath\":\"/tmp/relayflowd-e1312cab9ae7.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2107} +{"s":"RBCI5","start":"head","resume":"p2051","i":3,"fresh":false,"code1":0,"effects1":"abcdeyghZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER91H75AZETZFGERYT6GX\",\"runId\":\"01M53ER91H75AZETZFGERYT6GX\",\"socketPath\":\"/tmp/relayflowd-1ff49f4e0d9d.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcde","effectsMid":"abcdeyghZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER91H75AZETZFGERYT6GX\",\"runId\":\"01M53ER91H75AZETZFGERYT6GX\",\"socketPath\":\"/tmp/relayflowd-1ff49f4e0d9d.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2097} +{"s":"RBCI5","start":"head","resume":"p2051","i":4,"fresh":false,"code1":0,"effects1":"abcdeyghZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER9Q5GN5TQEWWNXD1N8SG\",\"runId\":\"01M53ER9Q5GN5TQEWWNXD1N8SG\",\"socketPath\":\"/tmp/relayflowd-934af6886f8e.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcde","effectsMid":"abcdeyghZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ER9Q5GN5TQEWWNXD1N8SG\",\"runId\":\"01M53ER9Q5GN5TQEWWNXD1N8SG\",\"socketPath\":\"/tmp/relayflowd-934af6886f8e.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2188} +{"s":"RBCI5","start":"head","resume":"p2051","i":5,"fresh":false,"code1":0,"effects1":"abcdeyghZ","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERA6JYNRHHE61SAYRKYA4\",\"runId\":\"01M53ERA6JYNRHHE61SAYRKYA4\",\"socketPath\":\"/tmp/relayflowd-064eb57b6bf0.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcde","effectsMid":"abcdeyghZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERA6JYNRHHE61SAYRKYA4\",\"runId\":\"01M53ERA6JYNRHHE61SAYRKYA4\",\"socketPath\":\"/tmp/relayflowd-064eb57b6bf0.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2313} +{"s":"RBA1","start":"head","resume":"p2050","i":0,"fresh":false,"code1":1,"effects1":"LR","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERB3QE0T9MMMFZFX4WD0T\",\"socketPath\":\"/tmp/relayflowd-5d5833af733b.sock\",\"subscriptions\":[]}\n","effects0":"LR","effectsMid":"LR","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERB3QE0T9MMMFZFX4WD0T\",\"runId\":\"01M53ERB3QE0T9MMMFZFX4WD0T\",\"socketPath\":\"/tmp/relayflowd-5d5833af733b.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf B","run-4 c=1 sleep 0.3; printf D","run-1 c=1 sleep 0.3; printf A","run-3 c=1 printf C","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf L >> effects","run-after-bf7bec01bcf69109cfbd318614946e3436d603d63c10c71c4cb6f3bf3d3f46c0-1 c=1 printf R >> effects","run-after-155808aba9d437c1d9cd0fd909c22d3d7ad7e1f138f940e0d9f792bfdd832c63-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2052} +{"s":"RBA1","start":"head","resume":"p2050","i":1,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERBW0PFJH2R475416DTEK\",\"socketPath\":\"/tmp/relayflowd-62c7a0cde7ec.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERBW0PFJH2R475416DTEK\",\"runId\":\"01M53ERBW0PFJH2R475416DTEK\",\"socketPath\":\"/tmp/relayflowd-62c7a0cde7ec.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf B","run-1 c=1 sleep 0.3; printf A","run-3 c=1 printf C","run-4 c=1 sleep 0.3; printf D","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf L >> effects","run-after-bf7bec01bcf69109cfbd318614946e3436d603d63c10c71c4cb6f3bf3d3f46c0-1 c=1 printf R >> effects","run-after-155808aba9d437c1d9cd0fd909c22d3d7ad7e1f138f940e0d9f792bfdd832c63-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2080} +{"s":"RBA1","start":"head","resume":"p2050","i":2,"fresh":false,"code1":1,"effects1":"LR","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERCF5TV4STTASVNK7456X\",\"socketPath\":\"/tmp/relayflowd-24c8c48815e3.sock\",\"subscriptions\":[]}\n","effects0":"LR","effectsMid":"LR","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERCF5TV4STTASVNK7456X\",\"runId\":\"01M53ERCF5TV4STTASVNK7456X\",\"socketPath\":\"/tmp/relayflowd-24c8c48815e3.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf B","run-3 c=1 printf C","run-1 c=1 sleep 0.3; printf A","run-4 c=1 sleep 0.3; printf D","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf L >> effects","run-after-bf7bec01bcf69109cfbd318614946e3436d603d63c10c71c4cb6f3bf3d3f46c0-1 c=1 printf R >> effects","run-after-155808aba9d437c1d9cd0fd909c22d3d7ad7e1f138f940e0d9f792bfdd832c63-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2151} +{"s":"RBA1","start":"head","resume":"p2050","i":3,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERD31MXNVY26817AGCN5A\",\"socketPath\":\"/tmp/relayflowd-582badde413d.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERD31MXNVY26817AGCN5A\",\"runId\":\"01M53ERD31MXNVY26817AGCN5A\",\"socketPath\":\"/tmp/relayflowd-582badde413d.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-3 c=1 printf C","run-2 c=1 printf B","run-4 c=1 sleep 0.3; printf D","run-after-bf7bec01bcf69109cfbd318614946e3436d603d63c10c71c4cb6f3bf3d3f46c0-1 c=1 printf R >> effects","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf L >> effects","run-after-155808aba9d437c1d9cd0fd909c22d3d7ad7e1f138f940e0d9f792bfdd832c63-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2214} +{"s":"RBA1","start":"head","resume":"p2050","i":4,"fresh":false,"code1":1,"effects1":"LR","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERDWED49R9PJANXPVYZQB\",\"socketPath\":\"/tmp/relayflowd-45a411531f1d.sock\",\"subscriptions\":[]}\n","effects0":"LR","effectsMid":"LR","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERDWED49R9PJANXPVYZQB\",\"runId\":\"01M53ERDWED49R9PJANXPVYZQB\",\"socketPath\":\"/tmp/relayflowd-45a411531f1d.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-4 c=1 sleep 0.3; printf D","run-2 c=1 printf B","run-1 c=1 sleep 0.3; printf A","run-3 c=1 printf C","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf L >> effects","run-after-bf7bec01bcf69109cfbd318614946e3436d603d63c10c71c4cb6f3bf3d3f46c0-1 c=1 printf R >> effects","run-after-155808aba9d437c1d9cd0fd909c22d3d7ad7e1f138f940e0d9f792bfdd832c63-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2411} +{"s":"RBA1","start":"head","resume":"p2050","i":5,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53EREJ8E9J716RHP3EFTNY4\",\"socketPath\":\"/tmp/relayflowd-b0e1a900d4db.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EREJ8E9J716RHP3EFTNY4\",\"runId\":\"01M53EREJ8E9J716RHP3EFTNY4\",\"socketPath\":\"/tmp/relayflowd-b0e1a900d4db.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-4 c=1 sleep 0.3; printf D","run-2 c=1 printf B","run-3 c=1 printf C","run-1 c=1 sleep 0.3; printf A","run-after-bf7bec01bcf69109cfbd318614946e3436d603d63c10c71c4cb6f3bf3d3f46c0-1 c=1 printf R >> effects","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf L >> effects","run-after-155808aba9d437c1d9cd0fd909c22d3d7ad7e1f138f940e0d9f792bfdd832c63-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2455} +{"s":"RBA1","start":"head","resume":"p2051","i":0,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERF82KRN652Q5ZQZ6T8XT\",\"socketPath\":\"/tmp/relayflowd-f0eda452898f.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERF82KRN652Q5ZQZ6T8XT\",\"runId\":\"01M53ERF82KRN652Q5ZQZ6T8XT\",\"socketPath\":\"/tmp/relayflowd-f0eda452898f.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-4 c=1 sleep 0.3; printf D","run-2 c=1 printf B","run-1 c=1 sleep 0.3; printf A","run-3 c=1 printf C","run-after-bf7bec01bcf69109cfbd318614946e3436d603d63c10c71c4cb6f3bf3d3f46c0-1 c=1 printf R >> effects","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf L >> effects","run-after-155808aba9d437c1d9cd0fd909c22d3d7ad7e1f138f940e0d9f792bfdd832c63-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2008} +{"s":"RBA1","start":"head","resume":"p2051","i":1,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERG7VZ46F1NMD5CD7M8MH\",\"socketPath\":\"/tmp/relayflowd-fdca23d5e212.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERG7VZ46F1NMD5CD7M8MH\",\"runId\":\"01M53ERG7VZ46F1NMD5CD7M8MH\",\"socketPath\":\"/tmp/relayflowd-fdca23d5e212.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-4 c=1 sleep 0.3; printf D","run-1 c=1 sleep 0.3; printf A","run-2 c=1 printf B","run-3 c=1 printf C","run-after-bf7bec01bcf69109cfbd318614946e3436d603d63c10c71c4cb6f3bf3d3f46c0-1 c=1 printf R >> effects","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf L >> effects","run-after-155808aba9d437c1d9cd0fd909c22d3d7ad7e1f138f940e0d9f792bfdd832c63-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2052} +{"s":"RBA1","start":"head","resume":"p2051","i":2,"fresh":false,"code1":1,"effects1":"LR","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERGZCMHC95YEMRH50WD2T\",\"socketPath\":\"/tmp/relayflowd-5f74eb952fdc.sock\",\"subscriptions\":[]}\n","effects0":"LR","effectsMid":"LR","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERGZCMHC95YEMRH50WD2T\",\"runId\":\"01M53ERGZCMHC95YEMRH50WD2T\",\"socketPath\":\"/tmp/relayflowd-5f74eb952fdc.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf B","run-1 c=1 sleep 0.3; printf A","run-4 c=1 sleep 0.3; printf D","run-3 c=1 printf C","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf L >> effects","run-after-bf7bec01bcf69109cfbd318614946e3436d603d63c10c71c4cb6f3bf3d3f46c0-1 c=1 printf R >> effects","run-after-155808aba9d437c1d9cd0fd909c22d3d7ad7e1f138f940e0d9f792bfdd832c63-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2145} +{"s":"RBA1","start":"head","resume":"p2051","i":3,"fresh":false,"code1":1,"effects1":"LR","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERH6SVHT9695MNG8F8X50\",\"socketPath\":\"/tmp/relayflowd-13eb086b8b91.sock\",\"subscriptions\":[]}\n","effects0":"LR","effectsMid":"LR","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERH6SVHT9695MNG8F8X50\",\"runId\":\"01M53ERH6SVHT9695MNG8F8X50\",\"socketPath\":\"/tmp/relayflowd-13eb086b8b91.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf B","run-3 c=1 printf C","run-1 c=1 sleep 0.3; printf A","run-4 c=1 sleep 0.3; printf D","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf L >> effects","run-after-bf7bec01bcf69109cfbd318614946e3436d603d63c10c71c4cb6f3bf3d3f46c0-1 c=1 printf R >> effects","run-after-155808aba9d437c1d9cd0fd909c22d3d7ad7e1f138f940e0d9f792bfdd832c63-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2185} +{"s":"RBA1","start":"head","resume":"p2051","i":4,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERJ8QCNA3QDZG92217W1P\",\"socketPath\":\"/tmp/relayflowd-1533af5ad2c2.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERJ8QCNA3QDZG92217W1P\",\"runId\":\"01M53ERJ8QCNA3QDZG92217W1P\",\"socketPath\":\"/tmp/relayflowd-1533af5ad2c2.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf B","run-3 c=1 printf C","run-4 c=1 sleep 0.3; printf D","run-1 c=1 sleep 0.3; printf A","run-after-bf7bec01bcf69109cfbd318614946e3436d603d63c10c71c4cb6f3bf3d3f46c0-1 c=1 printf R >> effects","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf L >> effects","run-after-155808aba9d437c1d9cd0fd909c22d3d7ad7e1f138f940e0d9f792bfdd832c63-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2371} +{"s":"RBB1","start":"head","resume":"p2050","i":0,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERKBWHGJAYWYGGD1S94DG\",\"socketPath\":\"/tmp/relayflowd-d85bb0d27ecc.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERKBWHGJAYWYGGD1S94DG\",\"runId\":\"01M53ERKBWHGJAYWYGGD1S94DG\",\"socketPath\":\"/tmp/relayflowd-d85bb0d27ecc.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 printf D","run-1 c=1 printf A","run-2 c=1 printf C","run-after-69473275150109f1e821854612e8fcc96c0bc028e8a5691afc753fd33685ae48-1 c=1 printf R >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf B","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf L >> effects","run-after-bc05bd49c1a49d986489d67d572c6e1e20d66cda81c621b30d495a9b7cd1c835-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1817} +{"s":"RBA1","start":"head","resume":"p2051","i":5,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERK1EKS3FN739X8MBP1BS\",\"socketPath\":\"/tmp/relayflowd-01f9d3e7d051.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERK1EKS3FN739X8MBP1BS\",\"runId\":\"01M53ERK1EKS3FN739X8MBP1BS\",\"socketPath\":\"/tmp/relayflowd-01f9d3e7d051.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf B","run-4 c=1 sleep 0.3; printf D","run-3 c=1 printf C","run-1 c=1 sleep 0.3; printf A","run-after-bf7bec01bcf69109cfbd318614946e3436d603d63c10c71c4cb6f3bf3d3f46c0-1 c=1 printf R >> effects","run-after-d21cf4720ad5b56d3673a0924309f04481fcbc5e5e5f474d8377f0dd7594c533-1 c=1 printf L >> effects","run-after-155808aba9d437c1d9cd0fd909c22d3d7ad7e1f138f940e0d9f792bfdd832c63-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2523} +{"s":"RBB1","start":"head","resume":"p2050","i":1,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERMM0XMXPW9BVT7VZ3PN1\",\"socketPath\":\"/tmp/relayflowd-e72c20a6c2ce.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERMM0XMXPW9BVT7VZ3PN1\",\"runId\":\"01M53ERMM0XMXPW9BVT7VZ3PN1\",\"socketPath\":\"/tmp/relayflowd-e72c20a6c2ce.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf C","run-1 c=1 printf A","run-3 c=1 printf D","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf B","run-after-69473275150109f1e821854612e8fcc96c0bc028e8a5691afc753fd33685ae48-1 c=1 printf R >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf L >> effects","run-after-bc05bd49c1a49d986489d67d572c6e1e20d66cda81c621b30d495a9b7cd1c835-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1789} +{"s":"RBB1","start":"head","resume":"p2050","i":2,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERN3WZYBRA1WJD6YJQWCE\",\"socketPath\":\"/tmp/relayflowd-e33bcec40c18.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERN3WZYBRA1WJD6YJQWCE\",\"runId\":\"01M53ERN3WZYBRA1WJD6YJQWCE\",\"socketPath\":\"/tmp/relayflowd-e33bcec40c18.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf C","run-3 c=1 printf D","run-1 c=1 printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf B","run-after-69473275150109f1e821854612e8fcc96c0bc028e8a5691afc753fd33685ae48-1 c=1 printf R >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf L >> effects","run-after-bc05bd49c1a49d986489d67d572c6e1e20d66cda81c621b30d495a9b7cd1c835-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1812} +{"s":"RBB1","start":"head","resume":"p2050","i":3,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERNG7Y6DBSKFH3MFBWDGS\",\"socketPath\":\"/tmp/relayflowd-070c2f4b63f6.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERNG7Y6DBSKFH3MFBWDGS\",\"runId\":\"01M53ERNG7Y6DBSKFH3MFBWDGS\",\"socketPath\":\"/tmp/relayflowd-070c2f4b63f6.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 printf D","run-2 c=1 printf C","run-1 c=1 printf A","run-after-69473275150109f1e821854612e8fcc96c0bc028e8a5691afc753fd33685ae48-1 c=1 printf R >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf B","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf L >> effects","run-after-bc05bd49c1a49d986489d67d572c6e1e20d66cda81c621b30d495a9b7cd1c835-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1897} +{"s":"RBB1","start":"head","resume":"p2050","i":4,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERP9P29KXBMBYBEP7TSDQ\",\"socketPath\":\"/tmp/relayflowd-21147079b8d9.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERP9P29KXBMBYBEP7TSDQ\",\"runId\":\"01M53ERP9P29KXBMBYBEP7TSDQ\",\"socketPath\":\"/tmp/relayflowd-21147079b8d9.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-2 c=1 printf C","run-3 c=1 printf D","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf B","run-after-69473275150109f1e821854612e8fcc96c0bc028e8a5691afc753fd33685ae48-1 c=1 printf R >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf L >> effects","run-after-bc05bd49c1a49d986489d67d572c6e1e20d66cda81c621b30d495a9b7cd1c835-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2070} +{"s":"RBB1","start":"head","resume":"p2051","i":0,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERQBMB9KAMMW019CFHTM5\",\"socketPath\":\"/tmp/relayflowd-b061e15c92c8.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERQBMB9KAMMW019CFHTM5\",\"runId\":\"01M53ERQBMB9KAMMW019CFHTM5\",\"socketPath\":\"/tmp/relayflowd-b061e15c92c8.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-3 c=1 printf D","run-2 c=1 printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf B","run-after-69473275150109f1e821854612e8fcc96c0bc028e8a5691afc753fd33685ae48-1 c=1 printf R >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf L >> effects","run-after-bc05bd49c1a49d986489d67d572c6e1e20d66cda81c621b30d495a9b7cd1c835-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1729} +{"s":"RBB1","start":"head","resume":"p2050","i":5,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERPW40QSKBZTCP82RRHXS\",\"socketPath\":\"/tmp/relayflowd-9e59f92e1df8.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERPW40QSKBZTCP82RRHXS\",\"runId\":\"01M53ERPW40QSKBZTCP82RRHXS\",\"socketPath\":\"/tmp/relayflowd-9e59f92e1df8.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 printf D","run-1 c=1 printf A","run-2 c=1 printf C","run-after-69473275150109f1e821854612e8fcc96c0bc028e8a5691afc753fd33685ae48-1 c=1 printf R >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf B","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf L >> effects","run-after-bc05bd49c1a49d986489d67d572c6e1e20d66cda81c621b30d495a9b7cd1c835-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2248} +{"s":"RBB1","start":"head","resume":"p2051","i":1,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERRATV40XKM2ZWGBKEH9W\",\"socketPath\":\"/tmp/relayflowd-31d5dae25991.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERRATV40XKM2ZWGBKEH9W\",\"runId\":\"01M53ERRATV40XKM2ZWGBKEH9W\",\"socketPath\":\"/tmp/relayflowd-31d5dae25991.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-2 c=1 printf C","run-3 c=1 printf D","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf B","run-after-69473275150109f1e821854612e8fcc96c0bc028e8a5691afc753fd33685ae48-1 c=1 printf R >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf L >> effects","run-after-bc05bd49c1a49d986489d67d572c6e1e20d66cda81c621b30d495a9b7cd1c835-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1834} +{"s":"RBB1","start":"head","resume":"p2051","i":2,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERS2H7J48B1PMXPYW2HRN\",\"socketPath\":\"/tmp/relayflowd-4252874dbad3.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERS2H7J48B1PMXPYW2HRN\",\"runId\":\"01M53ERS2H7J48B1PMXPYW2HRN\",\"socketPath\":\"/tmp/relayflowd-4252874dbad3.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf C","run-3 c=1 printf D","run-1 c=1 printf A","run-after-69473275150109f1e821854612e8fcc96c0bc028e8a5691afc753fd33685ae48-1 c=1 printf R >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf B","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf L >> effects","run-after-bc05bd49c1a49d986489d67d572c6e1e20d66cda81c621b30d495a9b7cd1c835-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1897} +{"s":"RBB1","start":"head","resume":"p2051","i":3,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERS3MVTW2SXPRN7YWHF5J\",\"socketPath\":\"/tmp/relayflowd-e9cc87a589e2.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERS3MVTW2SXPRN7YWHF5J\",\"runId\":\"01M53ERS3MVTW2SXPRN7YWHF5J\",\"socketPath\":\"/tmp/relayflowd-e9cc87a589e2.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-2 c=1 printf C","run-3 c=1 printf D","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf B","run-after-69473275150109f1e821854612e8fcc96c0bc028e8a5691afc753fd33685ae48-1 c=1 printf R >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf L >> effects","run-after-bc05bd49c1a49d986489d67d572c6e1e20d66cda81c621b30d495a9b7cd1c835-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1961} +{"s":"RBB1","start":"head","resume":"p2051","i":4,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERT4TMJ1JBVKBXS3T444K\",\"socketPath\":\"/tmp/relayflowd-51c80385e0e4.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERT4TMJ1JBVKBXS3T444K\",\"runId\":\"01M53ERT4TMJ1JBVKBXS3T444K\",\"socketPath\":\"/tmp/relayflowd-51c80385e0e4.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 printf D","run-2 c=1 printf C","run-1 c=1 printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf B","run-after-69473275150109f1e821854612e8fcc96c0bc028e8a5691afc753fd33685ae48-1 c=1 printf R >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf L >> effects","run-after-bc05bd49c1a49d986489d67d572c6e1e20d66cda81c621b30d495a9b7cd1c835-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2058} +{"s":"RBN2","start":"head","resume":"p2050","i":0,"fresh":false,"code1":1,"effects1":"bca","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERTZCVMRTH8CVW4XYX7VR\",\"socketPath\":\"/tmp/relayflowd-35b94d8ad491.sock\",\"subscriptions\":[]}\n","effects0":"bca","effectsMid":"bca","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERTZCVMRTH8CVW4XYX7VR\",\"runId\":\"01M53ERTZCVMRTH8CVW4XYX7VR\",\"socketPath\":\"/tmp/relayflowd-35b94d8ad491.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.2; printf C","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1944} +{"s":"RBB1","start":"head","resume":"p2051","i":5,"fresh":false,"code1":1,"effects1":"RL","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERTXGTZTC41H76WZ6DH45\",\"socketPath\":\"/tmp/relayflowd-17c62fc39d41.sock\",\"subscriptions\":[]}\n","effects0":"RL","effectsMid":"RL","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERTXGTZTC41H76WZ6DH45\",\"runId\":\"01M53ERTXGTZTC41H76WZ6DH45\",\"socketPath\":\"/tmp/relayflowd-17c62fc39d41.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf C","run-1 c=1 printf A","run-3 c=1 printf D","run-after-69473275150109f1e821854612e8fcc96c0bc028e8a5691afc753fd33685ae48-1 c=1 printf R >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf B","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf L >> effects","run-after-bc05bd49c1a49d986489d67d572c6e1e20d66cda81c621b30d495a9b7cd1c835-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2171} +{"s":"RBN2","start":"head","resume":"p2050","i":1,"fresh":false,"code1":1,"effects1":"bca","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERW4X62NZXCXS12V7R4G2\",\"socketPath\":\"/tmp/relayflowd-79bdf74a2e45.sock\",\"subscriptions\":[]}\n","effects0":"bca","effectsMid":"bca","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERW4X62NZXCXS12V7R4G2\",\"runId\":\"01M53ERW4X62NZXCXS12V7R4G2\",\"socketPath\":\"/tmp/relayflowd-79bdf74a2e45.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.2; printf C","run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2034} +{"s":"RBN2","start":"head","resume":"p2050","i":2,"fresh":false,"code1":1,"effects1":"bca","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERWY7TVDY33P2DZP7N0MQ\",\"socketPath\":\"/tmp/relayflowd-7ca289d29bac.sock\",\"subscriptions\":[]}\n","effects0":"bca","effectsMid":"bca","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERWY7TVDY33P2DZP7N0MQ\",\"runId\":\"01M53ERWY7TVDY33P2DZP7N0MQ\",\"socketPath\":\"/tmp/relayflowd-7ca289d29bac.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.2; printf C","run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2159} +{"s":"RBN2","start":"head","resume":"p2050","i":3,"fresh":false,"code1":1,"effects1":"bca","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERX122BHANJHZBVGPZSYT\",\"socketPath\":\"/tmp/relayflowd-0701f0425216.sock\",\"subscriptions\":[]}\n","effects0":"bca","effectsMid":"bca","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERX122BHANJHZBVGPZSYT\",\"runId\":\"01M53ERX122BHANJHZBVGPZSYT\",\"socketPath\":\"/tmp/relayflowd-0701f0425216.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.2; printf C","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2143} +{"s":"RBN2","start":"head","resume":"p2050","i":4,"fresh":false,"code1":1,"effects1":"bca","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERY4XAZA6DWNHSVYF0J5J\",\"socketPath\":\"/tmp/relayflowd-ba75821c9fc4.sock\",\"subscriptions\":[]}\n","effects0":"bca","effectsMid":"bca","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERY4XAZA6DWNHSVYF0J5J\",\"runId\":\"01M53ERY4XAZA6DWNHSVYF0J5J\",\"socketPath\":\"/tmp/relayflowd-ba75821c9fc4.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.2; printf C","run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2322} +{"s":"RBN2","start":"head","resume":"p2051","i":0,"fresh":false,"code1":1,"effects1":"bca","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERZ47CYH96AS5ZJF3WVQR\",\"socketPath\":\"/tmp/relayflowd-7789da993ebc.sock\",\"subscriptions\":[]}\n","effects0":"bca","effectsMid":"bca","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERZ47CYH96AS5ZJF3WVQR\",\"runId\":\"01M53ERZ47CYH96AS5ZJF3WVQR\",\"socketPath\":\"/tmp/relayflowd-7789da993ebc.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1943} +{"s":"RBN2","start":"head","resume":"p2050","i":5,"fresh":false,"code1":1,"effects1":"bca","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ERZ0JCNRH64GZ9BVT923N\",\"socketPath\":\"/tmp/relayflowd-84edd5d198bf.sock\",\"subscriptions\":[]}\n","effects0":"bca","effectsMid":"bca","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ERZ0JCNRH64GZ9BVT923N\",\"runId\":\"01M53ERZ0JCNRH64GZ9BVT923N\",\"socketPath\":\"/tmp/relayflowd-84edd5d198bf.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2415} +{"s":"RBN2","start":"head","resume":"p2051","i":1,"fresh":false,"code1":1,"effects1":"bca","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ES0CNHXGG3P56TEFXXK32\",\"socketPath\":\"/tmp/relayflowd-3b2a2da62681.sock\",\"subscriptions\":[]}\n","effects0":"bca","effectsMid":"bca","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ES0CNHXGG3P56TEFXXK32\",\"runId\":\"01M53ES0CNHXGG3P56TEFXXK32\",\"socketPath\":\"/tmp/relayflowd-3b2a2da62681.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2043} +{"s":"RBN2","start":"head","resume":"p2051","i":2,"fresh":false,"code1":1,"effects1":"bca","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ES10W48RZ5XZCM0244N70\",\"socketPath\":\"/tmp/relayflowd-cfafcb01abbd.sock\",\"subscriptions\":[]}\n","effects0":"bca","effectsMid":"bca","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ES10W48RZ5XZCM0244N70\",\"runId\":\"01M53ES10W48RZ5XZCM0244N70\",\"socketPath\":\"/tmp/relayflowd-cfafcb01abbd.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.2; printf C","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2106} +{"s":"RBN2","start":"head","resume":"p2051","i":3,"fresh":false,"code1":1,"effects1":"bca","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ES1BX9MBQC65FGVFA2T09\",\"socketPath\":\"/tmp/relayflowd-946d30c61988.sock\",\"subscriptions\":[]}\n","effects0":"bca","effectsMid":"bca","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ES1BX9MBQC65FGVFA2T09\",\"runId\":\"01M53ES1BX9MBQC65FGVFA2T09\",\"socketPath\":\"/tmp/relayflowd-946d30c61988.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2198} +{"s":"RBN2","start":"head","resume":"p2051","i":4,"fresh":false,"code1":1,"effects1":"bca","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ES2BZT7VP89445PKAH6YH\",\"socketPath\":\"/tmp/relayflowd-751623ccc717.sock\",\"subscriptions\":[]}\n","effects0":"bca","effectsMid":"bca","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ES2BZT7VP89445PKAH6YH\",\"runId\":\"01M53ES2BZT7VP89445PKAH6YH\",\"socketPath\":\"/tmp/relayflowd-751623ccc717.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.2; printf C","run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2291} +{"s":"RBN2","start":"head","resume":"p2051","i":5,"fresh":false,"code1":1,"effects1":"bca","code":0,"out":"FAILED [protocol_error] relayflowd could not complete the resume request: authored root journal has malformed authority metadata\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root journal has malformed authority metadata\"}],\"runId\":\"01M53ES3284QH13NK57SXFNV0A\",\"socketPath\":\"/tmp/relayflowd-dfb54183d7bd.sock\",\"subscriptions\":[]}\n","effects0":"bca","effectsMid":"bca","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53ES3284QH13NK57SXFNV0A\",\"runId\":\"01M53ES3284QH13NK57SXFNV0A\",\"socketPath\":\"/tmp/relayflowd-dfb54183d7bd.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.2; printf C","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2393} +SUMMARY RBCI4 head>p2050 ok=0/6 replay=0 fresh=0 mode=serial codes=0 effects=abcdyegZ +SUMMARY RBCI4 head>p2051 ok=0/6 replay=0 fresh=0 mode=serial codes=0 effects=abcdyegZ +SUMMARY RBCI5 head>p2050 ok=0/6 replay=0 fresh=0 mode=serial codes=0 effects=abcdeyghZ +SUMMARY RBCI5 head>p2051 ok=0/6 replay=0 fresh=0 mode=serial codes=0 effects=abcdeyghZ +SUMMARY RBA1 head>p2050 ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=LRZ|RLZ +SUMMARY RBA1 head>p2051 ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=RLZ|LRZ +SUMMARY RBB1 head>p2050 ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=RLZ +SUMMARY RBB1 head>p2051 ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=RLZ +SUMMARY RBN2 head>p2050 ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=bcaZ +SUMMARY RBN2 head>p2051 ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=bcaZ diff --git a/evidence/native-parallel-review8/h7-s7-head.log b/evidence/native-parallel-review8/h7-s7-head.log new file mode 100644 index 000000000..0cb76b246 --- /dev/null +++ b/evidence/native-parallel-review8/h7-s7-head.log @@ -0,0 +1,189 @@ +{"s":"HY1","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"PB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E41ZH14E4D2Z6APCHQVBD\",\"runId\":\"01M53E41ZH14E4D2Z6APCHQVBD\",\"socketPath\":\"/tmp/relayflowd-3ab9e4356f9d.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"PBZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1728} +{"s":"HY1","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"PB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E41ZJN6VMM7205A82QGJA\",\"runId\":\"01M53E41ZJN6VMM7205A82QGJA\",\"socketPath\":\"/tmp/relayflowd-2d3a4feba6a5.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"PBZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1811} +{"s":"HY1","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"PB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E41ZKQD2AAKZXKWD7467B\",\"runId\":\"01M53E41ZKQD2AAKZXKWD7467B\",\"socketPath\":\"/tmp/relayflowd-2dd4e1eab449.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"PBZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1851} +{"s":"HY1","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"PB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E43J99ASZQAAZYY24MWGQ\",\"runId\":\"01M53E43J99ASZQAAZYY24MWGQ\",\"socketPath\":\"/tmp/relayflowd-b759c2f83c65.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"PBZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1798} +{"s":"HY1","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"PB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E43MKEZYRC7J9XJ28SWG4\",\"runId\":\"01M53E43MKEZYRC7J9XJ28SWG4\",\"socketPath\":\"/tmp/relayflowd-3cc5490d368a.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"PBZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1811} +{"s":"HY1","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"PB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E43PD94W41AYHM32X534G\",\"runId\":\"01M53E43PD94W41AYHM32X534G\",\"socketPath\":\"/tmp/relayflowd-1aab6c4f85c3.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"PBZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2052} +{"s":"HY1s","start":"head","resume":"head","i":0,"fresh":true,"code1":0,"code":0,"effects":"PB","effects1":"PB","out1":"{\"ok\":true,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[],\"path\":\"/w/runs/r8s7head/HY1s/head-head-0/chain.flow.ts\",\"rootRunId\":\"01M53E459N43NNKQX2YWC0Q02Z\",\"runId\":\"01M53E459N43NNKQX2YWC0Q02Z\",\"socketPath\":\"/tmp/relayflowd-e1900b8ff17d.sock\",\"completedSteps\":3,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","complete-3 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":776} +{"s":"HY1s","start":"head","resume":"head","i":1,"fresh":true,"code1":0,"code":0,"effects":"PB","effects1":"PB","out1":"{\"ok\":true,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[],\"path\":\"/w/runs/r8s7head/HY1s/head-head-1/chain.flow.ts\",\"rootRunId\":\"01M53E45AV08K7QMW4RQQKEF6B\",\"runId\":\"01M53E45AV08K7QMW4RQQKEF6B\",\"socketPath\":\"/tmp/relayflowd-51433fac913a.sock\",\"completedSteps\":3,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","complete-3 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":712} +{"s":"HY1s","start":"head","resume":"head","i":2,"fresh":true,"code1":0,"code":0,"effects":"PB","effects1":"PB","out1":"{\"ok\":true,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[],\"path\":\"/w/runs/r8s7head/HY1s/head-head-2/chain.flow.ts\",\"rootRunId\":\"01M53E45MQ205NN759QFV9QNKQ\",\"runId\":\"01M53E45MQ205NN759QFV9QNKQ\",\"socketPath\":\"/tmp/relayflowd-6204302170a9.sock\",\"completedSteps\":3,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","complete-3 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":764} +{"s":"HY1s","start":"head","resume":"head","i":3,"fresh":true,"code1":0,"code":0,"effects":"PB","effects1":"PB","out1":"{\"ok\":true,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[],\"path\":\"/w/runs/r8s7head/HY1s/head-head-3/chain.flow.ts\",\"rootRunId\":\"01M53E461ZSREVR9W77FXKF5NS\",\"runId\":\"01M53E461ZSREVR9W77FXKF5NS\",\"socketPath\":\"/tmp/relayflowd-6b639c85debd.sock\",\"completedSteps\":3,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","complete-3 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":781} +{"s":"HY1s","start":"head","resume":"head","i":4,"fresh":true,"code1":0,"code":0,"effects":"PB","effects1":"PB","out1":"{\"ok\":true,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[],\"path\":\"/w/runs/r8s7head/HY1s/head-head-4/chain.flow.ts\",\"rootRunId\":\"01M53E462RV412KH7FA6EZERPX\",\"runId\":\"01M53E462RV412KH7FA6EZERPX\",\"socketPath\":\"/tmp/relayflowd-c36a8df13b9b.sock\",\"completedSteps\":3,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","complete-3 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":780} +{"s":"HY1s","start":"head","resume":"head","i":5,"fresh":true,"code1":0,"code":0,"effects":"PB","effects1":"PB","out1":"{\"ok\":true,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[],\"path\":\"/w/runs/r8s7head/HY1s/head-head-5/chain.flow.ts\",\"rootRunId\":\"01M53E46B57T2FDV07YD1S9X0Z\",\"runId\":\"01M53E46B57T2FDV07YD1S9X0Z\",\"socketPath\":\"/tmp/relayflowd-a015aaedcd91.sock\",\"completedSteps\":3,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","complete-3 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":716} +{"s":"HY2","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"AB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E46TJ7GWYVPFQTY6XG72T\",\"runId\":\"01M53E46TJ7GWYVPFQTY6XG72T\",\"socketPath\":\"/tmp/relayflowd-ff149eb41e46.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf V","run-2 c=1 sleep 0.2; printf A >> effects","run-3 c=1 sleep 0.1; printf B >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1751} +{"s":"HY2","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"AB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E46SNQS7YEE96ER4180CB\",\"runId\":\"01M53E46SNQS7YEE96ER4180CB\",\"socketPath\":\"/tmp/relayflowd-6a62094c3100.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf V","run-2 c=1 sleep 0.2; printf A >> effects","run-3 c=1 sleep 0.1; printf B >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1774} +{"s":"HY2","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"AB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E47378S8X1A4Y25XWNP1M\",\"runId\":\"01M53E47378S8X1A4Y25XWNP1M\",\"socketPath\":\"/tmp/relayflowd-0e73c316bfe1.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf V","run-2 c=1 sleep 0.2; printf A >> effects","run-3 c=1 sleep 0.1; printf B >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1878} +{"s":"HY2","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"AB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E48GCTY0C7VYQC0XHTV8R\",\"runId\":\"01M53E48GCTY0C7VYQC0XHTV8R\",\"socketPath\":\"/tmp/relayflowd-055e30e72611.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf V","run-2 c=1 sleep 0.2; printf A >> effects","run-3 c=1 sleep 0.1; printf B >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1994} +{"s":"HY2","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"AB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E48J1A6AB60VF77GD0BT9\",\"runId\":\"01M53E48J1A6AB60VF77GD0BT9\",\"socketPath\":\"/tmp/relayflowd-13b413593f94.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf V","run-2 c=1 sleep 0.2; printf A >> effects","run-3 c=1 sleep 0.1; printf B >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2076} +{"s":"HY2","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"AB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E48X0PQ1KHY6N1TPXWYCY\",\"runId\":\"01M53E48X0PQ1KHY6N1TPXWYCY\",\"socketPath\":\"/tmp/relayflowd-56c5d5fe3b57.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf V","run-2 c=1 sleep 0.2; printf A >> effects","run-3 c=1 sleep 0.1; printf B >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2173} +{"s":"PAR1","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4AFE2FT8Z6K4A7GDYW8D\",\"runId\":\"01M53E4AFE2FT8Z6K4A7GDYW8D\",\"socketPath\":\"/tmp/relayflowd-21f89c2ca948.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.2; printf C","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1773} +{"s":"PAR1","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4AK7R1RF5ZK7HXH8S76T\",\"runId\":\"01M53E4AK7R1RF5ZK7HXH8S76T\",\"socketPath\":\"/tmp/relayflowd-36a94d5907a0.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.2; printf C","run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1837} +{"s":"PAR1","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4B1BEPF3YFH8H9PHZYFW\",\"runId\":\"01M53E4B1BEPF3YFH8H9PHZYFW\",\"socketPath\":\"/tmp/relayflowd-894828f8bf4f.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.2; printf C","run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1904} +{"s":"PAR1","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4C8NCYTXEX1NVR1YAXYR\",\"runId\":\"01M53E4C8NCYTXEX1NVR1YAXYR\",\"socketPath\":\"/tmp/relayflowd-4a454515f3a3.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.2; printf C","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2041} +{"s":"PAR1","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4CDTPJTZJTNPNQKTHQ37\",\"runId\":\"01M53E4CDTPJTZJTNPNQKTHQ37\",\"socketPath\":\"/tmp/relayflowd-0fbe9bf78ea3.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.2; printf C","run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2111} +{"s":"PAR1","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4CWMRHFXGCQ8V5KHH1QV\",\"runId\":\"01M53E4CWMRHFXGCQ8V5KHH1QV\",\"socketPath\":\"/tmp/relayflowd-928f33cde19b.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.2; printf C","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2158} +{"s":"PAR2","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"ba","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4E6X1GHDAFP6X9PCQA25\",\"runId\":\"01M53E4E6X1GHDAFP6X9PCQA25\",\"socketPath\":\"/tmp/relayflowd-e06df36227f2.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1728} +{"s":"PAR2","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"ba","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4EEJVS7YM3C3FT3AX67K\",\"runId\":\"01M53E4EEJVS7YM3C3FT3AX67K\",\"socketPath\":\"/tmp/relayflowd-17d194995709.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1834} +{"s":"PAR2","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"ba","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4F0MM4GWX7AJKYCWMZ1Z\",\"runId\":\"01M53E4F0MM4GWX7AJKYCWMZ1Z\",\"socketPath\":\"/tmp/relayflowd-deb61c23ced8.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1844} +{"s":"PAR2","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"ba","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4FYM2HZ4B8P3BND3NNRT\",\"runId\":\"01M53E4FYM2HZ4B8P3BND3NNRT\",\"socketPath\":\"/tmp/relayflowd-f5b3a06bd602.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2019} +{"s":"PAR2","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"ba","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4G7Y55NPNZ13WS1BDE0N\",\"runId\":\"01M53E4G7Y55NPNZ13WS1BDE0N\",\"socketPath\":\"/tmp/relayflowd-dbcf44ef89eb.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2034} +{"s":"PAR2","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"ba","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4GSPRG7AX2NYTJSJ6QBG\",\"runId\":\"01M53E4GSPRG7AX2NYTJSJ6QBG\",\"socketPath\":\"/tmp/relayflowd-38f5be56d8c5.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2111} +{"s":"EQ1twice","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"aaX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4HVD5YZ2KZSZ7RC68V5J\",\"runId\":\"01M53E4HVD5YZ2KZSZ7RC68V5J\",\"socketPath\":\"/tmp/relayflowd-bf9e93b9be48.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A","run-2 c=1 sleep 0.2; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf a >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":true,"replay":false,"ok":true,"ms":1697} +{"s":"EQ1twice","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"aaX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4J7G4AV48RE0MTYN56VA\",\"runId\":\"01M53E4J7G4AV48RE0MTYN56VA\",\"socketPath\":\"/tmp/relayflowd-ea6389712ac6.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A","run-2 c=1 sleep 0.2; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":true,"replay":false,"ok":true,"ms":1708} +{"s":"EQ1twice","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"aaX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4JWQE5CMDPV2XF14WNBN\",\"runId\":\"01M53E4JWQE5CMDPV2XF14WNBN\",\"socketPath\":\"/tmp/relayflowd-7ebbb4ce3ffe.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A","run-2 c=1 sleep 0.2; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf a >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":true,"replay":false,"ok":true,"ms":1770} +{"s":"EQ1twice","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"aaX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4KFZ4D917A3HH8YCE49M\",\"runId\":\"01M53E4KFZ4D917A3HH8YCE49M\",\"socketPath\":\"/tmp/relayflowd-781461718338.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.2; printf A","run-1 c=1 sleep 0.2; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf a >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":true,"replay":false,"ok":true,"ms":1837} +{"s":"EQ1twice","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"aaX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4KW6V2HRZDYEHDY7EVCA\",\"runId\":\"01M53E4KW6V2HRZDYEHDY7EVCA\",\"socketPath\":\"/tmp/relayflowd-acb21b7e2f06.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A","run-2 c=1 sleep 0.2; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":true,"replay":false,"ok":true,"ms":1968} +{"s":"EQ1twice","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"aaX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4MKCC6X46VME56077BMW\",\"runId\":\"01M53E4MKCC6X46VME56077BMW\",\"socketPath\":\"/tmp/relayflowd-d9fcb08577ef.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.2; printf A","run-1 c=1 sleep 0.2; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":true,"replay":false,"ok":true,"ms":2108} +{"s":"EQ2ret","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4N9EPZ508YFP0QA3JEE4\",\"runId\":\"01M53E4N9EPZ508YFP0QA3JEE4\",\"socketPath\":\"/tmp/relayflowd-9c6ff0a8cc6c.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf ab >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1746} +{"s":"EQ2ret","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4NSRYA9ZQN2TJAF39542\",\"runId\":\"01M53E4NSRYA9ZQN2TJAF39542\",\"socketPath\":\"/tmp/relayflowd-433eb2e5dd68.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf ab >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1766} +{"s":"EQ2ret","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4PPBGZ2XJER74875P62B\",\"runId\":\"01M53E4PPBGZ2XJER74875P62B\",\"socketPath\":\"/tmp/relayflowd-f4b16fc5ab7a.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf ab >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1911} +{"s":"EQ2ret","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4PZJJTF3ZN3X9FSP3WG2\",\"runId\":\"01M53E4PZJJTF3ZN3X9FSP3WG2\",\"socketPath\":\"/tmp/relayflowd-5c522bd4d11d.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf ab >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1933} +{"s":"EQ2ret","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4QHPFMTNBXBMZSZ2S1MX\",\"runId\":\"01M53E4QHPFMTNBXBMZSZ2S1MX\",\"socketPath\":\"/tmp/relayflowd-996ad2024ace.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf ab >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2111} +{"s":"EQ3midret","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"BARX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4RWFQBGRKQM2TG8KC2EB\",\"runId\":\"01M53E4RWFQBGRKQM2TG8KC2EB\",\"socketPath\":\"/tmp/relayflowd-693d87967c4f.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BARXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B >> effects","run-1 c=1 sleep 0.2; printf A >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R >> effects","run-after-b27729cd34232dcbe9422304c2b17447650342603d38049b510e271b9689b435-1 c=1 printf X >> effects","run-after-6f14790e09c46141ecb49037787ed603ea9c232ff0ebc6792e41772b066e3c75-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1658} +{"s":"EQ2ret","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4RHWB7SK5YT4CVN443PW\",\"runId\":\"01M53E4RHWB7SK5YT4CVN443PW\",\"socketPath\":\"/tmp/relayflowd-fe1690c033cc.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf ab >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2233} +{"s":"EQ3midret","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"BARX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4SKTCSFRMCGAE9KP6HTZ\",\"runId\":\"01M53E4SKTCSFRMCGAE9KP6HTZ\",\"socketPath\":\"/tmp/relayflowd-cfb4ae282755.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BARXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R >> effects","run-after-b27729cd34232dcbe9422304c2b17447650342603d38049b510e271b9689b435-1 c=1 printf X >> effects","run-after-6f14790e09c46141ecb49037787ed603ea9c232ff0ebc6792e41772b066e3c75-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1688} +{"s":"EQ3midret","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"BARX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4TH0K4GY2HHNE8GG3BJ6\",\"runId\":\"01M53E4TH0K4GY2HHNE8GG3BJ6\",\"socketPath\":\"/tmp/relayflowd-299a24c9d5d1.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BARXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R >> effects","run-after-b27729cd34232dcbe9422304c2b17447650342603d38049b510e271b9689b435-1 c=1 printf X >> effects","run-after-6f14790e09c46141ecb49037787ed603ea9c232ff0ebc6792e41772b066e3c75-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1757} +{"s":"EQ3midret","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"BARX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4TQ0R177NBR7QR3207E3\",\"runId\":\"01M53E4TQ0R177NBR7QR3207E3\",\"socketPath\":\"/tmp/relayflowd-1afc7b706482.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BARXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R >> effects","run-after-b27729cd34232dcbe9422304c2b17447650342603d38049b510e271b9689b435-1 c=1 printf X >> effects","run-after-6f14790e09c46141ecb49037787ed603ea9c232ff0ebc6792e41772b066e3c75-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1824} +{"s":"EQ3midret","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"BARX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4V8CJX2CV8HF9EYPS53S\",\"runId\":\"01M53E4V8CJX2CV8HF9EYPS53S\",\"socketPath\":\"/tmp/relayflowd-60d61a03893d.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BARXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R >> effects","run-after-b27729cd34232dcbe9422304c2b17447650342603d38049b510e271b9689b435-1 c=1 printf X >> effects","run-after-6f14790e09c46141ecb49037787ed603ea9c232ff0ebc6792e41772b066e3c75-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1946} +{"s":"EQ4fail","start":"head","resume":"head","i":0,"fresh":true,"code1":1,"code":1,"effects":"FB","effects1":"FB","out1":"d with retries_exhausted Step \\\"run-1\\\" (deterministic) completionReason: retries_exhausted attempt=1/1 transportRetries=1 exit=1.\\nInspect: flows replay 01M53E4WGDNA5TW9NZRDNYWQ1Y --at run-1 --data-dir '/w/runs/r8s7head/EQ4fail/head-head-0/data'\\nJournal: /w/runs/r8s7head/EQ4fail/head-head-0/data/runs/01M53E4WGDNA5TW9NZRDNYWQ1Y.sqlite3\"}],\"path\":\"/w/runs/r8s7head/EQ4fail/head-head-0/chain.flow.ts\",\"rootRunId\":\"01M53E4WFBH0KGVWHETM82FEHC\",\"runId\":\"01M53E4WGDNA5TW9NZRDNYWQ1Y\",\"socketPath\":\"/tmp/relayflowd-6faaa7c004d1.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf F >> effects; exit 1","run-2 c=1 sleep 0.4; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":1008} +{"s":"EQ4fail","start":"head","resume":"head","i":1,"fresh":true,"code1":1,"code":1,"effects":"FB","effects1":"FB","out1":"d with retries_exhausted Step \\\"run-1\\\" (deterministic) completionReason: retries_exhausted attempt=1/1 transportRetries=1 exit=1.\\nInspect: flows replay 01M53E4X6AWRH4MRWMPB7AJ82F --at run-1 --data-dir '/w/runs/r8s7head/EQ4fail/head-head-1/data'\\nJournal: /w/runs/r8s7head/EQ4fail/head-head-1/data/runs/01M53E4X6AWRH4MRWMPB7AJ82F.sqlite3\"}],\"path\":\"/w/runs/r8s7head/EQ4fail/head-head-1/chain.flow.ts\",\"rootRunId\":\"01M53E4X57RVRSTMYNCCWP2AXD\",\"runId\":\"01M53E4X6AWRH4MRWMPB7AJ82F\",\"socketPath\":\"/tmp/relayflowd-14db487bf969.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf F >> effects; exit 1","run-2 c=1 sleep 0.4; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":1035} +{"s":"EQ3midret","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"BARX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4W7BPB6CTQTPQSTZQ4JN\",\"runId\":\"01M53E4W7BPB6CTQTPQSTZQ4JN\",\"socketPath\":\"/tmp/relayflowd-6e412122dac7.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BARXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B >> effects","run-1 c=1 sleep 0.2; printf A >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R >> effects","run-after-b27729cd34232dcbe9422304c2b17447650342603d38049b510e271b9689b435-1 c=1 printf X >> effects","run-after-6f14790e09c46141ecb49037787ed603ea9c232ff0ebc6792e41772b066e3c75-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2097} +{"s":"EQ4fail","start":"head","resume":"head","i":2,"fresh":true,"code1":1,"code":1,"effects":"FB","effects1":"FB","out1":"d with retries_exhausted Step \\\"run-1\\\" (deterministic) completionReason: retries_exhausted attempt=1/1 transportRetries=1 exit=1.\\nInspect: flows replay 01M53E4XH5B1PR46JPP1FBCKXK --at run-1 --data-dir '/w/runs/r8s7head/EQ4fail/head-head-2/data'\\nJournal: /w/runs/r8s7head/EQ4fail/head-head-2/data/runs/01M53E4XH5B1PR46JPP1FBCKXK.sqlite3\"}],\"path\":\"/w/runs/r8s7head/EQ4fail/head-head-2/chain.flow.ts\",\"rootRunId\":\"01M53E4XGAE2R8R6TE3QEM8QK1\",\"runId\":\"01M53E4XH5B1PR46JPP1FBCKXK\",\"socketPath\":\"/tmp/relayflowd-b2ceb6c392f4.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf F >> effects; exit 1","run-2 c=1 sleep 0.4; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":1045} +{"s":"EQ4fail","start":"head","resume":"head","i":3,"fresh":true,"code1":1,"code":1,"effects":"FB","effects1":"FB","out1":"d with retries_exhausted Step \\\"run-1\\\" (deterministic) completionReason: retries_exhausted attempt=1/1 transportRetries=1 exit=1.\\nInspect: flows replay 01M53E4Y73N2HRWWG9YJJQQPJD --at run-1 --data-dir '/w/runs/r8s7head/EQ4fail/head-head-3/data'\\nJournal: /w/runs/r8s7head/EQ4fail/head-head-3/data/runs/01M53E4Y73N2HRWWG9YJJQQPJD.sqlite3\"}],\"path\":\"/w/runs/r8s7head/EQ4fail/head-head-3/chain.flow.ts\",\"rootRunId\":\"01M53E4Y61WWV4ZEM5MEDYQTCC\",\"runId\":\"01M53E4Y73N2HRWWG9YJJQQPJD\",\"socketPath\":\"/tmp/relayflowd-f85de7e0cf8a.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf F >> effects; exit 1","run-2 c=1 sleep 0.4; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":1052} +{"s":"EQ4fail","start":"head","resume":"head","i":4,"fresh":true,"code1":1,"code":1,"effects":"FB","effects1":"FB","out1":"d with retries_exhausted Step \\\"run-1\\\" (deterministic) completionReason: retries_exhausted attempt=1/1 transportRetries=1 exit=1.\\nInspect: flows replay 01M53E4YAEFN6FPT3N7W23W4C7 --at run-1 --data-dir '/w/runs/r8s7head/EQ4fail/head-head-4/data'\\nJournal: /w/runs/r8s7head/EQ4fail/head-head-4/data/runs/01M53E4YAEFN6FPT3N7W23W4C7.sqlite3\"}],\"path\":\"/w/runs/r8s7head/EQ4fail/head-head-4/chain.flow.ts\",\"rootRunId\":\"01M53E4Y9GXFRJXAXK202H16W5\",\"runId\":\"01M53E4YAEFN6FPT3N7W23W4C7\",\"socketPath\":\"/tmp/relayflowd-0a61131ecc5d.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.4; printf B >> effects","run-1 c=1 sleep 0.1; printf F >> effects; exit 1"],"letterDup":false,"replay":false,"ok":true,"ms":1057} +{"s":"EQ4fail","start":"head","resume":"head","i":5,"fresh":true,"code1":1,"code":1,"effects":"FB","effects1":"FB","out1":"d with retries_exhausted Step \\\"run-1\\\" (deterministic) completionReason: retries_exhausted attempt=1/1 transportRetries=1 exit=1.\\nInspect: flows replay 01M53E4YH8S24G72QJFY5C1V3G --at run-1 --data-dir '/w/runs/r8s7head/EQ4fail/head-head-5/data'\\nJournal: /w/runs/r8s7head/EQ4fail/head-head-5/data/runs/01M53E4YH8S24G72QJFY5C1V3G.sqlite3\"}],\"path\":\"/w/runs/r8s7head/EQ4fail/head-head-5/chain.flow.ts\",\"rootRunId\":\"01M53E4YGECD647QX8X14SJ7P4\",\"runId\":\"01M53E4YH8S24G72QJFY5C1V3G\",\"socketPath\":\"/tmp/relayflowd-931d316468e2.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.4; printf B >> effects","run-1 c=1 sleep 0.1; printf F >> effects; exit 1"],"letterDup":false,"replay":false,"ok":true,"ms":1035} +{"s":"EQ5wide","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"dagebhjckfilX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4Z7143SNKYC8GXYR6TAC\",\"runId\":\"01M53E4Z7143SNKYC8GXYR6TAC\",\"socketPath\":\"/tmp/relayflowd-97d54b13b597.sock\",\"completedSteps\":27,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"dagebhjckfilXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.3; printf S2","run-6 c=1 sleep 0.3; printf S5","run-5 c=1 sleep 0.2; printf S4","run-4 c=1 sleep 0.1; printf S3","run-8 c=1 sleep 0.2; printf S7","run-1 c=1 sleep 0.1; printf S0","run-7 c=1 sleep 0.1; printf S6","run-2 c=1 sleep 0.2; printf S1","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.2; printf S10","run-12 c=1 sleep 0.3; printf S11","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=1 printf k >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-5035e1bcbaa00bdada261e30fab262c9f56d98340070094467fbb29a1e20b3e3-1 c=1 printf l >> effects","run-after-47737fddbf7e602a4dd0245918ce58aaabd31b1de4ef3296dcf0b58bdd9fc1db-1 c=1 printf X >> effects","run-after-2cd3f17e0f60b40497c76aeda641f729788d3daf9079598950b081d20a057996-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-27 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2221} +{"s":"EQ5wide","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"agdhjbefckilX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4ZARBNEDSEETBBQBRWPR\",\"runId\":\"01M53E4ZARBNEDSEETBBQBRWPR\",\"socketPath\":\"/tmp/relayflowd-96342db1958f.sock\",\"completedSteps\":27,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"agdhjbefckilXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.3; printf S2","run-4 c=1 sleep 0.1; printf S3","run-1 c=1 sleep 0.1; printf S0","run-2 c=1 sleep 0.2; printf S1","run-8 c=1 sleep 0.2; printf S7","run-6 c=1 sleep 0.3; printf S5","run-7 c=1 sleep 0.1; printf S6","run-5 c=1 sleep 0.2; printf S4","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.2; printf S10","run-12 c=1 sleep 0.3; printf S11","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=1 printf k >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-5035e1bcbaa00bdada261e30fab262c9f56d98340070094467fbb29a1e20b3e3-1 c=1 printf l >> effects","run-after-47737fddbf7e602a4dd0245918ce58aaabd31b1de4ef3296dcf0b58bdd9fc1db-1 c=1 printf X >> effects","run-after-2cd3f17e0f60b40497c76aeda641f729788d3daf9079598950b081d20a057996-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-27 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2321} +{"s":"EQ5wide","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"adgehjbcfkilX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E4ZGDFG9CSZK5XPBD9496\",\"runId\":\"01M53E4ZGDFG9CSZK5XPBD9496\",\"socketPath\":\"/tmp/relayflowd-16b7219f1e41.sock\",\"completedSteps\":27,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"adgehjbcfkilXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf S0","run-2 c=1 sleep 0.2; printf S1","run-7 c=1 sleep 0.1; printf S6","run-5 c=1 sleep 0.2; printf S4","run-6 c=1 sleep 0.3; printf S5","run-4 c=1 sleep 0.1; printf S3","run-3 c=1 sleep 0.3; printf S2","run-8 c=1 sleep 0.2; printf S7","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.2; printf S10","run-12 c=1 sleep 0.3; printf S11","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=1 printf k >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-5035e1bcbaa00bdada261e30fab262c9f56d98340070094467fbb29a1e20b3e3-1 c=1 printf l >> effects","run-after-47737fddbf7e602a4dd0245918ce58aaabd31b1de4ef3296dcf0b58bdd9fc1db-1 c=1 printf X >> effects","run-after-2cd3f17e0f60b40497c76aeda641f729788d3daf9079598950b081d20a057996-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-27 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2375} +{"s":"EQ5wide","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"adgebhjcfiklX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E51C4BBXGTQ0RTXB7H1RD\",\"runId\":\"01M53E51C4BBXGTQ0RTXB7H1RD\",\"socketPath\":\"/tmp/relayflowd-1d3e5595315d.sock\",\"completedSteps\":27,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"adgebhjcfiklXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.2; printf S1","run-7 c=1 sleep 0.1; printf S6","run-3 c=1 sleep 0.3; printf S2","run-8 c=1 sleep 0.2; printf S7","run-6 c=1 sleep 0.3; printf S5","run-4 c=1 sleep 0.1; printf S3","run-5 c=1 sleep 0.2; printf S4","run-1 c=1 sleep 0.1; printf S0","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.2; printf S10","run-12 c=1 sleep 0.3; printf S11","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=1 printf k >> effects","run-after-5035e1bcbaa00bdada261e30fab262c9f56d98340070094467fbb29a1e20b3e3-1 c=1 printf l >> effects","run-after-47737fddbf7e602a4dd0245918ce58aaabd31b1de4ef3296dcf0b58bdd9fc1db-1 c=1 printf X >> effects","run-after-2cd3f17e0f60b40497c76aeda641f729788d3daf9079598950b081d20a057996-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-27 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2521} +{"s":"EQ5wide","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"gdahbjecfkilX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E51JEX0QHDHAR40HAMZV0\",\"runId\":\"01M53E51JEX0QHDHAR40HAMZV0\",\"socketPath\":\"/tmp/relayflowd-7e9989fb3121.sock\",\"completedSteps\":27,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"gdahbjecfkilXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf S0","run-8 c=1 sleep 0.2; printf S7","run-6 c=1 sleep 0.3; printf S5","run-7 c=1 sleep 0.1; printf S6","run-4 c=1 sleep 0.1; printf S3","run-5 c=1 sleep 0.2; printf S4","run-3 c=1 sleep 0.3; printf S2","run-2 c=1 sleep 0.2; printf S1","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.2; printf S10","run-12 c=1 sleep 0.3; printf S11","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=1 printf k >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-5035e1bcbaa00bdada261e30fab262c9f56d98340070094467fbb29a1e20b3e3-1 c=1 printf l >> effects","run-after-47737fddbf7e602a4dd0245918ce58aaabd31b1de4ef3296dcf0b58bdd9fc1db-1 c=1 printf X >> effects","run-after-2cd3f17e0f60b40497c76aeda641f729788d3daf9079598950b081d20a057996-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-27 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2629} +{"s":"EQ5wide","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"agdehjbckfilX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E51TYEA1GTHD5KX2XG1P6\",\"runId\":\"01M53E51TYEA1GTHD5KX2XG1P6\",\"socketPath\":\"/tmp/relayflowd-9b40b1b57f34.sock\",\"completedSteps\":27,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"agdehjbckfilXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-4 c=1 sleep 0.1; printf S3","run-3 c=1 sleep 0.3; printf S2","run-6 c=1 sleep 0.3; printf S5","run-7 c=1 sleep 0.1; printf S6","run-5 c=1 sleep 0.2; printf S4","run-2 c=1 sleep 0.2; printf S1","run-8 c=1 sleep 0.2; printf S7","run-1 c=1 sleep 0.1; printf S0","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.2; printf S10","run-12 c=1 sleep 0.3; printf S11","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=1 printf k >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-5035e1bcbaa00bdada261e30fab262c9f56d98340070094467fbb29a1e20b3e3-1 c=1 printf l >> effects","run-after-47737fddbf7e602a4dd0245918ce58aaabd31b1de4ef3296dcf0b58bdd9fc1db-1 c=1 printf X >> effects","run-after-2cd3f17e0f60b40497c76aeda641f729788d3daf9079598950b081d20a057996-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-27 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2707} +{"s":"EQ5stall","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"gadbehjcf","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E53VHCS9QXDWN8KVHW4CH\",\"runId\":\"01M53E53VHCS9QXDWN8KVHW4CH\",\"socketPath\":\"/tmp/relayflowd-79f42c2256c9.sock\",\"completedSteps\":26,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"gadbehjcfYyiXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf S0","run-5 c=1 sleep 0.2; printf S4","run-2 c=1 sleep 0.2; printf S1","run-8 c=1 sleep 0.2; printf S7","run-6 c=1 sleep 0.3; printf S5","run-7 c=1 sleep 0.1; printf S6","run-3 c=1 sleep 0.3; printf S2","run-4 c=1 sleep 0.1; printf S3","run-9 c=2 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.15; printf s","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-db2e5b41644e936c3a061f42c63a3d86e58c3320e293aeefdb6083bf4cfdcda3-1 c=1 printf y >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-3a4ae68314c51ac46816ed0ace6fa25a1714196c37de5cbb7f13339a06bc621d-1 c=1 printf X >> effects","run-after-02d7a6df2ca6022a4a04be62387ebcbbad3b3adb1e1382383c380b5b5bf863d7-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-26 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2186} +{"s":"EQ5stall","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"dagehjbfci","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E544XBMM8X5R1NM07Q6AS\",\"runId\":\"01M53E544XBMM8X5R1NM07Q6AS\",\"socketPath\":\"/tmp/relayflowd-ac8cfd7b406d.sock\",\"completedSteps\":26,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"dagehjbfciYyXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf S0","run-5 c=1 sleep 0.2; printf S4","run-6 c=1 sleep 0.3; printf S5","run-7 c=1 sleep 0.1; printf S6","run-8 c=1 sleep 0.2; printf S7","run-4 c=1 sleep 0.1; printf S3","run-2 c=1 sleep 0.2; printf S1","run-3 c=1 sleep 0.3; printf S2","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.15; printf s","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-db2e5b41644e936c3a061f42c63a3d86e58c3320e293aeefdb6083bf4cfdcda3-1 c=1 printf y >> effects","run-after-3a4ae68314c51ac46816ed0ace6fa25a1714196c37de5cbb7f13339a06bc621d-1 c=1 printf X >> effects","run-after-02d7a6df2ca6022a4a04be62387ebcbbad3b3adb1e1382383c380b5b5bf863d7-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-26 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2087} +{"s":"EQ5stall","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"adghejbfci","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E54F81ZKSBBMX913Y0AHD\",\"runId\":\"01M53E54F81ZKSBBMX913Y0AHD\",\"socketPath\":\"/tmp/relayflowd-11cc6ab041c7.sock\",\"completedSteps\":26,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"adghejbfciYyXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.3; printf S2","run-5 c=1 sleep 0.2; printf S4","run-2 c=1 sleep 0.2; printf S1","run-7 c=1 sleep 0.1; printf S6","run-4 c=1 sleep 0.1; printf S3","run-6 c=1 sleep 0.3; printf S5","run-8 c=1 sleep 0.2; printf S7","run-1 c=1 sleep 0.1; printf S0","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.15; printf s","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-db2e5b41644e936c3a061f42c63a3d86e58c3320e293aeefdb6083bf4cfdcda3-1 c=1 printf y >> effects","run-after-3a4ae68314c51ac46816ed0ace6fa25a1714196c37de5cbb7f13339a06bc621d-1 c=1 printf X >> effects","run-after-02d7a6df2ca6022a4a04be62387ebcbbad3b3adb1e1382383c380b5b5bf863d7-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-26 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2183} +{"s":"EQ5stall","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"gdabhjecfi","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E55ZJF7E5YNRXN2B17G8N\",\"runId\":\"01M53E55ZJF7E5YNRXN2B17G8N\",\"socketPath\":\"/tmp/relayflowd-0b63c4a035f3.sock\",\"completedSteps\":26,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"gdabhjecfiYyXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.3; printf S2","run-8 c=1 sleep 0.2; printf S7","run-4 c=1 sleep 0.1; printf S3","run-2 c=1 sleep 0.2; printf S1","run-6 c=1 sleep 0.3; printf S5","run-5 c=1 sleep 0.2; printf S4","run-7 c=1 sleep 0.1; printf S6","run-1 c=1 sleep 0.1; printf S0","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.15; printf s","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-db2e5b41644e936c3a061f42c63a3d86e58c3320e293aeefdb6083bf4cfdcda3-1 c=1 printf y >> effects","run-after-3a4ae68314c51ac46816ed0ace6fa25a1714196c37de5cbb7f13339a06bc621d-1 c=1 printf X >> effects","run-after-02d7a6df2ca6022a4a04be62387ebcbbad3b3adb1e1382383c380b5b5bf863d7-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-26 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2169} +{"s":"EQ5stall","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"adgehbjcfi","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E565PEQEPHNWZG85NAS6A\",\"runId\":\"01M53E565PEQEPHNWZG85NAS6A\",\"socketPath\":\"/tmp/relayflowd-2147b01ed177.sock\",\"completedSteps\":26,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"adgehbjcfiYyXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-4 c=1 sleep 0.1; printf S3","run-6 c=1 sleep 0.3; printf S5","run-2 c=1 sleep 0.2; printf S1","run-8 c=1 sleep 0.2; printf S7","run-5 c=1 sleep 0.2; printf S4","run-3 c=1 sleep 0.3; printf S2","run-7 c=1 sleep 0.1; printf S6","run-1 c=1 sleep 0.1; printf S0","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.15; printf s","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-db2e5b41644e936c3a061f42c63a3d86e58c3320e293aeefdb6083bf4cfdcda3-1 c=1 printf y >> effects","run-after-3a4ae68314c51ac46816ed0ace6fa25a1714196c37de5cbb7f13339a06bc621d-1 c=1 printf X >> effects","run-after-02d7a6df2ca6022a4a04be62387ebcbbad3b3adb1e1382383c380b5b5bf863d7-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-26 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2329} +{"s":"EQ5stall","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"gadhbejcfi","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E56KAGJM2PQT6W79MK1E3\",\"runId\":\"01M53E56KAGJM2PQT6W79MK1E3\",\"socketPath\":\"/tmp/relayflowd-2b4f9be90502.sock\",\"completedSteps\":26,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"gadhbejcfiYyXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-8 c=1 sleep 0.2; printf S7","run-3 c=1 sleep 0.3; printf S2","run-1 c=1 sleep 0.1; printf S0","run-2 c=1 sleep 0.2; printf S1","run-6 c=1 sleep 0.3; printf S5","run-7 c=1 sleep 0.1; printf S6","run-4 c=1 sleep 0.1; printf S3","run-5 c=1 sleep 0.2; printf S4","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.15; printf s","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-db2e5b41644e936c3a061f42c63a3d86e58c3320e293aeefdb6083bf4cfdcda3-1 c=1 printf y >> effects","run-after-3a4ae68314c51ac46816ed0ace6fa25a1714196c37de5cbb7f13339a06bc621d-1 c=1 printf X >> effects","run-after-02d7a6df2ca6022a4a04be62387ebcbbad3b3adb1e1382383c380b5b5bf863d7-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-26 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2387} +{"s":"EQ6expr","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"BACX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E583NED4FZ3EBQ4951W4M\",\"runId\":\"01M53E583NED4FZ3EBQ4951W4M\",\"socketPath\":\"/tmp/relayflowd-5e7c2b862938.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BACXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=1 sleep 0.3; printf C >> effects","run-1 c=1 sleep 0.2; printf A >> effects","run-after-f2f25a43d095012b1401192411775ae0d83e26fd7aabb6add8b49db34db7d765-1 c=1 printf X >> effects","run-after-b99aafbc3f01763b118691e219a345ce36c250fb2c15f7a43b4b33c4473aaeeb-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1779} +{"s":"EQ6expr","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"BACX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E58E5F0DM2A1KDZRQN1ZH\",\"runId\":\"01M53E58E5F0DM2A1KDZRQN1ZH\",\"socketPath\":\"/tmp/relayflowd-ca1cce00d660.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BACXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B >> effects","run-1 c=1 sleep 0.2; printf A >> effects","run-3 c=1 sleep 0.3; printf C >> effects","run-after-f2f25a43d095012b1401192411775ae0d83e26fd7aabb6add8b49db34db7d765-1 c=1 printf X >> effects","run-after-b99aafbc3f01763b118691e219a345ce36c250fb2c15f7a43b4b33c4473aaeeb-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1766} +{"s":"EQ6expr","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"BACX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E58XRFHECF2ANVPP2WMJK\",\"runId\":\"01M53E58XRFHECF2ANVPP2WMJK\",\"socketPath\":\"/tmp/relayflowd-65211d589267.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BACXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B >> effects","run-1 c=1 sleep 0.2; printf A >> effects","run-3 c=1 sleep 0.3; printf C >> effects","run-after-f2f25a43d095012b1401192411775ae0d83e26fd7aabb6add8b49db34db7d765-1 c=1 printf X >> effects","run-after-b99aafbc3f01763b118691e219a345ce36c250fb2c15f7a43b4b33c4473aaeeb-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1827} +{"s":"EQ6expr","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"BACX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E59SG2Z4JTQ9CEGVE4AM9\",\"runId\":\"01M53E59SG2Z4JTQ9CEGVE4AM9\",\"socketPath\":\"/tmp/relayflowd-d8a110d3671e.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BACXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.3; printf C >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-1 c=1 sleep 0.2; printf A >> effects","run-after-f2f25a43d095012b1401192411775ae0d83e26fd7aabb6add8b49db34db7d765-1 c=1 printf X >> effects","run-after-b99aafbc3f01763b118691e219a345ce36c250fb2c15f7a43b4b33c4473aaeeb-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1942} +{"s":"EQ6expr","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"BACX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5A5SV0RSEK4NR1K6QJXX\",\"runId\":\"01M53E5A5SV0RSEK4NR1K6QJXX\",\"socketPath\":\"/tmp/relayflowd-e5e5dfd2082f.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BACXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=1 sleep 0.3; printf C >> effects","run-1 c=1 sleep 0.2; printf A >> effects","run-after-f2f25a43d095012b1401192411775ae0d83e26fd7aabb6add8b49db34db7d765-1 c=1 printf X >> effects","run-after-b99aafbc3f01763b118691e219a345ce36c250fb2c15f7a43b4b33c4473aaeeb-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2044} +{"s":"EQ6expr","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"BACX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5AQN5A7SYW9A5HMWPR8T\",\"runId\":\"01M53E5AQN5A7SYW9A5HMWPR8T\",\"socketPath\":\"/tmp/relayflowd-452e9bd2b827.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BACXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-3 c=1 sleep 0.3; printf C >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-after-f2f25a43d095012b1401192411775ae0d83e26fd7aabb6add8b49db34db7d765-1 c=1 printf X >> effects","run-after-b99aafbc3f01763b118691e219a345ce36c250fb2c15f7a43b4b33c4473aaeeb-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2163} +{"s":"EQ7record","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"BR3X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5BPCZXFBC32ARFG6H6KP\",\"runId\":\"01M53E5BPCZXFBC32ARFG6H6KP\",\"socketPath\":\"/tmp/relayflowd-edf225bc2ad1.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BR3XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.2; exit 3","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R3 >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1654} +{"s":"EQ7record","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"BR3X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5C5JP42M7CQS5RM7YBXW\",\"runId\":\"01M53E5C5JP42M7CQS5RM7YBXW\",\"socketPath\":\"/tmp/relayflowd-f67606753d78.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BR3XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; exit 3","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R3 >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1700} +{"s":"EQ7record","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"BR3X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5CVZM124DQ52RZFF5ZMW\",\"runId\":\"01M53E5CVZM124DQ52RZFF5ZMW\",\"socketPath\":\"/tmp/relayflowd-ce3d718dd599.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BR3XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; exit 3","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R3 >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1797} +{"s":"EQ7record","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"BR3X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5DAE8Q2VXRC92M3W6W0N\",\"runId\":\"01M53E5DAE8Q2VXRC92M3W6W0N\",\"socketPath\":\"/tmp/relayflowd-c73a65629f95.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BR3XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; exit 3","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R3 >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1824} +{"s":"EQ7record","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"BR3X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5DV5QFPFKD6Q4DB8MRNH\",\"runId\":\"01M53E5DV5QFPFKD6Q4DB8MRNH\",\"socketPath\":\"/tmp/relayflowd-27832cb80295.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BR3XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.2; exit 3","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R3 >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1967} +{"s":"EQ8throw","start":"head","resume":"head","i":0,"fresh":true,"code1":1,"code":1,"effects":"B","effects1":"B","out1":"FAILED [protocol_error] relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\"}],\"path\":\"/w/runs/r8s7head/EQ8throw/head-head-0/chain.flow.ts\",\"rootRunId\":\"01M53E5F3BGV4PQ7A6B07MF7SH\",\"socketPath\":\"/tmp/relayflowd-70933da08984.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.2; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":828} +{"s":"EQ8throw","start":"head","resume":"head","i":1,"fresh":true,"code1":1,"code":1,"effects":"B","effects1":"B","out1":"FAILED [protocol_error] relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\"}],\"path\":\"/w/runs/r8s7head/EQ8throw/head-head-1/chain.flow.ts\",\"rootRunId\":\"01M53E5FQMMZYWD0T6TW5ZTQBA\",\"socketPath\":\"/tmp/relayflowd-e8a18571da75.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.2; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":818} +{"s":"EQ7record","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"BR3X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5EJMAJFF4SDJJY70NXMW\",\"runId\":\"01M53E5EJMAJFF4SDJJY70NXMW\",\"socketPath\":\"/tmp/relayflowd-2d3db4dafbe4.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BR3XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; exit 3","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R3 >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2069} +{"s":"EQ8throw","start":"head","resume":"head","i":2,"fresh":true,"code1":1,"code":1,"effects":"B","effects1":"B","out1":"FAILED [protocol_error] relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\"}],\"path\":\"/w/runs/r8s7head/EQ8throw/head-head-2/chain.flow.ts\",\"rootRunId\":\"01M53E5FWZMB2Q9MQ1ZMBQDMFP\",\"socketPath\":\"/tmp/relayflowd-cbca2e13bdf6.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.2; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":831} +{"s":"EQ8throw","start":"head","resume":"head","i":3,"fresh":true,"code1":1,"code":1,"effects":"B","effects1":"B","out1":"FAILED [protocol_error] relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\"}],\"path\":\"/w/runs/r8s7head/EQ8throw/head-head-3/chain.flow.ts\",\"rootRunId\":\"01M53E5GHZSR16CZ21P34MWY0A\",\"socketPath\":\"/tmp/relayflowd-a2f408e4a710.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.2; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":865} +{"s":"EQ8throw","start":"head","resume":"head","i":4,"fresh":true,"code1":1,"code":1,"effects":"B","effects1":"B","out1":"FAILED [protocol_error] relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\"}],\"path\":\"/w/runs/r8s7head/EQ8throw/head-head-4/chain.flow.ts\",\"rootRunId\":\"01M53E5GKK7STGXQ47WBSSHMGS\",\"socketPath\":\"/tmp/relayflowd-46d94d8c147f.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.2; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":824} +{"s":"EQ8throw","start":"head","resume":"head","i":5,"fresh":true,"code1":1,"code":1,"effects":"B","effects1":"B","out1":"FAILED [protocol_error] relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\"}],\"path\":\"/w/runs/r8s7head/EQ8throw/head-head-5/chain.flow.ts\",\"rootRunId\":\"01M53E5GQE7MAJM7Q17TCK35HS\",\"socketPath\":\"/tmp/relayflowd-79c63374d916.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.2; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":835} +{"s":"EQ9nested","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5HBSH5G9H2A29GQ1FMSX\",\"runId\":\"01M53E5HBSH5G9H2A29GQ1FMSX\",\"socketPath\":\"/tmp/relayflowd-346e841582e3.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"YbaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf A2","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 sleep 0.3; printf A1","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf B","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-b1d85947f7f7b0657c73aba929eb762b7030c0bc579f0e1286abaaf5a801b9aa-1 c=1 printf b >> effects","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf a >> effects","run-after-eb54a34c99f0b39c2797c3f88eefc72cdb012022fb05220e24d5e06dee441138-1 c=1 printf X >> effects","run-after-6c93494ed8a13b90512674bc92a4b62141d7d36acd947f90b13bf8ff5ffe1503-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2038} +{"s":"EQ9nested","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"a","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5HH9BG16HMGCXDD1MFCX\",\"runId\":\"01M53E5HH9BG16HMGCXDD1MFCX\",\"socketPath\":\"/tmp/relayflowd-f4287671651a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aYbXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A1","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf A2","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf a >> effects","run-after-b1d85947f7f7b0657c73aba929eb762b7030c0bc579f0e1286abaaf5a801b9aa-1 c=1 printf b >> effects","run-after-eb54a34c99f0b39c2797c3f88eefc72cdb012022fb05220e24d5e06dee441138-1 c=1 printf X >> effects","run-after-6c93494ed8a13b90512674bc92a4b62141d7d36acd947f90b13bf8ff5ffe1503-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1908} +{"s":"EQ9nested","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5HDYRYFMWP2SP4F0MBPY\",\"runId\":\"01M53E5HDYRYFMWP2SP4F0MBPY\",\"socketPath\":\"/tmp/relayflowd-dfc77cdeec04.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"YbaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf A2","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 sleep 0.3; printf A1","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf B","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-b1d85947f7f7b0657c73aba929eb762b7030c0bc579f0e1286abaaf5a801b9aa-1 c=1 printf b >> effects","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf a >> effects","run-after-eb54a34c99f0b39c2797c3f88eefc72cdb012022fb05220e24d5e06dee441138-1 c=1 printf X >> effects","run-after-6c93494ed8a13b90512674bc92a4b62141d7d36acd947f90b13bf8ff5ffe1503-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2139} +{"s":"EQ9nested","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"a","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5KDM6GAEMVQB5ZK3S9KA\",\"runId\":\"01M53E5KDM6GAEMVQB5ZK3S9KA\",\"socketPath\":\"/tmp/relayflowd-8b2ad19aa3f3.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aYbXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A1","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf A2","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf B","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf a >> effects","run-after-b1d85947f7f7b0657c73aba929eb762b7030c0bc579f0e1286abaaf5a801b9aa-1 c=1 printf b >> effects","run-after-eb54a34c99f0b39c2797c3f88eefc72cdb012022fb05220e24d5e06dee441138-1 c=1 printf X >> effects","run-after-6c93494ed8a13b90512674bc92a4b62141d7d36acd947f90b13bf8ff5ffe1503-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2071} +{"s":"EQ9nested","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"a","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5KE52JX479G36BPKYZ8R\",\"runId\":\"01M53E5KE52JX479G36BPKYZ8R\",\"socketPath\":\"/tmp/relayflowd-eb685abbc0ad.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aYbXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf A2","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A1","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf a >> effects","run-after-b1d85947f7f7b0657c73aba929eb762b7030c0bc579f0e1286abaaf5a801b9aa-1 c=1 printf b >> effects","run-after-eb54a34c99f0b39c2797c3f88eefc72cdb012022fb05220e24d5e06dee441138-1 c=1 printf X >> effects","run-after-6c93494ed8a13b90512674bc92a4b62141d7d36acd947f90b13bf8ff5ffe1503-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2167} +{"s":"EQ9nested","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"a","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5KGJY3HJTESNS04S193K\",\"runId\":\"01M53E5KGJY3HJTESNS04S193K\",\"socketPath\":\"/tmp/relayflowd-c87d7a2a2ca7.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aYbXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A1","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf A2","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf B","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf a >> effects","run-after-b1d85947f7f7b0657c73aba929eb762b7030c0bc579f0e1286abaaf5a801b9aa-1 c=1 printf b >> effects","run-after-eb54a34c99f0b39c2797c3f88eefc72cdb012022fb05220e24d5e06dee441138-1 c=1 printf X >> effects","run-after-6c93494ed8a13b90512674bc92a4b62141d7d36acd947f90b13bf8ff5ffe1503-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2289} +{"s":"PL1r5","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5NEN6261N9W6R3NVY1ZH\",\"runId\":\"01M53E5NEN6261N9W6R3NVY1ZH\",\"socketPath\":\"/tmp/relayflowd-5cf7623295ea.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2517} +{"s":"PL1r5","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5NHFBZBPA8M4XB1MW0JE\",\"runId\":\"01M53E5NHFBZBPA8M4XB1MW0JE\",\"socketPath\":\"/tmp/relayflowd-65244e19b91c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2476} +{"s":"PL1r5","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5NRFK27KJ9JENC5JCAF4\",\"runId\":\"01M53E5NRFK27KJ9JENC5JCAF4\",\"socketPath\":\"/tmp/relayflowd-15109c9a1577.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2590} +{"s":"PL1r5","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5QW7BV6Z4WV020TJJS6N\",\"runId\":\"01M53E5QW7BV6Z4WV020TJJS6N\",\"socketPath\":\"/tmp/relayflowd-610a482f6f9a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2564} +{"s":"PL1r5","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5QYC0P73VZH4P5E517VA\",\"runId\":\"01M53E5QYC0P73VZH4P5E517VA\",\"socketPath\":\"/tmp/relayflowd-d6d0464ca9e3.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2675} +{"s":"PL1r5","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5R8FVFY3H9FQF8P33MXX\",\"runId\":\"01M53E5R8FVFY3H9FQF8P33MXX\",\"socketPath\":\"/tmp/relayflowd-e3e436b8f5ad.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2867} +{"s":"PL2then","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5TCTFERX04A39QJQ2VFQ\",\"runId\":\"01M53E5TCTFERX04A39QJQ2VFQ\",\"socketPath\":\"/tmp/relayflowd-f7dbc6efd3fd.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2372} +{"s":"PL2then","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5THVE27PKBNWHQN4PHGS\",\"runId\":\"01M53E5THVE27PKBNWHQN4PHGS\",\"socketPath\":\"/tmp/relayflowd-52c21e2a3490.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2322} +{"s":"PL2then","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5V2TP9Z7BZ48S62DH4X4\",\"runId\":\"01M53E5V2TP9Z7BZ48S62DH4X4\",\"socketPath\":\"/tmp/relayflowd-5e9437280747.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2478} +{"s":"PL2then","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5WPGE3CBQWWXMKENZ569\",\"runId\":\"01M53E5WPGE3CBQWWXMKENZ569\",\"socketPath\":\"/tmp/relayflowd-8529f41c1b7c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2616} +{"s":"PL2then","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5WTNT6KBZT8F1JB58KMG\",\"runId\":\"01M53E5WTNT6KBZT8F1JB58KMG\",\"socketPath\":\"/tmp/relayflowd-ea58ccd59b6a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2658} +{"s":"PL2then","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E5XFV605TFEH3NGSFPXQF\",\"runId\":\"01M53E5XFV605TFEH3NGSFPXQF\",\"socketPath\":\"/tmp/relayflowd-2df4a7e1407d.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2767} +{"s":"PL3sub","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"pl3sub\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl3sub\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E5Z8DQAZ8KXAXDMG28GF5\",\"runId\":\"01M53E5Z8DQAZ8KXAXDMG28GF5\",\"socketPath\":\"/tmp/relayflowd-439c116a69ab.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2329} +{"s":"PL3sub","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"pl3sub\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl3sub\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E5ZDCHRK28TM53QEMN9KF\",\"runId\":\"01M53E5ZDCHRK28TM53QEMN9KF\",\"socketPath\":\"/tmp/relayflowd-e84237dcae87.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2337} +{"s":"PL3sub","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"pl3sub\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl3sub\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E605FC74ZQ10SDA05J4AM\",\"runId\":\"01M53E605FC74ZQ10SDA05J4AM\",\"socketPath\":\"/tmp/relayflowd-a3976d90e893.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2441} +{"s":"PL3sub","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"pl3sub\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl3sub\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E61FHXTPJ4HXA3ZASGVPT\",\"runId\":\"01M53E61FHXTPJ4HXA3ZASGVPT\",\"socketPath\":\"/tmp/relayflowd-57c473176ab5.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2478} +{"s":"PL3sub","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"pl3sub\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl3sub\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E61PKKJWT3HVQJC227VD1\",\"runId\":\"01M53E61PKKJWT3HVQJC227VD1\",\"socketPath\":\"/tmp/relayflowd-31546b77b646.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2656} +{"s":"PL3sub","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"pl3sub\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl3sub\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E62JTF28PQHC2FYAN9955\",\"runId\":\"01M53E62JTF28PQHC2FYAN9955\",\"socketPath\":\"/tmp/relayflowd-ae66fb204c19.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2751} +{"s":"PL4ctor","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"4ctor\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl4ctor\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E63Y3N39AP99SMM5ZQ6FY\",\"runId\":\"01M53E63Y3N39AP99SMM5ZQ6FY\",\"socketPath\":\"/tmp/relayflowd-1db043dabb3b.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2291} +{"s":"PL4ctor","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"4ctor\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl4ctor\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E6499PS27M6GFK2TVYVHH\",\"runId\":\"01M53E6499PS27M6GFK2TVYVHH\",\"socketPath\":\"/tmp/relayflowd-c79b92078624.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2347} +{"s":"PL4ctor","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"4ctor\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl4ctor\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E658KV508SVVHD1D8QFGG\",\"runId\":\"01M53E658KV508SVVHD1D8QFGG\",\"socketPath\":\"/tmp/relayflowd-56f897b0d09b.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2494} +{"s":"PL4ctor","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"4ctor\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl4ctor\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E665HKJEVPP3069JGSAFH\",\"runId\":\"01M53E665HKJEVPP3069JGSAFH\",\"socketPath\":\"/tmp/relayflowd-561ab5d3d937.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2529} +{"s":"PL4ctor","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"4ctor\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl4ctor\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E66KJ2PRBA6W7WJTRT08A\",\"runId\":\"01M53E66KJ2PRBA6W7WJTRT08A\",\"socketPath\":\"/tmp/relayflowd-38c2695a8583.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2668} +{"s":"PL4ctor","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"4ctor\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl4ctor\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53E67PTVH939277R3FKSX76\",\"runId\":\"01M53E67PTVH939277R3FKSX76\",\"socketPath\":\"/tmp/relayflowd-fffaf4b7d388.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2764} +{"s":"PL5species","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E68M8W8FPAK3SGFDDKXK3\",\"runId\":\"01M53E68M8W8FPAK3SGFDDKXK3\",\"socketPath\":\"/tmp/relayflowd-e42dea3c88a5.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2360} +{"s":"PL5species","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E696WN22PS1W1G9V0W3SR\",\"runId\":\"01M53E696WN22PS1W1G9V0W3SR\",\"socketPath\":\"/tmp/relayflowd-d5001fc8d5e4.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2397} +{"s":"PL5species","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6AE6GCXQ7K880AP143YK\",\"runId\":\"01M53E6AE6GCXQ7K880AP143YK\",\"socketPath\":\"/tmp/relayflowd-693fb53e03c9.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2507} +{"s":"PL5species","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6AY6A3GA53X7CBD7TFH9\",\"runId\":\"01M53E6AY6A3GA53X7CBD7TFH9\",\"socketPath\":\"/tmp/relayflowd-a6984afdd258.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2515} +{"s":"PL5species","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6BGTM71RG746RFGZD6VH\",\"runId\":\"01M53E6BGTM71RG746RFGZD6VH\",\"socketPath\":\"/tmp/relayflowd-e4836348ff5e.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2667} +{"s":"SEC7","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6DD6AANJSFH234F1R2YJ\",\"runId\":\"01M53E6DD6AANJSFH234F1R2YJ\",\"socketPath\":\"/tmp/relayflowd-b075a5b5a2af.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-0/ung","run-3 c=1 sleep 0.1; printf G","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-0/gra","run-4 c=1 sleep 0.15; printf U","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-0/gra","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-0/ung","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-0/lat","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:LEAK ungranted2:LEAK later:LEAK","ok":false,"ms":1678} +{"s":"PL5species","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6CV248CBNBMX9Y8TNPQW\",\"runId\":\"01M53E6CV248CBNBMX9Y8TNPQW\",\"socketPath\":\"/tmp/relayflowd-6e796d86dc0c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2777} +{"s":"SEC7","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6E4QQTDH5WDYFEGQWQ52\",\"runId\":\"01M53E6E4QQTDH5WDYFEGQWQ52\",\"socketPath\":\"/tmp/relayflowd-0c05be89a07a.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf G","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-1/gra","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-1/ung","run-4 c=1 sleep 0.15; printf U","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-1/gra","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-1/ung","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-1/lat","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:LEAK ungranted2:LEAK later:LEAK","ok":false,"ms":1754} +{"s":"SEC7","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6F1RXQPVGGY4T0KFXMPR\",\"runId\":\"01M53E6F1RXQPVGGY4T0KFXMPR\",\"socketPath\":\"/tmp/relayflowd-7ade458cbba4.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-2/ung","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-2/gra","run-4 c=1 sleep 0.15; printf U","run-3 c=1 sleep 0.1; printf G","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-2/gra","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-2/ung","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-2/lat","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:LEAK ungranted2:LEAK later:LEAK","ok":false,"ms":1877} +{"s":"SEC7","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6FK2D0V8Z5AZQSZZQS94\",\"runId\":\"01M53E6FK2D0V8Z5AZQSZZQS94\",\"socketPath\":\"/tmp/relayflowd-63d9c1fd63e4.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf G","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-3/gra","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-3/ung","run-4 c=1 sleep 0.15; printf U","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-3/gra","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-3/ung","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-3/lat","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:LEAK ungranted2:LEAK later:LEAK","ok":false,"ms":2047} +{"s":"SEC7","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6FXB91H21N50D8YBKAK3\",\"runId\":\"01M53E6FXB91H21N50D8YBKAK3\",\"socketPath\":\"/tmp/relayflowd-c2ed61654f6f.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf G","run-4 c=1 sleep 0.15; printf U","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-4/gra","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-4/ung","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-4/gra","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-4/ung","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-4/lat","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:LEAK ungranted2:LEAK later:LEAK","ok":false,"ms":2088} +{"s":"SEC7","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6GWZGG28CGXG5W62NP68\",\"runId\":\"01M53E6GWZGG28CGXG5W62NP68\",\"socketPath\":\"/tmp/relayflowd-c11f3f992153.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-4 c=1 sleep 0.15; printf U","run-3 c=1 sleep 0.1; printf G","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-5/gra","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-5/ung","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-5/gra","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-5/ung","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7/head-head-5/lat","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:LEAK ungranted2:LEAK later:LEAK","ok":false,"ms":2135} +{"s":"PL7mid","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6HJXJXGBYG8BCJVQ088E\",\"runId\":\"01M53E6HJXJXGBYG8BCJVQ088E\",\"socketPath\":\"/tmp/relayflowd-b596416ed73c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8s7head/PL7mid/head-head-0/wstart; sleep 0.3; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2563} +{"s":"PL7mid","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6HY0WDD7ERCNSAS9EQTZ\",\"runId\":\"01M53E6HY0WDD7ERCNSAS9EQTZ\",\"socketPath\":\"/tmp/relayflowd-9791ac200fd7.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8s7head/PL7mid/head-head-1/wstart; sleep 0.3; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2607} +{"s":"PL7mid","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6JZD0435RV0C02J5V6N9\",\"runId\":\"01M53E6JZD0435RV0C02J5V6N9\",\"socketPath\":\"/tmp/relayflowd-872055286fd7.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8s7head/PL7mid/head-head-2/wstart; sleep 0.3; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2590} +{"s":"PL7mid","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6M2M9VEZY1P5SD1MNA9W\",\"runId\":\"01M53E6M2M9VEZY1P5SD1MNA9W\",\"socketPath\":\"/tmp/relayflowd-a852d1cfb50e.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8s7head/PL7mid/head-head-3/wstart; sleep 0.3; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2642} +{"s":"PL7mid","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6MEMKMDRN8M2J638A4YT\",\"runId\":\"01M53E6MEMKMDRN8M2J638A4YT\",\"socketPath\":\"/tmp/relayflowd-e91f12793c31.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8s7head/PL7mid/head-head-4/wstart; sleep 0.3; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2780} +{"s":"PL7mid","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6NFYNHJY4BJ8QF264VNJ\",\"runId\":\"01M53E6NFYNHJY4BJ8QF264VNJ\",\"socketPath\":\"/tmp/relayflowd-25f5098d7112.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8s7head/PL7mid/head-head-5/wstart; sleep 0.3; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2887} +{"s":"PL7neutral","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6PMDWW873XR5AH45PA3J\",\"runId\":\"01M53E6PMDWW873XR5AH45PA3J\",\"socketPath\":\"/tmp/relayflowd-539ce18d0ea6.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8s7head/PL7neutral/head-head-0/wstart; sleep 0.3; print","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2421} +{"s":"PL7neutral","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6Q5917WTNGAAN0RXD1TX\",\"runId\":\"01M53E6Q5917WTNGAAN0RXD1TX\",\"socketPath\":\"/tmp/relayflowd-a0346d0ba4cc.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8s7head/PL7neutral/head-head-1/wstart; sleep 0.3; print","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2490} +{"s":"PL7neutral","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6RABC76R3130P6DZWV1E\",\"runId\":\"01M53E6RABC76R3130P6DZWV1E\",\"socketPath\":\"/tmp/relayflowd-3954b621bcdd.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8s7head/PL7neutral/head-head-2/wstart; sleep 0.3; print","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2558} +{"s":"PL7neutral","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6S0NXSWAMK42X2KXY33W\",\"runId\":\"01M53E6S0NXSWAMK42X2KXY33W\",\"socketPath\":\"/tmp/relayflowd-16be81b918b7.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8s7head/PL7neutral/head-head-3/wstart; sleep 0.3; print","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2693} +{"s":"PL7neutral","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6SJKVKEM5WD3A9RRQQNF\",\"runId\":\"01M53E6SJKVKEM5WD3A9RRQQNF\",\"socketPath\":\"/tmp/relayflowd-bf6d10cecd3e.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8s7head/PL7neutral/head-head-4/wstart; sleep 0.3; print","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2793} +{"s":"PL7neutral","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6TTGA0VR069WYJ2FB02J\",\"runId\":\"01M53E6TTGA0VR069WYJ2FB02J\",\"socketPath\":\"/tmp/relayflowd-fd0812b3c807.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r8s7head/PL7neutral/head-head-5/wstart; sleep 0.3; print","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2846} +{"s":"PL6child","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6VNBXM415PFKNE7F22B8\",\"runId\":\"01M53E6VNBXM415PFKNE7F22B8\",\"socketPath\":\"/tmp/relayflowd-a7813248fcab.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2355} +{"s":"PL6child","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6WAW89P1FWPGTH7Q4TGY\",\"runId\":\"01M53E6WAW89P1FWPGTH7Q4TGY\",\"socketPath\":\"/tmp/relayflowd-5e13aeb76ae7.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2387} +{"s":"PL6child","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6XJ121THZZ9B6CPXG7A9\",\"runId\":\"01M53E6XJ121THZZ9B6CPXG7A9\",\"socketPath\":\"/tmp/relayflowd-ac5966319de1.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2403} +{"s":"PL6child","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6XXW41QA8MH10B10V4YF\",\"runId\":\"01M53E6XXW41QA8MH10B10V4YF\",\"socketPath\":\"/tmp/relayflowd-f14cef41e22e.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2485} +{"s":"PL6child","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6YMKWAH70SVY6KEP06EV\",\"runId\":\"01M53E6YMKWAH70SVY6KEP06EV\",\"socketPath\":\"/tmp/relayflowd-71dbe81cb89b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2648} +{"s":"PL6late","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E70BBG7NBX9ZDM35BJPSZ\",\"runId\":\"01M53E70BBG7NBX9ZDM35BJPSZ\",\"socketPath\":\"/tmp/relayflowd-bf315d54598d.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2319} +{"s":"PL6child","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E6ZXHQE8QVE5THWCY9SK6\",\"runId\":\"01M53E6ZXHQE8QVE5THWCY9SK6\",\"socketPath\":\"/tmp/relayflowd-fb6b5b3baffc.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2765} +{"s":"PL6late","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E71807DVSH9CT4HQ695J0\",\"runId\":\"01M53E71807DVSH9CT4HQ695J0\",\"socketPath\":\"/tmp/relayflowd-a495a4df4aeb.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2409} +{"s":"PL6late","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E72MY9W3RSSHEJWB178RW\",\"runId\":\"01M53E72MY9W3RSSHEJWB178RW\",\"socketPath\":\"/tmp/relayflowd-1176f9e19f42.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2554} +{"s":"PL6late","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E72NCFKWW7712119P4F34\",\"runId\":\"01M53E72NCFKWW7712119P4F34\",\"socketPath\":\"/tmp/relayflowd-86bc79dd0b31.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2615} +{"s":"PL6late","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E73K8J3J4WNEXKK0MJY8X\",\"runId\":\"01M53E73K8J3J4WNEXKK0MJY8X\",\"socketPath\":\"/tmp/relayflowd-d0f92ccc9fa3.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2745} +{"s":"SEC7m","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E756E0SVMDHEZVBBX2J1J\",\"runId\":\"01M53E756E0SVMDHEZVBBX2J1J\",\"socketPath\":\"/tmp/relayflowd-4025dace6fc9.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf G","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-0/un","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-0/gr","run-4 c=1 sleep 0.15; printf U","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-0/gr","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-0/un","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-0/la","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:unset ungranted2:unset later:unset","ok":true,"ms":1714} +{"s":"PL6late","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E7540R5XMGFWATT9V9NN1\",\"runId\":\"01M53E7540R5XMGFWATT9V9NN1\",\"socketPath\":\"/tmp/relayflowd-6e8cb01eb5e5.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2856} +{"s":"SEC7m","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E769VRPHGWEYGW5T72DQG\",\"runId\":\"01M53E769VRPHGWEYGW5T72DQG\",\"socketPath\":\"/tmp/relayflowd-ae0a6804708b.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf G","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-1/gr","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-1/un","run-4 c=1 sleep 0.15; printf U","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-1/gr","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-1/un","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-1/la","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:unset ungranted2:unset later:unset","ok":true,"ms":1772} +{"s":"SEC7m","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E76XDAE5AG9VZVA1A8YMR\",\"runId\":\"01M53E76XDAE5AG9VZVA1A8YMR\",\"socketPath\":\"/tmp/relayflowd-45e95032ff82.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf G","run-4 c=1 sleep 0.15; printf U","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-2/gr","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-2/un","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-2/gr","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-2/un","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-2/la","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:unset ungranted2:unset later:unset","ok":true,"ms":1950} +{"s":"SEC7m","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E780DMEBKRWH3ZTFBWBSV\",\"runId\":\"01M53E780DMEBKRWH3ZTFBWBSV\",\"socketPath\":\"/tmp/relayflowd-d65a0017baa9.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-4 c=1 sleep 0.15; printf U","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-3/un","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-3/gr","run-3 c=1 sleep 0.1; printf G","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-3/gr","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-3/un","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-3/la","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:unset ungranted2:unset later:unset","ok":true,"ms":1955} +{"s":"SEC7m","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E782BHSQHXNFA1W869KSZ\",\"runId\":\"01M53E782BHSQHXNFA1W869KSZ\",\"socketPath\":\"/tmp/relayflowd-b8c3c3f73014.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf G","run-4 c=1 sleep 0.15; printf U","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-4/un","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-4/gr","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-4/gr","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-4/un","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-4/la","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:unset ungranted2:unset later:unset","ok":true,"ms":2015} +{"s":"SEC7miss","start":"head","resume":"head","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R7_TOK\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R7_TOK\\\" is not available to this run\"}],\"path\":\"/w/runs/r8s7head/SEC7miss/head-head-0/chain.flow.ts\",\"rootRunId\":\"01M53E79V5XRFQ575QF8J0F8GV\",\"socketPath\":\"/tmp/relayflowd-1896aeb72f4a.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"granted:missing granted2:missing ungranted:missing ungranted2:missing later:missing","ok":true,"ms":601} +{"s":"SEC7miss","start":"head","resume":"head","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R7_TOK\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R7_TOK\\\" is not available to this run\"}],\"path\":\"/w/runs/r8s7head/SEC7miss/head-head-1/chain.flow.ts\",\"rootRunId\":\"01M53E79Z096X43EV036EEZ31T\",\"socketPath\":\"/tmp/relayflowd-a1f65f78b303.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"granted:missing granted2:missing ungranted:missing ungranted2:missing later:missing","ok":true,"ms":585} +{"s":"SEC7m","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53E78SB6T99QM35MVK7GCTA\",\"runId\":\"01M53E78SB6T99QM35MVK7GCTA\",\"socketPath\":\"/tmp/relayflowd-1dd8e2f62332.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-5/un","run-3 c=1 sleep 0.1; printf G","run-4 c=1 sleep 0.15; printf U","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-5/gr","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-5/gr","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-5/un","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r8s7head/SEC7m/head-head-5/la","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:unset ungranted2:unset later:unset","ok":true,"ms":2135} +{"s":"SEC7miss","start":"head","resume":"head","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R7_TOK\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R7_TOK\\\" is not available to this run\"}],\"path\":\"/w/runs/r8s7head/SEC7miss/head-head-2/chain.flow.ts\",\"rootRunId\":\"01M53E7AD33DJ7YCR950R82021\",\"socketPath\":\"/tmp/relayflowd-fbd40d755c62.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"granted:missing granted2:missing ungranted:missing ungranted2:missing later:missing","ok":true,"ms":584} +{"s":"SEC7miss","start":"head","resume":"head","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R7_TOK\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R7_TOK\\\" is not available to this run\"}],\"path\":\"/w/runs/r8s7head/SEC7miss/head-head-3/chain.flow.ts\",\"rootRunId\":\"01M53E7AHBX4H1HNRDSPWVV19H\",\"socketPath\":\"/tmp/relayflowd-8fc7d01fa01e.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"granted:missing granted2:missing ungranted:missing ungranted2:missing later:missing","ok":true,"ms":581} +{"s":"SEC7miss","start":"head","resume":"head","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R7_TOK\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R7_TOK\\\" is not available to this run\"}],\"path\":\"/w/runs/r8s7head/SEC7miss/head-head-4/chain.flow.ts\",\"rootRunId\":\"01M53E7AV6R55B03YWQQZ41XZP\",\"socketPath\":\"/tmp/relayflowd-eb6b67d032ba.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"granted:missing granted2:missing ungranted:missing ungranted2:missing later:missing","ok":true,"ms":575} +{"s":"SEC7miss","start":"head","resume":"head","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R7_TOK\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R7_TOK\\\" is not available to this run\"}],\"path\":\"/w/runs/r8s7head/SEC7miss/head-head-5/chain.flow.ts\",\"rootRunId\":\"01M53E7AZFW5A7BE01N1HNBB5A\",\"socketPath\":\"/tmp/relayflowd-b3811528fff0.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"granted:missing granted2:missing ungranted:missing ungranted2:missing later:missing","ok":true,"ms":585} +SUMMARY HY1 head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=PBZ +SUMMARY HY1s head>head ok=6/6 replay=0 fresh=6 mode=serial codes=0 effects=PB +SUMMARY HY2 head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=ABZ +SUMMARY PAR1 head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=bcaZ +SUMMARY PAR2 head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=baZ +SUMMARY EQ1twice head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=aaXZ +SUMMARY EQ2ret head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=abZ +SUMMARY EQ3midret head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=BARXZ +SUMMARY EQ4fail head>head ok=6/6 replay=0 fresh=6 mode=parallel codes=1 effects=FB +SUMMARY EQ5wide head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=dagebhjckfilXZ|agdhjbefckilXZ|adgehjbcfkilXZ|adgebhjcfiklXZ|gdahbjecfkilXZ|agdehjbckfilXZ +SUMMARY EQ5stall head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=gadbehjcfYyiXZ|dagehjbfciYyXZ|adghejbfciYyXZ|gdabhjecfiYyXZ|adgehbjcfiYyXZ|gadhbejcfiYyXZ +SUMMARY EQ6expr head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=BACXZ +SUMMARY EQ7record head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=BR3XZ +SUMMARY EQ8throw head>head ok=6/6 replay=0 fresh=6 mode=parallel codes=1 effects=B +SUMMARY EQ9nested head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=YbaXZ|aYbXZ +SUMMARY PL1r5 head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY PL2then head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY PL3sub head>head ok=0/6 replay=0 fresh=0 mode=serial codes=1 effects=abcXZ +SUMMARY PL4ctor head>head ok=0/6 replay=0 fresh=0 mode=serial codes=1 effects=abcXZ +SUMMARY PL5species head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY SEC7 head>head ok=0/6 replay=0 fresh=0 mode=parallel codes=0 effects=Z +SUMMARY PL7mid head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY PL7neutral head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY PL6child head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY PL6late head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY SEC7m head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=Z +SUMMARY SEC7miss head>head ok=6/6 replay=0 fresh=6 mode=parallel codes=1 effects= diff --git a/evidence/native-parallel-review8/h7-timing.log b/evidence/native-parallel-review8/h7-timing.log new file mode 100644 index 000000000..3625d748c --- /dev/null +++ b/evidence/native-parallel-review8/h7-timing.log @@ -0,0 +1,22 @@ +{"side":"head","i":0,"code":0,"mode":"parallel","cli":1208,"body":460,"routeSpread":10,"routesOverlap":true,"depsOverlap":true} +{"side":"base","i":0,"code":0,"mode":"absent","cli":1862,"body":1368,"routeSpread":654,"routesOverlap":false,"depsOverlap":false} +{"side":"base","i":1,"code":0,"mode":"absent","cli":1862,"body":1383,"routeSpread":663,"routesOverlap":false,"depsOverlap":false} +{"side":"head","i":1,"code":0,"mode":"parallel","cli":1080,"body":458,"routeSpread":5,"routesOverlap":true,"depsOverlap":true} +{"side":"head","i":2,"code":0,"mode":"parallel","cli":1078,"body":437,"routeSpread":3,"routesOverlap":true,"depsOverlap":true} +{"side":"base","i":2,"code":0,"mode":"absent","cli":1860,"body":1376,"routeSpread":652,"routesOverlap":false,"depsOverlap":false} +{"side":"base","i":3,"code":0,"mode":"absent","cli":1857,"body":1370,"routeSpread":653,"routesOverlap":false,"depsOverlap":false} +{"side":"head","i":3,"code":0,"mode":"parallel","cli":1132,"body":456,"routeSpread":6,"routesOverlap":true,"depsOverlap":true} +{"side":"head","i":4,"code":0,"mode":"parallel","cli":1175,"body":466,"routeSpread":7,"routesOverlap":true,"depsOverlap":true} +{"side":"base","i":4,"code":0,"mode":"absent","cli":1857,"body":1377,"routeSpread":668,"routesOverlap":false,"depsOverlap":false} +{"side":"base","i":5,"code":0,"mode":"absent","cli":1853,"body":1378,"routeSpread":659,"routesOverlap":false,"depsOverlap":false} +{"side":"head","i":5,"code":0,"mode":"parallel","cli":1115,"body":456,"routeSpread":4,"routesOverlap":true,"depsOverlap":true} +{"side":"head","i":6,"code":0,"mode":"parallel","cli":1128,"body":456,"routeSpread":3,"routesOverlap":true,"depsOverlap":true} +{"side":"base","i":6,"code":0,"mode":"absent","cli":1867,"body":1374,"routeSpread":660,"routesOverlap":false,"depsOverlap":false} +{"side":"base","i":7,"code":0,"mode":"absent","cli":1904,"body":1395,"routeSpread":663,"routesOverlap":false,"depsOverlap":false} +{"side":"head","i":7,"code":0,"mode":"parallel","cli":1132,"body":464,"routeSpread":3,"routesOverlap":true,"depsOverlap":true} +{"side":"head","i":8,"code":0,"mode":"parallel","cli":1106,"body":466,"routeSpread":6,"routesOverlap":true,"depsOverlap":true} +{"side":"base","i":8,"code":0,"mode":"absent","cli":1847,"body":1376,"routeSpread":669,"routesOverlap":false,"depsOverlap":false} +{"side":"base","i":9,"code":0,"mode":"absent","cli":1833,"body":1353,"routeSpread":657,"routesOverlap":false,"depsOverlap":false} +{"side":"head","i":9,"code":0,"mode":"parallel","cli":1117,"body":462,"routeSpread":5,"routesOverlap":true,"depsOverlap":true} +TIMING head mode=parallel codes=0 body p50=460 max=466 cli p50=1128 max=1208 spread p50=5 routesOverlap=10/10 depsOverlap=10/10 +TIMING base mode=absent codes=0 body p50=1376 max=1395 cli p50=1860 max=1904 spread p50=660 routesOverlap=0/10 depsOverlap=0/10 diff --git a/evidence/native-parallel-review8/h7-upgrade-pinned.log b/evidence/native-parallel-review8/h7-upgrade-pinned.log new file mode 100644 index 000000000..004c727f0 --- /dev/null +++ b/evidence/native-parallel-review8/h7-upgrade-pinned.log @@ -0,0 +1,70 @@ +{"s":"UCI4","start":"p2050","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcd","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPHQDRRQ7C1QCTT2RV7AF\",\"runId\":\"01M53EPHQDRRQ7C1QCTT2RV7AF\",\"socketPath\":\"/tmp/relayflowd-6a3f6431b786.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1613} +{"s":"UCI4","start":"p2050","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcd","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPHQD2A218RMF3H5ZYHQ8\",\"runId\":\"01M53EPHQD2A218RMF3H5ZYHQ8\",\"socketPath\":\"/tmp/relayflowd-4b4a54a360ae.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1655} +{"s":"UCI4","start":"p2050","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcd","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPHQDHTJCSWNSTQ9DSXX7\",\"runId\":\"01M53EPHQDHTJCSWNSTQ9DSXX7\",\"socketPath\":\"/tmp/relayflowd-1b61916c69f2.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1707} +{"s":"UCI4","start":"p2050","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcd","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPK5EQ8C5DZFPTWC9B8VW\",\"runId\":\"01M53EPK5EQ8C5DZFPTWC9B8VW\",\"socketPath\":\"/tmp/relayflowd-cddb2fa94a7a.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1594} +{"s":"UCI4","start":"p2050","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcd","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPK6YBPAEY1SZTAN3QS7V\",\"runId\":\"01M53EPK6YBPAEY1SZTAN3QS7V\",\"socketPath\":\"/tmp/relayflowd-4e8a4697adb5.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1710} +{"s":"UCI4","start":"p2050","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcd","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPK8359MSMGE15A0C8J5V\",\"runId\":\"01M53EPK8359MSMGE15A0C8J5V\",\"socketPath\":\"/tmp/relayflowd-1b5636a6eb12.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1821} +{"s":"UCI4","start":"p2051","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcd","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPMRM25QRC4ZVPJFT2W6H\",\"runId\":\"01M53EPMRM25QRC4ZVPJFT2W6H\",\"socketPath\":\"/tmp/relayflowd-d231d567010d.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1355} +{"s":"UCI4","start":"p2051","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcd","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPMWB5R66QDETS8272GM7\",\"runId\":\"01M53EPMWB5R66QDETS8272GM7\",\"socketPath\":\"/tmp/relayflowd-349c7c6db278.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1353} +{"s":"UCI4","start":"p2051","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcd","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPN0BHBCF5C0FNJG9CRVG\",\"runId\":\"01M53EPN0BHBCF5C0FNJG9CRVG\",\"socketPath\":\"/tmp/relayflowd-827ddad5dbe5.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1392} +{"s":"UCI4","start":"p2051","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcd","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPP157KBK39YWJ67JEN3B\",\"runId\":\"01M53EPP157KBK39YWJ67JEN3B\",\"socketPath\":\"/tmp/relayflowd-c82424ee5ca7.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1544} +{"s":"UCI4","start":"p2051","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcd","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPP61PS4HAKS3X9PWJYA9\",\"runId\":\"01M53EPP61PS4HAKS3X9PWJYA9\",\"socketPath\":\"/tmp/relayflowd-dfb5134e08a7.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1758} +{"s":"UCI4","start":"p2051","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcd","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPPEMC0EF6JYR6934Y7XN\",\"runId\":\"01M53EPPEMC0EF6JYR6934Y7XN\",\"socketPath\":\"/tmp/relayflowd-2a22a3e00b31.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdyegZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-6 c=1 printf e >> effects","run-7 c=1 printf g >> effects","run-8 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1856} +{"s":"UCI5","start":"p2050","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcde","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPQHWHP86B0F6ZQ5XMFTJ\",\"runId\":\"01M53EPQHWHP86B0F6ZQ5XMFTJ\",\"socketPath\":\"/tmp/relayflowd-cbb7228fd4e1.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1347} +{"s":"UCI5","start":"p2050","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcde","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPQX3F6RK8B2PWNGQW3D4\",\"runId\":\"01M53EPQX3F6RK8B2PWNGQW3D4\",\"socketPath\":\"/tmp/relayflowd-d9b841f6420c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1411} +{"s":"UCI5","start":"p2050","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcde","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPR76AXQ929J4SJM2SC4H\",\"runId\":\"01M53EPR76AXQ929J4SJM2SC4H\",\"socketPath\":\"/tmp/relayflowd-ffb040ac4a0c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1492} +{"s":"UCI5","start":"p2050","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcde","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPRVVGZTEJAR4S2JQDAEB\",\"runId\":\"01M53EPRVVGZTEJAR4S2JQDAEB\",\"socketPath\":\"/tmp/relayflowd-4c20816ae0e4.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1603} +{"s":"UCI5","start":"p2050","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcde","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPS8QVRCHHC79TFE2DEHB\",\"runId\":\"01M53EPS8QVRCHHC79TFE2DEHB\",\"socketPath\":\"/tmp/relayflowd-0d755c762fc1.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1737} +{"s":"UCI5","start":"p2050","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcde","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPSQ0MEK7MWY6YZWP2EYM\",\"runId\":\"01M53EPSQ0MEK7MWY6YZWP2EYM\",\"socketPath\":\"/tmp/relayflowd-12e1c7c42f8d.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1860} +{"s":"UCI5","start":"p2051","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcde","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPTEBBAXTW16WTVNQ3DQX\",\"runId\":\"01M53EPTEBBAXTW16WTVNQ3DQX\",\"socketPath\":\"/tmp/relayflowd-07030fac8f82.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1415} +{"s":"UCI5","start":"p2051","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcde","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPV06WTZ0GCEJ46BCCDCB\",\"runId\":\"01M53EPV06WTZ0GCEJ46BCCDCB\",\"socketPath\":\"/tmp/relayflowd-d299b5b1977b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1442} +{"s":"UCI5","start":"p2051","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcde","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPVF81GCMDQDD0NKWC3RB\",\"runId\":\"01M53EPVF81GCMDQDD0NKWC3RB\",\"socketPath\":\"/tmp/relayflowd-a7bac5656c4e.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1505} +{"s":"UCI5","start":"p2051","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcde","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPVT0XQ52QVWAY9GVTY9V\",\"runId\":\"01M53EPVT0XQ52QVWAY9GVTY9V\",\"socketPath\":\"/tmp/relayflowd-d049efb5cf20.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1517} +{"s":"UCI5","start":"p2051","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcde","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPWCN5WQQ7E7HXW1D0HZV\",\"runId\":\"01M53EPWCN5WQQ7E7HXW1D0HZV\",\"socketPath\":\"/tmp/relayflowd-81ce1ea74772.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1709} +{"s":"UCI5","start":"p2051","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcde","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPWXKW2W6RN715508NFN7\",\"runId\":\"01M53EPWXKW2W6RN715508NFN7\",\"socketPath\":\"/tmp/relayflowd-8fa97bd74066.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcdeyghZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf a >> effects","run-2 c=1 printf b >> effects","run-3 c=1 printf c >> effects","run-4 c=1 printf d >> effects","run-5 c=1 printf e >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf y >> effects","run-7 c=1 printf g >> effects","run-8 c=1 printf h >> effects","run-9 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1775} +{"s":"UA1","start":"p2050","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPX9M1WWPA6954JHS8QZB\",\"runId\":\"01M53EPX9M1WWPA6954JHS8QZB\",\"socketPath\":\"/tmp/relayflowd-62c29a2cea55.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 printf B","run-3 c=1 printf C","run-4 c=1 sleep 0.3; printf D","run-5 c=1 printf L >> effects","run-6 c=1 printf R >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1980} +{"s":"UA1","start":"p2050","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPY2ZGY9H1TNK4BTYT3VW\",\"runId\":\"01M53EPY2ZGY9H1TNK4BTYT3VW\",\"socketPath\":\"/tmp/relayflowd-692955adfa2d.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 printf B","run-3 c=1 printf C","run-4 c=1 sleep 0.3; printf D","run-5 c=1 printf L >> effects","run-6 c=1 printf R >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2048} +{"s":"UA1","start":"p2050","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPYQPRXNV2BGVYXVG6CKV\",\"runId\":\"01M53EPYQPRXNV2BGVYXVG6CKV\",\"socketPath\":\"/tmp/relayflowd-e3212bf5280c.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 printf B","run-3 c=1 printf C","run-4 c=1 sleep 0.3; printf D","run-5 c=1 printf L >> effects","run-6 c=1 printf R >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2137} +{"s":"UA1","start":"p2050","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EPZ8P7V58DYJN855JRJT8\",\"runId\":\"01M53EPZ8P7V58DYJN855JRJT8\",\"socketPath\":\"/tmp/relayflowd-2499d5c85d56.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 printf B","run-3 c=1 printf C","run-4 c=1 sleep 0.3; printf D","run-5 c=1 printf L >> effects","run-6 c=1 printf R >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2208} +{"s":"UA1","start":"p2050","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQ02N1KQD4AMSVG7XN46N\",\"runId\":\"01M53EQ02N1KQD4AMSVG7XN46N\",\"socketPath\":\"/tmp/relayflowd-af243f2386db.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 printf B","run-3 c=1 printf C","run-4 c=1 sleep 0.3; printf D","run-5 c=1 printf L >> effects","run-6 c=1 printf R >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2276} +{"s":"UA1","start":"p2050","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQ0TB6BZ63A0E6VZCABJR\",\"runId\":\"01M53EQ0TB6BZ63A0E6VZCABJR\",\"socketPath\":\"/tmp/relayflowd-42f228c477f6.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 printf B","run-3 c=1 printf C","run-4 c=1 sleep 0.3; printf D","run-5 c=1 printf L >> effects","run-6 c=1 printf R >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2421} +{"s":"UA1","start":"p2051","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQ1D8VJSSJ1KS64ZABWR1\",\"runId\":\"01M53EQ1D8VJSSJ1KS64ZABWR1\",\"socketPath\":\"/tmp/relayflowd-9b10fe4c0795.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 printf B","run-3 c=1 printf C","run-4 c=1 sleep 0.3; printf D","run-5 c=1 printf L >> effects","run-6 c=1 printf R >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1900} +{"s":"UA1","start":"p2051","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQ29K9W9G8YE46YPY8PY1\",\"runId\":\"01M53EQ29K9W9G8YE46YPY8PY1\",\"socketPath\":\"/tmp/relayflowd-2e4748df5e3c.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 printf B","run-3 c=1 printf C","run-4 c=1 sleep 0.3; printf D","run-5 c=1 printf L >> effects","run-6 c=1 printf R >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1978} +{"s":"UA1","start":"p2051","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQ34S02SJECQ6S46B3PA4\",\"runId\":\"01M53EQ34S02SJECQ6S46B3PA4\",\"socketPath\":\"/tmp/relayflowd-4f9fe252ddf9.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 printf B","run-3 c=1 printf C","run-4 c=1 sleep 0.3; printf D","run-5 c=1 printf L >> effects","run-6 c=1 printf R >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2029} +{"s":"UA1","start":"p2051","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQ37XWHTYAZPSCNYQHKJA\",\"runId\":\"01M53EQ37XWHTYAZPSCNYQHKJA\",\"socketPath\":\"/tmp/relayflowd-b618a487313c.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 printf B","run-3 c=1 printf C","run-4 c=1 sleep 0.3; printf D","run-5 c=1 printf L >> effects","run-6 c=1 printf R >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2146} +{"s":"UA1","start":"p2051","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQ46P5S2SR08JVM59PM2X\",\"runId\":\"01M53EQ46P5S2SR08JVM59PM2X\",\"socketPath\":\"/tmp/relayflowd-0b749985854c.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 printf B","run-3 c=1 printf C","run-4 c=1 sleep 0.3; printf D","run-5 c=1 printf L >> effects","run-6 c=1 printf R >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2222} +{"s":"UB1","start":"p2050","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"RL","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQ5BS9NR6NK3N4BA5P63F\",\"runId\":\"01M53EQ5BS9NR6NK3N4BA5P63F\",\"socketPath\":\"/tmp/relayflowd-985afc64c91f.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-2 c=1 printf C","run-3 c=1 printf D","run-4 c=1 printf B","run-5 c=1 printf R >> effects","run-6 c=1 printf L >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1337} +{"s":"UA1","start":"p2051","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"LR","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQ548WKHFGSBDT2M7HV81\",\"runId\":\"01M53EQ548WKHFGSBDT2M7HV81\",\"socketPath\":\"/tmp/relayflowd-6694744bfec6.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"LRZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 printf B","run-3 c=1 printf C","run-4 c=1 sleep 0.3; printf D","run-5 c=1 printf L >> effects","run-6 c=1 printf R >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2336} +{"s":"UB1","start":"p2050","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"RL","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQ6C54YC2VHHPVX2Y4HXV\",\"runId\":\"01M53EQ6C54YC2VHHPVX2Y4HXV\",\"socketPath\":\"/tmp/relayflowd-b3be1149b6f8.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-2 c=1 printf C","run-3 c=1 printf D","run-4 c=1 printf B","run-5 c=1 printf R >> effects","run-6 c=1 printf L >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1389} +{"s":"UB1","start":"p2050","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"RL","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQ6MQDXPDHBGMYNVAAKNW\",\"runId\":\"01M53EQ6MQDXPDHBGMYNVAAKNW\",\"socketPath\":\"/tmp/relayflowd-92ce31a90c56.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-2 c=1 printf C","run-3 c=1 printf D","run-4 c=1 printf B","run-5 c=1 printf R >> effects","run-6 c=1 printf L >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1418} +{"s":"UB1","start":"p2050","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"RL","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQ7D6FB54W3HFVZAY8E58\",\"runId\":\"01M53EQ7D6FB54W3HFVZAY8E58\",\"socketPath\":\"/tmp/relayflowd-7e912073c813.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-2 c=1 printf C","run-3 c=1 printf D","run-4 c=1 printf B","run-5 c=1 printf R >> effects","run-6 c=1 printf L >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1588} +{"s":"UB1","start":"p2050","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"RL","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQ7QAAA18GEM7VBK5ADXV\",\"runId\":\"01M53EQ7QAAA18GEM7VBK5ADXV\",\"socketPath\":\"/tmp/relayflowd-7f26a97dff4b.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-2 c=1 printf C","run-3 c=1 printf D","run-4 c=1 printf B","run-5 c=1 printf R >> effects","run-6 c=1 printf L >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1699} +{"s":"UB1","start":"p2050","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"RL","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQ82AVMTDGB0259Z1P2HA\",\"runId\":\"01M53EQ82AVMTDGB0259Z1P2HA\",\"socketPath\":\"/tmp/relayflowd-bdac3e88e21c.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-2 c=1 printf C","run-3 c=1 printf D","run-4 c=1 printf B","run-5 c=1 printf R >> effects","run-6 c=1 printf L >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1869} +{"s":"UB1","start":"p2051","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"RL","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQ8Z8XYHA931XMH6EWZS1\",\"runId\":\"01M53EQ8Z8XYHA931XMH6EWZS1\",\"socketPath\":\"/tmp/relayflowd-695aa264028e.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-2 c=1 printf C","run-3 c=1 printf D","run-4 c=1 printf B","run-5 c=1 printf R >> effects","run-6 c=1 printf L >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1311} +{"s":"UB1","start":"p2051","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"RL","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQ9DAA3J83BAKER3PPRRW\",\"runId\":\"01M53EQ9DAA3J83BAKER3PPRRW\",\"socketPath\":\"/tmp/relayflowd-99ffccf8b5f0.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-2 c=1 printf C","run-3 c=1 printf D","run-4 c=1 printf B","run-5 c=1 printf R >> effects","run-6 c=1 printf L >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1437} +{"s":"UB1","start":"p2051","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"RL","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQ9W7T6D1X45B4P58Z0DH\",\"runId\":\"01M53EQ9W7T6D1X45B4P58Z0DH\",\"socketPath\":\"/tmp/relayflowd-a4fa212ea74b.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-2 c=1 printf C","run-3 c=1 printf D","run-4 c=1 printf B","run-5 c=1 printf R >> effects","run-6 c=1 printf L >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1495} +{"s":"UB1","start":"p2051","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"RL","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQA82E39G1R5ZFBZFR995\",\"runId\":\"01M53EQA82E39G1R5ZFBZFR995\",\"socketPath\":\"/tmp/relayflowd-dd1c8aa975cd.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-2 c=1 printf C","run-3 c=1 printf D","run-4 c=1 printf B","run-5 c=1 printf R >> effects","run-6 c=1 printf L >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1578} +{"s":"UB1","start":"p2051","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"RL","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQATGVVR0GSQQNTT3GGX9\",\"runId\":\"01M53EQATGVVR0GSQQNTT3GGX9\",\"socketPath\":\"/tmp/relayflowd-c9013e699e87.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-2 c=1 printf C","run-3 c=1 printf D","run-4 c=1 printf B","run-5 c=1 printf R >> effects","run-6 c=1 printf L >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1648} +{"s":"UB1","start":"p2051","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"RL","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQBAQNNJA8QE3XZ8DV2VM\",\"runId\":\"01M53EQBAQNNJA8QE3XZ8DV2VM\",\"socketPath\":\"/tmp/relayflowd-3b7a664849fc.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"RLZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf A","run-2 c=1 printf C","run-3 c=1 printf D","run-4 c=1 printf B","run-5 c=1 printf R >> effects","run-6 c=1 printf L >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1737} +{"s":"UN2","start":"p2050","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abc","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQBS75JBPJVSXHQGZFDW4\",\"runId\":\"01M53EQBS75JBPJVSXHQGZFDW4\",\"socketPath\":\"/tmp/relayflowd-53d5b88521fc.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1959} +{"s":"UN2","start":"p2050","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abc","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQCE1AJVHJCDSHKYTYX19\",\"runId\":\"01M53EQCE1AJVHJCDSHKYTYX19\",\"socketPath\":\"/tmp/relayflowd-3483fe9e719c.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1950} +{"s":"UN2","start":"p2050","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abc","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQD2QFFANTFRF9SNYNJJC\",\"runId\":\"01M53EQD2QFFANTFRF9SNYNJJC\",\"socketPath\":\"/tmp/relayflowd-b3410103f4ac.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2133} +{"s":"UN2","start":"p2050","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abc","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQDPG563E36V5PG2CVTMJ\",\"runId\":\"01M53EQDPG563E36V5PG2CVTMJ\",\"socketPath\":\"/tmp/relayflowd-2c15076f9dbb.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2136} +{"s":"UN2","start":"p2050","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abc","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQEABYZACY7JJFQ6ZJJ6Y\",\"runId\":\"01M53EQEABYZACY7JJFQ6ZJJ6Y\",\"socketPath\":\"/tmp/relayflowd-e8274f73d5af.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2231} +{"s":"UN2","start":"p2050","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abc","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQF37SEED50YN6N8VNBXQ\",\"runId\":\"01M53EQF37SEED50YN6N8VNBXQ\",\"socketPath\":\"/tmp/relayflowd-4770886ed417.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2363} +{"s":"UN2","start":"p2051","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abc","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQFS2BVFQQ9NN30MN70TH\",\"runId\":\"01M53EQFS2BVFQQ9NN30MN70TH\",\"socketPath\":\"/tmp/relayflowd-ff94f6521e07.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1911} +{"s":"UN2","start":"p2051","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abc","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQGG80ERK1MBAKCA3VXTE\",\"runId\":\"01M53EQGG80ERK1MBAKCA3VXTE\",\"socketPath\":\"/tmp/relayflowd-383ed0954cb0.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1966} +{"s":"UN2","start":"p2051","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abc","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQHCR8N2R5T7HB42D9NBY\",\"runId\":\"01M53EQHCR8N2R5T7HB42D9NBY\",\"socketPath\":\"/tmp/relayflowd-25c9364a3806.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2027} +{"s":"UN2","start":"p2051","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abc","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQHMSYF1DTRKJPSJ8ETAR\",\"runId\":\"01M53EQHMSYF1DTRKJPSJ8ETAR\",\"socketPath\":\"/tmp/relayflowd-d7e0db7a921d.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2178} +{"s":"UN2","start":"p2051","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abc","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQJDECS2XZVZJ0347G046\",\"runId\":\"01M53EQJDECS2XZVZJ0347G046\",\"socketPath\":\"/tmp/relayflowd-c9d480294723.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2219} +{"s":"UN2","start":"p2051","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abc","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53EQKCX0MJP8SNYJKRWAJSS\",\"runId\":\"01M53EQKCX0MJP8SNYJKRWAJSS\",\"socketPath\":\"/tmp/relayflowd-2304090c3b49.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf c >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2420} +SUMMARY UCI4 p2050>head ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcdyegZ +SUMMARY UCI4 p2051>head ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcdyegZ +SUMMARY UCI5 p2050>head ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcdeyghZ +SUMMARY UCI5 p2051>head ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcdeyghZ +SUMMARY UA1 p2050>head ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=LRZ +SUMMARY UA1 p2051>head ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=LRZ +SUMMARY UB1 p2050>head ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=RLZ +SUMMARY UB1 p2051>head ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=RLZ +SUMMARY UN2 p2050>head ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcZ +SUMMARY UN2 p2051>head ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcZ diff --git a/evidence/native-parallel-review8/h7.mjs b/evidence/native-parallel-review8/h7.mjs new file mode 100644 index 000000000..353e4dc18 --- /dev/null +++ b/evidence/native-parallel-review8/h7.mjs @@ -0,0 +1,217 @@ +// Review-7 crash/resume harness for flows#667. Runs inside node:22-trixie. +// usage: node --no-warnings h7.mjs [--reps=6] [--conc=3] [--tag=x] [--sides=a:b/c:d] [--keep] +import fs from 'node:fs'; +import path from 'node:path'; +import { spawn } from 'node:child_process'; +import { createRequire } from 'node:module'; +import { DatabaseSync } from 'node:sqlite'; +globalThis.require = createRequire(import.meta.url); + +const args = process.argv.slice(2); +const opt = (k, d) => { const a = args.find(x => x.startsWith(`--${k}=`)); return a ? a.slice(k.length + 3) : d; }; +const file = args[0]; +const names = args[1]; +const reps = Number(opt('reps', '6')); +const conc = Number(opt('conc', '3')); +const tag = opt('tag', 't'); +const sidesOverride = opt('sides', undefined)?.split('/').map(p => p.split(':')); +const keep = args.includes('--keep'); +const DELAYS = [0, 60, 130, 220, 330, 450, 30, 180, 270, 400]; + +const SIDES = { + head: { cli: '/w/head/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + base: { cli: '/w/base/packages/sdk/dist/cli.js', nm: '/w/base/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + forced: { cli: '/w/forced/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + fix: { cli: '/w/fix/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + deep: { cli: '/w/deep/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + p2050: { cli: '/w/p2050/node_modules/@relayflows/sdk/dist/cli.js', nm: '/w/p2050/node_modules', daemon: '/w/relayflowd-2050' }, + p2051: { cli: '/w/p2051/node_modules/@relayflows/sdk/dist/cli.js', nm: '/w/p2051/node_modules', daemon: '/w/relayflowd-main' }, +}; + +const sleep = ms => new Promise(r => setTimeout(r, ms)); +const read = p => { try { return fs.readFileSync(p, 'utf8'); } catch { return ''; } }; + +function start(side, argv, root, env = {}) { + const s = SIDES[side]; + const child = spawn(process.execPath, [s.cli, ...argv], { + cwd: root, env: { ...process.env, ...env, RELAYFLOWD_BIN: s.daemon }, stdio: ['ignore', 'pipe', 'pipe'], + }); + let out = ''; + child.stdout.on('data', d => { out += d; }); + child.stderr.on('data', d => { out += d; }); + return { child, closed: new Promise(r => child.once('close', (code, signal) => r({ code, signal }))), get out() { return out; } }; +} + +function sweep(root) { + const targets = new Set(); + try { targets.add(JSON.parse(read(path.join(root, 'data/connection.json'))).pid); } catch {} + for (const e of fs.readdirSync('/proc')) { + if (!/^\d+$/.test(e)) continue; + const pid = Number(e); + if (pid === process.pid) continue; + try { + const cwd = fs.readlinkSync(`/proc/${pid}/cwd`); + const cmd = fs.readFileSync(`/proc/${pid}/cmdline`, 'utf8'); + if (cwd === root || cwd.startsWith(root + '/') || cmd.includes(root)) targets.add(pid); + } catch {} + } + for (const pid of targets) { try { if (pid) process.kill(pid, 'SIGKILL'); } catch {} } +} + +function journals(root) { + const dir = path.join(root, 'data/runs'); + if (!fs.existsSync(dir)) return []; + return fs.readdirSync(dir).filter(f => f.endsWith('.sqlite3')).sort().map(f => { + let db; + try { db = new DatabaseSync(path.join(dir, f), { readOnly: true }); } catch { return { runId: f.slice(0, -8), step: undefined, completed: 0 }; } + try { + if (!db.prepare("select name from sqlite_master where type='table' and name='entries'").get()) return { runId: f.slice(0, -8), step: undefined, completed: 0 }; + const sp = db.prepare("select payload from entries where entry_type='run.spawned' order by seq limit 1").get(); + const done = db.prepare("select count(*) as n from entries where entry_type='step.completed'").get().n; + const payload = sp ? JSON.parse(sp.payload) : undefined; + const spec = payload?.spec ?? payload?.payload?.spec ?? payload?.run?.spec; + return { runId: f.slice(0, -8), step: spec?.steps?.[0], completed: Number(done) }; + } finally { db.close(); } + }); +} + +function rootOf(js) { return js.find(j => j.step?.id === 'authored-root'); } +function modeOf(r) { + try { const m = JSON.parse(r.step.instruction); return m.executionMode ?? (m.identityVersion ? 'v2?' : 'absent'); } catch { return 'unknown'; } +} + +function replayCheck(js, rootId, expected = {}) { + const seen = new Map(); + const ids = []; + let replay = false; + const dups = []; + for (const j of js) { + if (j.runId === rootId || !j.step) continue; + const st = j.step; + const cmd = st.command ?? st.instruction ?? ''; + ids.push(`${st.id} c=${j.completed} ${String(cmd).slice(0, 70)}`); + if (!st.command) continue; + const ns = st.id.includes('--') ? st.id.slice(0, st.id.lastIndexOf('--')) : ''; + const key = `${ns}|${st.command}`; + const prev = seen.get(key) ?? []; + prev.push({ id: st.id, completed: j.completed }); + seen.set(key, prev); + const distinct = new Set(prev.map(p => p.id)); + if (distinct.size > (expected[st.command] ?? 1) && prev.some(p => p.completed > 0)) { + replay = true; dups.push(`${st.command.slice(0, 50)}: ${[...distinct].join(' & ')}`); + } + } + return { replay, ids, dups }; +} + +async function one(sc, startSide, resumeSide, i) { + const root = `/w/runs/${tag}/${sc.name}/${startSide}-${resumeSide}-${i}`; + fs.rmSync(root, { recursive: true, force: true }); + fs.mkdirSync(root, { recursive: true }); + const nmSide = sc.nmSide ?? startSide; + fs.writeFileSync(path.join(root, 'package.json'), '{"type":"module"}'); + fs.symlinkSync(SIDES[nmSide].nm, path.join(root, 'node_modules')); + fs.writeFileSync(path.join(root, 'flows.json'), JSON.stringify({ cli: path.join(root, 'adapter.mjs'), models: ['test-model'] })); + fs.writeFileSync(path.join(root, 'adapter.mjs'), '#!/usr/bin/env node\nprocess.exit(0);\n', { mode: 0o755 }); + for (const [f, src] of Object.entries(sc.files)) { + const t = path.join(root, f); + fs.mkdirSync(path.dirname(t), { recursive: true }); + fs.writeFileSync(t, src.replaceAll('', root)); + if (f.endsWith('adapter.mjs')) fs.chmodSync(t, 0o755); + } + if (sc.bluebird) { + const d = path.join(root, 'bb'); + fs.cpSync('/w/head/packages/sdk/node_modules/bluebird/js/release', d, { recursive: true }); + fs.writeFileSync(path.join(d, 'package.json'), '{"type":"commonjs"}'); + } + const env = Object.fromEntries(Object.entries(sc.env ?? {}).map(([k, v]) => [k, String(v).replaceAll('', root)])); + const entry = path.join(root, sc.entry ?? 'chain.flow.ts'); + const res = { s: sc.name, start: startSide, resume: resumeSide, i }; + const t0 = Date.now(); + const first = start(startSide, ['run', '--no-observer-link', '--json', ...(sc.extraArgs ?? []), '--data-dir', path.join(root, 'data'), entry, '--input', '{}'], root, env); + let early; + const deadline = Date.now() + 90_000; + while (!fs.existsSync(path.join(root, 'stalled'))) { + if (first.child.exitCode !== null || first.child.signalCode !== null) { early = await first.closed; break; } + if (Date.now() > deadline) { first.child.kill('SIGKILL'); early = { code: 'timeout' }; break; } + await sleep(15); + } + try { + if (early) { + res.fresh = true; res.code1 = early.code; res.code = early.code; + res.effects1 = res.effects = read(path.join(root, 'effects')); + res.out1 = first.out.slice(-600); + } else { + res.fresh = false; + await sleep(sc.delays?.[i] ?? DELAYS[i % DELAYS.length]); + first.child.kill('SIGKILL'); + await Promise.race([first.closed, sleep(2000)]); + sweep(root); await sleep(100); sweep(root); + res.code1 = 'killed'; + res.effects1 = read(path.join(root, 'effects')); + fs.writeFileSync(path.join(root, 'release'), ''); + const r0 = rootOf(journals(root)); + if (!r0) throw new Error('no root journal'); + const resumed = start(resumeSide, ['resume', '--no-observer-link', '--json', ...(sc.extraArgs ?? []), '--data-dir', path.join(root, 'data'), r0.runId], root, env); + const to = setTimeout(() => resumed.child.kill('SIGKILL'), 150_000); + const rr = await resumed.closed; clearTimeout(to); + res.code = rr.code; res.out = resumed.out.slice(-600); + sweep(root); + if (sc.secondResume) { + res.effects0 = res.effects1; + res.effectsMid = read(path.join(root, 'effects')); + res.code1 = rr.code; res.effects1 = res.effectsMid; + const fin = start(sc.secondResume, ['resume', '--no-observer-link', '--json', ...(sc.extraArgs ?? []), '--data-dir', path.join(root, 'data'), r0.runId], root, env); + const to2 = setTimeout(() => fin.child.kill('SIGKILL'), 150_000); + const fr = await fin.closed; clearTimeout(to2); + res.code = fr.code; res.out2 = fin.out.slice(-400); + sweep(root); + } + res.effects = read(path.join(root, 'effects')); + } + const js = journals(root); + const r = rootOf(js); + res.mode = r ? modeOf(r) : 'noroot'; + const rc = replayCheck(js, r?.runId, sc.expectedCounts); + res.journalReplay = rc.replay; res.dups = rc.dups; res.ids = rc.ids; + const letters = [...res.effects].filter(c => /[A-Za-z]/.test(c)); + res.letterDup = new Set(letters).size !== letters.length; + res.replay = res.journalReplay || (res.letterDup && !sc.allowDupLetters); + if (sc.extraCheck) Object.assign(res, sc.extraCheck(root)); + const okDefault = r => r.code === 0 && !r.replay && (sc.noZ || r.effects.includes('Z')); + res.ok = sc.okIf ? (sc.okIf(res) && !res.replay) : sc.expect ? (sc.expect(res) && !res.replay && res.code === 0) : okDefault(res); + } catch (e) { + res.error = String(e?.stack ?? e).slice(0, 400); res.ok = false; + } finally { + try { first.child.kill('SIGKILL'); } catch {} + sweep(root); + res.ms = Date.now() - t0; + if (!keep && res.ok) fs.rmSync(root, { recursive: true, force: true }); + } + return res; +} + +const mod = await import(path.resolve(file)); +let scen = mod.default; +if (names !== 'all') { const want = names.split(','); scen = want.map(n => { const s = scen.find(x => x.name === n); if (!s) throw new Error(`no scenario ${n}`); return s; }); } +const jobs = []; +for (const sc of scen) for (const [a, b] of (sidesOverride ?? sc.sides)) for (let i = 0; i < reps; i++) jobs.push([sc, a, b, i]); +const results = []; +let next = 0; +await Promise.all(Array.from({ length: conc }, async () => { + while (next < jobs.length) { + const [sc, a, b, i] = jobs[next++]; + const r = await one(sc, a, b, i); + results.push(r); + console.log(JSON.stringify(r)); + } +})); +const groups = new Map(); +for (const r of results) { + const k = `${r.s} ${r.start}>${r.resume}`; + const g = groups.get(k) ?? { ok: 0, n: 0, replay: 0, fresh: 0, modes: new Set(), effects: new Set(), codes: new Set() }; + g.n++; if (r.ok) g.ok++; if (r.replay) g.replay++; if (r.fresh) g.fresh++; + g.modes.add(r.mode); g.effects.add(r.effects); g.codes.add(String(r.code)); + groups.set(k, g); +} +for (const [k, g] of groups) console.log(`SUMMARY ${k} ok=${g.ok}/${g.n} replay=${g.replay} fresh=${g.fresh} mode=${[...g.modes]} codes=${[...g.codes]} effects=${[...g.effects].join('|')}`); diff --git a/evidence/native-parallel-review8/mut-f1-parens-fail.log b/evidence/native-parallel-review8/mut-f1-parens-fail.log new file mode 100644 index 000000000..45fd093ec --- /dev/null +++ b/evidence/native-parallel-review8/mut-f1-parens-fail.log @@ -0,0 +1,32 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/authored-parallel-body.test.ts (5 tests | 1 failed | 4 skipped) 8ms + × certified authored parallel body > certifies every parenthesized branch member accepted by the grammar 7ms + → expected [] to have a length of 3 but got +0 + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-parallel-body.test.ts > certified authored parallel body > certifies every parenthesized branch member accepted by the grammar +AssertionError: expected [] to have a length of 3 but got +0 + +- Expected ++ Received + +- 3 ++ 0 + + ❯ tests/authored-parallel-body.test.ts:38:23 + 36| const executable = instrumentParallelBody(body, promise => certifi… + 37| await executable({ run: async command => { commands.push(command);… + 38| expect(certified).toHaveLength(3); + | ^ + 39| expect(new Set(certified).size).toBe(3); + 40| expect(commands).toEqual(['A', 'B', 'C']); + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed (1) + Tests 1 failed | 4 skipped (5) + Start at 00:51:57 + Duration 736ms (transform 48ms, setup 10ms, collect 441ms, tests 8ms, environment 0ms, prepare 66ms) diff --git a/evidence/native-parallel-review8/mut-f1-parens-pass.log b/evidence/native-parallel-review8/mut-f1-parens-pass.log new file mode 100644 index 000000000..c4d24a6c5 --- /dev/null +++ b/evidence/native-parallel-review8/mut-f1-parens-pass.log @@ -0,0 +1,9 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-parallel-body.test.ts (5 tests | 4 skipped) 6ms + + Test Files 1 passed (1) + Tests 1 passed | 4 skipped (5) + Start at 00:51:58 + Duration 414ms (transform 28ms, setup 11ms, collect 196ms, tests 6ms, environment 0ms, prepare 35ms) diff --git a/evidence/native-parallel-review8/mut-f2-name-fail.log b/evidence/native-parallel-review8/mut-f2-name-fail.log new file mode 100644 index 000000000..25ec41180 --- /dev/null +++ b/evidence/native-parallel-review8/mut-f2-name-fail.log @@ -0,0 +1,36 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/authored-parallel-eligibility.test.ts (10 tests | 1 failed | 9 skipped) 10ms + × parallel run admission > uses serial mode when the body names the injected certifier 9ms + → const __certifyParallelBranch = async () => { await f.run('P'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([__certifyParallelBranch(), b()]);: expected true to be false // Object.is equality + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-parallel-eligibility.test.ts > parallel run admission > uses serial mode when the body names the injected certifier +AssertionError: const __certifyParallelBranch = async () => { await f.run('P'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([__certifyParallelBranch(), b()]);: expected true to be false // Object.is equality + +- Expected ++ Received + +- false ++ true + + ❯ tests/authored-parallel-eligibility.test.ts:184:86 + 182| const b = async () => { await f.run('B'); }; + 183| await Promise.all([a(), b()]);`, + 184| ]) expect(eligible(body(`async f => { ${source} f.done('success');… + | ^ + 185| }); + 186| }); + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed (1) + Tests 1 failed | 9 skipped (10) + Start at 00:51:58 + Duration 506ms (transform 28ms, setup 11ms, collect 203ms, tests 10ms, environment 0ms, prepare 35ms) diff --git a/evidence/native-parallel-review8/mut-f2-name-pass.log b/evidence/native-parallel-review8/mut-f2-name-pass.log new file mode 100644 index 000000000..5d855b33f --- /dev/null +++ b/evidence/native-parallel-review8/mut-f2-name-pass.log @@ -0,0 +1,9 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-parallel-eligibility.test.ts (10 tests | 9 skipped) 7ms + + Test Files 1 passed (1) + Tests 1 passed | 9 skipped (10) + Start at 00:51:59 + Duration 477ms (transform 29ms, setup 12ms, collect 199ms, tests 7ms, environment 0ms, prepare 70ms) diff --git a/evidence/native-parallel-review8/mut-f3-preload-fail.log b/evidence/native-parallel-review8/mut-f3-preload-fail.log new file mode 100644 index 000000000..74730768b --- /dev/null +++ b/evidence/native-parallel-review8/mut-f3-preload-fail.log @@ -0,0 +1,32 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/authored-flow-lifecycle-executor.test.ts (45 tests | 1 failed | 44 skipped) 6ms + × authored flow lifecycle through the journal executor > detects replacement of every Promise primitive used by parallel joins 4ms + → NODE_OPTIONS preload: expected true to be false // Object.is equality + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-flow-lifecycle-executor.test.ts > authored flow lifecycle through the journal executor > detects replacement of every Promise primitive used by parallel joins +AssertionError: NODE_OPTIONS preload: expected true to be false // Object.is equality + +- Expected ++ Received + +- false ++ true + + ❯ tests/authored-flow-lifecycle-executor.test.ts:81:73 + 79| try { + 80| process.env['NODE_OPTIONS'] = '--import=/tmp/preload.mjs'; + 81| expect(parallelPromiseIntrinsicsIntact(), 'NODE_OPTIONS preload'… + | ^ + 82| } finally { + 83| if (nodeOptions === undefined) delete process.env['NODE_OPTIONS'… + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed (1) + Tests 1 failed | 44 skipped (45) + Start at 00:52:00 + Duration 1.70s (transform 510ms, setup 9ms, collect 1.38s, tests 6ms, environment 0ms, prepare 44ms) diff --git a/evidence/native-parallel-review8/mut-f3-preload-pass.log b/evidence/native-parallel-review8/mut-f3-preload-pass.log new file mode 100644 index 000000000..391faf88c --- /dev/null +++ b/evidence/native-parallel-review8/mut-f3-preload-pass.log @@ -0,0 +1,9 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-flow-lifecycle-executor.test.ts (45 tests | 44 skipped) 3ms + + Test Files 1 passed (1) + Tests 1 passed | 44 skipped (45) + Start at 00:52:01 + Duration 1.35s (transform 517ms, setup 12ms, collect 1.10s, tests 3ms, environment 0ms, prepare 46ms) diff --git a/evidence/native-parallel-review8/mut-f4-member-fail.log b/evidence/native-parallel-review8/mut-f4-member-fail.log new file mode 100644 index 000000000..9580e099b --- /dev/null +++ b/evidence/native-parallel-review8/mut-f4-member-fail.log @@ -0,0 +1,32 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/authored-flow-lifecycle-executor.test.ts (45 tests | 1 failed | 44 skipped) 7ms + × authored flow lifecycle through the journal executor > refuses untracked thenables before invoking their user-supplied then 4ms + → expected [Function] to throw an error + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-flow-lifecycle-executor.test.ts > authored flow lifecycle through the journal executor > refuses untracked thenables before invoking their user-supplied then +AssertionError: expected [Function] to throw an error + +- Expected: +null + ++ Received: +undefined + + ❯ tests/authored-flow-lifecycle-executor.test.ts:104:12 + 102| hiddenThenable, + 103| Promise.resolve('B'), + 104| ]))).toThrow(/member with no tracked provenance/u); + | ^ + 105| expect(violations).toContain('parallel Promise.all contains a me… + 106| expect(thenReads).toBe(0); + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed (1) + Tests 1 failed | 44 skipped (45) + Start at 00:52:03 + Duration 1.29s (transform 447ms, setup 18ms, collect 998ms, tests 7ms, environment 0ms, prepare 56ms) diff --git a/evidence/native-parallel-review8/mut-f4-member-pass.log b/evidence/native-parallel-review8/mut-f4-member-pass.log new file mode 100644 index 000000000..7aeee61e6 --- /dev/null +++ b/evidence/native-parallel-review8/mut-f4-member-pass.log @@ -0,0 +1,9 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-flow-lifecycle-executor.test.ts (45 tests | 44 skipped) 3ms + + Test Files 1 passed (1) + Tests 1 passed | 44 skipped (45) + Start at 00:52:05 + Duration 1.30s (transform 454ms, setup 11ms, collect 1.03s, tests 3ms, environment 0ms, prepare 41ms) diff --git a/evidence/native-parallel-review8/mut-f6-descriptors-fail.log b/evidence/native-parallel-review8/mut-f6-descriptors-fail.log new file mode 100644 index 000000000..dc1f662fc --- /dev/null +++ b/evidence/native-parallel-review8/mut-f6-descriptors-fail.log @@ -0,0 +1,32 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/authored-flow-lifecycle-executor.test.ts (45 tests | 1 failed | 44 skipped) 6ms + × authored flow lifecycle through the journal executor > detects replacement of every Promise primitive used by parallel joins 4ms + → prototype constructor descriptor: expected true to be false // Object.is equality + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-flow-lifecycle-executor.test.ts > authored flow lifecycle through the journal executor > detects replacement of every Promise primitive used by parallel joins +AssertionError: prototype constructor descriptor: expected true to be false // Object.is equality + +- Expected ++ Received + +- false ++ true + + ❯ tests/authored-flow-lifecycle-executor.test.ts:62:85 + 60| ...constructorDescriptor, enumerable: !constructorDescriptor.e… + 61| }); + 62| expect(parallelPromiseIntrinsicsIntact(), 'prototype constructor… + | ^ + 63| } finally { Object.defineProperty(Promise.prototype, 'constructor'… + 64| const species = Object.getOwnPropertyDescriptor(Promise, Symbol.sp… + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed (1) + Tests 1 failed | 44 skipped (45) + Start at 00:52:06 + Duration 1.18s (transform 417ms, setup 9ms, collect 949ms, tests 6ms, environment 0ms, prepare 35ms) diff --git a/evidence/native-parallel-review8/mut-f6-descriptors-pass.log b/evidence/native-parallel-review8/mut-f6-descriptors-pass.log new file mode 100644 index 000000000..562232ff3 --- /dev/null +++ b/evidence/native-parallel-review8/mut-f6-descriptors-pass.log @@ -0,0 +1,9 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-flow-lifecycle-executor.test.ts (45 tests | 44 skipped) 3ms + + Test Files 1 passed (1) + Tests 1 passed | 44 skipped (45) + Start at 00:52:07 + Duration 1.26s (transform 468ms, setup 12ms, collect 1.01s, tests 3ms, environment 0ms, prepare 34ms) diff --git a/evidence/native-parallel-review8/mutation-proof.log b/evidence/native-parallel-review8/mutation-proof.log new file mode 100644 index 000000000..9805badcd --- /dev/null +++ b/evidence/native-parallel-review8/mutation-proof.log @@ -0,0 +1,16 @@ +f1-parens fail: exit=1; command=/Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk/node_modules/.bin/vitest run tests/authored-parallel-body.test.ts -t certifies every parenthesized branch member accepted by the grammar; log=evidence/native-parallel-review8/mut-f1-parens-fail.log +f1-parens: restored SHA-256 c41c5b4b82a26b7f30717378000afa798a31e4cbf07cc1998525fcf24f29097c +f1-parens pass: exit=0; command=/Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk/node_modules/.bin/vitest run tests/authored-parallel-body.test.ts -t certifies every parenthesized branch member accepted by the grammar; log=evidence/native-parallel-review8/mut-f1-parens-pass.log +f2-name fail: exit=1; command=/Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk/node_modules/.bin/vitest run tests/authored-parallel-eligibility.test.ts -t uses serial mode when the body names the injected certifier; log=evidence/native-parallel-review8/mut-f2-name-fail.log +f2-name: restored SHA-256 8c612071c51eb045ec22d9f6357bb147f255b808dc0db5dc7d5ef71178ce240a +f2-name pass: exit=0; command=/Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk/node_modules/.bin/vitest run tests/authored-parallel-eligibility.test.ts -t uses serial mode when the body names the injected certifier; log=evidence/native-parallel-review8/mut-f2-name-pass.log +f3-preload fail: exit=1; command=/Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk/node_modules/.bin/vitest run tests/authored-flow-lifecycle-executor.test.ts -t detects replacement of every Promise primitive used by parallel joins; log=evidence/native-parallel-review8/mut-f3-preload-fail.log +f3-preload: restored SHA-256 b6e2faa669e1fdafab7028722e8470e668eb8a8a9a741f2172915b91dab53dd4 +f3-preload pass: exit=0; command=/Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk/node_modules/.bin/vitest run tests/authored-flow-lifecycle-executor.test.ts -t detects replacement of every Promise primitive used by parallel joins; log=evidence/native-parallel-review8/mut-f3-preload-pass.log +f4-member fail: exit=1; command=/Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk/node_modules/.bin/vitest run tests/authored-flow-lifecycle-executor.test.ts -t refuses untracked thenables before invoking their user-supplied then; log=evidence/native-parallel-review8/mut-f4-member-fail.log +f4-member: restored SHA-256 b6e2faa669e1fdafab7028722e8470e668eb8a8a9a741f2172915b91dab53dd4 +f4-member pass: exit=0; command=/Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk/node_modules/.bin/vitest run tests/authored-flow-lifecycle-executor.test.ts -t refuses untracked thenables before invoking their user-supplied then; log=evidence/native-parallel-review8/mut-f4-member-pass.log +f6-descriptors fail: exit=1; command=/Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk/node_modules/.bin/vitest run tests/authored-flow-lifecycle-executor.test.ts -t detects replacement of every Promise primitive used by parallel joins; log=evidence/native-parallel-review8/mut-f6-descriptors-fail.log +f6-descriptors: restored SHA-256 b6e2faa669e1fdafab7028722e8470e668eb8a8a9a741f2172915b91dab53dd4 +f6-descriptors pass: exit=0; command=/Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk/node_modules/.bin/vitest run tests/authored-flow-lifecycle-executor.test.ts -t detects replacement of every Promise primitive used by parallel joins; log=evidence/native-parallel-review8/mut-f6-descriptors-pass.log +5/5 selected mutations failed and passed after byte-for-byte restoration diff --git a/evidence/native-parallel-review8/mutation-proof.py b/evidence/native-parallel-review8/mutation-proof.py new file mode 100644 index 000000000..cafded7fc --- /dev/null +++ b/evidence/native-parallel-review8/mutation-proof.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python3 +"""Run selected review-7 guard removals, then restore each file byte for byte.""" + +from hashlib import sha256 +from pathlib import Path +import subprocess + +ROOT = Path(__file__).resolve().parents[2] +SDK = ROOT / 'packages/sdk' +OUT = Path(__file__).resolve().parent +VITEST = SDK / 'node_modules/.bin/vitest' + +CASES = [ + ( + 'f1-parens', 'src/authored-parallel-body.ts', + 'const member = unwrapParallelExpression(outer);', 'const member = outer;', + 'tests/authored-parallel-body.test.ts', + 'certifies every parenthesized branch member accepted by the grammar', + ), + ( + 'f2-name', 'src/authored-parallel-eligibility.ts', + 'if (namesCertifier) return false;', 'if (false && namesCertifier) return false;', + 'tests/authored-parallel-eligibility.test.ts', + 'uses serial mode when the body names the injected certifier', + ), + ( + 'f3-preload', 'src/authored-flow-lifecycle.ts', + 'if (!nativeAtModuleLoad || authoredProcessHasPreload()', + 'if (!nativeAtModuleLoad || false', + 'tests/authored-flow-lifecycle-executor.test.ts', + 'detects replacement of every Promise primitive used by parallel joins', + ), + ( + 'f4-member', 'src/authored-flow-lifecycle.ts', + 'if (this.refuseUnknownThenable !== undefined) {', + 'if (false && this.refuseUnknownThenable !== undefined) {', + 'tests/authored-flow-lifecycle-executor.test.ts', + 'refuses untracked thenables before invoking their user-supplied then', + ), + ( + 'f6-descriptors', 'src/authored-flow-lifecycle.ts', + 'function sameDescriptor(actual: PropertyDescriptor | undefined, original: PropertyDescriptor | undefined): boolean {', + 'function sameDescriptor(actual: PropertyDescriptor | undefined, original: PropertyDescriptor | undefined): boolean { return true;', + 'tests/authored-flow-lifecycle-executor.test.ts', + 'detects replacement of every Promise primitive used by parallel joins', + ), +] + + +def run(name: str, phase: str, test: str, title: str) -> int: + command = [str(VITEST), 'run', test, '-t', title] + result = subprocess.run(command, cwd=SDK, stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, check=False) + target = OUT / f'mut-{name}-{phase}.log' + target.write_bytes(result.stdout) + print(f'{name} {phase}: exit={result.returncode}; command={" ".join(command)}; log={target.relative_to(ROOT)}') + return result.returncode + + +for name, relative, before, after, test, title in CASES: + source = SDK / relative + original = source.read_bytes() + before_bytes = before.encode() + if original.count(before_bytes) != 1: + raise SystemExit(f'{name}: expected one mutation target in {relative}') + digest = sha256(original).hexdigest() + try: + source.write_bytes(original.replace(before_bytes, after.encode(), 1)) + failed = run(name, 'fail', test, title) + finally: + source.write_bytes(original) + restored = source.read_bytes() + if restored != original or sha256(restored).hexdigest() != digest: + raise SystemExit(f'{name}: byte-for-byte restoration failed') + print(f'{name}: restored SHA-256 {digest}') + if failed == 0: + raise SystemExit(f'{name}: selected test unexpectedly passed after guard removal') + if b'AssertionError' not in (OUT / f'mut-{name}-fail.log').read_bytes(): + raise SystemExit(f'{name}: failure was not the selected assertion') + if run(name, 'pass', test, title) != 0: + raise SystemExit(f'{name}: selected test failed after restoration') + +print(f'{len(CASES)}/{len(CASES)} selected mutations failed and passed after byte-for-byte restoration') diff --git a/evidence/native-parallel-review8/probe.mjs b/evidence/native-parallel-review8/probe.mjs new file mode 100644 index 000000000..8c0dc2511 --- /dev/null +++ b/evidence/native-parallel-review8/probe.mjs @@ -0,0 +1,128 @@ +// Probe head's certifier on candidate entry modules (no daemon). +import fs from 'node:fs'; +import path from 'node:path'; +import { pathToFileURL } from 'node:url'; +const sdk = '/w/head/packages/sdk/dist'; +const { parallelRunEligible, parallelBodySyntaxEligible } = await import(`${sdk}/authored-parallel-eligibility.js`); +const { instrumentParallelBody } = await import(`${sdk}/authored-parallel-body.js`); +const SURF = `import { flow } from '@relayflows/surface';`; +const body = (b) => `${SURF}\nexport default flow('p', async f => {\n${b}\n});\n`; +const cases = { + baseline_native: body(` const a = async () => { await f.run('A'); await f.run('a'); }; + const b = async () => { await f.run('B'); await f.run('b'); }; + await Promise.all([a(), b()]); + await f.run('X');`), + hygiene_branch: body(` const __certifyParallelBranch = async () => { await f.run('P'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([__certifyParallelBranch(), b()]); + await f.run('X');`), + hygiene_value: body(` const __certifyParallelBranch = await f.run('V'); + const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]); + await f.run('X');`), + paren_member: body(` const a = async () => { await f.run('A'); await f.run('a'); }; + const b = async () => { await f.run('B'); await f.run('b'); }; + await Promise.all([(a()), (b())]); + await f.run('X');`), + paren_iife: body(` const b = async () => { await f.run('B'); }; + await Promise.all([((async () => { await f.run('A'); })()), b()]); + await f.run('X');`), + twice: body(` const a = async () => { await f.run('A'); await f.run('a'); }; + await Promise.all([a(), a()]); + await f.run('X');`), + ret_values: body(` const a = async () => { return await f.run('A'); }; + const b = async () => { return await f.run('B'); }; + const r = await Promise.all([a(), b()]); + await f.run('printf ' + r[0] + r[1]);`), + mid_return: body(` const a = async () => { await f.run('A'); return await f.run('A1'); await f.run('A2'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]); + await f.run('X');`), + expr_branch: body(` const a = async () => await f.run('A'); + const b = async () => await Promise.all([f.run('B1'), f.run('B2')]); + await Promise.all([a(), b()]); + await f.run('X');`), + sync_throw: body(` const x = await f.run('W'); + const a = async () => { await f.run('printf ' + x.y.z); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]); + await f.run('X');`), + type_import: `import type { flow } from '@relayflows/surface';\nexport default flow('p', async f => {\n const a = async () => { await f.run('A'); };\n const b = async () => { await f.run('B'); };\n await Promise.all([a(), b()]);\n});\n`, + inline_type_import: `import { type flow } from '@relayflows/surface';\nexport default flow('p', async f => {\n const a = async () => { await f.run('A'); };\n const b = async () => { await f.run('B'); };\n await Promise.all([a(), b()]);\n});\n`, + unicode_escape: body(` const \\u0061 = async () => { await f.\\u0072un('A'); }; + const b = async () => { await f.run('B'); }; + await Pr\\u006fmise.all([\\u0061(), b()]); + await f.run('X');`), + optional_chain: body(` const a = async () => { await f?.run('A'); }; + const b = async () => { await f.run?.('B'); }; + await Promise?.all([a(), b()]); + await f.run('X');`), + done_last: body(` const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]); + f.done('success');`), + getter_obj: body(` const a = async () => { await f.run('A', { get timeout() { return '5m'; } }); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]);`), + labelled: body(` const a = async () => { l: { await f.run('A'); } }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]);`), + arguments_nested: body(` const a = async () => { await f.run('A' + arguments.length); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]);`), + loop_literal: body(` const a = async () => { await f.run('A'); }; + await Promise.all([1, 2].map(() => a()));`), + value_member: body(` const x = await f.run('W'); + const a = async () => { await f.run('A' + x.length); }; + const b = async () => { await f.run('B' + x[0]); }; + await Promise.all([a(), b()]); + await f.run(x.length > 0 ? 'X' : 'Y');`), + record_branch: body(` const a = async () => { const r = await f.run('exit 3', { onNonZero: 'record' }); await f.run('printf ' + r.exitCode); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]);`), + shebang: `#!/usr/bin/env node\n${body(` const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]);`)}`, + comment_before_import: `// header\n/* block */\n${body(` const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]);`)}`, + twelve: body(` ${Array.from({ length: 12 }, (_, i) => `const b${i} = async () => { await f.run('S${i}'); await f.run('D${i}'); };`).join('\n ')} + await Promise.all([${Array.from({ length: 12 }, (_, i) => `b${i}()`).join(', ')}]); + await f.run('X');`), + optional_call_member: body(` const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a?.(), b?.()]); + await f.run('X');`), + comment_iife: body(` const b = async () => { await f.run('B'); }; + await Promise.all([(/* c */ async () => { await f.run('A'); })(), b()]); + await f.run('X');`), + multi_decl: body(` const a = async () => { await f.run('A'); }, b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]); + await f.run('X');`), + paren_group: body(` const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await (Promise.all([a(), b()])); + await f.run('X');`), +}; +const dir = '/w/probe'; +fs.rmSync(dir, { recursive: true, force: true }); +fs.mkdirSync(dir, { recursive: true }); +fs.writeFileSync(path.join(dir, 'package.json'), '{"type":"module"}'); +fs.symlinkSync('/w/head/packages/sdk/node_modules', path.join(dir, 'node_modules')); +const { getFlowDefinition } = await import('/w/head/packages/sdk/node_modules/@relayflows/surface/dist/runtime.js'); +for (const [name, src] of Object.entries(cases)) { + const file = path.join(dir, `${name}.flow.ts`); + fs.writeFileSync(file, src); + let line; + try { + const mod = await import(pathToFileURL(file).href); + const def = getFlowDefinition(mod.default); + const full = parallelRunEligible(def.body, src); + const grammar = parallelBodySyntaxEligible(def.body); + let instr = ''; + if (grammar) { try { instr = String(instrumentParallelBody(def.body, () => {})).match(/__certifyParallelBranch\([^)]*\)/g)?.length ?? 0; } catch (e) { instr = 'throw:' + e.message; } } + line = `${name}: certified=${full} grammar=${grammar} wrappedCalls=${instr}`; + } catch (e) { line = `${name}: LOAD ERROR ${String(e.message).slice(0, 120)}`; } + console.log(line); +} diff --git a/evidence/native-parallel-review8/published-2051-pin.log b/evidence/native-parallel-review8/published-2051-pin.log new file mode 100644 index 000000000..c0f789066 --- /dev/null +++ b/evidence/native-parallel-review8/published-2051-pin.log @@ -0,0 +1,5 @@ +99df610cc9751dc1cf9101a04cdd618e68fc9ad4805ecc3e9634f39c63f52a0e /w/p2051/node_modules/@relayflows/sdk/dist/authored-root.js +99df610cc9751dc1cf9101a04cdd618e68fc9ad4805ecc3e9634f39c63f52a0e /w/sdk-base-2051/dist/authored-root.js +8f352d232e7503312c4ec92a9122890fa9db2255718d4eabf2bc2333909eb103 /w/sdk-head/dist/authored-root.js +2.0.51 +2.0.51 diff --git a/evidence/native-parallel-review8/raw-logs.tar.gz b/evidence/native-parallel-review8/raw-logs.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..f93acc610497df73debe810aaf7d05d99c4adea4 GIT binary patch literal 55162 zcmZ5{V{~O*ux)JHw$&YWY}Dcbrb|)R%wr$(C&GSxw_r5XScz@3MGgsBB+O=xW zs#Tjf5(Y-4V$K>2;ArH=Xk%yL#N=$`2y)Ts<+LuD@S0$2S3sv*viEWbXG}DWaXX*#~rx0e(Q2Cm|TbEppbj?+a4w_&vOfy59$K=&NAK z{ny?}rw4eesG=~%4gF0q@yEU(QA(G$pGPi}?Bm(X!{z*KHmc)eBD?3LizvSXQ2_I6 zEG?*jbIGK8fgXq*x zOo?-pw?6yzJ-6vMi$&JmGyHuW|H}9x z^CNMl!27P5eC|CZ-H~&Wz9z) zj~o-hy}xV=e7sx_1FpHgz>$K80mvt}G2IM{ ztsbozUEZY%3QSY-vD3t>xGzsH3anMo@61O4+Tnl7WBoe0{BHLnSEpY->b!4{vCAVJ zl)7vBL_Z%UG7Y*ov$KgiUr;|@2Nx;cBZ(_{_&NQ2Ycq618%L`phKGyFqHWDrHL6RM zEtsq1^gmz#AA1juE;q=--nN&|vsk+_kgBh@<@`V7 zzFfSWT#LoSew-E-#TFXZot($Vjm6IQzlYDBll@d(9!?J(7P+}QOZ>b5yDPeBQ-kg0 zcfa3~&WHgm9LLxKzFo?G270B$yyXH{A9v%-#MKwfIvq{SUz&PF_4D(Q2X_b6%h(`2 zVSAv&@`?PhGkNQJ44Mgh1mWl77uN2+Wq#kV*8N7*I$O2sk4nd1LyL54?i(w&x?-K0UtI`4YP@SxdU=ui@Db z7paF&bptkEHIDZll)KAoo65RNzZ~xgNx=M0KWV~zSYp)hB67l{VN%YNAoWvZ){l7L)_ps6L+CNO&-%2q>Wk0M&MUKVQ>l!IgWC7$!hS zXm#^o{|IyBBZ4g%0!70lu7T0znCkZ+kpy9s1p6y78|wFH!>ypXc_c7|kV3G3A9lMDWBKzD=k6xy$p zx?rp3)?@zJj#)8k9~jVE*EeHq()u_b2c2W+pYt6Ksx!a?@@KK3%E$>BH3;NBUyzlk z*tIR>PqvL5Lsh&O++K039n1?5I9g45ND=+sj(|p0mUtC{ky~f32>9Bd%^cF$ZPON^ zUW%leG6Yb~x9|}W$-rK9xRC!9TyGp7-S7Mzx$epoA%CzW7wf-$fNGMFLpBv*==UNC z_R{>!Hyof()2MNU!$K!JVn`JuW~3HUMM!!1Zyy+9#uR1BfpFy4frP@0ko&(dqC6q* z;g*zpp-Om99>JQTun^`*4iPq66GRO<*s}0|)4KcjSpk$yy{XW7+6y_lL zrI#fRTe#Z2u^=ikql9+zd#czrz`%^ZD8T`H|(lDtSZZy3#c6yora$~`e46K;q~)! zmlX|w|FWIk?8hvUmk0JN@wLtBd?uscMn6$?>8wfVWVQh5oAiL;u>>_J4`&^NchXN>Hh~KHrZ-ke2>j6ry~Rpw?kLh!pk2)gxq2FP zgKX$xOvgf?sZOKCN+OWTiMvH)_BP?_jV9_c85(uNM);n1lp?_OC&2YTq7!oa71^k+ zDox#olWp`L+Jrb`sXi?iq9Y7(I4AZwae<0$WF%|F$8gS*FC11vvc*Sl=4o(!@hJO& zGG0)U5I~&)CkYoV35;!8-_PQ?E+Vuz!5k#N)J)HW%cS;IP5JU;qqf6mt^(6ww)KW6Y7Tqbyai|lkA zDOdKF_;GY5-pE7p;@s2sT=w+2?E`q0*Z@Gje_e+z0ygJTm*4dT7KvE4uK-A><~!q` z2AZD<*MKj=_wMQ^HG@cBb>6lL2?5S&yG33-NEYHi;uiI!*HsAs9afo0&Z3>sbF~2S zTNXfn5$Vh4us;3Fj<8Z*Jvrj+8yzEza&a%HQmYzx-s}9lCBtA3hl}3}t1*f+t04=rS3qW*>cm=i{cf4M|kMDS_ zBhQ+FD9#ZUK_DNg*>+Qj0RcCZ)`)hAx;fJx(P2UF7D@Igo$PeFN zII-ErsmX||ENngY6lV7l|N7MW_k_rs{IA_~jNL$%-TrTc;z;MU1lw^&#&qj`_GT<+(|%ZcZVW1_If%% zr}O#nYdUQ?Vdog|clKjDGC8aQjzHk8@h7v*lU??NS}W93qQWH%$RL#gr0;2Y53f)1 zpYf+oJ}e-^x&;8K6Ob0$@B39sV7o|a{D_9Gsr?GQXMRyYDFl+TM*;q9mul}N2|R%u zFq&v?_)sAzsC_Qn$05>CCR|1nh~_Xlh*_rz62J4lZ(I?-Hbh~T*Hz!qayp9$oQnx? zk#}vt;6PKzh~z>iep&HVetrv1`es>81MTMT*adgOt&G&Fg2WtnRYHvL0>gYPLV%n_ zBhkY(HnGV!ks;5hQs@fZnq;S1y{bumo>&F+o22RgqtmH~V*Xc9o!d(O}O z)!&T_pAC5Tz4!AAj_qC^wd)3CdIPR3B5gUYp1^7aJ1OD7 zK#n@RES~Gd`{i~~%Os@rj5HnYqOUA2!rQYetExnx8-NFDDBH_ne)vq_Yx>pC`76H* zo%-xE`p@Up$%{_$lSwfTPxYqxXO$~B;CfnNCUTm8&muCFx%({EJa%eIqxiXSw$j$( zxF{vZdK0dd0FImR>lGDP2i=r-l@8nNloLEsx0IcIc_E%BL--S(ULb2l?F z>HVIe%vM1zBJ1v3(k!8xP5CZ{cDz z_94$+3WfO^rMD}NjRv6z*20`PU3%zr}w}G*SONz{s({OB>o0IjQT$+jZlN;&wHTdd5H9^o3@lH1ky>- zBATwbS5M1ir*>J;`habyyq!43b=eAtCeHHxv48{uNMVn0_9IS)ZCllw2WE zxnp?d989$6lH_V?IR|;lHFQ#irGtgFC90GSX(EiMnA&P#fV(^==PjjSi$~h8Em{R; zg|fBfvywHJYJ~%v!@*2H7SDdikaq}Ed3rql%q;!Pv-$n*KfqL7Uyb$68>!x!`24Qr ztRjWW`{9`f`&#z+e@K7D<|r|5qt~mOTBiVyK()f<^*5c%+xRZu&im8Hsp_NWDdz5v zJK-O9Vqb%gYzEBLE$sSoh62&z&azs}gFiscFg6LRzvJ45X=p*p^kVkhe*J8n0SfGO#1cy2uH42a*kGKAn$W|=dtg%Zw2pNiQ7Bi7O7 zAdLglw;qsTC_SLu1A$XqMWYv`t3afh5H2I#2?e&Y6+A1{ivkp_W=clob+d#KwmHPc(u<`n)YCF>)Vm6xJpyTu5z;j&245=i}i#%(*sJ z<GJ%+u38-*_aV1XKKBHN}IJ3l-jbAN7x;9!yu;0+rRG67~NthnG zj8J`S9DX-y$V0GWLam`ifP`WRTXB@aBow)x{D#y#jexfySxRD+w!5g8fS z!uLWZ5YbZOjTbU#A3)8jaCb^!r)jYXq~^LPgW4-_AhI>ssh5%Ply~wD9tF0bOnbsg zloSEdCXpPKN$Mdqh7^ZTsROEL_yHAlQESTTQF9sieI=d*>Jeo7|JU&d4q8uduL+Om zfWl5ih6G$|$rE6Ntr@1M7gpvJG_YL`7M9}8MvnXN4za;r(K5vf=%}JfgQ6h78*}Vr z&;)8yo-Naxhvlg6N~7tdwDn<9jg3WQj2R1`*J^l94_Y;ykyi)6oPMNP0M|f;#LX){Dh9>}^gu8PySyAfjkWQX*h1C4u3>!7ySP z<46zDNu?iX=gzS)#4~sh>XQfjoF0#iOgz5piTt41W6OkaNSZd9&CWrPt23M>VL}YS zA1G`n%EOA27C9O;d*34?=`L>Jd$Wnp)dcg0NW?Osb0>W2S7tXfyc|cD#{fe^AAk{& zwFi?PkRkDB{8=qSbKS}nJ|4(?XA&l(PQi{VmQRW|WCNCB7<7e|3am>0Mk=bODbFjD z{r7;;wpDbAe3~S6wD8npW9CrGTE!^?WO4e^OC@ID77OAswe-OWl_nS!wNd;*Q_|uS zyc`_hB8fcXiA8iBG31rFdS>go5$gS!sc&o@tk^b^oRrj6^dlmiPX62cp$~dnEWgeG z;(U3TQh9ADNWHd5uVyJG1F10BqNPUikw3mMMzS{OZ)xp716Iv$xz3grjM*Q+=!|F? z!5B1Qqcvo?m=;G9+4|?2Kjx7fAY+!Q?FNOw_?gBM>T0@k2jeZLJ3i{%3Nl8SUo*l zcO!I}Yvto+w~IZCE&be$@qBOcEn=Er-`u(oGH7);ub+PK^Fa*6^3p`6CXfqh=}~+N z!U^q{I$F?KFfKxA5N8W?^Es}s{(L%&uCKK5sWs?ZOduzvsly^2V;32017V2|Mz zT5)6yt5UU+mX;}mDc!Gng9TIVW9EnQi=iNTHnEi;y>Y^rql@&X`A8FM2@NA*CJQAe z8_^P7;fuT9wZW2#8>3B7DQ3!2Oi~+!=^u$4al%Ah5Ek{vj_*fB-C-gVgW7*hi#;Sr zOzZ8jas{h)M8YD|BJ;Q*o13`0E>OD^4QfU~y%0OF7lmk#kX*<{hms`5FdSf!YQG&R z_3dK;`)1f@&rCKwkN&$MI1J@K^#gjMeR=o_(9RJ(71;SGM%bvkg;)eMg*Kxd)OQR& z;?>E7JHrTK!e+eO$!cgq28APD9g)ZxG9AgrKt!dL)Mh+UJ-+^i@w{#-Oc8X1EYMi8 zbFyd2CW7L{;+|oB8WB<>XHf*JMqYFkg_J_{pB2!9Mr>`KD4gksN$D1A>dP7n*sgGrGO-fU?=BkyCl zU5z`=K(rzy<;Qj8LfgxPPcJ07d|IJ7AA>z`CPH|ZuV3KNnV%uTR`AwTNW!GJ)LIa97Eisfr^icm zE8mkL_fG2s9G&i1)mhry32lx^ZthiijA=hOQ9{gF3$%pRRKKJ{;;~TCXhyljyXw6s zD53>kjpI~ISvIAE*?iUzje8MUBSL00>S%*mXvMeB%P(jw6^bxTQOPYg0-KuzK7sLm zmW@DBJj?tD#$38w?L2hupXRp^MYW-f`r+)ma~Hewg+-@o)%HqN4NXh-W6ozUX7kw-f{V4459|QC|kz_k}ek}Z4 zJqBUU=f~J*32s&KV>HiI7u2CozLQUZ-^^|;@F|_yR_ct?s0LSIc1C{Go(M5Xaq;Se zlTCKV)>y#maGs_BylI~M>G^G*fd77L-Jv2wQ52{ z8J$w>#9s@Mo{u~%k9k*T$#K32sfJ0Eqy!_ZBUx=F4yEaWX)3!u)r2mwuFThsS6+G@ z?9@8?W-q9!S*xq3@A*#mWxh+Z--Lc1WiD6v+HIwNQv-N7-&Q#}u4&2b0JNR%`&Ul^ z8R#x~ZW6IXUve9!<}UMV6NpU5^@5_2ILs#`!%EF*ZI_kN;UsW6A_Mgmjn+bFy^8QL zg46MOhcF$`5>Olyp?NTx--W|5;^#lOYYWRB+Yb_m5G3s3V@Uo3IUbK>j+Zd2@K}s< zC{WkVa|t8R8A<&f^nZ6Sr62d?lOP&FJ+|@0+P#H{+7sGJRSJRfxl$kXZ=4l{6;I>A zi0S#h4|7YfsuqLd78A#Hl<2@klVaWpl|AsGyh`45e`G8VGD~C1%*Bcj_M#3%T&0lN9I~YLB?; zSdy@6rAmw}iq`&zVr#0z?>W!yJ3%R-tSl($R8$%kvFS5)=n@3!3WBbWLautW!l-j^;bzr0Kug7}TF#PS z14&R~FUCSwFvB(>J5%vl09b^7DM8{dfmQp*MBM=ZO z!_mf6`0RErgx0ubl`Jn-dNyGZP%FQTS}}fx1X7x!!A<2^U{h7S;2?xWJ73+N8FRV< zJ{LRkDO}#yuhyTJ87tA4-`po@S8Glo#A=NO>mL&n*0BywO45w!(B!L^_t$4wiwy4Q z*38Mmj`ToPSfxl#V&zMhorB;A69cyMYFWN1CbKH1jztDzM~bAQTcL+se0am0!p}y6 zMu!^3LGMyznz==a0Xvq`U3lyX$qi*u$RZt@1QSs(n9taeS=orB`6Ss0Q27kx`&MpS zg+_^*95}XglL?Z_BRPU;p0zjJk>IHC3q$oQudOI`VQoIDL5`wITm*8o0f@#xS6FHA z4CR&`Z@jX)ej z5M|i#0EC(sa8A^HB~9!RWrvQt$4$5g8Umjl3POGbmEFO^1l62_>OA;(81(F zexq%Jibo41g8*w*4u^0&pBkHmXWkQ{X|3M>0{z2I(goG^gxJiuh$XT-Lls4>8 zqJXaW!Nf8nTTLaE!@O`uG_*SrSMk{5?pH7^-`oLRwB6zM{^wbLH)pUZBfr;@J95Qx zD8e@g`;?;J1p6{r5r&dcNm8rZ7Nq;BX3ifZh&;Y`6p0oS6meT8Ornd$bSQWnJ`|0RBM8br)m|) zg7#$kW}=j}{s2Tp^5>oU+0N!4^H9U?hxTNzKq34_Vf{)Z$;!BT?a7uT8C_Fw3_0<7 z+gP4UT5T|SHP~+&8SagD){7PD=e(Zn<(N;_E`rvdI=0##f7Dah||#d1Ky`^*8AJUgwlxrRowrdPN4bW^s)HY1lGl7W*6PMioe9-eUEi zKkFLXX0E+adwa_lF_G3VP!ZUfP)b?9<&E?AI}L9tGxmq2QZDv*HU=PCKNfUh`r3yL zt&fCdSMXBcI{dA`hx8Wq{Iq3Ag-4|Z9jT3sBFUrEMeS#NV4It`zAjL|yqhbCj(X8* z5J^Bi)@o4tPM%mI5ekndC3!-D%XL|$EmRrQ5C(VA8Gn2lJ@cJyuecdWN<6c;dB{*Q z^c6)3Wr96k?i8)vWr+rsMVMAMMPK}Haa0%(c%1bQc$_uV?|>lk-9%+6OXV-yn67D1 ziX^NtovPA-*@4y=j1}g>3vBK`<*>Q11A+tKD4}9)DEkg}yAAiS5MVOB(lMZqt??G= z_`N^R`!AJz#A5yYK8W0QzpE?C!HhtnMJhqTrhqF#Z@E?HShH;`1V9-Hikh)-9^uoM zyr5U-!1>68e`hb!)+((XNb7l%%t#(%vjrJQfsu764X30m!->!1ha{CAfG`U~Gf8I* z@9GSqv(Xl&1g(tbE-$E}sP0BPYWjj}tD7S!M5vf5 zC)1LNFnIOS$QO(F*P+~h*qQ+?K46E1p{rnFEz~Ho&_F*=wmMFRZB(J^xF6%F+$7G3 zfi~i#34@^cwPsy8YClgWp@urBINDg%!RBFhH}=pnHekeSM%G>}JI@gat0kL2o53QL zuvH?I4ty2UB&xSS)f*>SAO6oyB-D!Dq=B;AfU@)JPg$}dj6vE-NyIX~KcE1wNK0gc z7Dn$1VlOX!j3UGf%LY}owb~{m&Z7hyza^-p#EBL9o_imzV}(b9S!QL58$4}oNl^#65)b{(6u8-{FqI%W&N1@p z%q2fJYl$bDS(XI?7N@CZMfUpj{+qWOanrj62W#9=cwTI+zn)t&p#8Ils(&()W*m(S ziSEp8_0e}H_vLp`FO~@TlgK_3a`aSZc8W}`WP2i!UQ9R$Xx<2|c?b?lu)3IA^LOL5 z&s@}6EJJFdi*^LpV-+^=*a%m0zcs zUvE$y=A3%*TmDm+ecLrtXCK?%eD70mJI9Z-n}TnXYqtxd*RdWgiFjzSJ`vw4CRPKH zSI(;l9UG%xP5$nA_^A9metIHZT@HnCBSQ1$F;(B-KiMa`xlA>9%Z2V(Mf`F=_H5iA zGug^4kI{?u==p=mfc&+#TY23nZOM0)tV?^*-~Eg{{d9ZwSiTJ4R_Tt8Dw|lH_l9cm z<@kgEsh#ew)(-^{`Vcv8zIFg*($H7>ycHlg0?(a#kIa8QLOehdf`t&N?#cGOi3RuQ z*k`W(A%Fk>51`p{O|u3W+!3QA`JMP*j{*#~OZW5rI@GAK-PRY)m#(%yyOB_#XXtz! zJe#`q9`t^YRY-($PG7e-$RvBhqeFFaUsy=tz@kCAbNvl~Z1Zx_$lnc73@7QS+!-=_ zuS62Q3#Ud<*KqqawbKz}y%ta=RY*l+D;we`iPUEPTXUHJ4wBv z_}dS4MI6qW%3k~VFE=PBh-7u?m)gnt$=<}E7Q*!tC&P8YI26;wT{bC;O~VZAir>G0 zEL}szs!B#C?r^Mrvi=wQ`a$s|BlJlY_m_RS|7*N*Lg5Y4uS)8S&X*^>z% z`@X~q;AyBLaVH@5vY0N!XQz0`EJri^Njc4OF zfLWQt!7MJRB|x}r&dIo%>$Wv@sgvusTNXNK*wCga50fERzX;d0LgZ*xCa^wAx+#J? z8zYgcc*889V=$D4tY2a-zd7em-!qbdu%zkZ|8 zTtRbRj+3F!7GNul1hm8ctB#I?l~3p3l%*+}C1KRA&`1}cgp;O8Pbv7D*PN*#HhhFJ z5aE767`EQvcvh-hN| zQq?J^8?K^z0_=Z@0fFra1B`pl4&c;(@Ir%D!%`z%Yjr zHq0%VYhX(@`itTv8m2~{`;HFu1u51k2Kfv*m;=urMYdRcn1AIT8N3V$%WlU&;XnOg zby!S5UkEEMWl`t*+MyMW+H;*j?p$3W;3IOP2wMl>3`YpQRr^Tg;VuMqdViUiPV_h=$Hh#zwz{C?F_im!)5!c?2+ng z;LG<~^pxgtYRU?t&g}BZ21>eGAZ7vygen1LPOZ3B*QxJr^*@}Zd;V2}Hd+vVp{R`U+VmXCZmYG!e#GwZZz!vW3U z{ei9gH(c8t3^K(O%$>r^p9wr@X~mEh&$H;Ky=fGnep zVFHm8PF} zFT9nBBiK5f-ECY*1#7vn4v^8hH&Aq7N3ZZrU7M=`(eV*U9SdmMRAq`6oRpx5?gL zp)uB-ve<@M0TaR_OptJ5*#VgPLZWdu-J~Y3@`Z1s7K$8sQZ#7<8h4tk=ce(7U<9z@ zDfhue!Lc%=zc`P7E?+|!aV=Q+jHvJO{}D!|#DZOKg)=~D10gqn+U45Q)_XZ8K$`S)0UnC(B7(>d*a zC{Kb!(Q~UMyyo?Xne}2KJmtV`2$%=^V}LS&K8oIpuFG=tUduID%&Z9DB%Ia|4|;?Z zZ(1rM%yD%5u>_u>upx*P3^pTL%DE&u3AFkH)Vd=P|vmwVgvW|_unO}n*Wn6m<( z1+qfaXk2kjTC34?>I~|&BkAuDSO4Tr3E%|h_ts#GsGGv-?ZgecapKqkFW6Z|1XW>m ztc~LS1K%|@M(65=KOykELhoOpQ5fM&y(Asw;81LaJQxC>Z+Jl&hcuf`%F4CdN%+y+ zsKLjrRraLk*cLqfftJ97`Jcm zw>Ng5hp5cw?eAe0TJ*d58@S!sb=!bV;Ji`PvtOvcV>jTP^a@}*PQ4ED_2<1?M3OYX z;0iE>^7!8E*ZsNOPox_eba9&gz1cWdp?V_&uj}c_Hh}bn_2~Ec*W2aF$)Fln!yDtp z*WD%$uQqDs&5Gyec8H!~u)tG^swcv3BvQCF)aI74-KXUjRa zmRTb`e^za^Uwd@Fn7CjO^9O4Ky!8O9ujlNy@!{3y@3(Jn8QmSPp!(--XD0`Xba-Aa z4unjbm@qL8D5M;@maHhKVbofp?8Qya$qAV%L8vEK}$K^)Xz2cD2mFPvfv-bu1N3+zBo7cfsDKp;>r_T78hPxE?eav(1|Vy>l0!D$vy38)KKc!shP1Aq=JE|c6ORe;mgb$c712vLK&#?SQgG~ z6Z90By5FHq_Q0$+ms(c^+YlOcd&xqImy}(N3ON^8Jud4Aa5}== zqlwN8PHUI(1XEd00f!hrMbZ}H)_jDxj4DyCRA_XBTAYxA!9%bUn2lJ?=3x}ml$)2_ z+Q?Kv3b;4_5Wv|4+h>ce!u7@T_E{|<*ID8Q8bS%KWOHBo8J~BXXbS7hb&lqdEWqvZ zN7rEn@g6I^C`RyKQ_bcnu#ZBC#bkZh2OGh;q16}K(9*v=T(|K z2{ze4OKuU_fk<0B+!hyw-?H$Q^i$82DkICsY~c#|7aU#jyj>2+Q;9-CLIYe`2uHR~ zk7Wr1AP|sLUV(OVP}}_Bb%@@)$BF}JLG$k1SwZPPQ$8tm9;Qp3Jqkd7!a9B7HA;>rbmE6);+<|AT#m2MOu=`$v1td-$hp z4lewv1ozKlgGoZk>72c8)V5zD^V_STmndC)-cB-M7zQ7M(xMPo5;t!VNMpR(NXnnJ zS6OE-WFb`>#rar5D%=a_JS<_hy#*QIxNfVpDvyzCccjtTzcIT!C;6o&B?=p~Qz)*S zf+k{a1dFlUU>ZkaMIVenp^H8cRv2gW>vue6J9qTaByW|#5J?r+j5a8Vv^eIWzla_z zY>t_3YMf#PLQ_Pt@@}0nnlxjHxTYewmCL({^Zc-&nB3>Lf4AY<$Sx2lA~j3Ocb*6P z5JuyTByGxtw6u)LWTH-r0z&@M?(Zh5^TRYENdf9Y{+P#cX>WU|<1$bv^N(S&tU=oF zrKV~|WVLme3j`{($(5Cdi^F`qF%)^9F%%%--+92Ze@_hzH!S(wfH|TR%bYMB-tW^M{!a8}tyGvqydU<9uY>FNYXe zdVrw~6Fl^OGHo*#FSmE#GIT!i=6YZGf!p!UGmnp9$X#Kw=K*%t5TX}$wUkcPkH}+E zKq4;?=0cO5U(lb?ulm(Cgyt2bN zkmIm7;~BhtM8*E;nDVY<56k(^Bl6D*mg#=ybkdA)yjB}peCMKGdy_zBx@7T&fvOp>@_bb{u43^U4 zk7LJnN?*IcoK`2AVn5f#DK;;lrlu~M@tak%r<H)dK`b~xC`p8KLh5omFR@!}lHgrAfT zeay34rD&eBuHjFXYn1yo;YX(^R3fsH2T8+abPRD-;P~Xv#hVS5>=!e7#I7MUCy=^v z4LIN_79J}y*F>&BYJ4SY+1isy^J`b%E3h(vOW=afex>&^gm9bN2){qZ={Sh>3LBSj zBG77$FnXQ~%66U_bEjq@FTl~xRcNpUvCHQ;=-1AAt5ct5Kn-?uy*o_`JHs%E6P>Ui z=AjxaVtm;KzIPxn@n@m`OD$8d`(G?zWRtBIfl62pp5(<$H=^1TG>}p8pQj`fz|`U< zzXE)X@KQ%v&hHu^2s84s6o3Wq%fj)|Cd?h65{u;gIeT~OeB~qzJFuyYQHYmgkG1SA)f^-n|vj2 zxePv_0q*j#8r24!U(@Mtzf4ulrv4tW_dMpGQiFu~eEB@`K)~z~^K|>f!rQmr!Jfqm z%)G}c9)Awbdfh`ghUY*i`)l+hz8Df+zl`H&UtBESo~~2x3y>e2QCmD@oS(dL`)8s^ zcJBz7BYez&ZYKh|yHtiH0Pf}TOjk|ilNFoY?|$fnlorzX**%--Ag33PkBnC7{fLPq zrz*m4q*9TiIN^#D8;&4-bz^vu>E27Mb88F)2J2MkzAVpw`o_Msk2$59~P(~nPO zA$sGuzbOTY)+y_RBW~fRq0gWl`L=n;u!KJQdkmN|Bje!8_l+j5& zK^dkCaa}tnfrc6_@NF&!oDB2vvQ3y3*2=L}` zpsPn2p+TfC`|E)_%b4cJG%XM8-0_2L(k3mt75oCpkWbyWnVF98MpJ;I&489~SG81h zfDJN_%KvoG(&UYMe{td^aYGWAUu8fi0B2BSlNR6qy>8y5c3GLE%-YkkK^!;lO7cv5 zf9b!$ZSr?WFh+d;??t>r-@B39ZUZqqom_B(qH^x1gT|7!?*{w<|I-H2NS4TStL$;) zYE3f&l!st|N6?VGj7E#n!bzFvz!l<%kc`{lF={io;{}o<#^eoKI?^0O+?O|sLvvPR z(C;)wDa>vBxWp9ct9kl$&{ii`v#nrUJgQNW5o#5vR}N?GAR5X_BmG4{|2w#2%~4`D za8^fPwA)D%;I6ZFq;)h-IhLO!>ckz)D$D9DLnWNAo)JU4_6JunWCncaDv?nqh}SvP z>pOJdD&OV25nn1QQr4Ol$RtA}C5WIQvRk(6D%(bu6Z3r(Q_;R9&cr@!=0u+FZjvDf z7@jb_Qr>5&x;M^-k4>9c3omp@q!FI{8%sDT4l*`JunM(BQG=$Xs5I%tmno5D~(?`a>tPPRPU<_6w zrI5o8$+{WZVI;&n5IRY&&FpZBx|HOXaPU9X3J1RmNKmcdowNNmux5IF{E>z&sZb`kqVg#0*FXa_QpmzkN-n-8GOApn z+NfuIjvRCZL!Uw3VDeDY8CW9(1qgEgs^nrf71lJ~2T(i;J}aFr`CkzvFzx3FNHh$S zGmUa($eb3O;GiqvyKRhPqKZCa^blAY33=p0qP&$v9dt))*r_FDTRC+Hf>(SDM_j$oSM7kXf4CnC% z-!C#+;YXPN=n!@EzvB=OmPC_%lZWg8(*ipOfUFXyRbP5I3Z%VDIs*^k6-#U$z1je>5dznKFOKAW4NLpDs&DwqG?b8qYCC0;g13{+W*Y3*L!1&=&S+iquj)$2kal zQ)(s>l(5H{)orYiMk}R-0hGh5K^Ctus8!*w9qiG9-ef8%W(Rh{VZed$T(P`0lN4o1 z5KNe(pK`>*{g=fka3*H?kNKPF_!Y_LQB}ia^Fe;AU_BoaSwhY$0pvufMrr|0#-e!g z+?8B46P=+~&AX`Nj=LD*+zft-q3(fs9qypDL%cch|@MhM{ zjUv)W38r2l#!bWb_+qkLy_4aD#A@d3{nm^WN7sIDKo|Zy@PgVDMw~=&;oQ1GhTLaE z@`Y_ZFjW4Kc(9%~B+phum;MB;f!?s7ah7~&n^CetL*Sfo^!~|^qE`xbLrWyjxT(Ng z^=+LELa!}O37I zNhGF7m_22f&@&J`H%UfbC|tE~nRC?8lz;wSCC~0COnArGa}`9|6pG=B|KWdYleFue z;Sws3c@m`z?;IS|FH4$W}fI9lm(_RQHl|yDfv{K zMI(ACcm+QFFLB=lk;|^waAn$@2KK5-tYJe%(a!J8FjwyocvfdZrJ#wT{ z0NbQonkjJgOO@Vnmgs_ivjqq%CQ!;mGUmpg$j`*IWEtuyf~QPnpaNA~7NT$J${)6J*$WNo?6jg`agVqb9CLox9^Eh?8Z(SG-_kpc4Mot zZQHihG-+(Bjcqixt@BR%yZ5fU-dgYdd)A&k`|O$7`!gH!E!adooo zxv}Oymm(JPK~pR%aZ+PA(5bAX8zgRJEN7VVc{kM-berhf3X$y(et=_%HCc%h*E}yh zEDV%nF#>xHL28?Tb0?-%NNxu>Pxh=)e+5VGN%4%YC_h*G5UZKDFjx$In2&E5wV~Ra z7GTWX`SCu`lk}M;###97&Sl83*q|9ZHbNUS1?cJfyiJ(vx*{BEJQUk3gxorPCdN#3 zK_BCy^4_1b`&q22JeZRD;cV|W=mlckT(=2q=D#E2Aw4mV{7RpKrtGAe%wcyas9JZ5 z5!1406%afC3s%p#3JIP!Bsj@~H7^DhPr?96li#h>zj2IfMi29gkk7eJ8R(|vXHqG)oK(_&`)V6<0#X%6_94r2cWc2xbf_%>D_(*w^ zMiE^{Gvs$C{c0!4l+VIHb+svqzKqiU_A;6_MKA16=2LTPL(rBrL!cCiF_Fgx>~BPNT7od z4HlAnpq{6(@T&ES^8xSi`(-@TYbExKX}zVg*}d9Lr{hY*`~qP-U@gSU&JZtn|Mr28 z!tl9)dF>{06nYt^q-ds@yeUMjGC)nyAY|@+u3P|c%6|mjy-8mFeA41vF`jSX#WM2B z9C_>ZdWOQ5V)wvPs}cx_yS(Q^=d$>&HYytt6?T%uF8V;?jE_;KxD(1{y3wrrRkSK! zi+udF;)Q20_W2ptF~+9(403k@$J&fjaV&Tl^Jfb!g;JCvouCKaoq_%>RAW9yKL5Zj z7r9JtDcO+9T-GE-nK&*2yh-|Yy4p+8J}wyR#)&mUI~@onKlDEpw&RKqx_{OgD}v@u zIm4j(xi|FV_`CEO-J^h9CIn_XZ-LNZL z&T28_r#o7J=1<&E`7W*=ofI9b%DeX-?{UkggN)}bpPQV(r{mOyyK$Hir__&c=QI<; z_3zOoBF#iG_Ldb48OudPF=*f5o$?gdFvfB)BO&YZInv9bIs_*7SuSKknw@&1x@UB{H zbQRU25!mzYaR%~QeQVTMU{!6S+(5!%PUTD+)gl=%9M9N%5*L#Bi1ji3Y<@%hzi(%b zrN`P1K3sln@6%jwcgXJJ+>2ozP}~|zzTj@tB=4J}i68ks@35}6J+EeG>BqYd!~DAu zT;1-GD%D`P80Rykc5*PxzwhCbWrfApYe@1EZ$|kJ`LJP zzU8|&)cAD*CYCNGIY<{E+}N2v(Wn7AmHHCksb$ocJt5h@Sv zHg_O(e(?Ty-tprcgA>kqz>&BZCm5j$#E|^0A0Y6yMFMy2KCG|j)j@r{edsq{wKLnS z(B~&UGOsXk$hL^y`iIvLD+%1NO0)m}dLu?ZEKj%PgJ)M&Sm0gH&Hht0Z2`f<`^WR| zA`PB`)wXb%0@O_Wp+#GC```6naOw5Ls`UpVHAoI{8Q-hPP7#*BP$=QUEBeC_jepqj z_VkeiS0-8lWAlH6)0b#fS+zwB$fhhzFCIe=p5>p-zHElCGB*C`U$z^v&J%ggOWKC` zymtJpV}MAvouBPNfzg`!>-xpBnB(2{)6dT&+*{c1qr(p`92Z4*0>|qeK!W#jubZyA z#@UCuN~UZoLI}0##5x3)SnT+415yT3QNb!1Ik`7|8*#b-uIBto&J{Urf6 z-{+&EP1h4+=~0;?2>M1-49E%_O+y-7%0%XRgsM-l_Jg&df==ZTj2VL^gV;^Mmi8~k ziKTG?$q1yX6((ZLi?xYukWH1t3NeZypMKEU=7)U!D&-H6(s1{vwNm-6Cs}`D7sQR@ z62I(WX(e&j5*m2)`m&kh=fWt@WaZZtIvJ_r*VeNn}1cy226wCs^!N%HrZ}@ zlIlWdn(49y`B+ClUI1ZuU?}UZacJ;ijJ;BsrAzF zl6TjC+UqyOiVxR_Wc(D(Q30o1nq@OC62WdhI5Or}j-X;F(;wr$;drUIze!82hmu=O zNb29qw+FcBAPm?1jAPk6Tt=%qKtufV(U!{sT;C>C6-X5ztL=a1JKDPgg9#oHMhJ9P z;392jg1bsraA!Y9<~+LVO%@jmA_OPu2O1@*;Bi12)BT-4)cfX|(ptp_f%BXM{PqUHAEnXB?wQ@D=+s)IzWy5`n8%}VpKD-7 z_T+)+I2A*Up1WYE_%r*?%qR1HrhP9T9OoirmiZ)`QXairNJuFlpj>+iQ$MYX?;yiz z>y$0k_jwyjSy5$Dm;wzenK?YVR%dt-juCuN!?vdunYA280BgCiXylbsh{crq8IsZrsVi@12g>K*v&VZF*F8MGuMxe!Q0NTTXAN9q#Y7 z79)f_)T?OlR{g)p>mP2yr0pwzYOdY_;~+l$h`1MUe!Wh93Q}QC5*WFD>K`yxCGVrG zpj&i+{)GhNM+03ZU4d4R*j!xY(QNy^B!eBsL$v~OzkVg-%=ty){PgOH-D`&KMT-~)D7I*+E-Fh)b970hC2?@c)8RB1H}5@Rnp1Y z;#;OK@S;?lYSm(*G0(6~wGf-}ftEkRgDDPZZ&h|3q126^4sPW70w-C?I^w&QE~N?=@hBveE=A$Qr$n z48@NT7!Qc`o?=hS8ayUOWwSDg$@-D1*c8|VL|hSBS$|KzcS!%P?lU%0?SdSJ52@pX zA|)VCjOX4DFk%p+s1aIf5?-h~VNPfv7Ek??F0F}L)S%zq?3ouLcCv2KHv za!A(;-(*-kSbM~Lz^Bc%>dlZP`!mIiV4R&}N&Gs)Iw)Rl-g9E{Kg{;pMW5MatEl+~x=T+UBH z*jPAYrt682P}Uz6&$MA(U0cEo-gUt-fXdaa`@P8sYPVka)n&Z^f6smbotNeEp01h~ z#?tNEvO9e8NBDNWUw7LHTNld(q_7UUQ3ol=x_~CjmOwXYMGf!S=b#8Q(CeD{t1$xj zXNgk~9+6?1?bYK(cZv+TMWhUEP>XOWMbz6yx3YcT%S8*Ck3d~hR6GDjoU)Wxq?ey_qpA}&DF1MnaNb*VJcJoB-@wlwYb>Y@!M4ZK)lt`G}`u$ zdNOlDD+1sJhPq#WIc6G(K#P$Tuz&(^_5mn42m2&$!U6~-(TqCe;*DRv#K~a;?h)lp zvyMn%$2`9vtw4S!0T7Ns1N6872tinhW=Li4^a!DD+Ijv=<#;0qz9GWdMI+dq_YvC6b~j+z1fAX%dc%P4bcw1qp5!jB8PoJ&&SBV z4)9z-MTqwt&k6!2#d@}H1l6$eF|;-oSfsU9ND;#!ArN{i)|-r>$BqlEAS&1( z7h(ZDhdR*o{OGD@k={|w31^AF!{}+6QvOjg=bxcp?kr2*O! z`a3@kw4J-qnbd9|yE`1cK!SXt%^~9`^4NWIj1q$UG9YxCS#SZ|^a-g>0#Ct>10gdB zV*|9eX_gMmIr4HQz%i=~hf)nxS@jw8*Mfww{TAbYMAVVey_0f~R%p@i)=MoI)y|2mfV8;12jN zdozaHB-n+C8McMyaQ-lj*9icGY|X)=bqpgzLm7zHgjW+oh;GzE*b(#NsB)Y&10a|Z zE(r7>jahy|I214WAw??Ne+&Ccq5X?=dwaqdX*WU0o~s=-63UT;Fu&bF@nX1Fcbs@h zG!2$NfW?6@`&Z3nBWYF?OABN+yc2a)!xnMe8YPnSrrMS)6=&n)ScHiW#mM6n=PV~r zexGp@pU9`4j9^7;Lj77gN@7u|k$aM=0<7${OL#64lT}yezl2#oD99WcCob{r)x~ge z;Opy=oQx!K#SpS-q08(Sni%>p8UrO`SYqlevz5N!n47?GvJmdCIuA$Eu*L*x0?#)) z%doQPbi&xS9eapyzx|~=;vE@}^yfg$gMSt0WXWj1;}~1#GCbNZ$Xb1AmZXKDK3n$Z zJZdi;j2X%pT83ye=dfSMmhYS1CPvmRLn>lkaY+Ip#fl?srv1g1u1@@M!8z&HgkoZU~_k?UyC?lL3YYJ1@^1mH0 zBgdBULzD_3VW%V!#P}+t?Ppv}-g=HpMamb!EO`u0R=o48$qp8GL5!KeF(O6ao0SP>aX zmZ=|>Y*VaLD3aWPR`~_9OJN6|hIB@g(7tMIl%yF&J?YZ+bi7cK+vvs}*lyT*f7Db- zDqXONBs8wx;zkBcx*i%sky`6n*lAX&xHemvflm`l=NeyAwu1W{WASWpQxy-HB?v;G zzU*dCup&flW*+~_Zh?{FZ4I*A{mQI?3zM>?nnIckTx@|+1lV8^&(cV;t7zbKN6d|` z&&B;bD9)OCs3tTLTaf{86`w$tw;tM~jCd^#5+#jaF%uGptW93F9K5Lz^zQiP8E_de zSH8Mnw^U*QZ;c+T3ny6Za)<7ca^2d|_860~I@QQt@W-HPrKO^nYnjGbjf}IEqRg!D zq@DPW(8)2yG2M<)=?_L<#1bYtPY>HfvKhz}Lt@QHn_IA6jZiiUlr)|M@eBU3teG2-Xl=tlBBU$Ot>^p1 z%^%C1R8xKhQ9qBzsFwq!d8H)MOxo-!q?(%R|1z&h#VOXsaH=KAO^Y{u+(GXW>NJnX zpqC?(zP!r2lnl5qAU0PEzptv7winJh5>%RGQgA+R((n31v25T`MclCsfvU&KEj?2d=jf3zoOY9!H3)gB?;^(oMJnb! zq>iHp52Ak}lJNgDOh0c{Jm_QQYl>p&GL0p`3Z@Yj0xz%)tY9r@YBFVpXD)+SGiUgh zkE9Q~>ho&_0+gS+s8jbhKjPnS*Dj8P^JV%!zmgxx&WDX^ybb(b=WPm_3CsE&%qd&_ zR#}6Qt^C%M^4+HW1KZcCcP+I%eK$ic#k=WiHG#&+9+yu7BSmt8wTK+f-N#kXW$KM3 zg7IIL|L|0WG#oQ&-NA^msFBnN-gPcr2I%_dTqN}Qe^#X5D~G05)$cPSZRua{VLho) zzoQCfQOl#(zhfa3`E>+qOQ>TD@A$?1FH343sqL;4xX%r4A3ro6Gil$|#MR!#qV2z@ zdqa&+GEfYrpoA3R{?a23-m3DMA0`Wev@xDDpC3OH`N5ZiPr z?96IZ<_#2{D0XjgkK7dMKx7HG!MYe*4}BJ%R#&Cs%oqt~uz_WSw`3ix3EGAUVYwq@ z(3?ag-U&yS7)x3Y8Wq*?s zU4^)>8*KE~n$##b0P5vs>=$54^{TFY5+!BPB5jd7BgYu@mrFGZg zJKgO8QkvDj>wme*(NNGmdKr9*O1n@xu=eu62(S4VCrMcz}rSN!ybkCU074xTwq*T!U**EHD3I$jVqJ<+jy2E0w#xqlUe z<)10Vg{VKXneEhYggoxD)+MvkQ9cA>h0rY9L>RUx{ZRA_*-|x+j^#)P`cHd8EmLdI zxOQG#2=eKB_YDnU*i&4&eZ0l&mmpg^x9hFI%GT07JHa>h*Um}TLCw>*d*D=@Ov@`G z3r&&eGF1_nK=eDIDBN-aAI%m7$<_K?K(JW~q_*$=B9qp=XB!S=U}8B%QVS1QF=S3#-%#5qKp@12XE z>Yae!T#4Tc$;JEG>E@8#www>wW?I_A_3OND+I?F6`Rh8<-OK%6cs%Ik8TIzS>QP6= z`(Yi2r!e#;$}KHpQ~+W9c;)to-DcO3t#pA%s4yJz-4&Ew@8iR2{_{?Fvk9mqo@n^3 z5O40R;N0_RA!i(<$6qn#2U@M3^zIQ_l=sm9w3u|oG3kU@Cyy8Nw?H266plpGCkMj* zY+l|?>F&0xR<^I3HlOVi2MBgqN_{Wom-ESdK9}=>o+##TfIP+w!1Uzl!tAQ=7eo`; zy8|2S1rjY)4nARIV@Z{~ztks1{Lnup``=#Bn;Lytj&Jy+c9zD*m@%{QVyg@=wh0%qY#)cR_5H<>274U2j{ZB|`)!I?wwI)&{HDALksr`+@(!<_lPC9dXHiIJ^!c0#pl za>x@Kd=F@V%jffF^8{p%-2t|)`2Z^6a@IBo-)!KAa;>ypP-B%54$W#*!^zVXzul-xl2BbgJ5urLD zaVc{t%GafHgTvAfAGO>|s!&)KO1J_98vOv}f zN1ZbPLUphOz?zN?Y#P?BHnc}z_P21g7ED8h${G%d680k4t=(m$mQ;c-$H=A&!^3B_ z4=p}y4ef>R0o+Uy8Tq_ka$UDQeIS)Y45zCaYo-rX@8z&91q2A&R}!Z7e|X3_RJvh^ zE33?+FwDRHxSJL&EL{RKdFtv|Dcjb zud5C2>EmF);Ah~BZv2-YmxpSBn8*D2xg6zZVWl;VZ8b9M<}c?aSI6gMX)9)}%eGJK zwK~-Kk#B@xhQIk2l*lM6cm}|9((45+6PvR|b51@`KAWK-L^isc6Q_}?jt7}TzCK_% z=YJY}6z3IcjZd%htSN5u! zG6UZ=K2v>%iI$q4fv~*S!}i)aQSm@AwQF&|zi*|cqmU9DiDq6m0%Dz3V`NXctr$+D zsKlf1Sfyu2xb*Rrt?C3L)ni(Vo(A}^0BC76y^-gVygL{lCk zWOZOWRyYT2@+KO0p|=7QxsbGS(uyY%C(QnVA<_VN^aVy2l~1u>a6V-tgH33Kv_vqW z;$j2x>~ROFi@3jjJ&5H2qUIfq{y_KJ}1mn{iMnTe}Hl9Tz|$hV$~FUfR>Kd}nr) zO9Xp^(S|i#*w1*##<*9~=*?jG-(&`)A-l*xL;6OT-M4@gXtv}39ROD}t56t|XLJnX zZhX2X8~_DgEM)-$;1|_J*904V7FRj4*^LX(l}A_P%ZgQhHV=acjo2k`x0`js{M zHuy&GQfp@m+Fp=p)N>Yu1W7?VN$&1iapu?ldU1L-DNuWGdU|{&;9rkgDe&HreM|DA z^z~G^b2Dbrr=yf4@_6Vg6NzK(JsF(WO-j(boR?L{egK>(s$2bs({9(=Yfsh(E9?R0 z^^@t28ltn|-64ZR2)LVHP$>5g0&5>zh@**Em%_x=78gS^Yu+)w6ZHS7Sy(3sny%?? zA}ERpefkvE&Wh#d>H7Bg{`4>j;;Zy~7=n0-GMDi1uL?T`*TU(7e4lv1wQ%O<-2z_0 z!!>EP6OUJux!^{}`o)V${RaU-M)YJs(kH&hS(Z0<^0>6u_USZFud8)|Zoj+x!K=$j z;L|1ex&06q=evh+mq@Z_sQ0TwB>^6&xCl_5{zAN87$EOPI0p7D@$y6z_kG!d}+#1 zTZRDAX<0x%_E&%Fux*p}o9iB0!7vZbfP48{j(;0D3C}KpF)Hkar(wg6YwO?vRT{sQ4RU zqJuRkE(PAz9Y{hM+yVTZ7y!Dw02=uYIlSWB6zdo?3TlnNAtnew&r4URJ8nP^I1+^d z@LaFqE47QAPX77!fi(OS*;$OVgVNanZ&0df85I(I+{(UfaJ-Q+pDgJ*`15)?`8RRS z^nsB6JMeI@_|Sl5z@cx~?VY2rB})irer?5Dz04U@)uV~^n_k3(x_4+oF1Lj)`wS=h z3p>!w9>6ACyZASxfO3SF9mUcBn?0zlfEM&2l<1<5Sqf4ifCYR8eAf!9UIONozx<69 zK-qsZUuEfl%%-y3!~7&WJ5}2!7uci?GXXxOPdmBD$mgDvZCX3BJJ#I%K_-k7Blz~I zQd&k3{T3>ZmX;dKid(W^Fdk_iPn0H$)H(Ne?xBo)CkJs2|9UJV8o96%f_}2T&1)0T z6&6_CzHfCO3U>mfD;-K5*kf3R?7nk$^2XHFXP>>w+7AAZEGoQ2i@5ZSuYg89d{cXn zt;-s!rJ<}q+&g#4iImMRk2Pn65AAxuJ;#AS%DREFPmi}@>c;!U`~|(phhnC*rfwjt{$GxU z9E&WzJQ*>`9}9rjYmshJeHE7JbDMrs@yhm3bc zYd>~eKu;;oDS88G5O@h9KP|;tD$9~F&tPO`O}QBSaS#iYr{X-~S&)N!Y5T}G_m>ht zgF$O9;sC?LE@y_x7?NT8dp(rXLD21m=N%kA%OCMt;E-KNU#t!-4Bdtjyz0lJU@4GX z01QIfR#|5;569~r+g4X2L?ZOk(k#@PCHARDii;?TTtVcI9C^dJz`XFwoe%M|SB#Kz zP>W%FZuRqP1Vd}w_JVK&AZ;OjBz`0+gjlbg;1z3AXlCI`t@DY8yt?wRtjAZ{)IZ>( z`6ddqdL9*bZZP*u_%nxt7oUxqP_hV>>3AZB^?S^uE6>c;+Pc>_91I#`PtR6Dq|(D{(QX*yX0K}%?+;3`(1TjG+a$A{@0f}zMv!IZ5z*Bi52kjZ9bDFG`M8x~37^B-b$ z2V}MY6sMrVYx1B>yjUbsA}0YXwLlfcQ!jrSSRKXug7Sh#G{uetcwVeXt8#c}1QKp- z$j1-E22i}BSo5fKy%lO2WCUbi*KaVZe5Vv&)fG+LyMo%l0&vKX+wOmXFoEJjNRYV~ zQTi(_F!YB+@+GkaoSMj$5JJMPchz4}nbln-GS$|*>(l1)YM!6Lz_)OIi>~wmMM7^8|!Fe5Oznzg?xR@-#wRV_4JH!n?Om_Rd zUnsq`bAaE+a>$+pXrRt30MOds->yA?XakcIzJAg0k9RXoaU>woZol9Oy>0=&br1mj zaURHtUq` zF4G@DPo{6juX#+z92XCxF-HCNo|_=G^rW7oB^xqjLadUb41UNuW{T6~tWNY;@aYGC zie}kCoZq)D9~orLWJ)F zJNi6n5Mb~TFogh!H$SqK2}w%RgiJR=2VaO9RgAV6j@@Uaf3X78Q31cqAPtUQNJS@b zNlkapYgN=*C7Yc=@buEX@PK>>cuE2k=7oc)>P;9Uu&3AL1+6zsWlEEr9r(z6)xCyawTCB$gcRAS~)9a~5bx|1u1#jU+6!MDzIZ^S0 z2N4Ky{-n&pQq!fkV>6@akYr$sLeMK119 zcIp&GmjH+Ob`Ar8T2SovKHLLG511_(mV7ZREuxLc(&yNah^sg0=GKMI0>WTxat8fv z0TSZ#S*@*&>oc&xno;;eUSy@RVRC|+ZD1c=^!QLh%HNqQY$0V)T>5E474v#su7T)^ zV`5+jqlS^M{BZ`ckQ~ti_<3{hpMwzu_Nz*-xgs6U)+vyXVQdiqxiVNt{+r52_o&071unau*h?N#pA37F6CDE z7lJ_;!&JbuRzz1tnEYQ`N`~@|ep3(*HoASLVn&!0KWl57_`?(-#K5KpCF>p-rI2ZDy9ntV;XVh7FkRA5gKEWmT9&{`uJBy7lEQ!c_;ZorTA z3qSuW7dfS?rOGfh>4fE1n*4IKY=81CB8;F;7N+d}ObH?!u?trq6e!ReA;k3zhRECQ zXoU;put#6Oc9|4XIe^MqThR)!))OGei35n5WUS)em)y0f5shR z)X^W>I1WxKzrUM>k3sir&q}gW6Kp#7popt?>}1p{oeF}1pr${BKS~cVdcGH7o?w&) zFD95FMobs)y#;ad*W`>G)7+YH2=M9g5~nJ=1DJ4F;2c6fXC)8_T}G&~av3VF2#J|~ zAn)Baq0ac10e;JmHWbzZqR+jJ=L&Yh=Kee0I>RFrX|sX(Hb0|~x9ApD!2Is;k&gi< zC*t{f6uY-CS-)C=n%?BU>Z@uC=R>(mA{bcKuvg!Je=8zj;a_}BQoDLRtIy!)tR%nS zkVQ?hdUz0j)ShKAMVqA=T$NP9uENOvM#(rhWxr&wU`62ge1{MH7eA^ftqxrMw1P@* zHLM%OAf)M_PuWUF{!{o7YA4;1C@h;-7`H1{WF$iLI3UAzpp=;=t=+=d3%=(Cy$~D; zs}|HBedqVVgE}LD1}CY$o;CDgk-mKdCU72Z&(x(MC4HVvgd2tH z&H7^8No{p@#IyuZ+K!u)t?YF&5W4rtQ4_qo?&3cK0+LbLN<0TI!2+g_HG-9GO4XWk z-eTS(r)g@djGIx&ssVQTX)w%i_JWB=L>mf*Ai69okq>#Jzk$DUa#*vg&$KF15Y-65 zDr_LjMhw>K^FJ?gdS(~B{=3MGpUjumQ`#wA-7RP5Vlf6`1;AIt;*EU6==sl<+?_`5 z&#m9H%yF8_5=MXP!ba$q#FMYC38i6|{5zxaDtyPZ5`2fyb3m>qoe#r*y@Jldgh`Ju zBQirPEeB&nc;Qupv^^wQ$G*>EJ@K^`czZc%8a1UgK1z1lcdk#k7*j8O#t)r<{e*w? z_uL)%dmh42=^}&OjDT|YDSXbmIU25%M`};K4C(9Hb$5NU0H`OozP_p%1eoB@H+uDW z0(WoU#boOqzqent#x358D6Qk3G{X^{j%&o;7tDh0{13@$Py}|rqIwwa3UvqFpTK$D z`^R16`GHsXN87+3oqV{q@m2*!%GpUS}USImu_# zY1|SJ1SlQz`4oxwsXTWo** z+~xY4Ir`riEi_6r=@Mp70zW`5ukDu99KG|`5Bg-2L){%s}N{@)CV76KSxm>O{qU_V_{P>^jw`Hhl) zAS0jScHAVFMup&CzbX&iS&ST*KP$0dMad7ufbr*0_de?XUgaD0TB8S=J@MmM z0FizWtO4;2-gUeAcujZvxka<}v@e2aS_ffBE)_UQJ>M>_7C_36m!p1h7n0|=s7Rms ze#P2V%Z>CSujTElf{_{pbUM;bky!BhAITYtmjn*)5&h#RnZ*M=y2)O~3}`DtHYGA6Tofb^3?KxML892q&iKA^L?*}^Ou$XKWJ}K|N5{F$ zYG_CRiZS|8n#QLPMe)bT&Kzd%@-5M^%gxw&(O7lZeMCaL%%S>&_4%LG{ZTdCph?mu z>>Y-^h}eF=jjrZRzTYqjtc3dA?}ULRFM2@Ccy4xL_P>x`=3?54D0n)l+44% zUm;$=B0Obg>`0=8Wpd@hIspaEzQE~mI$aW`&6&$9W5L7Uj10c;Y|_C{ryIu`S-{7C zosoYbTsd&B8zbA2-6xeXkA-}qDkfc%#Cyu(bVY`7qJb`plmrGi7Ngof&>m)Tu{vdQ zI&Ec)38hUC?x{m-Mq5S}u_DFC$^M5_4{*3Q6?jEJ@=xT#v4A1e%~8T}_i>Jlot@23 zU$qmodDtz~TT^Vx2yD^%9$3ItkTVBcf{yZNKXA64=EmFK$6xGv3DUH#*26%=$sAp{ zA4tr<)_o+1gUO1RE2%LZ>5+|Ztq&r-Bu~fsxI`OYiI%N3nxEgRyV_J|!>Y`tOoCVu z9FZZZ`@9k`mNa0XbZo<+d2Xgn9u8T7(EAHHaoqo>1)0T9@k;UIA~LlRFs0{@jin6o zLimPJN`*+eVD_~*)s!u0Whoi0f!0&zImvlRpAKo_aC35(qgDsZt??mDp?$lkwL6{B z{Fel9hUYjhx;PlExzjrSznFS&yrdK^foy8iyGrlzf)!)`OrCo`h{f$62*p-`g2 z@11+%T7L+hsO;)E3a`88>V#!%4yFDoi^uQbPxYPO{6Wp}{`})c^Umt9`S1g1XPkPW zC9_drYKX=j*F3tY;{;UI&FKfKLA@XxntZ<7j&$(l2XU^Q@w{HHoS>)PMZHr?bz=N~V=hyLvw8f{lmrv5mGO6nReALNg0h|F} zAo)4VucQ%qdctgRb5aRhrs!tc?8tpleEBDOfrSd)Z;xqK@oS+NDNdcUB{j$Cb-|^U z5tR3i`-6BW*eR4?Pbr<~d3%U{oS(nKGtYi;RVh|8`H*gYli%c_Fuva#WTW>1;T+uF zuKgzsFRuTv7E>OM)TB7AYx<$${&>G@5v4~{}AJ%w_WH-%@I!yvWgNQe!S=v#>(TX3y@fn4Cj z?RmKPjEV>b7p_!OG$zw8YaC^c+JJGCO6^mtk1zx~I%6aF2?OWCGh|}s_)^p{#V5Qy zy{)}+>5gqsMY@r*Ul1$wgW=9Jl3i9gtkHm1K?$rZIZpJ1=)o7}3FSl6D)o}L282`@ zvb3wENchBIBkWs-T=yTge|&(lZD-qG>V2b6oLJ-IigLE!w@uoy*6uY*t6LhE9!-Ut zuR>UZTDfmY`qUu#aChpwasKPi;Z{dZOaLYvO7-;^6JgC5>gcMAD2gZ&Q5c(Ep1H(D z7)4H_mm?=PrA77#ll33@`KYyo`4LTcwwi#Ul2-SXOZ%-$gBi6tE z0Sg5|IOAe=%7165fXeUjqLRBCC4M?T-pgnXvP%Q4^DWJ*uCdLPF}Yk{FKvtl9w~RP)YcZsT|L?#+48PQqAyx*Qed={&*s|>t6qHP_8jiEEDhx8 zun}ix!+6YbHkxJkW-u+#{cv2PZTJ4V0jku0TbcAau^@Wk5a>MD=Xe|Ze$wf=^Yp}g z!M+J{-I(wiKAh5BUuxI1^YYnvW9@ReEi>z^2EC<4@oo0*zHGdm$i2+Iq~X~4WpNOJ zo=ZSSuXjv#OyY5m!ysmMbJxUI2}jo>S>Nk`c3)hV%9q)vEYvo(1BUJ{u5M>#-{Z~3 zJEoh`w=+2NM&G+xI6sdC?e^v!)2>RUoL9UH&#T^&wBklY`A05?Ag^_j(x>fox#9MCQR8CL@A&zCo=@@;Y?Ac-GVb`# z=yG;NhW)tT+wnkTvCgj#4cpyO%{6*#E-yE3-PzrEe6?Y5&==7lv>?JHfvvngCD~!W zIM;U#BP~B_H&yQUKmd%}Lj|-SuT;~E2B^^Ub$rUfR!VQzch58AAoF8P-`m+mavMZ{R`^@ZHy!nG~=5h^xmxfOwV53*x1N$r6^S5Bsuk7$Y0f zIP52sayxU1;QA*{m^oNizV`2R1By4>N$IxZQ3{bbH3~l2y-^l09To$&Mgcin1_vJ6 zh%^Ch8upd19Y0$AT_`Npzv+2n%vO6`(O!{@KKv2uaMq*$KBW*@J~EK%jxOil4Pv$d zC$DZGIrC#@n<~)fJ02-ZwQsgnwg;~qQ1vLI4hE48KQDjG#`!TGfZkgTSq_erIO;69 zh0lwiQqKGjwHVSCpL+sh9?s5Gq$2icx$_!U`Ue#Vm+q~(=|H~k@K($L%EQwN#%*j& z{8W0BChCO98g<0Ft=eC=$3hGaLKyEc%7Lfg3*sv2N!JlHUR$b_o;Utq!QrpSv9LCR zaB#Ybb)WQ7hs2Lp&4fmC@@$d7Ifg)$0HV-hYz!o#sg6h1{|GJy|H$X=aCI`R23cQQ zKJvkiY!$i(k?tS0pjcr6!(O;jzQ>i6Z1esg^-^&#Q%-g6 zK)vGHvi#%n=z1IT-y&7Y!);P`OX5s|UoRU#BJGysEdL^GR0*gAcW#WN3!yPG@Ai*F zLF6$q@dq3&bUYRxw>>fVCGg+AAHM4|>G>iW4Tyh`Oj}VWM~GE6KRMgXC~cPLtBlBST_eeFZ+AmXd;2G_v_KcJ%=UCz#1tL zVGq>j;L);4QgJ=N&uA5kTHv645uhH7k^z)47U%&jX*#n9Nf{1ud71onrk~JT;Cu@A zX3h5>^-QmsKlG8OB$(zxjv@5IGbec(w48fJpMTf(mA-w#GSitYE1g^&ryJor#AM3l zr`=ol7-Nq{KDzew^A@Ws9vlID)SJeTg{Y{?d}LJ>=M9od#J@Fmn0y?UTuWxNFNCKm7KY*_%B;NeOUfnoO&wH@A{v zQuWs)<7|uuwtokhYhLgdAqO^xpYV z8k`!9MhP$YK|roleRT6{tff>zF0YwATE-pqS?B#XkAm)pq~t+g^&xw67I7>Cb)b9z zUW2fa@YnIihbQO%5+_9FmH)Q&HN{ORi1lEq|KrbVdxEUgZjv!DOhB*+C;N6HzR=02 zhL13)c$WX7cBaMO!`3-Fl3I z8{momi4fC31l=UH#(QOIy|EBFOzFLj1>%*H7*ygonBy{kOeKk`3OugBst?7SD&t z0}_c2pF9#hFFx`{-)Xc@VJ@6M1BtAZpBoWNL%lJ4*(Xsq``{0q)jQbRs)${Pk z^4W&J3kAD|;01T{`O$pFt|P~aO)w){IH-j44R9|Xsp3TpL`P$E;pAisW8#G`}!3z3R;v9hJ8jXev9b% zRLnz&ma7ZL;U9*ObW0k3z?E@oVBwQ1B(Vu~B1vP;*S4IcfRSZS8nSGR5%vt9DMxG( zhML|(o9nI|Q)>S50S2C{KN%ABn31b|=N-IlIg-BMmm^xzh|<3>uE>Aymj^O$%99c) zWQXR|5@zmEj(?#T7scsbnWYZ7D*j=3o`RawlT87V}WdMYo7t z=~c8T)~1Pt8vc6}?Meh~lD&IJ!Px-(!k{pCkd|v<9pq$ULqpI&kwLRi*cm1+=MjO_ zv}ClER^ET9_Bf}jsX?kn;d{$Q#2Up#aAOW9GS8o%tPfv)Q6dX#a2Doo<@>U=*!dg8 zSWxOD<@_5awm5j)wsf}&?|{l97pC!CtaTR-W#L8(Zw!?D?)K-=I? zk!>_rt;ALT(+B?907H^}*7b!}L`#mWQKEe`X9!mGoIsDBPFqQ^&|Fl3&ECj`9Af;T zn4H9kA}T|f`ysPg-~u0dnCAuCSpXUqGL&$#u{hueo>)NedK$$(@Ull+Xyu3PbLdRz z4|q#1To5j;T;D2*@dkeT|J_JgtwR3 zq6>vt@r}%hH`WaAiO$a;o?Agdsq5#v5RdtqVyLwC*Ls*h#(Ob*Jp}AhLZU@pz5+yX zBy+-ZfRKvNVhu@VxmO*1N;J+@*kB=w)eoipKhmbkqM#bz zCPuLTAGY2qEUu>M0>v48@IiySI|K;s5ZpbuI|K=?LvRW1?ykWJ9^Bn6xI=(5dB5|Y zt8>9z@N`$NuHLnG^{VP>Cf?6ZoF5vclX;lHyiD=YaknU(Z1S@)UMUVc!QLHWGJIS0 zm|6OXCMy4o+x+KGR16)D#WFT~?Ry87J>xKw=?OWdvDyJjcezbK5J|v{OD9uqIJcu| zZFplcG?&J-TbzEXR{jpr82jc2gu&VV@<6To*j!O%bvm@vSIF84H?Jt~?{ z>d{}03jR+u?cUlYec6TsK@mSb)E$-AVzV%+IBv2n*<7{7jazS|(T_WSM(SzkHjq!5 zQevr16?}sRu15Zd*`E;4wA5FX_F@sg6Aj$?FbC~9XAv+cLnNg0|LSdjB!$Sf|2nCn z@8~;s3Q)-Gw5GVK$y}%1ysT1ChU2sLQw)xI@6BHBAl!<~Or-bR#aA$smVonEqrT9c zRkNgX|4>$%bPMxtp|G;RA2mnZ$HkW{?Ym?5+r?MLze$*L=whU~$wR7}>bV`$iu~{V>WoX%$rq_v?M0_j@*eKPxZB;m_&{D%vISMH zbV0z-md^hjV1*rEPp&7GvThpygs**3l+udNiXvfHs~ly55&G?cyXv)<%b`CkEo}=D z>W-Z6L=i`}$FQd(b&iRtVjrP22n?*kr6Hws zaQ}LgD)E@h{1|j=ApMa}lCyFgNbm62%ITW0zhp$jZY^GjHtjAUL6-Fa^SHbXn_Ysw zR;i)+p}!-|Pe^W-#M!m8_@#XXWjn4nVG`>l!A=3K8PGJ!7I^jb8dzjuQS{e%`8R2 z>xr5K{Z;vsf1d!VEt;S$ z$$m3~;p(f{kE#tY#vbWFI1vctllPW`)?~{Dj-&H0MTNhRrt%b+kH$dzXM*iPZ z-Ks!X-zMTF(Y<`%|Gpf)lg@Yh?9$%jPsUvTmx01Ivv7BjIw>AN_RZt|r9s;3ulMm) z%!l_s*1|vmpVzm)?(eYwF6a0G+zkFCG#g8M?KRTvGt}L&m+}9TgF+s!IrTc5Qkpm7<*zC(&O^|<0XNAGVQ1`_W8?RJn>f26^qd64C%@|xy z9i<=)BL-H6o$_Gx@b%8x+Mn;2NkM8F5XL|{HM?GP19v-~Qrav2D`iiI%X`<3NWsyV zj5xuYAAM9Twqo4NMep{}>qpI+|AQ@@m|^XpeNu6p+rNB}}g20Y%A*=fp`dtgB2% zvB`o}y#YSNm7Azaq~X;o7`49!*}r8w#96Iq8FHwayMt2b&uJL2jN7LyUD48($FS34 zw<<|WcQ8yPnVO>a_xh&DzdQ;SNVVjA(XABg--eaE6qY`eW>4uPj~*H{c$=f9V2O6u zNU;V87x2wvRh2?CJgv0JA}5AdEVX8NS}K7gQ0f>Sgo}f%mA4GxE)s=K+D(`V;Oy%b z{+Qd`gZT4^(qA1cT=r~oW7E+bN-rmlHw#V*!upYL-|r?+U*Gl{(BB~8nZtkK8ItbK zt;1B_yT8{h7-iiTJvaB}es2da@@TJbugS<~@QBIey(ULP@C=@K5zyuL!Q#|>?xtKx zP+X=UvTnwoL9s9~ju>H+<=~5|_RNOmbd<%4woBs)ZWl6NQpAr519grc6)?>pf#BFe zY7mAyBYAbx!G^r+w(oDr(|LWj+5?0utJprL=sQ!|)GL{CTk z^`fXPdVE2@({N%i+=eAsBYo*Bg=gl+(2FUy^_n(@Uit}pP*>&b$+MIX%EPQaw52VJ zPR&6=FgHFmf8g*#>le0;`ovOYt7~JEsZ@Sz$iEZhzcr{PNuJKVY zgoP4~OQD#k_qJUS-a)-MdspR5hx1n1_Dzo4$cbI+=4yxAs8v%F27G947uYxEQrG>` zrRpSiLw|Nv`W7Kt^<+EmOK<5atkZSinAeM%7`V2*whqOah&-VMP^yaAogNxe-x0;C zdODr+g?s!1NM$j)K>-dqpF)?@)X)tgZK{$zkVcnJKydkuG-5ag)r#Sy}cOrrj zOrH5a_7%=<>%7E7{Ar~>K1auok7X(UDTm}dXjt`&4&ya7QHiy1&7=9cZH5HjAm2P8 zR0lZvX7>!_B~SkB!=|^4va5&Wn6&@+t}v^Dy~W@N^)>gLt#-8=Nx9 zOT%?G+*`DZ^jXSKL!jf;w*V_sV8G_qHV!1g87F%4{eWnKH~e4&f>^d^wIs$d4BIRM~2+noKSyKBUpE@SBiO z9i&o5Fn#puRr3W?&cfS&P+A_tqKJH5Lw0r#^rpT~ARl=X^+#%xQ!?@Z*FW<@7!`w& z0C!jmz!mhmDDR&ox0|!i-~7~hzEb`0oQSx>n>L&yIsQd-MCHh5z1nPz)LVJl(e3~b zdPc9yUbG*Z9=3x$#Bo}<{L-5#Bm>(SY=WMO;p&r7(urCdnuSUPzuN_K0C_pAP;Q9I z77|yb=<|+i;TBr`*!1TP8xP~x6&xo4!VRqBt}Q+9gUHmC>w*;_rY$4=>E!IlrP+^` zYn*!=B9Y_6f!7loE9{=e01hTkKN@tYVv}l3_OEYlRl#Y)2e8$Xg7oXe}9c;lk`7yXSKZcTdtnAKO$&9T%$2F z?rB*MVuK?y9Ui_IQ1i{t`^Nq3{1ZL5*+vxdf#7s^Pnd0K8g6O2p!NKYKH&9c2&X*O zL=2e*Q%ph?ZY4X>g7_;L+J`!wU1uv~8(j?Xk8C48s4w4ofG`x{&B68jcqNxVGhGIW zJrALOjdkJ|_3W#SrgRJpN6Od%&CF$Vs`=KWAoNy{7AF%`c&S5Lanex#GbMX!agvWJ zGUARQr1ZH6eaBLWWjYI0k8c#MEC*bI)I zHUc`H21vS%rv4DCySmNj*H2cgl4?=KNwJK=ysq>|`TqVPci9I-m$GzcrTHRBN^qvI zj`n)ab0v_}H%_gwFzC5_dz}~Nr$YV-v8pes^O%tZ4oboN=&O(lF+!!VEI9%*gik}i-<;a>ZqjHoNL>n|4K|WYV z2(gK4r=3@AbL5;UEr0lCcu>uMHAs#wR^vB{4P~6U6$Vt#L|(+gTNt0uXXN zt6eWjnbU?SB&!%*k>qo{09zNLd)%O!^dCv3xKIld1P$Fh9E2#>PmpYkHuRAbbZCi_ z=0#|5aZHIcNejyE)#=SSU7G5wOxNIwe7&pbtm0ojku*kMl;x;WNr*v!atE@u628lT zy0&?Kj4cb1LduOIcs*W`5A}S@fBu2s9Amb+?JPLgq{xaS28zSuj>GOFfZvrz-9iUr zCZdJrN)z+A47iK43At67f!aO?kq)Os`vP8?$+3)o!(Vhb-*%;(c|rFNM=FlBN(cq+ zhH?kgk+x*AIDP(D@Sww#2lgbxa0X<6eLy@E!6h?S7m_Ndzi`!n$%tABXA|q zD+nE~oxo?@nQRN0IAU(Ha!wXzjN9&5dVCCL!cjd4`|mV5TA2?Ou*B^QeE_w_IIJd* zB*L8!D7F?0KZUGKb`$V<4eP6+70Tk^LCTpWG$h08tF7unL}Psc$sALzj&T!H4}JFs zlr8RB5!8e$6u?Bt5Rz2Ds&+37LgiPl(xYyu`7UULivCjO-kN(UNcuWto! zcr^4-rXyN4YW9`s-%&04pqO4lV{+#b9g&6}8y%4irhF=Kzc-tM`o4MX5A;yq!~{Ca ziekQIU<>~h!s^|>SYLKLyfBJUyL#K{^nXx$e;IpT^rRH~%|h;WAM5{jS5A`EpZ~?b z{mO#XFsGZpn=0V_;ZH2o^H{dYiL-#=`}G^*BXRc6?$XW9m;JNBmpwVVOvriPo2#aa z_p4Z5{|`olte32osZj6lt3HWmQZAK>YzuEVn$G28>z_lZ#)A*9_&!-89Gf}GDG{h# ztwJS&SmNapkTGh;1xvJkR!ZLG^RBOMEQsG`{QW$`rV2}s=|D`a8X{RNPr(We?D4z^ z2ZO=!oM+sJn(~b<$1XuUy7g;SMPpf-xE`5_*q(nBu3TNPTE9F{9ie5lSQ`Dl1s62r zfv!rse>-&CF+J~^U1RWp2R2XSP}GvXIicXJ4c!^x_+tfi0NG$LPYN$@~C}L)L4`O`xLAB>q2$g zWCq!6x}&rX=!k7yvarvhow+(h0U#EX9iIIri>eJe_t7%-iXbfe{REoe{Z&BEos8B3(zfibCUI#xGdWoCN9CtITiW z`@4Yg;tIWuqykFL{jcdE$%H1Ma_|<3Wu_gif%MY0X)cXDNuTT&5Q>SJ?MGcBQOhF< zZOxpx)v)F%xPDxhoar$%(OoAG`7)`sg$_DXT}3gRCLrTs05-A?u;zrIz{tB7oh1~o z=DKh2_uL=dCzW-Z?9@fZ>8JjmLW%12Y5BI0z_&EGT^bS$x+}8#(!VLesAmEQ->P$X zJ(5ktTYX5@l@u+oa$8{LwnQru^`K3EthxI#k||JMg1qK>tDtz1YJX6Dzx#;Jq-dnJ z)&%|IB+e6SN_)iMBRPi#?DpU9_aO+Rc>usU2PPaU;|Q5Y9j&k2?PsG$(mPlv91YPe zlb+Di7YP$We#D<&AB-+%2&~|*4bJ<>+SOE%6vzX#PpO#hJe~ZQ^7<(=Z%8Bf}P!WEelY!xL!T z%>Q*Lmm)uR*?M7t>iaTRMC^2gC<3ggFh#&tqgC?X7t^$ z96=n~xQ8Dpn5~EW`p4WLBTd?eusqb(9u}2n6LQO$`FAWKK4S4`U!h``uJp-Y^ts`E zsS<%A03@Njj|#y9-;0@WmbAQyZ^wa2(7C6m`k*W~XXshZnZfp7Pc~v|+}@4-JvV+L zd2r9K$~L(SRP@OJ5%^m({HaCl{D9|#(`;DaQxX#Mw)3r3@m=($RBU@tcFi4l~Q&l*!sAxmiPV?`ly$m z!elvfr%)WPpqbdDS!A*0h|tUT_KR)098#*GFLlq+^|jOI4R5T=bVP&6Giu+lj+i5* zdoW>KXxFg@tSy91|Q(jt}cEpy_ROlEI_Km^zWde9ZrA-<;FYu~Kc2?Pvcx%k)@>DLmRd zuMX#m?`f42vtn`Izk$mcE&Wkp;3Ul|f8Q~sTZqwr*Y+%DN8?Gau?GKMxEs#DfK4)C z#Dhg(ZqthPE9n9x;f@{o*HsG?BN}lOIhtX5_xi)l?`jv_>}<#wJco{TIP59K|L|t4 ze-e6pon36Id(!XdP3b=4_b)ho+SDAKbs=rV-?%s_`s;{;$6>ELQF0SW2>m2cwhD*v zW&w=upw^caTFDD1_f~md)&F#{@qUk*k&!XmppE|3>dJ9)z{?O{(U<1ejl$ovw1|1m zc*9fwhBw}^&4qnO!i>{P-geW!t7b+Qp}$#`myXP^*cOLNtn0q7@N1j=Cm-xTo7fvn zx=&8SO8kC5HA!^SGSNblL(XS^0}wd%{}}Yh+u`qh`%-fMH)!9nCa&AMcKotM_I34B zfcH5W?{NVDz1)vZ!F#%+M3E5F#Qncla1Fy%yA2xGsmB7a%w(f5ey-^KTm zQHd2PmX_+kJTZHF~WhXOZ?Iy?k|o;bg4iL&|t3*$q6)h`nK7jx+Od4{N;#TgeH zgq3sBCjBEo0bXQM46i++Jx(0v4z*8EdG0}wR4lr#I{K@yIGZ-)rcZ*ZyM%>;t_q|A zi)a?IY*X)$wi&m1SJ*$+LZ_nebyGE_A5att?)>wN`C2>d9beQPf^XB6Ynw`m^|@1r z2QLhd9t;Dtb+WXu0l zX8pBa590y8GpnCV0eXs1IP%RIV?}?QgYwI1BPF}cXrcL&IVR+G&C{ySG_t(L+VWLd zpUGftNKu0_wE+=tVasK~#N$@~d}-Z3WlV>~^E9>J)|tO^hXC<{BI>6<5{q<4DAVMW zQriMc0o5LV-6H~1fw8`g*XL6{Ecy*#_Yvu-AMGcUR3C(r}`0dl#GYqn{WOEEJIe*Y7^?$`9X@^~(syvpSvt6K$;gouqGPdqb&>8KdT#&SLHcrVcq;I0+_u)` z${)S3>*6+8fPtUwP0ymGu!l^oUdE#h9#h4%s0|z=fZJ`&lomUd)FsWu7k+VC9a-IS zsgqz#k+#nk@cN*d+9}+fsmM^@O*NM7S8Mr!DYZf0L6L=*h;?W#XR-e*$5fFi{HlQ--w`YyU0MSe2Dt9>8+jETHf4ha{o;$u(eT}3C zLxJ9ei-T^?iJA{8!6vjInIS-#0*2c*&!G^fPK;@e%}pq_O_WTKqA86$a0vGIQG&>Q zq1*b@jWdAEaw%AuZ6c}BeNjL?<8xIR5I(QuI~7`+L#(u5wBH1KZN+?2OU2F6>8|!e ztUltC`|d5 zX_Q5V{SORwRMIWXp0$$e5#I)yj-lvBZDPl;FT)nU;jZ$o5&Ml1NlyvCAyLsXmN|UP zP%udu-SfLws>4$u(6&c$+N6^XX*H7i{yNYCdcxj zGi;*6p3RLrKiLVkiavly=G=MbrK^PfyG}05;vGCdBjCqQ^@Z!6DydBtEZ@yzf^H~M z**rijLMAEza`mv=2zlgreHhDvq}tYul@W(o0wZcNa-HEcCc!gw(#KhbQ(D*1=!CmQ zWI?E^g#1usQR?jS1?#GTk0Tzob(-u*zpRquoDo1Jd|NwHO`|PMQklQ&bO&vcb&Q0e zPOWj>0J=rX%%T!A8c{aub}1h6G*za+=+$I3-5e22ICZ%SjY`cr-F>ABnXYWjUc_9D znaJqUe2b2hgwhbbN_bQxOobq4UCA0d0&_yz1l=mrrl@&_hnHmA>VRQ#t7Mug3&v&B zbPZVndby^0@}OZVkY{EvO0@51D7Q!5!Doo{<#f$>yReFgt3jtrb4kmy##+5BmKdzCRR%_w=XajFX2%_igzo@zTrWcYKZvDFFQIJ=w7YI%P>dog}Ch%l-bkE`#rsn?G=Bc;#H#MWvv&cQnr`m!0D5m@L z;XO+Cn_mr4cjhsSw52%v&U8TbI@({I+r^Q+4^9V0tv}za=PGBf)PFLoujyotbITTu zVlyFm(T|;u88E|9{R%|k%C$HT<)WWrj;qy!Yx2m;&UVn8pdXl5p^wu>Ntz0}<_^YU zK^wIxn>%Zq$?YX%Ua?nCl;3BaUcg2kHQ92p5q*M7Qm!28K8C)$P{>Q7GixZ!X2B64 zPFkfg%9CY_@kivll-UZ)rtr{kd}`U>^i=uWpwptsb~l{|tg!mf{!wDcbgR+LfwF1;GjloJZ=-om+)fTG71uoz4T z1xt8O&@~brfdNX=z`vFWOlYH~@ry)l9?6%Q^@fwFF7gJMGTLOaWWE!9;wYmf*$nk~ zbY<}Swg}V)gh}(LtklTVhM}GD45sNdte%`dCu_6s0z*=|SaNGPQ&jKoYAZ-2wz>mS z8FDHQt(6W`U`F(DE#%$%zw#v-k2m&((2J7c%J`jfpaVSq6rXsVpP&C)zb58+>cFyk z(H2EPf1%p)IPIlT_^lBPI869L{HP2EN8UpK@WtqZf*XA(7_bBdLQx*j%hDB)Q&0dw zUwR6!JyYQ(f&+6^U2$J?5JCGYg2{(+RLMgG*L*!ah}oapPy>Tx*j}rNRJEXvWETxM zib#S*TH6tQSw}s?`iCb8e9W(=sBpoKpER0MmAL`)lAF~6uU{Y!p z8t+T7EtBJd(owqZbk)4c_zzwpo~UAZ_|(X7$nhc=pHPx0;KZ0x?iio3uw~WVs!4pX zlp{d2*{t#Mf?;HV&=_p4uVg1WNP^6`QEY|nOft|L8Y{J{Oi8Ewcy-#7fJ%?a19|Ph zPRMzYSvcW&r4keR3=SRWVB>xwOQinxhrH>n0MNl2pw)YkbY@HZ%amkxbU1J&Q!O^ z_@C?a{&m$fJ^}7H2{DS?Zy=k|F*G8j@{cDZo0c%zATUBk0)y{=P# zv&W@$@Iy5t;nD9^e8D7z!Mj;D_xD&HBmI?#x?N^rXer)(J;j9Np;ZH zRQ`0nGm+H*aaHgy@yjBf>j~7IWYhY!QLVAUglRjFailGQ97r%geyi+$-SUvMM>2 zV6_pOig^}X&V3g1u+?+LAm?xqx&-n-;oH`A%SNlUC=A4U_bD#`>AYsan(?4n3weEQ zTw%WUD8ZB!F#2YvRsHdsNYT)r^DxO>%_*71`tRXeYW9{Hs8dori9`GPLVDI(4d7{r zf+tQ%u~Hdjpjr%x!N2Tt<0qfh>qwtTI@GsGKsBrdE8m_BJ^QsM332(1ymwI!i!Z)8 z`*>HMbWJrp1#@PhUi7KGj=g-yJYJf7l|6Vbyz#Gp`t-D(!!Ap$HH|o#q~$VG7(SQq zAatiUr}iQ9sQ))>_g|OAhVD+|O{GL_mbrL?_-dN={3WHv*&<@BHYS5gO2}*p%<68* z%~%qv@pCF?P8$7YtjA7jR*f7*y?yVxNDbBf0$bG4UfylQ9xaK&a^1BMz z;4Wd()h@5E6ybvE{`KI-)h^OzY9!>_ti)3VTv-qj;`|V0JGVfSLAv340GVh8{`?02 zi%w5GP^F@$5=QTHV4fHySfVKXbDkZoN=gEY#||WBl@b?KHzgkMsH_Wr|BMSN;gpxz ziAC%`TnWomx4>Ou!C7jweNYeHMrZkwRw|>znrziFS`T*Qg6xlqtN?-{PFvoj&8u!8QllunNpear5a|(S(UmhaH7Y0Mv7=Lw}Qw`xtB2ih+}od zK<*t1)bL9T6Zz)kCx3 zUh*c4p7yPav({u#VL2A7&K@S@`ytDw87#V30F6%7TxSe{a%9JLdQBLu{jYsGVWqZ6 zvMxujZl{LT9H9smD&aU8s0EkacYw+r9+wC72h>cFrY#+;^8aGLk}F6{)u#Au%cob_ z!mn4^3o-SwhQ2AZ$RSv!ka=V2T73QtzvP(e}OnC%+A^aW>6#dh`wr;LW@g{BR9iw2e010@kH67oEJQcR{KB!3XSX1~~R%Xbp zCN0h;P}=x$k3gtp6QoRe<+Xz{vvl72uhvk7qHHWnNwT7AYycoGUL0PWUYmJLHPSGw zjKEMrn^a`KZVa~O*g?DX0@ok!G`KH|aWI?;`FcXh|3OIjEmYW6ZmH_~a-NAFU?MPq z73q?fJwd5ZUmGS6I>^R_^s8qIHnV-MfW@WXu}AqF6iT$&_1&W6ly&pnv7PXB_tSg9 zFMr#=`hT5VWD(N3H+nlX{G-2^d$JeG-EoqtN%PbkJ(Q-!3VQ?wXQ7}{q~wZ z!fyCMA7);>-v#^)ICoeOyDnhJ1dE5_VbNbjWT3=<`C(v18H9?bew`UK+>)d76ZH#$ z*N8*tuz9mT1)vFvVFK68DF7hN1kp+&3ST*=y-&A7Cx}pV>+QE0c$bl8_l&kjZ zMIW%LXI%e&17(H-CtS<0z!pTrq?BfQ3?VF*+j@^491d{Zo6C| zR3xL-Vf;0B=3V8Ht>l%-<#O9Au4MP=cB|j68jXtYBevrE!fRewqEWa1PG`8?J>7%c zz$w%!3|rX*s5$J(Md`X&BYtD%{$+Z^d_Xe z9PrlDvUu3VOO}bo`oB;MVGszY$x)0NvSa5n^+K4Jzmt=FcAFPI{#w82o&BdNn^tqO zrtmOSTW4}sXz`{^lQ&hIBH8xP3Y_N>8ae2_K?N!~Bu90oqYlFPP@lcIgk3MWG_!v6 zwH?y^yeYfHr|Ph5{-)ySE93yI>XQbm7dI{8O{hm+mb`}xMH&NF#Y(O@o~;iA42U>6 zTBH~z#zVco@1mRTcqpk~+IU>|njVy0Kb;{%Zss=kmJi_Y!wt!lT*=qs6oy4? z_p~yec7#VlxG!6bZ6VdMPypC(>X)H-T`$<*gndM8tshDItVhIn(E!CwG&0cYxr&-R z#J?dPUyqg(9Gzqk36XDn=*6415z<1y1$kx_Q(l6dMLUUh-W?ZHGWHBm1+s7ds7FtS zocqBWr?eo5wfS=W!>Rlf;iXVW;*TPQGHtoV(fkl(R508z$UzKZ#90GLY#|Zyf4+FB zUs6MGxQ2*Se(}TD7W~Y=N`Ht#lE4&UqghdAvFsEyO9g^8k`PBO1n`9%m2Sy1`#vCa ziH%qLy_{GGW}?2GUJ7f;9c#)%*otY1>?t`IA~Fb^F{qfLnp{AD%Q9p5<=LF}D6BpE z-%1b-pgM9}+(}fcETnUu?hq@IqqJ$ZcG@u71mZ1GfQrc90xA*QZhoB@p2!yCr=F7|HU*}zhXLxJJYg8U%G-t9NP*ElsrDpGG2vT`4)|n2-+fyc6PYxu554+;4G^t2#0V!xo6z0ywm3C9 zt^GPc>#^;<0zySkZb8VmlRaBB60VmHPUe8J%!W;zqH7O=Ve=eI0D!|t&xUv&Nyd)h~6QF(nV|JX!nbme{7Swy1y$W7dus?G)F?zxX zF)QtAeFlq3I+OYdICh8-{>y_JTOl;HdQ{JUUaY({-6BU!crEvg{b2=xioJyu<))mw z*-xuhJBVoxX$T#tVE8zIR*3kRh+FElMver2T|xaVCr0j>o$xj+CZsYlPr&Oj-GwN_ zbq^?OfE6+T*>>x4ISj>9E{g6#w`%Y+xSOFYp4|BsPsxd~*ns;VqJx~bec~FF8R*1= zmk}yts=Vn3LV;TMPkxS!ln>+M)V7mSfuY}Y95&RpV&GFDmNa^+j-ko&J48_ z=sOGgtVy?w5i=rO2w$XGV2p~6B*Nw7Hz;P*b-)P4qd4t*cLa05Or6x_?RI(_XmDq0 z^_E>2#uL2^`Gx$?`o69>EcPA|*r>?vzGbHt)5VX}!MOCQX`C#U5K zcK)ZqdB)r-3Nrl+2cMx07Yi(5Wz@!b(~GuVaxB)?#Q~Ia?yH~_uPUidK3#+P0za+0 zGdBuxZ2sjxJlJgH0!8Vf^APh`SW=foWqo~d=ooXTVJFglIp$%J&*s5|PmHC=FSE+jl8nZ6LiI%ZtI6EX7aB(mI@(u_F z^bHB4^CQF&b60E@)01_u!|z3MtkY_IzSo^k{Hb|2Q2wl;E(GIbIR7A3fV)do9J=)ZmcT%xiI$u~f0oN6AWv0tp$7`5hRL?&Z&k*|u$ zjboB~2@=~8{-KcgU2n0xDyFuS$ousM@yGhl%YY`@8bN^KmB-5>_5eH7A`Ee3fX{0{ zusm!v3Y9H(rZvnsM;c3*yg~TB4Uf1u3zvA$5DXu~g7)~7pV9bSVkNnGQ;2n$&R&~3 zrHS@92yU0l6$l6w3u6;LVve$}mOO&JTCd2$XkP>q{NJAqJ|`oy1(~5EdoWXr_v;!m z^H>#@b@VL!hU`2QJa-^e(3rU}007{dZxtWvuNu}3=*M%a`QYSb-Ls!)pAi1!!fa5} zn65~7BTur0>PKoNw+mAmgXnbn6(a(E?G%w%htNq;vw#c9sYIj71If;lQQn~Vj6K$R z*kq67dq>Rm9UXPkzgZSQW|?6>4fojsipdsINM@#}lZ_M)s7lqx1}D8=UGd(eE;lEj z)CHSWTH+u5=8TZ@sh;ydA>$sC4?EyEXBz*VPl#<#;)w8g(c$X0F5%Db6rL#Nm_Zy~ zHNurz`^dCr4Xmc3?vr)EC;F+I^){^O1M1&6Kg#;9QnPD#SmxYU8;bG)WkjjR6L^s| z-n~3>iZnK^iq!FMx*o_v47eMq>59K`WV>&JCOWvLMrS%6*WZcnSytEm+YfsOFS3ze zCucuFBBk&5{o$V|w`(8xpKk=6SUWf8Upo$aCA@U!?Br>?^1f&M7t^!3@I5;|$xk^w z5$j%j60lzl^?p=qQEX9fIeRlGTJ?S?VL9nj^Ys7Cm0b3zCR`8nI;UUeTl%+`ZK-pO zFq=^;nl&t#mFRQDvJUmj3SRj{#>&-N>FUP~g?*tBOrw3dXVKS-!`Hs<}DZrR&GFb>`-M(-I`T76U5@ z-DY7iEu!5Um9Ob)_LWi_zLq&7uHGKr_l~#^lbz@C+-r&?#?L>#!2~SzUre6@$s)R4 z-+W`xTO(82+Mg*&{6jJ;oG;}3Li8!<$bUWJXuAvkW;B-MReBq|%3ub5qd7x!!uA0H?A(udbGuS<5hi^tZfiE;o# z{$&UX;PeUM)|qySJIt6xldQ}8jSZg7UtMU!3L%&J`Ger?Crij9yW)hf^@yh|JPUJK z2%qsAs&fD+5>0B+lc=<0g%D?6et0X2Bv_s8$OStb^*WhDrfkOtdxXW@!^!Mb9=aFC z8Nk8`7ng1cwQPk@YhEthr~hgp5Wt)VYhelXl>>4S7-zsxvk1)f6pU<(1N>u@KtMb* zYOna6Y1#=i=P6Y4G%E0lGvLxu2bzXA6Plw7-b)H`idHb-8qG35Uk>pyoLuDeCg9iS zqMXsTNZY}!xJU-)YWl}g{v6l+w=#bYXzV@PSLD3Jl~KlR2a)* z=vl4vlh}5D-S@_toCVVFca1b??cvXZ_5~E$zZYt_dkgRct$PZ;oxaz-*9MDiHeb^IQP0}LVE&Vh-5G)VjVDP8R^_Z@axL?LHLR?DcJdR!MewC8%UUx#{@q-+W5%1*YI*pd#=N1{%QQG&c~(Q zMcBmE#t0{I1%IgUp1R=z@$+U$2Fbz`VPdrQAQh!BFE!=2>0R+y)p<5A|C+zoGNIvt z>PaHXb8OO{hZW++*xSuA=q@XGMYI;2m;Rm=9{qtIc?o}|b%9FtGK zmn$r;+B-;`i1oHMERoJuU>tA~P=M9Jb6J$huw4SGSI}flGMpOm`Ns~;Ggd`rs$BR+ zmk`!KwEP1cDYAjA{<&_UZs9p`nR>!}yc{}oS!H4+6$gp-1rL_Fe$`DebQvULPrfmdZcD>#OPjO=$)pxI$zF^D@Ixb27z%BsyhmRkWbGKdBt!`o)4)%QccG=kW}{ zzX+<^+t1(Ro3Qfdb)(!elEs<>b(y+BWsuLV{sW*tfCHTjz@*Bo>KUW{S1}e#P=C|0 zEV+>TSNX9*0Si#NEupsn;%166(99eP&w@2r{2 zPX&jUuc~zdsu;ZwdLv1yWQpdXO5bG_1Ue0P$mYpF!RmVyd#3OK;dzqf5HAHF3&p(#A5;R#d+02NXdHcB5kMbraNh^ zvTrzNNd`gPfb@(B{g!xoDx1O>^KoYA=Rv6flTSl=@0!VQd-hCqK}OkA_Wa7E@cXVwPp;-N(4WeW!dh%f|5w@ za`)C6{>eq*!fq5u$LK3rA4mQnpFA_~MwkSy!l_Q1vI9noHjD`^mPB*p(19($2Yw=) z@U}|_!I##&M7ahDD9F!WF2=wIQ4HA-3aFgpFDNxoEd6+xaD9JV$ONd?_k;o=Z0AWP;c+6-m$6 zZjBDq!V97Z5)Xk#5d>#aN}^jbQih*@av_vW`NNS3MX>Ov7;8jqB7hhYJzK`Yp`h~Z z`)XzXJDwtZe6QOth}bK)tBFAYY>{Wk+GCm(??AC!-a9x93A~d@djmtF9s}f0^*(BD z5<)RjT3-0sYEXgesa^9E$t%^4Bjknxh#|azfHbC(1W+}!Dtt>jzJG9Zc-d!D7dKHr z&AGe-ljHz zkAej2f*Qm=dH-XMVY>$_rOx95ImCoD=>DnRs8s;r-38%-+VdtOSWO;- zhRgg`ETGoKS_|=dsejT5v$O#yn?TXN0wK6)ZwuM9g6i*_)cG3YmacbZ?SXQFn>YwY z0kUi?zr$qvkgjf98s82nn^-^%$yF$8KBs-ENp7m8X_H#%_H*P<_d9$<1;%Sp2tLSS z6he5&wg!ej-7#IvqjO(}WXjSVv}T^ns^{o=u_H~}%zGk4*9_|aY$WmdHv88n9g%l^^o z*pYBJZ3>aRiIV9u8LcU@Z0MBarqz3*AgoE#y{0cABlB%|>pszdB&!s{V|^?#hK|~x z>o5{L$O3v(Ir&wFC_=c|Z14QP6o)XeAH zF)5*t%-OF`7XNTQXi<4$lH5~(;*TX@@ZpqbqS6Sf)or-@)7Pm$Ef%RJM=yDoRsbd` z!`E~_i$$t7FkfwIuMC)1o3I&4F##FZAnrF28zf`ng4oIO_;Ry> zIKBArk>_ick-P0aAKuKJWfs?8j#$A39pfVaYXuH5yu@fHjL+UGZ5;VqZ;f}JdgpR}nC30mnUE_O%T!9Tw1|4sGQ)Ol9$9*yK zCXfn5^8vCj&~SWI)sjh)bG}_1ogDd>&}8Ka1*n#6wli|*Md{yFdjseoMlSm8gKCcs z9qeR7M14fMIF25HirG76vMkldb&2wRlu)~5cNF*qooG4;pL(qj$cNNssMwbGPwXE8 z1yn65oOOQ*bM_ib4r^oqb4|PnmwE$({~C{?{tg5xz{9zK>APEp?bJO=i%hWD;JMJ`fz=*jkkc1L0D;FHwj z|LtVu9|4(2F}IUeaG#WhCL?P(W@^@XPQSSEpJ};o`03KEIpnz!F=y!)yfmt}&Z}ZO z%@%(v7h*TKQ^YVu8&bgj1YBIbl&=%dg}OVo>{;X@kXc`-Vh zpTZ|-kw4oHNA8dk`J4Ry!qSLq5`yAd@9WOO0Di6AjpS!Qo8f^Rfcz7@V^_muyr35E zZX)piY3$1Xq29kgrBL<{*_%R1X^~|2mTlUsDP3WRqU&ZXWuF<6P?(CMn=#^wR8+Xa zFp=zQ_AEn_hQW+w7G`S;QM%-$9bHe&TnUXo-N<2-gX#4xF5n?V}*w{Vz%z& zAB0ScF1^zZPl>T(_|&&S$q6`G0<8tmc5^>*xe+yxkABIw<`s4ZP%q((exeEzoo3(M z>HRyF5K-(9s1!A(Zo1&dl)d}hWc1%pMk-htaa$B2qw(|Cx0OdM|6pwkQ0&P|9rek# zoZ+JB7?m#)SvDJ{)-c8>nfyc`49-IIV*esk=B=5aiR)r)X*`}`RQyS6A zwCnBq}|dx=iOdk`VWHD92`14c%cf7eJ-NY=By5U#nGT<85MIWGtm^nsak!+wmC=Qv%-4-s!-rH%We?%RDHJSM z@8q7JsKt~tcgr;yQ^r`B$cFW-cxREvps}s---OJs2KC=N1KtI)&n~_{k`mOgnq=rk zRd3+z9ALuMeG<4Oxot&IiD#fzF%QRjkc2%ImX|hP?c)$sWpYuO2loUQBATl1Aqx4ZorT&uX+k&qh8oimwS4$u~O=`+jBH) z;|3VI!6ebx$Kt4}Y9dWqP(gfw*nk#1A|K6MP@86H8h@r|I6N@|1GTER%1*d_&5tu3 z--u}RDur8K8Lg(-S7J|XR*nJ;y{&GYD5Yt-$a!g&gXQ1maYo~!z7O5vtd3~27{Vdd zQ*8C*k~&l7^p)vG{AnI@(roZ435`2w3SKP4J$v(&?mjADpdY*@#epPhLmXJ-le;&5 z7v?6ko740H74&BE2&PcnfU?za(mO3Op1~u;9#NKF#ha_v=pO4VQZXwEyt}3+^mOm1 zpAd-b*xWbvtIIl(;r;XoS4?pO{<^!a1+%dR;IGT#?X2zOMsmazr-`UH2jPh*VD;WK z?}~s34AdrrmRZNWV@}M!jY6ZTIn%uxzCBjM(nJtB5uo-ARB)qEFN6_mZ9XP0b6?L( z+$(-=qxj)Qj*Y}jN^$>CZER}rEC2Wp!LR1Qo8J z5X1Z|!1OQTHBK%bJ_ho71)PZD)xo~GtuL={8$w%K*zQ88 z=L#&Mp@FTnJKE#>dtFvJEric0ful>~KG5(ibU79XWqT*=r?`>2<^2;0L+0ESa^8m$ z-S#Yn>85Y__(M!Fc#L88KUGn0O$-H9(Rl z@MMbt6NxUjDdd2XJrkznm3w+P+XrxEf!41P0Sae zH8j9YW6Nl!l?j?>oRfpTNs8tb$1w+D_gYA_i>JPxjh)#~8mOJ$kw`ZVA^*N@rxh*X zN5cE$1w7!}I^NS{wzLz*Dwq_c_*?aXsMx5;xKHo}bo?xfZQQWjwKzK?>+OirUTh8B z;GZVR^&>;RK(R?(l9vd16enq(f6XY4%bBh)`_FY%`@bBRnHr@BOD-P|5{sSPYU?>=Hhv5kU9vKM6&lS9uY!v^hsgsy) z4y5O)8@Sh?l0)GE83ULZYoa3CimDi9WiPF?;>%)1ax->#S?&oH$JBlOZ2iDW!i*p% zWf8sRiNo+*Nw z3Xro@{bWW^bGV*e{J;RQ~TPwC_wY4i_tdVtyLiZ8`^P!~&l}KhWA7bXm z>vv&8>8J`))7-*5ub^3KoO)ol;`)W>yt?4MaU$xkx^`+9+^) zN|ICua`p#Np?82gE+h*&WKO=+y>u~`3W<7s2anR&z>|+&CSy3wuygiQnh#30**gH2 zRt+@#IXYms_6Q8MMG*OzpLbIQTY(9=kyFpVXvIjC&$Dl{#?`Bd8UIKi5@H+RaYRGM z+zZ#k?Zpbo#Ppi5q8^lnc8JdLCaIR!VV2wT%A^{xm&FW;LnOZ#oK! z+3`QcTz_wf@rJbXt&d&bD{C3`EZeQw;j|gJyIgSp=^3-gu^2r8gqh@!WbMaWHLv|3EW+6@Kd#sYq_FX61%!%4O z!@KOWeW1s+I2)aMh%F|UD7y{6(@M5bb3msrX?o{`WyW8#u7IVb7y`TLyM1Bq~* z{cIg6FZ|Da`zp1o$(8YBB;9X>^6kK0&Oema&9uw0YaO@BQ!*zz(#eS8r2LiRr_aj{ zVtS>6m4xT%{$Ub>MOITCEF!|_Eo&4}9jDW8Saxn?F57x4=8!`a|K|YVWsQ%wu|{wM z6{8spo2lg6ktbzVe`$~4ZwSdFp#CYy@m&O#uW7v2`lXCxRT%4p<}Gv@?C1qEZ8RX6 z!hzcYWB!q{*_p_^;N&-B3uVh$E6YI=DvA%&`g208#R@vPAD>EP$z34MKGsq`)Mm;L zkJRiT#GG71#~RSEgwPzxOOmlgtJ{@TWp+{rDM<9cZuQ6DmI&mZCzGU=(&R2F?n_rJ z5%EurFN{y~l9X3axL+=1asSYqiq?7tEx^Obg~MP7Z_9M!vlPSLSQlv?-g% z!MC(`^@iSW@xA4fee@Rc(p0Rx*6}~GKa4q~PO!I>Mhelyq)%WV{P(YBP47~I7f=cW z`{!Dw0ow+@W+`z-V*7p8c@LL+1}SdxT2Hd~%CLgBEy%ky4_;u&9iH9Yp{T9EixoYl z5g1~79ecxKJp3~ys9zvrbIP zJZ+mn>BtlD2G4HCu)3?4eOI2BE)9(R0S9hUrdOf+`oR1otSlo4 zIs$&Zrl^y@2rE2quj}%m)1b?66UPz4qg^K)5s6O01`7*ZuM_q2JW`+&EoMQ5|J zCO7?IXptV4+oS83;Hu51$Dd%>-;UVk;VsR}Wct((rkO1~p4Pe2*>FejX!^#C+`hdJ zNhH#b&(`Tr{A7+|BCj~x?abH6RpN@@{6^hgsbZn=`r9MM`J2v+^A05ny_#7{+j=#! zZp1V4^iAw#(-a0+WtHPapF-g>#UMlcRT#Yq)>m;`*~ODpaP3&(atDIGV*?U%X5bFy zZAHN!n?PSSzqg@8U)s$fFvt@mE@d7Yn$vVv(^K;POTM%;d%kCNrjl-+1ka5wh&H5p zNH?+wE2j!u{;uS*cQ<_0&W%4Lv`WXgYT9~t1{Rm2`>=M&jxVtuYFT%ZNjmeeW>v!V zRoxe*19~q@uI6?J6z11=+W5kcN2K%JI6dw<-QSON0ew&@U}l0de{NEqtdbACEyKNv z7hVfEl`n)*5=~S-BvHLd$xi{QRKN)QmeTR=bB35jZ6;QV=ZB`ds}o==HP+Fj5C2Pz zM*YAt%pCXuGzp@q)nL8@KJG9AGam`bl>%Mincro`nKIig{I+>=TE2_&$J(qoAMuza Vf5iV!jA^9-aZDsCO+-#cof` literal 0 HcmV?d00001 diff --git a/evidence/native-parallel-review8/s.mjs b/evidence/native-parallel-review8/s.mjs new file mode 100644 index 000000000..1de1d721f --- /dev/null +++ b/evidence/native-parallel-review8/s.mjs @@ -0,0 +1,164 @@ +// Scenario definitions for review 6 of flows#667. +const STALL = ` await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success');`; +const SURF = `import { flow } from '@relayflows/surface';`; +const flowSrc = (name, body, { fnExpr = false, header = '', pre = '' } = {}) => `${SURF} +${pre}export default flow('${name}'${header}, ${fnExpr ? 'async function(f)' : 'async f =>'} {${body} +${STALL} +}); +`; +const ADAPTER = `#!/usr/bin/env node +import fs from 'node:fs'; +if (process.argv[2] === 'auth') process.exit(0); +if (process.argv[2] === '--relayflows-adapter-v1') { + process.stdout.write('relayflows-agent-cli-v1\\n'); + let input = ''; + for await (const chunk of process.stdin) input += chunk; + if (input.trim() === '') process.exit(0); + const request = JSON.parse(input); + if (request.protocol !== 'relayflows-agent-cli-v1') process.exit(2); + process.stdout.write('relayflows-agent-cli-v1-execute\\n'); + fs.appendFileSync('/calls', 'x'); + process.stdout.write('{"message":"ok"}'); +} +`; +const HS = [['head', 'head'], ['base', 'base']]; +const S = []; +const add = (s) => S.push({ sides: HS, ...s }); + +// ---- review-5 fixtures, verbatim ---- +const P_BIND = `const Promise = { all: globalThis.Promise.all.bind(globalThis.Promise) };`; +const P_HAND = `const Promise = { all: (xs) => new globalThis.Promise((res, rej) => { const out = []; let n = xs.length; xs.forEach((x, i) => globalThis.Promise.resolve(x).then(v => { out[i] = v; if (--n === 0) res(out); }, rej)); }) };`; +const CHAIN = `export { default } from './impl.ts';\n`; +const TAIL5 = ` await f.run('printf X >> effects'); + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +}); +`; +const G3 = ` await Promise.all([f.run('sleep 0.5; printf A'), f.run('printf B'), f.run('sleep 0.1; printf C')]);\n`; +const NAT = ` const a = async () => { await f.run('sleep 0.4; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.2; printf C'); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]);\n`; +const impl = (name, P, body) => `${SURF}\n${P}\nexport default flow('${name}', async f => {\n${body}${TAIL5}`; +const W2 = ` await f.run('sleep 0.2; printf W');\n`; +add({ name: 'Q5', files: { 'chain.flow.ts': CHAIN, 'impl.ts': impl('q5', P_BIND, G3) } }); +add({ name: 'Q5n', files: { 'chain.flow.ts': CHAIN, 'impl.ts': impl('q5n', P_BIND, NAT) } }); +add({ name: 'Q5h', files: { 'chain.flow.ts': CHAIN, 'impl.ts': impl('q5h', P_HAND, G3) } }); +add({ name: 'Q5w', files: { 'chain.flow.ts': CHAIN, 'impl.ts': impl('q5w', P_BIND, W2 + G3) } }); +add({ name: 'Q5wn', files: { 'chain.flow.ts': CHAIN, 'impl.ts': impl('q5wn', P_BIND, W2 + NAT) } }); +add({ name: 'Q5wh', files: { 'chain.flow.ts': CHAIN, 'impl.ts': impl('q5wh', P_HAND, W2 + G3) } }); +add({ name: 'Q6Pw', files: { + 'chain.flow.ts': `${SURF}\nimport './lib/patch.mjs';\nexport default flow('q6Pw', async f => {\n await f.run('sleep 0.3; printf W');\n${NAT}${TAIL5}`, + 'lib/patch.mjs': `const I = Function('return this')()['Pro' + 'mise']; +const intrinsicAll = I.all; +const t = setInterval(() => { if (I.all !== intrinsicAll) { clearInterval(t); I.all = function all(xs) { return intrinsicAll.call(I, xs); }; } }, 2); +t.unref(); +` } }); + +// ---- P-series (review 4) ---- +add({ name: 'P1', files: { 'chain.flow.ts': `${SURF}\n${P_BIND}\nexport default flow('p1', async f => {\n${G3}${TAIL5}` } }); +add({ name: 'P1h', files: { 'chain.flow.ts': `${SURF}\n${P_HAND}\nexport default flow('p1h', async f => {\n${G3}${TAIL5}` } }); +add({ name: 'P1c', files: { 'chain.flow.ts': `${SURF}\nclass Promise extends globalThis.Promise { static all(xs) { return globalThis.Promise.all.call(globalThis.Promise, xs); } }\nexport default flow('p1c', async f => {\n${G3}${TAIL5}` } }); +add({ name: 'P1n', files: { 'chain.flow.ts': `${SURF}\n${P_BIND}\nexport default flow('p1n', async f => {\n${NAT}${TAIL5}` } }); +add({ name: 'P1bn', files: { 'chain.flow.ts': `${SURF}\nimport Promise from './bb/bluebird.js';\nexport default flow('p1bn', async f => {\n${NAT}${TAIL5}` }, bluebird: true }); +add({ name: 'P2', files: { 'chain.flow.ts': flowSrc('p2', ` + const warm = async () => {}; + await Promise.all([warm(), warm()]); + await f.run('printf X >> effects');`) } }); + +// ---- prior matrix ---- +add({ name: 'A1', files: { 'chain.flow.ts': flowSrc('a1', ` + const left = async () => { + await Promise.all([f.run('sleep 0.3; printf A'), f.run('printf B')]); + await f.run('printf L >> effects'); + }; + const right = async () => { + await Promise.all([f.run('printf C'), f.run('sleep 0.3; printf D')]); + await f.run('printf R >> effects'); + }; + await Promise.all([left(), right()]);`) } }); +add({ name: 'B1', files: { 'chain.flow.ts': flowSrc('b1', ` + const left = async () => { + await f.run('printf A'); + await f.run('printf B'); + await f.run('printf L >> effects'); + }; + const right = async () => { + await Promise.all([f.run('printf C'), f.run('printf D')]); + await f.run('printf R >> effects'); + }; + await Promise.all([left(), right()]);`) } }); +const N2 = ` + const a = async () => { await f.run('sleep 0.3; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.2; printf C'); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]);`; +add({ name: 'N2', files: { 'chain.flow.ts': flowSrc('n2', N2) } }); +add({ name: 'C1e', files: { 'chain.flow.ts': flowSrc('c1e', ` + const background = (async () => { await f.run('printf X >> effects'); })(); + await new Promise(resolve => setTimeout(resolve, 300)); + await f.run('printf Y >> effects'); + await background;`) } }); +add({ name: 'G1', files: { 'chain.flow.ts': flowSrc('g1', ` + await Promise.race([f.run('printf A >> effects'), f.run('sleep 0.3; printf B >> effects')]); + await f.run('printf G >> effects');`) } }); +const LLM_OUT = `const output = { type: 'object', properties: { message: { type: 'string' } }, required: ['message'] };`; +add({ name: 'H1', adapter: true, extraArgs: ['--local-agent'], files: { 'adapter.mjs': ADAPTER, 'chain.flow.ts': flowSrc('h1', ` + ${LLM_OUT} + const left = async () => { await f.llm('left', { output, model: 'test-model' }); await f.run('printf L >> effects'); }; + const right = async () => { await f.llm('right', { output, model: 'test-model' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`) } }); +add({ name: 'H2', adapter: true, extraArgs: ['--local-agent'], files: { 'adapter.mjs': ADAPTER, 'chain.flow.ts': flowSrc('h2', ` + const left = async () => { await f.agent('left', { task: 'left', model: 'test-model' }); await f.run('printf L >> effects'); }; + const right = async () => { await f.agent('right', { task: 'right', model: 'test-model' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`) } }); +add({ name: 'K4', adapter: true, extraArgs: ['--local-agent'], files: { 'adapter.mjs': ADAPTER, 'chain.flow.ts': flowSrc('k4', ` + const g = arguments[0]; + ${LLM_OUT} + const left = async () => { await g.llm('left', { output, model: 'test-model' }); await f.run('printf L >> effects'); }; + const right = async () => { await g.llm('right', { output, model: 'test-model' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`, { fnExpr: true }) } }); +add({ name: 'I1', files: { + 'child.flow.ts': `${SURF} +export default flow('child', async (f, input) => { + await Promise.all([f.run('printf first'), f.run('printf second')]); + await f.run('printf ' + input.token + ' >> effects'); + f.done('success'); +}); +`, + 'chain.flow.ts': flowSrc('i1', ` + const left = async () => { await f.dispatch('child', { token: 'x' }); await f.run('printf L >> effects'); }; + const right = async () => { await f.dispatch('child', { token: 'y' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`, { header: `, { use: ['./child.flow.ts'] }` }) } }); +add({ name: 'K1', files: { 'chain.flow.ts': flowSrc('k1', ` + const pause = () => sleep(300); + const late = async () => { await Promise.all([pause(), pause()]); await f.run('printf L >> effects'); }; + const fast = async () => { await f.run('sleep 0.2; printf A >> effects'); await f.run('sleep 0.2; printf B >> effects'); await f.run('printf C >> effects'); }; + await Promise.all([fast(), late()]);`, { pre: `import { setTimeout as sleep } from 'node:timers/promises';\n` }) } }); +add({ name: 'K2b', files: { 'chain.flow.ts': flowSrc('k2b', ` + const a = async () => { await f.run('sleep 0.3; printf A >> effects'); signal(); }; + const b = async () => { await f.run('sleep 0.1; printf B >> effects'); signal(); }; + const c = async () => { await Promise.all([ready(), ready()]); await f.run('printf C >> effects'); }; + await Promise.all([a(), b(), c()]);`, { pre: `let signal; const first = new Promise(r => { signal = r; });\nconst ready = async () => { await first; };\n` }) } }); +add({ name: 'K3', files: { 'chain.flow.ts': flowSrc('k3', ` + const out = []; + const a = async () => { out.push(await f.run('sleep 0.3; printf a')); }; + const b = async () => { out.push(await f.run('sleep 0.1; printf b')); }; + await Promise.all([a(), b()]); + await f.run('printf ' + out.join('') + ' >> effects');`) }, expect: r => /^(ab|ba)Z$/.test(r.effects) }); +add({ name: 'K5b', files: { 'chain.flow.ts': flowSrc('k5b', ` + const tree = async (d) => { if (d === 0) return; await Promise.all([tree(d - 1), tree(d - 1)]); }; + await f.run('printf A >> effects'); + await tree(12); + try { await f.run('printf B >> effects'); } catch (e) { void e; }`) }, expect: r => r.effects.includes('B') }); +add({ name: 'K13b', files: { 'chain.flow.ts': `${SURF} +export default flow('k13b', async f => { + const b = async () => { await f.run('sleep 0.4; printf B >> effects'); await f.run('printf C >> effects'); }; + const a = async () => { await f.run('sleep 0.1; printf A >> effects'); await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); f.done('success'); }; + await Promise.all([b(), a()]); +}); +` } }); + +export default S; +export { STALL, SURF, flowSrc, ADAPTER, HS, P_BIND, P_HAND, CHAIN, TAIL5, G3, NAT, impl, W2, add }; diff --git a/evidence/native-parallel-review8/s2.mjs b/evidence/native-parallel-review8/s2.mjs new file mode 100644 index 000000000..81fc5f813 --- /dev/null +++ b/evidence/native-parallel-review8/s2.mjs @@ -0,0 +1,181 @@ +// Review-6 attack scenarios. +import { STALL, SURF, flowSrc, HS, P_BIND, G3, NAT, TAIL5, W2, impl } from './s.mjs'; +const S = []; +const add = (s) => S.push({ sides: HS, ...s }); +const FORCED = [['forced', 'forced'], ['base', 'base']]; + +// ---------- entry-file rule bypass (natural, unforced) ---------- +// The entry defines `flow` locally; the screen sees `export default flow()`, +// but the loaded definition is impl.ts's, whose module scope binds Promise. +const BYPASS = `import impl from './impl.ts'; +const flow = (..._args: unknown[]) => impl; +export default flow('decoy', async f => { + await f.run('printf decoy'); +}); +`; +// A spec-exact Promise.all built only from registered combinators; its one +// unregistered join is a *member* of a registered all. +const P_WRAP = `const Promise = { all: (xs) => globalThis.Promise.all([new globalThis.Promise((res, rej) => { const out = []; let n = xs.length; xs.forEach((x, i) => globalThis.Promise.all([x]).then(([v]) => { out[i] = v; if (--n === 0) res(out); }, rej)); })]).then(([v]) => v) };`; +const P_RACE = `const Promise = { all: (xs) => globalThis.Promise.race(xs) };`; +add({ name: 'R1', files: { 'chain.flow.ts': BYPASS, 'impl.ts': impl('r1', P_WRAP, G3) } }); +add({ name: 'R1w', files: { 'chain.flow.ts': BYPASS, 'impl.ts': impl('r1w', P_WRAP, W2 + G3) } }); +add({ name: 'R1wn', files: { 'chain.flow.ts': BYPASS, 'impl.ts': impl('r1wn', P_WRAP, W2 + NAT) } }); +add({ name: 'R2w', files: { 'chain.flow.ts': BYPASS, 'impl.ts': impl('r2w', P_RACE, W2 + G3) } }); +add({ name: 'R3w', files: { 'chain.flow.ts': BYPASS, 'impl.ts': impl('r3w', P_BIND, W2 + G3) } }); +add({ name: 'R3', files: { 'chain.flow.ts': BYPASS, 'impl.ts': impl('r3', P_BIND, G3) } }); +// same bypass, `flow` imported from a local helper module +add({ name: 'R4w', files: { + 'chain.flow.ts': `import { flow } from './wrap.ts'; +export default flow('decoy', async f => { + await f.run('printf decoy'); +}); +`, + 'wrap.ts': `import impl from './impl.ts';\nexport const flow = (..._args: unknown[]) => impl;\n`, + 'impl.ts': impl('r4w', P_WRAP, W2 + G3) } }); +// Without the bypass the wrapped all is serial (control) +add({ name: 'R1c', files: { 'chain.flow.ts': `${SURF}\n${P_WRAP}\nexport default flow('r1c', async f => {\n${W2}${G3}${TAIL5}` } }); + +// ---------- runtime rule with eligibility forced on ---------- +const forced = (name, body, pre = '') => ({ name, sides: FORCED, files: { 'chain.flow.ts': flowSrc(name.toLowerCase(), body, { pre }) } }); +S.push(forced('FRrace', ` + await f.run('sleep 0.2; printf W'); + await Promise.race([f.run('sleep 0.3; printf A'), f.run('sleep 0.1; printf B')]); + await f.run('printf X >> effects');`)); +S.push(forced('FRany', ` + await f.run('sleep 0.2; printf W'); + await Promise.any([f.run('sleep 0.3; printf A'), f.run('sleep 0.1; printf B')]); + await f.run('printf X >> effects');`)); +S.push(forced('FRnestrace', ` + await f.run('sleep 0.2; printf W'); + await Promise.all([Promise.race([f.run('sleep 0.3; printf A'), f.run('sleep 0.1; printf B')]), f.run('printf C')]); + await f.run('printf X >> effects');`)); +S.push(forced('FRdefer', ` + await f.run('sleep 0.2; printf W'); + let signal; const first = new Promise(r => { signal = r; }); + const a = async () => { await f.run('sleep 0.3; printf A >> effects'); signal(); }; + const b = async () => { await f.run('sleep 0.1; printf B >> effects'); signal(); }; + const c = async () => { await Promise.all([first, f.run('printf c0')]); await f.run('printf C >> effects'); }; + await Promise.all([a(), b(), c()]);`)); +S.push(forced('FRthen', ` + await f.run('sleep 0.2; printf W'); + const sa = f.run('sleep 0.3; printf A'); + const th = { then: (r, j) => sa.then(r, j) }; + await Promise.all([th, f.run('sleep 0.1; printf B')]); + await f.run('printf X >> effects');`)); +S.push(forced('FRsettled', ` + await f.run('sleep 0.2; printf W'); + await Promise.allSettled([f.run('sleep 0.3; exit 3', { onNonZero: 'record' }), f.run('sleep 0.1; printf B')]); + await f.run('printf X >> effects');`)); +S.push(forced('FRset', ` + await f.run('sleep 0.2; printf W'); + await Promise.all(new Set([f.run('sleep 0.3; printf A'), f.run('sleep 0.1; printf B')])); + await f.run('printf X >> effects');`)); +S.push(forced('FRgen', ` + await f.run('sleep 0.2; printf W'); + function* g() { yield f.run('sleep 0.3; printf A'); yield f.run('sleep 0.1; printf B'); } + await Promise.all(g()); + await f.run('printf X >> effects');`)); +S.push(forced('FRthenagg', ` + await f.run('sleep 0.2; printf W'); + await Promise.all([f.run('sleep 0.3; printf A'), f.run('sleep 0.1; printf B')]).then(v => v); + await f.run('printf X >> effects');`)); +S.push(forced('FRmicro', ` + await f.run('sleep 0.2; printf W'); + const a = async () => { await f.run('sleep 0.3; printf A'); await new Promise(r => queueMicrotask(r)); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await new Promise(r => process.nextTick(r)); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.2; printf C'); await new Promise(r => setImmediate(r)); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]); + await f.run('printf X >> effects');`)); +S.push(forced('FRcatch', ` + await f.run('sleep 0.2; printf W'); + const a = async () => { await f.run('sleep 0.1; printf A'); throw new Error('a'); }; + const b = async () => { await f.run('sleep 0.3; printf B'); throw new Error('b'); }; + try { await Promise.all([a(), b()]); } catch (e) { void e; } + await f.run('sleep 0.5; printf X >> effects');`)); +S.push(forced('FRfinally', ` + await f.run('sleep 0.2; printf W'); + const a = async () => { try { await f.run('sleep 0.3; printf A'); } finally { await f.run('printf F >> effects'); } }; + const b = async () => { await f.run('sleep 0.1; printf B'); }; + await Promise.all([a(), b()]); + await f.run('printf X >> effects');`)); +S.push(forced('FRiter', ` + await f.run('sleep 0.2; printf W'); + const ps = [f.run('sleep 0.3; printf A'), f.run('sleep 0.1; printf B')]; + for await (const v of ps) { void v; } + await f.run('printf X >> effects');`)); +// forced wrapped-all directly in the entry (no bypass needed) +S.push({ name: 'FRwrap', sides: FORCED, files: { 'chain.flow.ts': `${SURF}\n${`const PW = ${P_WRAP.slice('const Promise = '.length).replace(/;$/, '')};`}\nexport default flow('frwrap', async f => {\n${W2} await PW.all([f.run('sleep 0.5; printf A'), f.run('printf B'), f.run('sleep 0.1; printf C')]);\n${TAIL5}` } }); + +// ---------- entry-file rule probes (natural) ---------- +add({ name: 'E1factory', files: { 'chain.flow.ts': `${SURF} +const make = () => flow('e1', async f => { +${NAT}${TAIL5}export default make(); +` } }); +add({ name: 'E2helper', files: { + 'chain.flow.ts': flowSrc('e2', ` + const a = async () => { await f.run('sleep 0.3; printf A'); await pause(); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + await Promise.all([a(), b()]);`, { pre: `import { pause } from './helper.ts';\n` }), + 'helper.ts': `export const pause = async () => { await new Promise(r => setTimeout(r, 50)); };\n` } }); +add({ name: 'E3dyn', files: { + 'chain.flow.ts': flowSrc('e3', ` + const a = async () => { await f.run('sleep 0.3; printf A'); await import('./helper.ts'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + await Promise.all([a(), b()]);`), + 'helper.ts': `export const x = 1;\n` } }); +add({ name: 'E4json', files: { + 'chain.flow.ts': flowSrc('e4', N2body(), { pre: `import data from './d.json' with { type: 'json' };\nvoid data;\n` }), + 'd.json': `{"k":"v"}` } }); +add({ name: 'E4jsonuse', files: { + 'chain.flow.ts': flowSrc('e4u', ` + const a = async () => { await f.run('sleep 0.3; printf A'); await f.run('printf ' + data.k + ' >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + await Promise.all([a(), b()]);`, { pre: `import data from './d.json' with { type: 'json' };\n` }), + 'd.json': `{"k":"a"}` } }); +add({ name: 'E5ns', files: { 'chain.flow.ts': `${SURF} +import * as surface from '@relayflows/surface'; +export default surface.flow('e5', async f => { +${NAT}${TAIL5}` } }); +function N2body() { return ` + const a = async () => { await f.run('sleep 0.3; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.2; printf C'); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]);`; } + +// ---------- upgrade / rollback ---------- +const UP = [['p2050', 'head'], ['p2051', 'head']]; +const CI4 = flowSrc('ci4', ` + await f.run('printf a >> effects'); + await Promise.resolve(f.run('printf b >> effects')); + await Promise.all([f.run('printf c >> effects'), f.run('printf d >> effects')]); + await f.run('test -f release || { touch stalled; sleep 120; }; printf y >> effects', { timeout: '5m' }); + await Promise.all([Promise.resolve(f.run('printf e >> effects')), Promise.resolve(f.run('printf g >> effects'))]);`); +const CI5 = flowSrc('ci5', ` + await f.run('printf a >> effects'); + await Promise.resolve(f.run('printf b >> effects')); + await Promise.all([f.run('printf c >> effects'), f.run('printf d >> effects')]); + await f.run('printf e >> effects'); + await f.run('test -f release || { touch stalled; sleep 120; }; printf y >> effects', { timeout: '5m' }); + await Promise.all([Promise.resolve(f.run('printf g >> effects')), Promise.resolve(f.run('printf h >> effects'))]);`); +const A1b = ` + const left = async () => { + await Promise.all([f.run('sleep 0.3; printf A'), f.run('printf B')]); + await f.run('printf L >> effects'); + }; + const right = async () => { + await Promise.all([f.run('printf C'), f.run('sleep 0.3; printf D')]); + await f.run('printf R >> effects'); + }; + await Promise.all([left(), right()]);`; +const B1b = ` + const left = async () => { await f.run('printf A'); await f.run('printf B'); await f.run('printf L >> effects'); }; + const right = async () => { await Promise.all([f.run('printf C'), f.run('printf D')]); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`; +for (const [n, src] of [['CI4', CI4], ['CI5', CI5], ['A1', flowSrc('a1', A1b)], ['B1', flowSrc('b1', B1b)], ['N2', flowSrc('n2', N2body())]]) { + S.push({ name: 'U' + n, sides: UP, files: { 'chain.flow.ts': src } }); + S.push({ name: 'RB' + n, sides: [['head', 'p2050'], ['head', 'p2051']], secondResume: 'head', + expect: r => r.code1 !== 0 && !r.effects1.includes('Z') && r.effects.includes('Z'), + files: { 'chain.flow.ts': src } }); +} + +export default S; diff --git a/evidence/native-parallel-review8/s3.mjs b/evidence/native-parallel-review8/s3.mjs new file mode 100644 index 000000000..4f6fb0375 --- /dev/null +++ b/evidence/native-parallel-review8/s3.mjs @@ -0,0 +1,55 @@ +// FB set (eligibility forced) + secrets. +import { SURF, flowSrc, ADAPTER, NAT, G3, P_BIND, TAIL5 } from './s.mjs'; +const F = [['forced', 'forced']]; +const LLM_OUT = `const output = { type: 'object', properties: { message: { type: 'string' } }, required: ['message'] };`; +const refused = (forbid) => r => r.fresh === true && r.code !== 0 && ![...forbid].some(c => r.effects.includes(c)); +const S = [ + { name: 'FB1', sides: F, adapter: true, extraArgs: ['--local-agent'], okIf: r => refused('LR')(r) && !r.calls, + extraCheck: root => { try { return { calls: require('fs').readFileSync(root + '/calls', 'utf8').length }; } catch { return { calls: 0 }; } }, + files: { 'adapter.mjs': ADAPTER, 'chain.flow.ts': flowSrc('fb1', ` + ${LLM_OUT} + const left = async () => { await f.run('printf l'); await f.llm('left', { output, model: 'test-model' }); await f.run('printf L >> effects'); }; + const right = async () => { await f.run('sleep 0.2; printf r'); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`) } }, + { name: 'FB2', sides: F, adapter: true, extraArgs: ['--local-agent'], okIf: refused('E'), files: { 'adapter.mjs': ADAPTER, 'chain.flow.ts': flowSrc('fb2', ` + ${LLM_OUT} + await Promise.all([f.run('printf a'), f.run('printf b')]); + try { await f.llm('x', { output, model: 'test-model' }); } catch (e) { void e; } + await f.run('printf E >> effects');`) } }, + { name: 'FB3', sides: F, okIf: refused('C'), files: { 'chain.flow.ts': flowSrc('fb3', ` + await Promise.all([f.run('printf a'), f.run('printf b')]); + await new Promise(r => setTimeout(r, 100)); + const late = async () => { await f.run('printf C >> effects'); }; + await late();`) } }, + { name: 'FB3c', sides: F, okIf: refused('CD'), files: { 'chain.flow.ts': flowSrc('fb3c', ` + const a = async () => { await new Promise(r => setTimeout(r, 100)); try { await f.run('printf C >> effects'); } catch (e) { void e; } }; + const b = async () => { await f.run('sleep 0.4; printf B'); await f.run('printf D >> effects'); }; + await Promise.all([a(), b()]);`) } }, + { name: 'FB4', sides: F, okIf: refused('B'), files: { 'chain.flow.ts': flowSrc('fb4', ` + const tree = async (d) => { if (d === 0) return; await Promise.all([tree(d - 1), tree(d - 1)]); }; + await f.run('printf A >> effects'); + await tree(12); + try { await f.run('printf B >> effects'); } catch (e) { void e; }`) } }, + { name: 'FB6', sides: F, files: { 'chain.flow.ts': flowSrc('fb6', ` +${NAT}`) } }, + { name: 'FB7', sides: F, okIf: refused('X'), files: { 'chain.flow.ts': `${SURF}\n${P_BIND}\nexport default flow('fb7', async f => {\n${G3}${TAIL5}` } }, + { name: 'FB8', sides: F, okIf: refused('q'), files: { 'chain.flow.ts': flowSrc('fb8', ` + const v = async () => { await new Promise(r => setTimeout(r, 100)); try { await f.run('printf v >> effects'); } catch (e) { void e; } }; + await Promise.all([f.run('sleep 0.6; printf 1'), f.run('sleep 0.6; printf 2'), f.run('sleep 0.6; printf 3'), f.run('sleep 0.6; printf 4'), + f.run('sleep 0.6; printf 5'), f.run('sleep 0.6; printf 6'), f.run('sleep 0.6; printf 7'), f.run('sleep 0.6; printf 8'), + f.run('printf q >> effects'), v()]);`) } }, +]; +// secrets +const SEC = ` + await Promise.all([ + f.run('printf "%s" "\${R6_TOK:-unset}" > /granted; sleep 0.2', { secrets: ['R6_TOK'] }), + f.run('printf "%s" "\${R6_TOK:-unset}" > /ungranted; sleep 0.1'), + ]); + await f.run('printf "%s" "\${R6_TOK:-unset}" > /later');`; +const secCheck = root => { const fs = require('fs'); const rd = n => { try { return fs.readFileSync(root + '/' + n, 'utf8'); } catch { return 'missing'; } }; + return { sec: [rd('granted') === 'r6-secret-value' ? 'G:ok' : 'G:' + (rd('granted') === 'unset' ? 'unset' : rd('granted') === 'missing' ? 'missing' : 'other'), + rd('ungranted') === 'unset' ? 'U:unset' : rd('ungranted') === 'missing' ? 'U:missing' : 'U:LEAK', rd('later') === 'unset' ? 'L:unset' : rd('later') === 'missing' ? 'L:missing' : 'L:LEAK'].join(' ') }; }; +const HS = [['head', 'head'], ['base', 'base']]; +S.push({ name: 'S1', sides: HS, env: { R6_TOK: 'r6-secret-value' }, extraCheck: secCheck, files: { 'chain.flow.ts': flowSrc('s1', SEC) } }); +S.push({ name: 'S2missing', sides: HS, env: { R6_TOK: '' }, okIf: r => r.code !== 0, extraCheck: secCheck, files: { 'chain.flow.ts': flowSrc('s2', SEC.replaceAll('R6_TOK', 'R6_ABSENT')) } }); +export default S; diff --git a/evidence/native-parallel-review8/s4.mjs b/evidence/native-parallel-review8/s4.mjs new file mode 100644 index 000000000..4bb8fa470 --- /dev/null +++ b/evidence/native-parallel-review8/s4.mjs @@ -0,0 +1,20 @@ +import { SURF, NAT, TAIL5, W2 } from './s.mjs'; +const PATCH = `const I = Function('return this')()['Pro' + 'mise']; +const resolve = I.resolve; +let gate; +I.resolve = function (x) { + if (this !== I || !(x instanceof I) || !/at (Promise|Function)\\.all /.test(new Error().stack)) return resolve.call(this, x); + if (gate === undefined) { + let open; const g = new I(r => { open = r; }); g.open = open; gate = g; + queueMicrotask(() => { gate = undefined; }); + } + const g = gate; + x.then(v => g.open(v), () => {}); + return g; +}; +`; +export default [ + { name: 'R5n', sides: [['head', 'head'], ['base', 'base']], files: { + 'chain.flow.ts': `${SURF}\nimport './lib/p.mjs';\nexport default flow('r5n', async f => {\n${W2}${NAT}${TAIL5}`, + 'lib/p.mjs': PATCH } }, +]; diff --git a/evidence/native-parallel-review8/s7.mjs b/evidence/native-parallel-review8/s7.mjs new file mode 100644 index 000000000..dc7ed4882 --- /dev/null +++ b/evidence/native-parallel-review8/s7.mjs @@ -0,0 +1,182 @@ +// Review-7 new attack scenarios for flows#667 (head e3503c08). +import { SURF, flowSrc, NAT, W2, TAIL5 } from './s.mjs'; +const HS = [['head', 'head'], ['base', 'base']]; +const S = []; +const add = (s) => S.push({ sides: HS, ...s }); +const STALL = ` await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' });`; +const perm = (letters) => (e) => e.length === letters.length && [...letters].every(c => e.split(c).length - 1 === letters.split(c).length - 1); + +// ---- HY: the instrumentation re-evaluates the body with a parameter named +// __certifyParallelBranch; an authored binding of that name captures it. +add({ name: 'HY1', files: { 'chain.flow.ts': flowSrc('hy1', ` + const __certifyParallelBranch = async () => { await f.run('printf P >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B >> effects'); }; + await Promise.all([__certifyParallelBranch(), b()]);`) }, + expect: r => perm('PBZ')(r.effects) }); +add({ name: 'HY1s', files: { 'chain.flow.ts': `${SURF} +export default flow('hy1s', async f => { + const __certifyParallelBranch = async () => { await f.run('printf P >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B >> effects'); }; + await Promise.all([__certifyParallelBranch(), b()]); + f.done('success'); +}); +` }, noZ: true, okIf: r => r.code === 0 && perm('PB')(r.effects) }); +add({ name: 'HY2', files: { 'chain.flow.ts': flowSrc('hy2', ` + const __certifyParallelBranch = await f.run('printf V'); + const a = async () => { await f.run('sleep 0.2; printf A >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B >> effects'); }; + await Promise.all([a(), b()]);`) }, expect: r => perm('ABZ')(r.effects) }); + +// ---- PAR: parenthesized branch-call members pass the grammar (unwrap) but +// the call-site instrumentation only wraps bare CallExpressions. +add({ name: 'PAR1', files: { 'chain.flow.ts': flowSrc('par1', ` + const a = async () => { await f.run('sleep 0.3; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.2; printf C'); await f.run('printf c >> effects'); }; + await Promise.all([(a()), (b()), (c())]);`) }, expect: r => perm('abcZ')(r.effects) }); +add({ name: 'PAR2', files: { 'chain.flow.ts': flowSrc('par2', ` + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + await Promise.all([((async () => { await f.run('sleep 0.3; printf A'); await f.run('printf a >> effects'); })()), b()]);`) }, + expect: r => perm('abZ')(r.effects) }); + +// ---- EQ: certified shapes whose runtime behaviour must match base. +add({ name: 'EQ1twice', files: { 'chain.flow.ts': flowSrc('eq1', ` + const a = async () => { await f.run('sleep 0.2; printf A'); await f.run('printf a >> effects'); }; + await Promise.all([a(), a()]); + await f.run('printf X >> effects');`) }, allowDupLetters: true, + expectedCounts: { 'sleep 0.2; printf A': 2, 'printf a >> effects': 2 }, expect: r => r.effects === 'aaXZ' }); +add({ name: 'EQ2ret', files: { 'chain.flow.ts': flowSrc('eq2', ` + const a = async () => { await f.run('sleep 0.3; printf A'); return await f.run('printf a'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); return await f.run('printf b'); }; + const r = await Promise.all([a(), b()]); + await f.run('printf ' + r[0] + r[1] + ' >> effects');`) }, expect: r => r.effects === 'abZ' }); +add({ name: 'EQ3midret', files: { 'chain.flow.ts': flowSrc('eq3', ` + const a = async () => { await f.run('sleep 0.2; printf A >> effects'); return await f.run('printf R >> effects'); await f.run('printf Q >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B >> effects'); }; + await Promise.all([a(), b()]); + await f.run('printf X >> effects');`) }, expect: r => perm('ABRXZ')(r.effects) && !r.effects.includes('Q') }); +add({ name: 'EQ4fail', files: { 'chain.flow.ts': flowSrc('eq4', ` + const a = async () => { await f.run('sleep 0.1; printf F >> effects; exit 1'); await f.run('printf G >> effects'); }; + const b = async () => { await f.run('sleep 0.4; printf B >> effects'); await f.run('printf C >> effects'); }; + await Promise.all([a(), b()]);`) }, okIf: r => r.code !== 0 && !r.effects.includes('G') && !r.effects.includes('C') && !r.effects.includes('Z') }); +add({ name: 'EQ5wide', files: { 'chain.flow.ts': flowSrc('eq5', ` + ${Array.from({ length: 12 }, (_, i) => `const b${i} = async () => { await f.run('sleep 0.${1 + (i * 7) % 3}; printf S${i}'); await f.run('printf ${'abcdefghijkl'[i]} >> effects'); };`).join('\n ')} + await Promise.all([${Array.from({ length: 12 }, (_, i) => `b${i}()`).join(', ')}]); + await f.run('printf X >> effects');`) }, expect: r => perm('abcdefghijklXZ')(r.effects) }); +add({ name: 'EQ5stall', files: { 'chain.flow.ts': flowSrc('eq5s', ` + ${Array.from({ length: 10 }, (_, i) => `const b${i} = async () => { await f.run('sleep 0.${1 + (i * 7) % 3}; printf S${i}'); await f.run('printf ${'abcdefghij'[i]} >> effects'); };`).join('\n ')} + const s = async () => { await f.run('sleep 0.15; printf s'); await f.run('test -f release || { touch stalled; sleep 120; }; printf Y >> effects', { timeout: '5m' }); await f.run('printf y >> effects'); }; + await Promise.all([${Array.from({ length: 10 }, (_, i) => `b${i}()`).join(', ')}, s()]); + await f.run('printf X >> effects');`) }, expect: r => perm('abcdefghijYyXZ')(r.effects) }); +add({ name: 'EQ6expr', files: { 'chain.flow.ts': flowSrc('eq6', ` + const a = async () => await f.run('sleep 0.2; printf A >> effects'); + const b = async () => await Promise.all([f.run('sleep 0.1; printf B >> effects'), f.run('sleep 0.3; printf C >> effects')]); + await Promise.all([a(), b()]); + await f.run('printf X >> effects');`) }, expect: r => perm('ABCXZ')(r.effects) }); +add({ name: 'EQ7record', files: { 'chain.flow.ts': flowSrc('eq7', ` + const a = async () => { const r = await f.run('sleep 0.2; exit 3', { onNonZero: 'record' }); await f.run('printf R' + r.exitCode + ' >> effects'); }; + const b = async () => { const v = await f.run('sleep 0.1; printf B'); await f.run('printf ' + v + ' >> effects'); }; + await Promise.all([a(), b()]); + await f.run('printf X >> effects');`) }, expect: r => r.effects.includes('R3') && perm('BR3XZ')(r.effects) }); +add({ name: 'EQ8throw', files: { 'chain.flow.ts': flowSrc('eq8', ` + const x = await f.run('printf W'); + const a = async () => { await f.run('printf ' + x.y.z + ' >> effects'); }; + const b = async () => { await f.run('sleep 0.2; printf B >> effects'); await f.run('printf C >> effects'); }; + await Promise.all([a(), b()]);`) }, okIf: r => r.code !== 0 && !r.effects.includes('Z') }); +// Branch whose first statement is a nested group, then a follow-up that joins +// the nested members; crash lands inside the other branch. +add({ name: 'EQ9nested', files: { 'chain.flow.ts': flowSrc('eq9', ` + await f.run('sleep 0.1; printf W'); + const a = async () => { await Promise.all([f.run('sleep 0.3; printf A1'), f.run('sleep 0.1; printf A2')]); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.2; printf B'); await f.run('test -f release || { touch stalled; sleep 120; }; printf Y >> effects', { timeout: '5m' }); await f.run('printf b >> effects'); }; + await Promise.all([a(), b()]); + await f.run('printf X >> effects');`) }, expect: r => perm('aYbXZ')(r.effects) }); + +// ---- PL: NODE_OPTIONS preloads. The entry is certified; the patch runs +// before the SDK snapshots the intrinsics, so the snapshot accepts it. +const R5PATCH = `const I = Function('return this')()['Pro' + 'mise']; +const resolve = I.resolve; +let gate; +I.resolve = function (x) { + if (this !== I || !(x instanceof I) || !/at (Promise|Function)\\.all /.test(new Error().stack)) return resolve.call(this, x); + if (gate === undefined) { + let open; const g = new I(r => { open = r; }); g.open = open; gate = g; + queueMicrotask(() => { gate = undefined; }); + } + const g = gate; + x.then(v => g.open(v), () => {}); + return g; +}; +`; +const NATW = flowSrc('pl', ` + await f.run('sleep 0.2; printf W'); +${NAT} await f.run('printf X >> effects');`); +const pl = (name, patch, extra = {}) => add({ name, env: { NODE_OPTIONS: `--import=/lib/pre.mjs` }, + files: { 'chain.flow.ts': NATW.replace("flow('pl'", `flow('${name.toLowerCase()}'`), 'lib/pre.mjs': patch }, expect: r => perm('abcXZ')(r.effects), ...extra }); +pl('PL1r5', R5PATCH); +pl('PL2then', `const t = Promise.prototype.then; +Promise.prototype.then = function then(a, b) { return t.call(this, typeof a === 'function' ? v => a(v) : a, typeof b === 'function' ? e => b(e) : b); }; +`); +pl('PL3sub', `const N = globalThis.Promise; +class P extends N {} +globalThis.Promise = P; +`); +pl('PL4ctor', `setTimeout(() => { + const N = globalThis.Promise; + class P extends N {} + Object.defineProperty(N.prototype, 'constructor', { value: P, writable: true, configurable: true }); +}, 120).unref(); +`); +pl('PL5species', `setTimeout(() => { + const N = globalThis.Promise; + class P extends N {} + Object.defineProperty(N, Symbol.species, { get() { return P; }, configurable: true }); +}, 120).unref(); +`); + +// ---- secrets in parallel branches (granted / ungranted / later) +const SEC = ` + const g = async () => { await f.run('sleep 0.1; printf G'); await f.run('printf "%s" "\${R7_TOK:-unset}" > /granted2; sleep 0.1', { secrets: ['R7_TOK'] }); }; + const u = async () => { await f.run('sleep 0.15; printf U'); await f.run('printf "%s" "\${R7_TOK:-unset}" > /ungranted2'); }; + await Promise.all([ + f.run('printf "%s" "\${R7_TOK:-unset}" > /granted; sleep 0.2', { secrets: ['R7_TOK'] }), + f.run('printf "%s" "\${R7_TOK:-unset}" > /ungranted; sleep 0.1'), + g(), u(), + ]); + await f.run('printf "%s" "\${R7_TOK:-unset}" > /later');`; +const secCheck = root => { + const fs = require('fs'); + const rd = n => { try { return fs.readFileSync(root + '/' + n, 'utf8'); } catch { return 'missing'; } }; + const cls = (n, want) => { const v = rd(n); return `${n}:${v === 'r7-secret-value' ? (want ? 'ok' : 'LEAK') : v}`; }; + return { sec: [cls('granted', true), cls('granted2', true), cls('ungranted', false), cls('ungranted2', false), cls('later', false)].join(' ') }; +}; +add({ name: 'SEC7', env: { R7_TOK: 'r7-secret-value' }, extraCheck: secCheck, noZ: false, files: { 'chain.flow.ts': flowSrc('sec7', SEC) }, + okIf: r => r.code === 0 && r.sec === 'granted:ok granted2:ok ungranted:unset ungranted2:unset later:unset' }); + +add({ name: 'PL7mid', env: { NODE_OPTIONS: `--import=/lib/pre.mjs` }, expect: r => perm('abcXZ')(r.effects), + files: { 'chain.flow.ts': flowSrc('pl7', ` + await f.run('touch /wstart; sleep 0.3; printf W'); +${NAT} await f.run('printf X >> effects');`), + 'lib/pre.mjs': `import fs from 'node:fs'; +const t = setInterval(() => { if (fs.existsSync('/wstart')) { clearInterval(t); +${R5PATCH}} }, 2); +t.unref(); +` } }); +add({ name: 'PL7neutral', env: { NODE_OPTIONS: `--import=/lib/pre.mjs` }, expect: r => perm('abcXZ')(r.effects), + files: { 'chain.flow.ts': flowSrc('pl7n', ` + await f.run('touch /wstart; sleep 0.3; printf W'); +${NAT} await f.run('printf X >> effects');`), + 'lib/pre.mjs': `import fs from 'node:fs'; +const t = setInterval(() => { if (fs.existsSync('/wstart')) { clearInterval(t); + const I = globalThis.Promise; const resolve = I.resolve; I.resolve = function resolve2(x) { return resolve.call(this, x); }; +} }, 2); +t.unref(); +` } }); +pl('PL6child', `if (process.argv.some(a => a.includes('authored-node-entry'))) setTimeout(() => {\n${R5PATCH}}, 150).unref();\n`); +pl('PL6late', `setTimeout(() => {\n${R5PATCH}}, 150).unref();\n`); +add({ name: 'SEC7m', env: { R7_TOK: 'r7-secret-value', RELAY_SECRET_ENV_NAMES: '["R7_TOK"]' }, extraCheck: secCheck, files: { 'chain.flow.ts': flowSrc('sec7m', SEC) }, + okIf: r => r.code === 0 && r.sec === 'granted:ok granted2:ok ungranted:unset ungranted2:unset later:unset' }); +add({ name: 'SEC7miss', env: { RELAY_SECRET_ENV_NAMES: '["R7_TOK"]' }, extraCheck: secCheck, files: { 'chain.flow.ts': flowSrc('sec7x', SEC) }, + okIf: r => r.code !== 0 && !/granted:/.test('') }); + +export default S; diff --git a/evidence/native-parallel-review8/sdk-build.log b/evidence/native-parallel-review8/sdk-build.log new file mode 100644 index 000000000..1647e84a1 --- /dev/null +++ b/evidence/native-parallel-review8/sdk-build.log @@ -0,0 +1,3 @@ + +> @relayflows/sdk@2.0.51 build +> tsc && node scripts/make-cli-executable.mjs diff --git a/evidence/native-parallel-review8/sdk-dist-hashes.log b/evidence/native-parallel-review8/sdk-dist-hashes.log new file mode 100644 index 000000000..97c1576e8 --- /dev/null +++ b/evidence/native-parallel-review8/sdk-dist-hashes.log @@ -0,0 +1,8 @@ +ecb110f1d229eb85433719e449299b3deb882157e8b751f1e8c896e6491ca0e8 packages/sdk/dist/authored-flow-executor.js +1142a34c0501c052a35251cfa4d3ed94dad8c490e388dc0979f8f2f31c8094a6 packages/sdk/dist/authored-flow-lifecycle.js +e9d2f5d5ec3a0c76bfd3627db1fce05f89ee6788bf1b20c4a224f15ca8ac4039 packages/sdk/dist/authored-parallel-body.js +d3de59a59a88acf7458cf225bdc658346d462e937eb5d2abd63c124d05d36f86 packages/sdk/dist/authored-parallel-eligibility.js +ecb110f1d229eb85433719e449299b3deb882157e8b751f1e8c896e6491ca0e8 /w/sdk-head/dist/authored-flow-executor.js +1142a34c0501c052a35251cfa4d3ed94dad8c490e388dc0979f8f2f31c8094a6 /w/sdk-head/dist/authored-flow-lifecycle.js +e9d2f5d5ec3a0c76bfd3627db1fce05f89ee6788bf1b20c4a224f15ca8ac4039 /w/sdk-head/dist/authored-parallel-body.js +d3de59a59a88acf7458cf225bdc658346d462e937eb5d2abd63c124d05d36f86 /w/sdk-head/dist/authored-parallel-eligibility.js diff --git a/evidence/native-parallel-review8/sdk-focused-unit.log b/evidence/native-parallel-review8/sdk-focused-unit.log new file mode 100644 index 000000000..ff5d8bbf2 --- /dev/null +++ b/evidence/native-parallel-review8/sdk-focused-unit.log @@ -0,0 +1,20 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-parallel-eligibility.test.ts (10 tests) 23ms + ✓ tests/authored-parallel-body.test.ts (5 tests) 13ms + ✓ tests/communication-feature-secret-scoping.test.ts (1 test) 20ms + ✓ tests/authored-step-graph.test.ts (27 tests) 577ms + ✓ tests/authored-step-secrets.test.ts (1 test) 17ms +(node:6715) [FLOWS_ROOT_LEASE_LOST] Warning: authored root run_id=root-run attempt=1: lease_conflict: attempt has no active worker lease. Waiting for the kernel to retry it. +(Use `node --trace-warnings ...` to show where the warning was created) + ✓ tests/authored-root.test.ts (39 tests) 429ms + ✓ tests/worker-feature-secret-scoping.test.ts (2 tests) 741ms + ✓ agent worker uses the negotiated daemon capability for its real child 408ms + ✓ llm worker uses the negotiated daemon capability for its real child 332ms + ✓ tests/authored-flow-lifecycle-executor.test.ts (45 tests) 560ms + + Test Files 8 passed (8) + Tests 130 passed (130) + Start at 00:56:59 + Duration 2.91s (transform 881ms, setup 167ms, collect 10.23s, tests 2.38s, environment 1ms, prepare 461ms) diff --git a/evidence/native-parallel-review8/sdk-secrets-live.log b/evidence/native-parallel-review8/sdk-secrets-live.log new file mode 100644 index 000000000..044742816 --- /dev/null +++ b/evidence/native-parallel-review8/sdk-secrets-live.log @@ -0,0 +1,11 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-step-secrets-live.test.ts (2 tests) 1565ms + ✓ an authored shell child sees a delivered token only when its own f.run grants it 869ms + ✓ parallel authored shell children keep their own secret grants 695ms + + Test Files 1 passed (1) + Tests 2 passed (2) + Start at 00:57:05 + Duration 2.61s (transform 344ms, setup 8ms, collect 837ms, tests 1.56s, environment 0ms, prepare 36ms) diff --git a/evidence/native-parallel-review8/sdk-typecheck-tests.log b/evidence/native-parallel-review8/sdk-typecheck-tests.log new file mode 100644 index 000000000..3b1c199e9 --- /dev/null +++ b/evidence/native-parallel-review8/sdk-typecheck-tests.log @@ -0,0 +1,3 @@ + +> @relayflows/sdk@2.0.51 typecheck:tests +> tsc -p tsconfig.tests.json diff --git a/evidence/native-parallel-review8/sdk-typecheck.log b/evidence/native-parallel-review8/sdk-typecheck.log new file mode 100644 index 000000000..b41e9a5e0 --- /dev/null +++ b/evidence/native-parallel-review8/sdk-typecheck.log @@ -0,0 +1,3 @@ + +> @relayflows/sdk@2.0.51 typecheck +> tsc --noEmit && tsc -p tsconfig.type-tests.json diff --git a/evidence/native-parallel-review8/timing7.mjs b/evidence/native-parallel-review8/timing7.mjs new file mode 100644 index 000000000..8c9dab856 --- /dev/null +++ b/evidence/native-parallel-review8/timing7.mjs @@ -0,0 +1,55 @@ +// Native shape timing: 3 x 300 ms routes, each followed by a 100 ms dependent, then a join. +// Alternates head and base, 1 warm-up each, then N measured pairs. Timestamps come from the +// shell children themselves (date +%s%3N), so overlap is measured on the effects, not the journal. +import fs from 'node:fs'; +import path from 'node:path'; +import { spawnSync } from 'node:child_process'; +const N = Number(process.argv[2] ?? 10); +const SIDES = { + head: { cli: '/w/head/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules' }, + base: { cli: '/w/base/packages/sdk/dist/cli.js', nm: '/w/base/packages/sdk/node_modules' }, +}; +const step = (tag, secs) => `echo "${tag}0 $(date +%s%3N)" >> t; sleep ${secs}; echo "${tag}1 $(date +%s%3N)" >> t`; +const SRC = `import { flow } from '@relayflows/surface'; +export default flow('timing', async f => { + const a = async () => { await f.run('${step('RA', 0.3)}'); await f.run('${step('DA', 0.1)}'); }; + const b = async () => { await f.run('${step('RB', 0.3)}'); await f.run('${step('DB', 0.1)}'); }; + const c = async () => { await f.run('${step('RC', 0.3)}'); await f.run('${step('DC', 0.1)}'); }; + await Promise.all([a(), b(), c()]); + f.done('success'); +}); +`; +function once(side, i) { + const root = `/w/runs/timing/${side}-${i}`; + fs.rmSync(root, { recursive: true, force: true }); + fs.mkdirSync(root, { recursive: true }); + fs.writeFileSync(path.join(root, 'package.json'), '{"type":"module"}'); + fs.symlinkSync(SIDES[side].nm, path.join(root, 'node_modules')); + fs.writeFileSync(path.join(root, 'chain.flow.ts'), SRC); + const t0 = Date.now(); + const r = spawnSync(process.execPath, [SIDES[side].cli, 'run', '--no-observer-link', '--json', '--data-dir', path.join(root, 'data'), path.join(root, 'chain.flow.ts'), '--input', '{}'], + { cwd: root, env: { ...process.env, RELAYFLOWD_BIN: '/w/relayflowd-main' }, encoding: 'utf8' }); + const cli = Date.now() - t0; + const t = Object.fromEntries(fs.readFileSync(path.join(root, 't'), 'utf8').trim().split('\n').map(l => l.split(' ')).map(([k, v]) => [k, Number(v)])); + const routes = ['A', 'B', 'C'].map(x => [t[`R${x}0`], t[`R${x}1`]]); + const deps = ['A', 'B', 'C'].map(x => [t[`D${x}0`], t[`D${x}1`]]); + const overlap = (iv) => Math.max(...iv.map(v => v[0])) < Math.min(...iv.map(v => v[1])); + const first = Math.min(...routes.map(v => v[0])); + const last = Math.max(...deps.map(v => v[1])); + const mode = JSON.parse(spawnSync('python3', ['-c', `import sqlite3,json,glob +for f in sorted(glob.glob('${root}/data/runs/*.sqlite3')): + r=sqlite3.connect(f).execute("select payload from entries where entry_type='run.spawned' order by seq limit 1").fetchone() + s=json.loads(r[0]).get('spec',{}).get('steps',[{}])[0] + if s.get('id')=='authored-root': print(json.dumps(json.loads(s['instruction']).get('executionMode','absent'))); break`], { encoding: 'utf8' }).stdout || '"?"'); + fs.rmSync(root, { recursive: true, force: true }); + return { side, i, code: r.status, mode, cli, body: last - first, routeSpread: Math.max(...routes.map(v => v[0])) - first, + routesOverlap: overlap(routes), depsOverlap: overlap(deps) }; +} +const out = { head: [], base: [] }; +once('head', -1); once('base', -1); +for (let i = 0; i < N; i++) for (const side of i % 2 ? ['base', 'head'] : ['head', 'base']) { const r = once(side, i); out[side].push(r); console.log(JSON.stringify(r)); } +const q = (xs, p) => { const s = [...xs].sort((a, b) => a - b); return s[Math.min(s.length - 1, Math.floor(p * (s.length - 1) + 0.5))]; }; +for (const side of ['head', 'base']) { + const rs = out[side]; + console.log(`TIMING ${side} mode=${[...new Set(rs.map(r => r.mode))]} codes=${[...new Set(rs.map(r => r.code))]} body p50=${q(rs.map(r => r.body), 0.5)} max=${Math.max(...rs.map(r => r.body))} cli p50=${q(rs.map(r => r.cli), 0.5)} max=${Math.max(...rs.map(r => r.cli))} spread p50=${q(rs.map(r => r.routeSpread), 0.5)} routesOverlap=${rs.filter(r => r.routesOverlap).length}/${rs.length} depsOverlap=${rs.filter(r => r.depsOverlap).length}/${rs.length}`); +} diff --git a/packages/sdk/src/authored-flow-executor.ts b/packages/sdk/src/authored-flow-executor.ts index bbdd46838..2c8270dcb 100644 --- a/packages/sdk/src/authored-flow-executor.ts +++ b/packages/sdk/src/authored-flow-executor.ts @@ -290,7 +290,21 @@ export async function executeAuthoredFlow( const journalSteps: AuthoredFlowJournalStep[] = []; const authoredSteps: AuthoredFlowOperation[] = []; const memoryWrites = new MemoryWriteTracker(); - const lifecycle = new AuthoredFlowLifecycle(); + let parallelViolation: AuthoredFlowExecutionError | undefined; + let closeParallelSlots: ((reason: unknown) => void) | undefined; + let signalParallelFailure: ((reason: unknown) => void) | undefined; + const parallelFailure = options.executionMode === 'parallel' + ? new Promise((_resolve, reject) => { signalParallelFailure = reject; }) : undefined; + // A violation can occur synchronously before the body's promise is returned. + // Keep its rejection handled until the body is raced against it below. + void parallelFailure?.catch(() => {}); + const markParallelViolation = (message: string): void => { + parallelViolation ??= new AuthoredFlowExecutionError('step_failed', message); + closeParallelSlots?.(parallelViolation); + signalParallelFailure?.(parallelViolation); + }; + const lifecycle = new AuthoredFlowLifecycle(options.executionMode === 'parallel' + ? markParallelViolation : undefined); const activities = new AuthoredActivities(journal, options.rootRunId); const edgeOverrides = new Map(); const stepEdges = (step: string): AuthoredStepEdges | undefined => { @@ -305,13 +319,10 @@ export async function executeAuthoredFlow( let requestedCompletion: LoweredCompletionReason | undefined; let requestedDetail: string | undefined; let firstBodyTurn = true; - let parallelViolation: AuthoredFlowExecutionError | undefined; - let closeParallelSlots: ((reason: unknown) => void) | undefined; const qualify = (id: string): string => `${options.stepPrefix ?? ''}${id}`; const branchOrdinals = new Map(); const rejectParallel = (message: string): never => { - parallelViolation ??= new AuthoredFlowExecutionError('step_failed', message); - closeParallelSlots?.(parallelViolation); + markParallelViolation(message); throw parallelViolation; }; const assertParallelRunOnly = (kind: string): void => { @@ -867,7 +878,8 @@ export async function executeAuthoredFlow( ? instrumentParallelBody(definition.body, promise => lifecycle.certifyBranchPromise(promise)) : definition.body; const bodyPromise = lifecycle.runBody(() => body(context, input as Input)); - await bodyPromise; + if (parallelFailure === undefined) await bodyPromise; + else await Promise.race([bodyPromise, parallelFailure]); } catch (error) { bodyFailed = true; bodyFailure = error; diff --git a/packages/sdk/src/authored-flow-lifecycle.ts b/packages/sdk/src/authored-flow-lifecycle.ts index c2bc7f2ee..72e712fc0 100644 --- a/packages/sdk/src/authored-flow-lifecycle.ts +++ b/packages/sdk/src/authored-flow-lifecycle.ts @@ -22,6 +22,11 @@ const nativePromiseCatch = Promise.prototype.catch; const nativePromiseFinally = Promise.prototype.finally; const nativePromiseResolve = Promise.resolve; const nativePromiseReject = Promise.reject; +const nativePromisePrototypeConstructorDescriptor = Object.getOwnPropertyDescriptor(Promise.prototype, 'constructor'); +const nativePromisePrototypeConstructor = Promise.prototype.constructor; +const nativePromiseSpeciesDescriptor = Object.getOwnPropertyDescriptor(Promise, Symbol.species); +const nativePromiseSpeciesGetter = nativePromiseSpeciesDescriptor?.get; +const nativeFunctionToString = Function.prototype.toString; const activeLifecycle = new AsyncLocalStorage(); const stepOwners = new WeakMap [name, Promise[name] as unknown as Combinator])), ) as Readonly>; +const originallyNative = (value: unknown): boolean => typeof value === 'function' + && /\{\s*\[native code\]\s*\}/u.test(nativeFunctionToString.call(value)); +const nativeAtModuleLoad = [ + nativePromiseConstructor, nativePromiseThen, nativePromiseCatch, nativePromiseFinally, + nativePromiseResolve, nativePromiseReject, nativePromisePrototypeConstructor, + nativePromiseSpeciesGetter, nativeFunctionToString, ...Object.values(nativeCombinators), +].every(originallyNative); + +function sameDescriptor(actual: PropertyDescriptor | undefined, original: PropertyDescriptor | undefined): boolean { + return actual !== undefined && original !== undefined + && actual.configurable === original.configurable && actual.enumerable === original.enumerable + && actual.writable === original.writable && actual.value === original.value + && actual.get === original.get && actual.set === original.set; +} + +/** Preloaded code can replace an intrinsic before this module takes its snapshot. */ +function authoredProcessHasPreload(): boolean { + const preload = /--(?:import|require|loader|experimental-loader)(?:=|\s|$)|-r(?:=|\s|\S)/u; + return process.execArgv.some(arg => preload.test(arg)) + || preload.test(process.env['NODE_OPTIONS'] ?? ''); +} + const observedCombinators: Record = Object.fromEntries( COMBINATORS.map((name) => { const native = nativeCombinators[name]; @@ -88,7 +115,14 @@ let combinatorObservers = 0; /** An imported module must not substitute any primitive used to construct joins. */ export function parallelPromiseIntrinsicsIntact(): boolean { - if (Promise !== nativePromiseConstructor || Promise.prototype !== nativePromisePrototype + if (!nativeAtModuleLoad || authoredProcessHasPreload() + || Function.prototype.toString !== nativeFunctionToString + || Promise !== nativePromiseConstructor || Promise.prototype !== nativePromisePrototype + || !sameDescriptor(Object.getOwnPropertyDescriptor(Promise.prototype, 'constructor'), + nativePromisePrototypeConstructorDescriptor) + || Promise.prototype.constructor !== nativePromisePrototypeConstructor + || !sameDescriptor(Object.getOwnPropertyDescriptor(Promise, Symbol.species), nativePromiseSpeciesDescriptor) + || Object.getOwnPropertyDescriptor(Promise, Symbol.species)?.get !== nativePromiseSpeciesGetter || Promise.prototype.then !== nativePromiseThen || Promise.prototype.catch !== nativePromiseCatch || Promise.prototype.finally !== nativePromiseFinally @@ -150,7 +184,7 @@ export class AuthoredFlowLifecycle { private registrations = 0; private groupsByInvocation: { readonly key: string; readonly groups: Map> } | undefined; - constructor() { + constructor(private readonly refuseUnknownThenable?: (message: string) => void) { this.graph = new AuthoredPromiseGraph( () => activeLifecycle.getStore() === this, (asyncId) => { @@ -220,6 +254,19 @@ export class AuthoredFlowLifecycle { values: readonly unknown[], name: CombinatorName, ): Promise { + // Check before the native combinator reads any unknown `then` getter. A + // member with no tracked promise id or owned step has no causal identity + // to expand on a later follow-up. This also covers proxy thenables whose + // `then` is synthesized by a get trap and has no property descriptor. + if (this.refuseUnknownThenable !== undefined) { + for (const value of values) { + if ((typeof value !== 'object' && typeof value !== 'function') || value === null) continue; + if (stepOwners.get(value)?.lifecycle === this || this.graph.idOf(value) !== undefined) continue; + const message = `parallel Promise.${name} contains a member with no tracked provenance`; + this.refuseUnknownThenable(message); + throw new AuthoredFlowExecutionError('step_failed', message); + } + } const { value, created } = this.graph.captureCombinator(() => native.call(constructor, values)); this.registerCombinator(values, value, name, created); return value; diff --git a/packages/sdk/src/authored-parallel-body.ts b/packages/sdk/src/authored-parallel-body.ts index 020f664da..e0386d35e 100644 --- a/packages/sdk/src/authored-parallel-body.ts +++ b/packages/sdk/src/authored-parallel-body.ts @@ -1,6 +1,6 @@ import ts from 'typescript'; import { AuthoredFlowExecutionError } from './authored-flow-error.js'; -import { parallelBodySyntaxEligible } from './authored-parallel-eligibility.js'; +import { parallelBodySyntaxEligible, unwrapParallelExpression } from './authored-parallel-eligibility.js'; const functionSource = Function.prototype.toString; @@ -43,13 +43,15 @@ export function instrumentParallelBody( && node.expression.name.text === 'all' && node.arguments.length === 1) { const members = node.arguments[0]; if (members && ts.isArrayLiteralExpression(members)) { - for (const member of members.elements) { + for (const outer of members.elements) { + if (!ts.isExpression(outer)) continue; + const member = unwrapParallelExpression(outer); if (!ts.isCallExpression(member) || member.arguments.length !== 0) continue; const named = ts.isIdentifier(member.expression) && branches.has(member.expression.text); const inline = ts.isParenthesizedExpression(member.expression) && ts.isArrowFunction(member.expression.expression); - if (named || inline) calls.push({ start: member.getStart(file) - prefix.length, - end: member.getEnd() - prefix.length }); + if (named || inline) calls.push({ start: outer.getStart(file) - prefix.length, + end: outer.getEnd() - prefix.length }); } } } diff --git a/packages/sdk/src/authored-parallel-eligibility.ts b/packages/sdk/src/authored-parallel-eligibility.ts index b1951cfea..908303831 100644 --- a/packages/sdk/src/authored-parallel-eligibility.ts +++ b/packages/sdk/src/authored-parallel-eligibility.ts @@ -1,6 +1,12 @@ import ts from 'typescript'; const functionSource = Function.prototype.toString; +const reservedCertifier = '__certifyParallelBranch'; + +/** Keep admission and call-site instrumentation in agreement on parentheses. */ +export function unwrapParallelExpression(node: ts.Expression): ts.Expression { + return ts.isParenthesizedExpression(node) ? unwrapParallelExpression(node.expression) : node; +} /** A closed grammar for deterministic Promise.all branches. Unknown bodies stay serial. */ export function parallelRunEligible(body: Function, moduleSource: string): boolean { @@ -27,13 +33,21 @@ export function parallelBodySyntaxEligible(body: Function): boolean { if (parameter === undefined || !ts.isIdentifier(parameter) || expression.parameters.length !== 1) return false; const context = parameter.text; if (['Promise', 'globalThis', 'global'].includes(context)) return false; + // The instrumented body is re-evaluated with a private callback parameter. + // A lexical binding or reference with that spelling could capture it. + let namesCertifier = false; + const checkCertifierName = (node: ts.Node): void => { + if (ts.isIdentifier(node) && node.text === reservedCertifier) namesCertifier = true; + ts.forEachChild(node, checkCertifierName); + }; + checkCertifierName(expression); + if (namesCertifier) return false; const branches = new Map(); const rootValues = new Set(); let groups = 0; let runs = 0; - const unwrap = (node: ts.Expression): ts.Expression => - ts.isParenthesizedExpression(node) ? unwrap(node.expression) : node; + const unwrap = unwrapParallelExpression; const method = (node: ts.Expression, owner: string, name: string): node is ts.CallExpression => { const value = unwrap(node); return ts.isCallExpression(value) && ts.isPropertyAccessExpression(value.expression) diff --git a/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts b/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts index 71cd383ff..99d911940 100644 --- a/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts +++ b/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts @@ -3,7 +3,7 @@ import type { Server } from 'node:net'; import { flow, type Ctx, type FlowHandle, type Step } from '@relayflows/surface'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; import { executeAuthoredFlow, type ExecuteAuthoredFlowOptions } from '../src/authored-flow-executor.js'; -import { parallelPromiseIntrinsicsIntact } from '../src/authored-flow-lifecycle.js'; +import { AuthoredFlowLifecycle, parallelPromiseIntrinsicsIntact } from '../src/authored-flow-lifecycle.js'; import { JournalClient } from '../src/journal-client.js'; import { kernelDialectError, @@ -49,8 +49,63 @@ describe('authored flow lifecycle through the journal executor', () => { target[name] = original; expect(detected, name).toBe(false); } + const constructor = Promise.prototype.constructor; + const constructorDescriptor = Object.getOwnPropertyDescriptor(Promise.prototype, 'constructor')!; + try { + Promise.prototype.constructor = class OtherPromise {} as unknown as PromiseConstructor; + expect(parallelPromiseIntrinsicsIntact(), 'prototype constructor').toBe(false); + } finally { Promise.prototype.constructor = constructor; } + try { + Object.defineProperty(Promise.prototype, 'constructor', { + ...constructorDescriptor, enumerable: !constructorDescriptor.enumerable, + }); + expect(parallelPromiseIntrinsicsIntact(), 'prototype constructor descriptor').toBe(false); + } finally { Object.defineProperty(Promise.prototype, 'constructor', constructorDescriptor); } + const species = Object.getOwnPropertyDescriptor(Promise, Symbol.species)!; + try { + Object.defineProperty(Promise, Symbol.species, { configurable: true, get: () => Promise }); + expect(parallelPromiseIntrinsicsIntact(), 'species getter').toBe(false); + } finally { Object.defineProperty(Promise, Symbol.species, species); } + try { + Object.defineProperty(Promise, Symbol.species, { ...species, enumerable: !species.enumerable }); + expect(parallelPromiseIntrinsicsIntact(), 'species descriptor').toBe(false); + } finally { Object.defineProperty(Promise, Symbol.species, species); } + const toString = Function.prototype.toString; + try { + Function.prototype.toString = function () { return toString.call(this); }; + expect(parallelPromiseIntrinsicsIntact(), 'function toString').toBe(false); + } finally { Function.prototype.toString = toString; } + const nodeOptions = process.env['NODE_OPTIONS']; + try { + process.env['NODE_OPTIONS'] = '--import=/tmp/preload.mjs'; + expect(parallelPromiseIntrinsicsIntact(), 'NODE_OPTIONS preload').toBe(false); + } finally { + if (nodeOptions === undefined) delete process.env['NODE_OPTIONS']; + else process.env['NODE_OPTIONS'] = nodeOptions; + } + process.execArgv.push('--require', '/tmp/preload.cjs'); + try { expect(parallelPromiseIntrinsicsIntact(), 'execArgv preload').toBe(false); } + finally { process.execArgv.splice(-2); } expect(parallelPromiseIntrinsicsIntact()).toBe(true); }); + + it('refuses untracked thenables before invoking their user-supplied then', () => { + const violations: string[] = []; + const lifecycle = new AuthoredFlowLifecycle(message => violations.push(message)); + let thenReads = 0; + const hiddenThenable = new Proxy({}, { get: (_target, name) => { + if (name === 'then') { thenReads++; return (resolve: (value: string) => void) => resolve('A'); } + return undefined; + } }); + try { + expect(() => lifecycle.runBody(() => Promise.all([ + hiddenThenable, + Promise.resolve('B'), + ]))).toThrow(/member with no tracked provenance/u); + expect(violations).toContain('parallel Promise.all contains a member with no tracked provenance'); + expect(thenReads).toBe(0); + } finally { lifecycle.close(); } + }); let path: string; let server: Server; let nextRun = 1; diff --git a/packages/sdk/tests/authored-parallel-body.test.ts b/packages/sdk/tests/authored-parallel-body.test.ts index 9e4b5ef87..bc5cb0aa6 100644 --- a/packages/sdk/tests/authored-parallel-body.test.ts +++ b/packages/sdk/tests/authored-parallel-body.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest'; import { instrumentParallelBody } from '../src/authored-parallel-body.js'; +import { parallelBodySyntaxEligible } from '../src/authored-parallel-eligibility.js'; describe('certified authored parallel body', () => { it('records the exact branch-call promises before the join is awaited', async () => { @@ -22,6 +23,39 @@ describe('certified authored parallel body', () => { expect(commands).toEqual(['A', 'B', 'A2', 'B2']); }); + it('certifies every parenthesized branch member accepted by the grammar', async () => { + const body = new Function(`return (async f => { + const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([(a()), ((b())), (((async () => { await f.run('C'); })()))]); + f.done('success'); + });`)() as (ctx: { run: (command: string) => Promise; done: (reason: string) => void }) => Promise; + expect(parallelBodySyntaxEligible(body)).toBe(true); + const certified: Promise[] = []; + const commands: string[] = []; + const executable = instrumentParallelBody(body, promise => certified.push(promise)); + await executable({ run: async command => { commands.push(command); return command; }, done: () => {} }); + expect(certified).toHaveLength(3); + expect(new Set(certified).size).toBe(3); + expect(commands).toEqual(['A', 'B', 'C']); + }); + + it('rejects a body that could capture the certifier before any effect', () => { + for (const source of [ + `const __certifyParallelBranch = async () => { await f.run('P'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([__certifyParallelBranch(), b()]);`, + `const __certifyParallelBranch = await f.run('V'); + const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]);`, + ]) { + const body = new Function(`return (async f => { ${source} f.done('success'); });`)() as Function; + expect(parallelBodySyntaxEligible(body), source).toBe(false); + expect(() => instrumentParallelBody(body, () => {}), source).toThrow(/lost its source certificate/u); + } + }); + it('refuses an unsupported join before executing the body', () => { const unsafe = new Function(`return (async f => { await Promise.race([f.run('A'), f.run('B')]); diff --git a/packages/sdk/tests/authored-parallel-eligibility.test.ts b/packages/sdk/tests/authored-parallel-eligibility.test.ts index 27e63a248..08a7b1c6d 100644 --- a/packages/sdk/tests/authored-parallel-eligibility.test.ts +++ b/packages/sdk/tests/authored-parallel-eligibility.test.ts @@ -171,4 +171,16 @@ describe('parallel run admission', () => { f.done('success'); }`))).toBe(false); }); + + it('uses serial mode when the body names the injected certifier', () => { + for (const source of [ + `const __certifyParallelBranch = async () => { await f.run('P'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([__certifyParallelBranch(), b()]);`, + `const __certifyParallelBranch = await f.run('V'); + const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]);`, + ]) expect(eligible(body(`async f => { ${source} f.done('success'); }`)), source).toBe(false); + }); }); diff --git a/packages/sdk/tests/authored-root.test.ts b/packages/sdk/tests/authored-root.test.ts index e52914171..7258b62ce 100644 --- a/packages/sdk/tests/authored-root.test.ts +++ b/packages/sdk/tests/authored-root.test.ts @@ -177,10 +177,13 @@ describe('durable authored root', () => { }); it('pins a certified Promise.all run body to parallel mode before dispatch', async () => { - const loaded = await fixture(false, 0, async f => { + const body = async (f: Ctx) => { await Promise.all([f.run('printf a'), f.run('printf b')]); f.done('success'); - }); + }; + const loaded = await fixture(false, 0, body); + await writeFile(loaded.sourcePath, + `import { flow } from '@relayflows/surface';\nexport default flow('flagship', ${Function.prototype.toString.call(body)});\n`); const journal = new RootJournal(); journal.startStatus = outcome(journal.runId, 'completed', 'success'); journal.entries = [completedEntry()]; @@ -192,6 +195,22 @@ describe('durable authored root', () => { }); }); + it('keeps a synthetic source unrelated to its in-memory body serial', async () => { + const loaded = await fixture(false, 0, async f => { + await Promise.all([f.run('printf a'), f.run('printf b')]); + f.done('success'); + }); + const journal = new RootJournal(); + journal.startStatus = outcome(journal.runId, 'completed', 'success'); + journal.entries = [completedEntry()]; + await executeDurableAuthoredFlow(loaded, journal as unknown as JournalClient, undefined, + { dataDir: '/unused', admissionKey: 'synthetic-source' }); + const step = (journal.starts[0]!.spec as { steps: Array<{ instruction: string }> }).steps[0]!; + expect(JSON.parse(step.instruction)).toMatchObject({ + kind: 'relayflows.authored-root.v1', identityVersion: 2, executionMode: 'serial', + }); + }); + it('stops waiting for a root re-dispatch when the caller cancels', async () => { // The root lease is lost (the daemon refuses the renewal), so the driver // waits up to 45s for the kernel to re-dispatch the root. A caller cancel From 2116fe8e44efc6e07bc38f0c5d27b8cae5e32730 Mon Sep 17 00:00:00 2001 From: Miya Date: Sat, 17 Oct 2026 01:48:39 +0200 Subject: [PATCH 12/18] Guard parallel resume and inconsistent Promise joins --- docs/SURFACE.md | 19 +- evidence/native-parallel-review9/COMMANDS.md | 69 ++++ evidence/native-parallel-review9/README.md | 59 +++ evidence/native-parallel-review9/final-s7.log | 189 +++++++++ evidence/native-parallel-review9/final-s8.log | 378 ++++++++++++++++++ .../native-parallel-review9/final-timing.log | 22 + evidence/native-parallel-review9/h7.mjs | 217 ++++++++++ evidence/native-parallel-review9/h8.mjs | 230 +++++++++++ .../native-parallel-review9/mut-f1-parser.log | 7 + .../native-parallel-review9/mut-f1-resume.log | 7 + .../mut-f2-backstop.log | 7 + .../native-parallel-review9/mut-f2-hide.log | 13 + .../mut-f2-removed.log | 13 + .../mutation-stage.log | 2 + .../native-parallel-review9/mutation-stage.py | 70 ++++ evidence/native-parallel-review9/probe8.log | 27 ++ evidence/native-parallel-review9/probe8.mjs | 120 ++++++ .../native-parallel-review9/raw-logs.tar.gz | Bin 0 -> 38759 bytes evidence/native-parallel-review9/s.mjs | 164 ++++++++ evidence/native-parallel-review9/s2.mjs | 181 +++++++++ evidence/native-parallel-review9/s3.mjs | 55 +++ evidence/native-parallel-review9/s4.mjs | 20 + evidence/native-parallel-review9/s7.mjs | 182 +++++++++ evidence/native-parallel-review9/s8.mjs | 160 ++++++++ .../native-parallel-review9/sdk-build.log | 3 + .../sdk-dist-hashes.log | 6 + .../sdk-focused-unit.log | 21 + .../sdk-secrets-live.log | 11 + .../sdk-typecheck-tests.log | 3 + .../native-parallel-review9/sdk-typecheck.log | 3 + evidence/native-parallel-review9/timing7.mjs | 55 +++ packages/sdk/src/authored-flow-lifecycle.ts | 118 +++++- packages/sdk/src/authored-promise-graph.ts | 4 + packages/sdk/src/authored-root.ts | 13 + .../authored-flow-lifecycle-executor.test.ts | 74 ++++ packages/sdk/tests/authored-root.test.ts | 24 ++ 36 files changed, 2529 insertions(+), 17 deletions(-) create mode 100644 evidence/native-parallel-review9/COMMANDS.md create mode 100644 evidence/native-parallel-review9/README.md create mode 100644 evidence/native-parallel-review9/final-s7.log create mode 100644 evidence/native-parallel-review9/final-s8.log create mode 100644 evidence/native-parallel-review9/final-timing.log create mode 100644 evidence/native-parallel-review9/h7.mjs create mode 100644 evidence/native-parallel-review9/h8.mjs create mode 100644 evidence/native-parallel-review9/mut-f1-parser.log create mode 100644 evidence/native-parallel-review9/mut-f1-resume.log create mode 100644 evidence/native-parallel-review9/mut-f2-backstop.log create mode 100644 evidence/native-parallel-review9/mut-f2-hide.log create mode 100644 evidence/native-parallel-review9/mut-f2-removed.log create mode 100644 evidence/native-parallel-review9/mutation-stage.log create mode 100644 evidence/native-parallel-review9/mutation-stage.py create mode 100644 evidence/native-parallel-review9/probe8.log create mode 100644 evidence/native-parallel-review9/probe8.mjs create mode 100644 evidence/native-parallel-review9/raw-logs.tar.gz create mode 100644 evidence/native-parallel-review9/s.mjs create mode 100644 evidence/native-parallel-review9/s2.mjs create mode 100644 evidence/native-parallel-review9/s3.mjs create mode 100644 evidence/native-parallel-review9/s4.mjs create mode 100644 evidence/native-parallel-review9/s7.mjs create mode 100644 evidence/native-parallel-review9/s8.mjs create mode 100644 evidence/native-parallel-review9/sdk-build.log create mode 100644 evidence/native-parallel-review9/sdk-dist-hashes.log create mode 100644 evidence/native-parallel-review9/sdk-focused-unit.log create mode 100644 evidence/native-parallel-review9/sdk-secrets-live.log create mode 100644 evidence/native-parallel-review9/sdk-typecheck-tests.log create mode 100644 evidence/native-parallel-review9/sdk-typecheck.log create mode 100644 evidence/native-parallel-review9/timing7.mjs diff --git a/docs/SURFACE.md b/docs/SURFACE.md index 91d7c0e10..ba37c1fa8 100644 --- a/docs/SURFACE.md +++ b/docs/SURFACE.md @@ -985,10 +985,10 @@ imports also use serial mode because they may alter Promise before the body starts. The defining module must leave the intrinsic `Promise` and `globalThis.Promise` unshadowed; a module that binds either name uses serial mode. An authored process started with a `--import`, `--require`, or loader -preload, or with an already replaced Promise intrinsic, also admits new roots -in serial mode. Generated arrays such as `Array.from` use serial mode. Branches may not -mutate shared values, await -timers or other promises, or call `f.done`; completion belongs at the end of +preload, or with an already replaced Promise or Array iterator intrinsic, also +admits new roots in serial mode. Generated arrays such as `Array.from` use serial +mode. Branches may not mutate shared values, await timers or other promises, +or call `f.done`; completion belongs at the end of the root body. The check is conservative: an unrecognized source form uses serial mode even when its author knows it would be safe. In parallel mode, each deterministic child uses its own journal connection because the @@ -1017,7 +1017,12 @@ non-run effect appears, or a new initial child appears after the body's first turn, the root fails before admitting that effect rather than issuing an ambiguous replay key. Once this happens, no later child is admitted. The failure remains a root failure even when authored -code catches the immediate exception. +code catches the immediate exception. Children already in flight finish and +are journaled before the root reports that failure; the root may therefore +take as long as its slowest admitted child to fail. +The same refusal applies if a fulfilled `Promise.all` or settled +`Promise.allSettled` still has a pending recorded member, which means the join +did not actually wait for its declared branches. If one concurrent `f.run` fails, the authored body fails and its waiting siblings are cancelled before admission. Children already admitted can finish @@ -1032,7 +1037,9 @@ admission keys, including follow-ups after a `Promise.all` join. New parallel roots carry a distinct root kind. A 2.0.50 or 2.0.51 CLI refuses one on rollback, leaving it resumable by this or a newer CLI rather than replaying parallel follow-ups with old `run-N` identities. New serial roots retain the -original root kind and serial IDs. +original root kind and serial IDs. A pinned parallel root resumed in a process +with a Node preload or altered Promise or Array iterator intrinsic is refused +before dispatch and remains resumable in a clean process. What runs concurrently today: diff --git a/evidence/native-parallel-review9/COMMANDS.md b/evidence/native-parallel-review9/COMMANDS.md new file mode 100644 index 000000000..fde6043ec --- /dev/null +++ b/evidence/native-parallel-review9/COMMANDS.md @@ -0,0 +1,69 @@ +# Literal verification commands + +Commands ran from the Flows worktree root unless the section says +`packages/sdk`. The named volume `ms-flows-parallel-r7` had a native arm64 +daemon, the 2.0.51 base SDK, and published 2.0.50/2.0.51 packages from the +[prior bundle](../native-parallel-review8/COMMANDS.md). The Docker container +used no host bind mounts; `docker cp` staged the final SDK build and exact +reviewer fixtures into its volume. `/w/head/packages/sdk` links to +`/w/sdk-head`, and `/w/base/packages/sdk` links to `/w/sdk-base-2051`. + +```sh +npm run build --prefix packages/sdk +docker run -d --init --platform linux/arm64 --name ms-flows-parallel-r9 -v ms-flows-parallel-r7:/w -w /w/review9 node:22-trixie sleep infinity +docker exec ms-flows-parallel-r9 sh -c 'cp -a /w/sdk-head/dist /w/sdk-head-r8-dist && rm -rf /w/sdk-head/dist && mkdir -p /w/sdk-head/dist /w/review9' +docker cp packages/sdk/dist/. ms-flows-parallel-r9:/w/sdk-head/dist/ +docker cp evidence/native-parallel-review9/. ms-flows-parallel-r9:/w/review9/ +docker exec ms-flows-parallel-r9 sh -c "cp -a /w/sdk-head/dist /w/deep/packages/sdk/dist && cp -a /w/sdk-head/dist /w/forced/packages/sdk/dist && sed -i 's/export function parallelRunEligible(body, moduleSource) {/export function parallelRunEligible(body, moduleSource) { return true;/' /w/deep/packages/sdk/dist/authored-parallel-eligibility.js /w/forced/packages/sdk/dist/authored-parallel-eligibility.js && sed -i 's/export function parallelBodySyntaxEligible(body) {/export function parallelBodySyntaxEligible(body) { return true;/' /w/deep/packages/sdk/dist/authored-parallel-eligibility.js" +``` + +The final candidate was rebuilt once after adding the indexed-array check; +the same `docker cp` replaced `/w/sdk-head/dist`, and the `deep` and `forced` +copies were refreshed before the final runs. The preliminary logs were +discarded. `sdk-dist-hashes.log` verifies the final source/build identity. + +## Exact reviewer matrices and probe + +```sh +docker exec -w /w/review9 ms-flows-parallel-r9 node --no-warnings h7.mjs s7.mjs all --reps=6 --conc=3 --tag=r9finals7 --sides=head:head > evidence/native-parallel-review9/final-s7.log 2>&1 +docker exec -w /w/review9 ms-flows-parallel-r9 node --no-warnings h8.mjs s8.mjs all --reps=6 --conc=3 --tag=r9finals8 > evidence/native-parallel-review9/final-s8.log 2>&1 +docker exec -w /w/review9 ms-flows-parallel-r9 node --no-warnings probe8.mjs > evidence/native-parallel-review9/probe8.log 2>&1 +docker exec -w /w/review9 ms-flows-parallel-r9 node timing7.mjs 10 > evidence/native-parallel-review9/final-timing.log 2>&1 +``` + +The `deep` side is an isolated copy of the final candidate with only +`parallelRunEligible` and `parallelBodySyntaxEligible` forced to return true. +The base side is the 2.0.51 source build. The s8 harness itself runs the +head, base, and deep sides specified by the reviewer's `s8.mjs` verbatim. + +## Scratch mutations + +```sh +docker cp evidence/native-parallel-review9/mutation-stage.py ms-flows-parallel-r9:/w/review9/mutation-stage.py +docker exec -w /w/review9 ms-flows-parallel-r9 python3 mutation-stage.py > evidence/native-parallel-review9/mutation-stage.log 2>&1 +docker exec -w /w/review9 ms-flows-parallel-r9 node --no-warnings h8.mjs s8.mjs RS1 --reps=6 --conc=3 --tag=r9mutf1parser --sides=fx:fx > evidence/native-parallel-review9/mut-f1-parser.log 2>&1 +docker exec -w /w/review9 ms-flows-parallel-r9 node --no-warnings h8.mjs s8.mjs RS3bh --reps=6 --conc=3 --tag=r9mutf1resume --sides=m1:m1 > evidence/native-parallel-review9/mut-f1-resume.log 2>&1 +docker exec -w /w/review9 ms-flows-parallel-r9 node --no-warnings h8.mjs s8.mjs PL9dep --reps=6 --conc=3 --tag=r9mutf2backstop --sides=m3:m3 > evidence/native-parallel-review9/mut-f2-backstop.log 2>&1 +docker exec -w /w/review9 ms-flows-parallel-r9 node --no-warnings h8.mjs s8.mjs PL9dep --reps=12 --conc=3 --tag=r9mutf2removed --sides=m2:m2 > evidence/native-parallel-review9/mut-f2-removed.log 2>&1 +docker exec -w /w/review9 ms-flows-parallel-r9 node --no-warnings h8.mjs s8.mjs PL8hide --reps=12 --conc=3 --tag=r9mutf2hide --sides=m2:m2 > evidence/native-parallel-review9/mut-f2-hide.log 2>&1 +``` + +## SDK checks and build identity + +The following commands ran from `packages/sdk`: + +```sh +npm run build > ../../evidence/native-parallel-review9/sdk-build.log 2>&1 +npm run typecheck > ../../evidence/native-parallel-review9/sdk-typecheck.log 2>&1 +npm run typecheck:tests > ../../evidence/native-parallel-review9/sdk-typecheck-tests.log 2>&1 +npx vitest run tests/authored-parallel-body.test.ts tests/authored-parallel-eligibility.test.ts tests/authored-step-graph.test.ts tests/authored-flow-lifecycle-executor.test.ts tests/authored-root.test.ts tests/authored-step-secrets.test.ts tests/communication-feature-secret-scoping.test.ts tests/worker-feature-secret-scoping.test.ts > ../../evidence/native-parallel-review9/sdk-focused-unit.log 2>&1 +RELAYFLOWD_BIN="$HOME/.relayflows-toolchain/target/ms-step-secrets/debug/relayflowd" npx vitest run tests/authored-step-secrets-live.test.ts > ../../evidence/native-parallel-review9/sdk-secrets-live.log 2>&1 +``` + +From the worktree root: + +```sh +shasum -a 256 packages/sdk/dist/authored-flow-lifecycle.js packages/sdk/dist/authored-promise-graph.js packages/sdk/dist/authored-root.js > evidence/native-parallel-review9/sdk-dist-hashes.log +docker exec ms-flows-parallel-r9 sha256sum /w/sdk-head/dist/authored-flow-lifecycle.js /w/sdk-head/dist/authored-promise-graph.js /w/sdk-head/dist/authored-root.js >> evidence/native-parallel-review9/sdk-dist-hashes.log +docker rm -f ms-flows-parallel-r9 +``` diff --git a/evidence/native-parallel-review9/README.md b/evidence/native-parallel-review9/README.md new file mode 100644 index 000000000..10f588447 --- /dev/null +++ b/evidence/native-parallel-review9/README.md @@ -0,0 +1,59 @@ +# Review 8 repair evidence for #667 + +This bundle tests the review-8 repairs on the SDK source above `3e008e9e`. +The kernel source is unchanged. The final SDK build's three changed runtime +modules match the Linux arm64 staged copy byte-for-byte +(`sdk-dist-hashes.log`). All live runs used native arm64 `node:22-trixie`, one +container, and a named Docker volume; no Paris Drive path was bind-mounted. +`h8.mjs`, `s8.mjs`, and `probe8.mjs` are the reviewer's exact code fences from +`~/relay-briefs/ms-flows-parallel-667-review8-fixtures.md`. The prior `h7.mjs`, +`s7.mjs`, `s.mjs`, `s2.mjs`, `s3.mjs`, `s4.mjs`, and `timing7.mjs` are from the +previous evidence bundle. `COMMANDS.md` gives the commands and log names. +`raw-logs.tar.gz` retains the captured log bytes; the browsable `.log` files +have trailing whitespace and extra blank lines trimmed for `git diff --check`. + +## Repairs and live outcomes + +| Finding | Repair | Exact reviewer fixture result | +| --- | --- | --- | +| F1: false preload flags and terminal resume failure | Parse whole Node option tokens; check a pinned parallel root before `run.resume` and again after source import. Unsafe environment refusal leaves the root resumable. | RS1/RS2 and their clean second-resume forms complete 6/6 each in parallel mode. RS3's preload resume refuses 6/6 with effects `bcaX`; RS3bh's clean second resume completes `bcaXZ` 6/6. | +| F2: fulfilled join with pending members | Record the tracked members of each `all`/`allSettled` and refuse a follow-up when a settled join still has a pending member. Snapshot the Array iterator and its `next`; compare a certified array's indexed members with the iterable view. | PL8hide fails before X in 6/6, effects `b`, no replay. PL9dep, PL8r and PL8iter use safe serial fallback in 6/6 each; no replay. | +| F3: slow failure report | Document that admitted children finish and are journaled before root failure. | Deep-forced F5w still takes about 15 s and admits neither Q nor L; the reviewer `<10 s` predicate correctly reports 0/6, with no replay. | + +The final-build `s7.mjs` matrix ran 27 scenarios × six kill offsets: 162/162 +without replay (`final-s7.log`). Twenty-four scenarios met the reviewer +predicate in all six runs. PL3sub, PL4ctor, and SEC7 retain the published-base +equivalent predicate mismatches described in the prior evidence bundle. + +The final-build `s8.mjs` matrix ran 324 crash/resume cases: 120 head, 162 +2.0.51-base, and 42 deep-forced. All 324 had zero replay (`final-s8.log`). +The deliberate refusal cases and base-equivalent failures explain the +reviewer's 276/324 `ok` flags. DP1, OPT1, TV1, EP1, SEC8m, and PL9depnone +completed 6/6 in parallel mode. The exact certifier probe matches the +reviewer's expected table (`probe8.log`). + +## Revert proofs + +`mutation-stage.py` makes four scratch SDK `dist` copies from this build; it +does not modify the worktree or the staged candidate: + +| Scratch side | Removed guard | Observed result | +| --- | --- | --- | +| `fx` | Whole-token parser, restoring the old regex | Harmless RS1 flag refused 6/6 (`mut-f1-parser.log`). | +| `m1` | Pre-dispatch parallel resume check | RS3 preload terminalized the root; clean second resume failed 6/6 (`mut-f1-resume.log`). | +| `m3` | Array iterator admission check only | The pending-member backstop still refused PL9dep before X, effects `b`, 6/6 (`mut-f2-backstop.log`). | +| `m2` | Array iterator admission check and settlement backstop | PL9dep admitted X before its pending branches in 12/12 and replayed in 1/12; PL8hide replayed in 4/12 (`mut-f2-removed.log`, `mut-f2-hide.log`). | + +## Regression and overlap checks + +The exact review-7 timing driver alternated ten warm head/base pairs of three +300 ms routes, each followed by a 100 ms dependent. At this head, body p50 was +461 ms versus 1,383 ms on the 2.0.51 base build; CLI p50 was 1,088 versus +1,847 ms, and route start spread p50 was 6 versus 661 ms. Routes and +dependents overlapped in 10/10 head runs and 0/10 base runs +(`final-timing.log`). + +`npm run build`, SDK typecheck, test typecheck, eight focused Vitest files +(133 tests), and both local-daemon secret live tests passed. Their complete +logs are `sdk-build.log`, `sdk-typecheck.log`, `sdk-typecheck-tests.log`, +`sdk-focused-unit.log`, and `sdk-secrets-live.log`. diff --git a/evidence/native-parallel-review9/final-s7.log b/evidence/native-parallel-review9/final-s7.log new file mode 100644 index 000000000..42f4bc160 --- /dev/null +++ b/evidence/native-parallel-review9/final-s7.log @@ -0,0 +1,189 @@ +{"s":"HY1","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"PB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H7RBVTENA9YV00HFSD1AY\",\"runId\":\"01M53H7RBVTENA9YV00HFSD1AY\",\"socketPath\":\"/tmp/relayflowd-9422c87daf75.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"PBZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1643} +{"s":"HY1","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"PB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H7RBX267Y1PJ9HJGXNNX2\",\"runId\":\"01M53H7RBX267Y1PJ9HJGXNNX2\",\"socketPath\":\"/tmp/relayflowd-9653aa2a5a92.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"PBZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1693} +{"s":"HY1","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"PB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H7RBWC3ZCD4HWE7N3Q2M6\",\"runId\":\"01M53H7RBWC3ZCD4HWE7N3Q2M6\",\"socketPath\":\"/tmp/relayflowd-0f2df5e85ded.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"PBZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1756} +{"s":"HY1","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"PB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H7SVB9VP5K0ZCJF5VZVS6\",\"runId\":\"01M53H7SVB9VP5K0ZCJF5VZVS6\",\"socketPath\":\"/tmp/relayflowd-8fd1535486e1.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"PBZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1678} +{"s":"HY1","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"PB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H7SX7GQRV9N5TH9EPMQHF\",\"runId\":\"01M53H7SX7GQRV9N5TH9EPMQHF\",\"socketPath\":\"/tmp/relayflowd-c9ba4c40a46e.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"PBZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1770} +{"s":"HY1","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"PB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H7SYT77PEG2G96CSJ1RW7\",\"runId\":\"01M53H7SYT77PEG2G96CSJ1RW7\",\"socketPath\":\"/tmp/relayflowd-507e2402a6f6.sock\",\"completedSteps\":4,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"PBZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-4 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1906} +{"s":"HY1s","start":"head","resume":"head","i":0,"fresh":true,"code1":0,"code":0,"effects":"PB","effects1":"PB","out1":"{\"ok\":true,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[],\"path\":\"/w/runs/r9finals7/HY1s/head-head-0/chain.flow.ts\",\"rootRunId\":\"01M53H7VGDPMPECA7RQ2T7QCQ2\",\"runId\":\"01M53H7VGDPMPECA7RQ2T7QCQ2\",\"socketPath\":\"/tmp/relayflowd-033f6db19cb3.sock\",\"completedSteps\":3,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","complete-3 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":747} +{"s":"HY1s","start":"head","resume":"head","i":1,"fresh":true,"code1":0,"code":0,"effects":"PB","effects1":"PB","out1":"{\"ok\":true,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[],\"path\":\"/w/runs/r9finals7/HY1s/head-head-1/chain.flow.ts\",\"rootRunId\":\"01M53H7VK00N6G5VCY6ETA5WXJ\",\"runId\":\"01M53H7VK00N6G5VCY6ETA5WXJ\",\"socketPath\":\"/tmp/relayflowd-89946d600322.sock\",\"completedSteps\":3,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","complete-3 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":688} +{"s":"HY1s","start":"head","resume":"head","i":2,"fresh":true,"code1":0,"code":0,"effects":"PB","effects1":"PB","out1":"{\"ok\":true,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[],\"path\":\"/w/runs/r9finals7/HY1s/head-head-2/chain.flow.ts\",\"rootRunId\":\"01M53H7VTH7X3FNTBYBHFFE1F9\",\"runId\":\"01M53H7VTH7X3FNTBYBHFFE1F9\",\"socketPath\":\"/tmp/relayflowd-17a13b8f1d12.sock\",\"completedSteps\":3,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","complete-3 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":745} +{"s":"HY1s","start":"head","resume":"head","i":3,"fresh":true,"code1":0,"code":0,"effects":"PB","effects1":"PB","out1":"{\"ok\":true,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[],\"path\":\"/w/runs/r9finals7/HY1s/head-head-3/chain.flow.ts\",\"rootRunId\":\"01M53H7W7KM8R8E9R2NM8QCZ13\",\"runId\":\"01M53H7W7KM8R8E9R2NM8QCZ13\",\"socketPath\":\"/tmp/relayflowd-2fcaf4c818d1.sock\",\"completedSteps\":3,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","complete-3 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":751} +{"s":"HY1s","start":"head","resume":"head","i":4,"fresh":true,"code1":0,"code":0,"effects":"PB","effects1":"PB","out1":"{\"ok\":true,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[],\"path\":\"/w/runs/r9finals7/HY1s/head-head-4/chain.flow.ts\",\"rootRunId\":\"01M53H7W9PS9PG6648GAYR14Q8\",\"runId\":\"01M53H7W9PS9PG6648GAYR14Q8\",\"socketPath\":\"/tmp/relayflowd-5b3646db962c.sock\",\"completedSteps\":3,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","complete-3 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":732} +{"s":"HY1s","start":"head","resume":"head","i":5,"fresh":true,"code1":0,"code":0,"effects":"PB","effects1":"PB","out1":"{\"ok\":true,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[],\"path\":\"/w/runs/r9finals7/HY1s/head-head-5/chain.flow.ts\",\"rootRunId\":\"01M53H7WJ4E8W45JJ2MKX1E6KR\",\"runId\":\"01M53H7WJ4E8W45JJ2MKX1E6KR\",\"socketPath\":\"/tmp/relayflowd-574f3dd05a42.sock\",\"completedSteps\":3,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf P >> effects","run-2 c=1 sleep 0.1; printf B >> effects","complete-3 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":785} +{"s":"HY2","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"AB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H7WZGQDGFZ2WM9PCZ9JME\",\"runId\":\"01M53H7WZGQDGFZ2WM9PCZ9JME\",\"socketPath\":\"/tmp/relayflowd-9093207bb612.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf V","run-2 c=1 sleep 0.2; printf A >> effects","run-3 c=1 sleep 0.1; printf B >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1774} +{"s":"HY2","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"AB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H7X109XSNQEEYSH0SM9GX\",\"runId\":\"01M53H7X109XSNQEEYSH0SM9GX\",\"socketPath\":\"/tmp/relayflowd-b892e041ed3c.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf V","run-2 c=1 sleep 0.2; printf A >> effects","run-3 c=1 sleep 0.1; printf B >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1855} +{"s":"HY2","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"AB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H7XAJ4B1NM24AS8CHP9MD\",\"runId\":\"01M53H7XAJ4B1NM24AS8CHP9MD\",\"socketPath\":\"/tmp/relayflowd-c136d8762d80.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf V","run-2 c=1 sleep 0.2; printf A >> effects","run-3 c=1 sleep 0.1; printf B >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1927} +{"s":"HY2","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"AB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H7YQA3E943DAY6V8J3Q76\",\"runId\":\"01M53H7YQA3E943DAY6V8J3Q76\",\"socketPath\":\"/tmp/relayflowd-af6ee18d9e52.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf V","run-2 c=1 sleep 0.2; printf A >> effects","run-3 c=1 sleep 0.1; printf B >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2111} +{"s":"HY2","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"AB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H7YVQHWFJ6TRCW4DY42M5\",\"runId\":\"01M53H7YVQHWFJ6TRCW4DY42M5\",\"socketPath\":\"/tmp/relayflowd-5178e1dea6e0.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf V","run-2 c=1 sleep 0.2; printf A >> effects","run-3 c=1 sleep 0.1; printf B >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2194} +{"s":"HY2","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"AB","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H7Z89KH2G98MGQ4Y5149C\",\"runId\":\"01M53H7Z89KH2G98MGQ4Y5149C\",\"socketPath\":\"/tmp/relayflowd-3840f3d7ec84.sock\",\"completedSteps\":5,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf V","run-2 c=1 sleep 0.2; printf A >> effects","run-3 c=1 sleep 0.1; printf B >> effects","run-4 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-5 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2284} +{"s":"PAR1","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H80TA7GCN5PFTGGWF99TK\",\"runId\":\"01M53H80TA7GCN5PFTGGWF99TK\",\"socketPath\":\"/tmp/relayflowd-b7d9cf496593.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.2; printf C","run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1833} +{"s":"PAR1","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H810JS9ETYGAAGV26YTH4\",\"runId\":\"01M53H810JS9ETYGAAGV26YTH4\",\"socketPath\":\"/tmp/relayflowd-53c59b732c86.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1858} +{"s":"PAR1","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H81FCM5XC9RN7TAWGHNRE\",\"runId\":\"01M53H81FCM5XC9RN7TAWGHNRE\",\"socketPath\":\"/tmp/relayflowd-3b99df85abb1.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.2; printf C","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1957} +{"s":"PAR1","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H82MKJHGDP2CXC0V1TDPJ\",\"runId\":\"01M53H82MKJHGDP2CXC0V1TDPJ\",\"socketPath\":\"/tmp/relayflowd-921f0fd1d0ee.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.2; printf C","run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2032} +{"s":"PAR1","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H82V9444QKNFYH10ZT4JC\",\"runId\":\"01M53H82V9444QKNFYH10ZT4JC\",\"socketPath\":\"/tmp/relayflowd-5fd6fd38a681.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-3 c=1 sleep 0.2; printf C","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2104} +{"s":"PAR1","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"bca","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H83BV5MAQP9YQ3K0CF4WV\",\"runId\":\"01M53H83BV5MAQP9YQ3K0CF4WV\",\"socketPath\":\"/tmp/relayflowd-69a2dd7f8490.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.2; printf C","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-ae4aa1fa103a7714e8b04f7b6026c5235311cc89a9dd3493afd1c73599af14e9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2208} +{"s":"PAR2","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"ba","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H84GTTGRKMK6WCQ40Q0WY\",\"runId\":\"01M53H84GTTGRKMK6WCQ40Q0WY\",\"socketPath\":\"/tmp/relayflowd-17a0b397aa7c.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1708} +{"s":"PAR2","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"ba","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H84WPD4JEY7KVRWP0YC6P\",\"runId\":\"01M53H84WPD4JEY7KVRWP0YC6P\",\"socketPath\":\"/tmp/relayflowd-91f731eb1514.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1800} +{"s":"PAR2","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"ba","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H85H0V53ZYSJXPR433SQR\",\"runId\":\"01M53H85H0V53ZYSJXPR433SQR\",\"socketPath\":\"/tmp/relayflowd-9fd7b0a2084b.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1823} +{"s":"PAR2","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"ba","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H86697Z5Z1YGFNY8PHET3\",\"runId\":\"01M53H86697Z5Z1YGFNY8PHET3\",\"socketPath\":\"/tmp/relayflowd-17a4ab945d0a.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1910} +{"s":"PAR2","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"ba","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H86KW5E5T692NTK0550P7\",\"runId\":\"01M53H86KW5E5T692NTK0550P7\",\"socketPath\":\"/tmp/relayflowd-6fa20c0bd577.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2053} +{"s":"PAR2","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"ba","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H879E9ZE4XPEQ9XH11JC9\",\"runId\":\"01M53H879E9ZE4XPEQ9XH11JC9\",\"socketPath\":\"/tmp/relayflowd-cefe09c6b8d9.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2157} +{"s":"EQ1twice","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"aaX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H882AZWNXRBK65TMGPRHT\",\"runId\":\"01M53H882AZWNXRBK65TMGPRHT\",\"socketPath\":\"/tmp/relayflowd-8e27014f5234.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A","run-2 c=1 sleep 0.2; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf a >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":true,"replay":false,"ok":true,"ms":1744} +{"s":"EQ1twice","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"aaX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H88MC4QHG51B72QMFQBHS\",\"runId\":\"01M53H88MC4QHG51B72QMFQBHS\",\"socketPath\":\"/tmp/relayflowd-0a2a415752b7.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A","run-2 c=1 sleep 0.2; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":true,"replay":false,"ok":true,"ms":1776} +{"s":"EQ1twice","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"aaX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H89F32HXMSHBMJ7DY8ZRE\",\"runId\":\"01M53H89F32HXMSHBMJ7DY8ZRE\",\"socketPath\":\"/tmp/relayflowd-f62aec4f381f.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.2; printf A","run-1 c=1 sleep 0.2; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf a >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":true,"replay":false,"ok":true,"ms":1928} +{"s":"EQ1twice","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"aaX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H89SSFCT1F0Z8EHR9T9R7\",\"runId\":\"01M53H89SSFCT1F0Z8EHR9T9R7\",\"socketPath\":\"/tmp/relayflowd-56479640c427.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A","run-2 c=1 sleep 0.2; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":true,"replay":false,"ok":true,"ms":1990} +{"s":"EQ1twice","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"aaX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8ACTCB8ZVSQY35S03P84\",\"runId\":\"01M53H8ACTCB8ZVSQY35S03P84\",\"socketPath\":\"/tmp/relayflowd-4e0989a23757.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A","run-2 c=1 sleep 0.2; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf a >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":true,"replay":false,"ok":true,"ms":2106} +{"s":"EQ1twice","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"aaX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8BC1B8EX6J8B1F5Z4NT6\",\"runId\":\"01M53H8BC1B8EX6J8B1F5Z4NT6\",\"socketPath\":\"/tmp/relayflowd-832aeb46ac60.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A","run-2 c=1 sleep 0.2; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf a >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":true,"replay":false,"ok":true,"ms":2267} +{"s":"EQ2ret","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8BSVCQ91CK8JVEYCRWPB\",\"runId\":\"01M53H8BSVCQ91CK8JVEYCRWPB\",\"socketPath\":\"/tmp/relayflowd-7c1f49d6a3dc.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf ab >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1858} +{"s":"EQ2ret","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8CE95K4B6Q6WRKBB306P\",\"runId\":\"01M53H8CE95K4B6Q6WRKBB306P\",\"socketPath\":\"/tmp/relayflowd-a4741e41768c.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.3; printf A","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf ab >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1850} +{"s":"EQ2ret","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8DGKJ4XFVG39H4HQRM9X\",\"runId\":\"01M53H8DGKJ4XFVG39H4HQRM9X\",\"socketPath\":\"/tmp/relayflowd-3b7806f5056e.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf ab >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1842} +{"s":"EQ2ret","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8DHDEF2J0PM35FQEE3CR\",\"runId\":\"01M53H8DHDEF2J0PM35FQEE3CR\",\"socketPath\":\"/tmp/relayflowd-6179df042e29.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf ab >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1919} +{"s":"EQ2ret","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8E74ST0Q8G6GXCWF7VKW\",\"runId\":\"01M53H8E74ST0Q8G6GXCWF7VKW\",\"socketPath\":\"/tmp/relayflowd-8e77148940d5.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf ab >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2024} +{"s":"EQ3midret","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"BARX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8FDFHW59Q8VAKF69A6XH\",\"runId\":\"01M53H8FDFHW59Q8VAKF69A6XH\",\"socketPath\":\"/tmp/relayflowd-78a2ea192cf2.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BARXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B >> effects","run-1 c=1 sleep 0.2; printf A >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R >> effects","run-after-b27729cd34232dcbe9422304c2b17447650342603d38049b510e271b9689b435-1 c=1 printf X >> effects","run-after-6f14790e09c46141ecb49037787ed603ea9c232ff0ebc6792e41772b066e3c75-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1681} +{"s":"EQ2ret","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"ab","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8FAGM4RSNHWZR98ZT3AJ\",\"runId\":\"01M53H8FAGM4RSNHWZR98ZT3AJ\",\"socketPath\":\"/tmp/relayflowd-6939ff854708.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B","run-1 c=1 sleep 0.3; printf A","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf ab >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2216} +{"s":"EQ3midret","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"BARX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8G6A73F17F6GAMR3Z74C\",\"runId\":\"01M53H8G6A73F17F6GAMR3Z74C\",\"socketPath\":\"/tmp/relayflowd-64b7e26209bb.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BARXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B >> effects","run-1 c=1 sleep 0.2; printf A >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R >> effects","run-after-b27729cd34232dcbe9422304c2b17447650342603d38049b510e271b9689b435-1 c=1 printf X >> effects","run-after-6f14790e09c46141ecb49037787ed603ea9c232ff0ebc6792e41772b066e3c75-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1691} +{"s":"EQ3midret","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"BARX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8H201YMNG57HJJS8QNDA\",\"runId\":\"01M53H8H201YMNG57HJJS8QNDA\",\"socketPath\":\"/tmp/relayflowd-2efc2c5e2c8f.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BARXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R >> effects","run-after-b27729cd34232dcbe9422304c2b17447650342603d38049b510e271b9689b435-1 c=1 printf X >> effects","run-after-6f14790e09c46141ecb49037787ed603ea9c232ff0ebc6792e41772b066e3c75-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1779} +{"s":"EQ3midret","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"BARX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8HF5APHHVT8Z1GKQ6M3W\",\"runId\":\"01M53H8HF5APHHVT8Z1GKQ6M3W\",\"socketPath\":\"/tmp/relayflowd-740a3f4ad4ca.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BARXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B >> effects","run-1 c=1 sleep 0.2; printf A >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R >> effects","run-after-b27729cd34232dcbe9422304c2b17447650342603d38049b510e271b9689b435-1 c=1 printf X >> effects","run-after-6f14790e09c46141ecb49037787ed603ea9c232ff0ebc6792e41772b066e3c75-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1857} +{"s":"EQ3midret","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"BARX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8HVCAFJDAKJMMCXNT37X\",\"runId\":\"01M53H8HVCAFJDAKJMMCXNT37X\",\"socketPath\":\"/tmp/relayflowd-22aa0df49d14.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BARXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B >> effects","run-1 c=1 sleep 0.2; printf A >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R >> effects","run-after-b27729cd34232dcbe9422304c2b17447650342603d38049b510e271b9689b435-1 c=1 printf X >> effects","run-after-6f14790e09c46141ecb49037787ed603ea9c232ff0ebc6792e41772b066e3c75-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1960} +{"s":"EQ4fail","start":"head","resume":"head","i":0,"fresh":true,"code1":1,"code":1,"effects":"FB","effects1":"FB","out1":"ith retries_exhausted Step \\\"run-1\\\" (deterministic) completionReason: retries_exhausted attempt=1/1 transportRetries=1 exit=1.\\nInspect: flows replay 01M53H8K9CCEGYQVPH5B3BKEZS --at run-1 --data-dir '/w/runs/r9finals7/EQ4fail/head-head-0/data'\\nJournal: /w/runs/r9finals7/EQ4fail/head-head-0/data/runs/01M53H8K9CCEGYQVPH5B3BKEZS.sqlite3\"}],\"path\":\"/w/runs/r9finals7/EQ4fail/head-head-0/chain.flow.ts\",\"rootRunId\":\"01M53H8K8G5F1DW4YYKJXXD6XW\",\"runId\":\"01M53H8K9CCEGYQVPH5B3BKEZS\",\"socketPath\":\"/tmp/relayflowd-5cd0a1146155.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf F >> effects; exit 1","run-2 c=1 sleep 0.4; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":1005} +{"s":"EQ4fail","start":"head","resume":"head","i":1,"fresh":true,"code1":1,"code":1,"effects":"FB","effects1":"FB","out1":"ith retries_exhausted Step \\\"run-1\\\" (deterministic) completionReason: retries_exhausted attempt=1/1 transportRetries=1 exit=1.\\nInspect: flows replay 01M53H8KT6DV78A4TFEWS62HWG --at run-1 --data-dir '/w/runs/r9finals7/EQ4fail/head-head-1/data'\\nJournal: /w/runs/r9finals7/EQ4fail/head-head-1/data/runs/01M53H8KT6DV78A4TFEWS62HWG.sqlite3\"}],\"path\":\"/w/runs/r9finals7/EQ4fail/head-head-1/chain.flow.ts\",\"rootRunId\":\"01M53H8KS7J9V9X6G6ATA63DMB\",\"runId\":\"01M53H8KT6DV78A4TFEWS62HWG\",\"socketPath\":\"/tmp/relayflowd-2bcb44bf868f.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.4; printf B >> effects","run-1 c=1 sleep 0.1; printf F >> effects; exit 1"],"letterDup":false,"replay":false,"ok":true,"ms":1041} +{"s":"EQ3midret","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"BARX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8JSS26GZPHQ5QBN26JNE\",\"runId\":\"01M53H8JSS26GZPHQ5QBN26JNE\",\"socketPath\":\"/tmp/relayflowd-1223d9c610d5.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BARXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R >> effects","run-after-b27729cd34232dcbe9422304c2b17447650342603d38049b510e271b9689b435-1 c=1 printf X >> effects","run-after-6f14790e09c46141ecb49037787ed603ea9c232ff0ebc6792e41772b066e3c75-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2093} +{"s":"EQ4fail","start":"head","resume":"head","i":2,"fresh":true,"code1":1,"code":1,"effects":"FB","effects1":"FB","out1":"ith retries_exhausted Step \\\"run-1\\\" (deterministic) completionReason: retries_exhausted attempt=1/1 transportRetries=1 exit=1.\\nInspect: flows replay 01M53H8M9HG5ZCW1TZ29CB4JF2 --at run-1 --data-dir '/w/runs/r9finals7/EQ4fail/head-head-2/data'\\nJournal: /w/runs/r9finals7/EQ4fail/head-head-2/data/runs/01M53H8M9HG5ZCW1TZ29CB4JF2.sqlite3\"}],\"path\":\"/w/runs/r9finals7/EQ4fail/head-head-2/chain.flow.ts\",\"rootRunId\":\"01M53H8M8DZMR4FPZ71P7ZK35N\",\"runId\":\"01M53H8M9HG5ZCW1TZ29CB4JF2\",\"socketPath\":\"/tmp/relayflowd-2d87c64904ee.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.4; printf B >> effects","run-1 c=1 sleep 0.1; printf F >> effects; exit 1"],"letterDup":false,"replay":false,"ok":true,"ms":1019} +{"s":"EQ4fail","start":"head","resume":"head","i":3,"fresh":true,"code1":1,"code":1,"effects":"FB","effects1":"FB","out1":"ith retries_exhausted Step \\\"run-1\\\" (deterministic) completionReason: retries_exhausted attempt=1/1 transportRetries=1 exit=1.\\nInspect: flows replay 01M53H8MTAG391V73B2477BY6D --at run-1 --data-dir '/w/runs/r9finals7/EQ4fail/head-head-3/data'\\nJournal: /w/runs/r9finals7/EQ4fail/head-head-3/data/runs/01M53H8MTAG391V73B2477BY6D.sqlite3\"}],\"path\":\"/w/runs/r9finals7/EQ4fail/head-head-3/chain.flow.ts\",\"rootRunId\":\"01M53H8MS8TVFCW5D0NTQ6F49X\",\"runId\":\"01M53H8MTAG391V73B2477BY6D\",\"socketPath\":\"/tmp/relayflowd-1185580fcda1.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf F >> effects; exit 1","run-2 c=1 sleep 0.4; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":1016} +{"s":"EQ4fail","start":"head","resume":"head","i":4,"fresh":true,"code1":1,"code":1,"effects":"FB","effects1":"FB","out1":"ith retries_exhausted Step \\\"run-1\\\" (deterministic) completionReason: retries_exhausted attempt=1/1 transportRetries=1 exit=1.\\nInspect: flows replay 01M53H8MW32EN8SVFNFWVYXGGX --at run-1 --data-dir '/w/runs/r9finals7/EQ4fail/head-head-4/data'\\nJournal: /w/runs/r9finals7/EQ4fail/head-head-4/data/runs/01M53H8MW32EN8SVFNFWVYXGGX.sqlite3\"}],\"path\":\"/w/runs/r9finals7/EQ4fail/head-head-4/chain.flow.ts\",\"rootRunId\":\"01M53H8MV7D7ZJVB33CHN60DRA\",\"runId\":\"01M53H8MW32EN8SVFNFWVYXGGX\",\"socketPath\":\"/tmp/relayflowd-73b90f796150.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf F >> effects; exit 1","run-2 c=1 sleep 0.4; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":1028} +{"s":"EQ4fail","start":"head","resume":"head","i":5,"fresh":true,"code1":1,"code":1,"effects":"FB","effects1":"FB","out1":"ith retries_exhausted Step \\\"run-1\\\" (deterministic) completionReason: retries_exhausted attempt=1/1 transportRetries=1 exit=1.\\nInspect: flows replay 01M53H8N9HK4PGZHWA88S9CZ49 --at run-1 --data-dir '/w/runs/r9finals7/EQ4fail/head-head-5/data'\\nJournal: /w/runs/r9finals7/EQ4fail/head-head-5/data/runs/01M53H8N9HK4PGZHWA88S9CZ49.sqlite3\"}],\"path\":\"/w/runs/r9finals7/EQ4fail/head-head-5/chain.flow.ts\",\"rootRunId\":\"01M53H8N8J1G42K294PYAZVBYV\",\"runId\":\"01M53H8N9HK4PGZHWA88S9CZ49\",\"socketPath\":\"/tmp/relayflowd-656a4846ef0f.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf F >> effects; exit 1","run-2 c=1 sleep 0.4; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":1031} +{"s":"EQ5wide","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"gdabhejfkcilX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8NSKYKB0YPYQNBSZ8HPY\",\"runId\":\"01M53H8NSKYKB0YPYQNBSZ8HPY\",\"socketPath\":\"/tmp/relayflowd-c2be07620233.sock\",\"completedSteps\":27,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"gdabhejfkcilXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.3; printf S2","run-2 c=1 sleep 0.2; printf S1","run-1 c=1 sleep 0.1; printf S0","run-4 c=1 sleep 0.1; printf S3","run-5 c=1 sleep 0.2; printf S4","run-6 c=1 sleep 0.3; printf S5","run-8 c=1 sleep 0.2; printf S7","run-7 c=1 sleep 0.1; printf S6","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.2; printf S10","run-12 c=1 sleep 0.3; printf S11","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=1 printf k >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-5035e1bcbaa00bdada261e30fab262c9f56d98340070094467fbb29a1e20b3e3-1 c=1 printf l >> effects","run-after-47737fddbf7e602a4dd0245918ce58aaabd31b1de4ef3296dcf0b58bdd9fc1db-1 c=1 printf X >> effects","run-after-2cd3f17e0f60b40497c76aeda641f729788d3daf9079598950b081d20a057996-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-27 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2359} +{"s":"EQ5wide","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"adgbehjcfkilX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8NSS29J9V5X96BTS00BR\",\"runId\":\"01M53H8NSS29J9V5X96BTS00BR\",\"socketPath\":\"/tmp/relayflowd-3b9860d04c54.sock\",\"completedSteps\":27,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"adgbehjcfkilXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.2; printf S1","run-3 c=1 sleep 0.3; printf S2","run-1 c=1 sleep 0.1; printf S0","run-6 c=1 sleep 0.3; printf S5","run-5 c=1 sleep 0.2; printf S4","run-8 c=1 sleep 0.2; printf S7","run-4 c=1 sleep 0.1; printf S3","run-7 c=1 sleep 0.1; printf S6","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.2; printf S10","run-12 c=1 sleep 0.3; printf S11","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=1 printf k >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-5035e1bcbaa00bdada261e30fab262c9f56d98340070094467fbb29a1e20b3e3-1 c=1 printf l >> effects","run-after-47737fddbf7e602a4dd0245918ce58aaabd31b1de4ef3296dcf0b58bdd9fc1db-1 c=1 printf X >> effects","run-after-2cd3f17e0f60b40497c76aeda641f729788d3daf9079598950b081d20a057996-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-27 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2327} +{"s":"EQ5wide","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"adgehjbckfilX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8P9WR6MAKN13D80Y4QRC\",\"runId\":\"01M53H8P9WR6MAKN13D80Y4QRC\",\"socketPath\":\"/tmp/relayflowd-f38829bff1f2.sock\",\"completedSteps\":27,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"adgehjbckfilXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.3; printf S2","run-5 c=1 sleep 0.2; printf S4","run-4 c=1 sleep 0.1; printf S3","run-6 c=1 sleep 0.3; printf S5","run-1 c=1 sleep 0.1; printf S0","run-7 c=1 sleep 0.1; printf S6","run-2 c=1 sleep 0.2; printf S1","run-8 c=1 sleep 0.2; printf S7","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.2; printf S10","run-12 c=1 sleep 0.3; printf S11","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=1 printf k >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-5035e1bcbaa00bdada261e30fab262c9f56d98340070094467fbb29a1e20b3e3-1 c=1 printf l >> effects","run-after-47737fddbf7e602a4dd0245918ce58aaabd31b1de4ef3296dcf0b58bdd9fc1db-1 c=1 printf X >> effects","run-after-2cd3f17e0f60b40497c76aeda641f729788d3daf9079598950b081d20a057996-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-27 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2421} +{"s":"EQ5wide","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"agdhjbefckilX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8R3YBW4DN0ZCHK30APW1\",\"runId\":\"01M53H8R3YBW4DN0ZCHK30APW1\",\"socketPath\":\"/tmp/relayflowd-0974aa7c8668.sock\",\"completedSteps\":27,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"agdhjbefckilXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-4 c=1 sleep 0.1; printf S3","run-1 c=1 sleep 0.1; printf S0","run-3 c=1 sleep 0.3; printf S2","run-2 c=1 sleep 0.2; printf S1","run-6 c=1 sleep 0.3; printf S5","run-5 c=1 sleep 0.2; printf S4","run-7 c=1 sleep 0.1; printf S6","run-8 c=1 sleep 0.2; printf S7","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.2; printf S10","run-12 c=1 sleep 0.3; printf S11","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=1 printf k >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-5035e1bcbaa00bdada261e30fab262c9f56d98340070094467fbb29a1e20b3e3-1 c=1 printf l >> effects","run-after-47737fddbf7e602a4dd0245918ce58aaabd31b1de4ef3296dcf0b58bdd9fc1db-1 c=1 printf X >> effects","run-after-2cd3f17e0f60b40497c76aeda641f729788d3daf9079598950b081d20a057996-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-27 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2478} +{"s":"EQ5wide","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"dgabhjefkcilX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8R4M5XVY9D83S68V6XSH\",\"runId\":\"01M53H8R4M5XVY9D83S68V6XSH\",\"socketPath\":\"/tmp/relayflowd-db48c398d766.sock\",\"completedSteps\":27,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"dgabhjefkcilXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-7 c=1 sleep 0.1; printf S6","run-5 c=1 sleep 0.2; printf S4","run-3 c=1 sleep 0.3; printf S2","run-2 c=1 sleep 0.2; printf S1","run-6 c=1 sleep 0.3; printf S5","run-1 c=1 sleep 0.1; printf S0","run-4 c=1 sleep 0.1; printf S3","run-8 c=1 sleep 0.2; printf S7","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.2; printf S10","run-12 c=1 sleep 0.3; printf S11","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=1 printf k >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-5035e1bcbaa00bdada261e30fab262c9f56d98340070094467fbb29a1e20b3e3-1 c=1 printf l >> effects","run-after-47737fddbf7e602a4dd0245918ce58aaabd31b1de4ef3296dcf0b58bdd9fc1db-1 c=1 printf X >> effects","run-after-2cd3f17e0f60b40497c76aeda641f729788d3daf9079598950b081d20a057996-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-27 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2583} +{"s":"EQ5wide","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"gadbehjfckilX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8RMS61MAEQRCFDR9A2KB\",\"runId\":\"01M53H8RMS61MAEQRCFDR9A2KB\",\"socketPath\":\"/tmp/relayflowd-d62d30e2ad6e.sock\",\"completedSteps\":27,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"gadbehjfckilXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-8 c=1 sleep 0.2; printf S7","run-6 c=1 sleep 0.3; printf S5","run-3 c=1 sleep 0.3; printf S2","run-2 c=1 sleep 0.2; printf S1","run-5 c=1 sleep 0.2; printf S4","run-1 c=1 sleep 0.1; printf S0","run-4 c=1 sleep 0.1; printf S3","run-7 c=1 sleep 0.1; printf S6","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.2; printf S10","run-12 c=1 sleep 0.3; printf S11","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=1 printf k >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-5035e1bcbaa00bdada261e30fab262c9f56d98340070094467fbb29a1e20b3e3-1 c=1 printf l >> effects","run-after-47737fddbf7e602a4dd0245918ce58aaabd31b1de4ef3296dcf0b58bdd9fc1db-1 c=1 printf X >> effects","run-after-2cd3f17e0f60b40497c76aeda641f729788d3daf9079598950b081d20a057996-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-27 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2613} +{"s":"EQ5stall","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"adgbehjf","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8TGXF1SJM6TCP2EZ2G2R\",\"runId\":\"01M53H8TGXF1SJM6TCP2EZ2G2R\",\"socketPath\":\"/tmp/relayflowd-1c5a260d6625.sock\",\"completedSteps\":26,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"adgbehjfYyciXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf S0","run-2 c=1 sleep 0.2; printf S1","run-7 c=1 sleep 0.1; printf S6","run-5 c=1 sleep 0.2; printf S4","run-6 c=1 sleep 0.3; printf S5","run-8 c=1 sleep 0.2; printf S7","run-3 c=2 sleep 0.3; printf S2","run-4 c=1 sleep 0.1; printf S3","run-9 c=2 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.15; printf s","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-db2e5b41644e936c3a061f42c63a3d86e58c3320e293aeefdb6083bf4cfdcda3-1 c=1 printf y >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-3a4ae68314c51ac46816ed0ace6fa25a1714196c37de5cbb7f13339a06bc621d-1 c=1 printf X >> effects","run-after-02d7a6df2ca6022a4a04be62387ebcbbad3b3adb1e1382383c380b5b5bf863d7-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-26 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2161} +{"s":"EQ5stall","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"agdhbejcf","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8TMQBSAX383J7JGSW258\",\"runId\":\"01M53H8TMQBSAX383J7JGSW258\",\"socketPath\":\"/tmp/relayflowd-7fe85f2f3650.sock\",\"completedSteps\":26,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"agdhbejcfYyiXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.3; printf S2","run-1 c=1 sleep 0.1; printf S0","run-2 c=1 sleep 0.2; printf S1","run-4 c=1 sleep 0.1; printf S3","run-7 c=1 sleep 0.1; printf S6","run-5 c=1 sleep 0.2; printf S4","run-8 c=1 sleep 0.2; printf S7","run-6 c=1 sleep 0.3; printf S5","run-9 c=2 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.15; printf s","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-db2e5b41644e936c3a061f42c63a3d86e58c3320e293aeefdb6083bf4cfdcda3-1 c=1 printf y >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-3a4ae68314c51ac46816ed0ace6fa25a1714196c37de5cbb7f13339a06bc621d-1 c=1 printf X >> effects","run-after-02d7a6df2ca6022a4a04be62387ebcbbad3b3adb1e1382383c380b5b5bf863d7-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-26 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2180} +{"s":"EQ5stall","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"agdhebjfci","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8V4D31BCWN10N1NH6804\",\"runId\":\"01M53H8V4D31BCWN10N1NH6804\",\"socketPath\":\"/tmp/relayflowd-e86efabef37f.sock\",\"completedSteps\":26,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"agdhebjfciYyXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf S0","run-4 c=1 sleep 0.1; printf S3","run-6 c=1 sleep 0.3; printf S5","run-5 c=1 sleep 0.2; printf S4","run-8 c=1 sleep 0.2; printf S7","run-2 c=1 sleep 0.2; printf S1","run-3 c=1 sleep 0.3; printf S2","run-7 c=1 sleep 0.1; printf S6","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.15; printf s","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-db2e5b41644e936c3a061f42c63a3d86e58c3320e293aeefdb6083bf4cfdcda3-1 c=1 printf y >> effects","run-after-3a4ae68314c51ac46816ed0ace6fa25a1714196c37de5cbb7f13339a06bc621d-1 c=1 printf X >> effects","run-after-02d7a6df2ca6022a4a04be62387ebcbbad3b3adb1e1382383c380b5b5bf863d7-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-26 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2136} +{"s":"EQ5stall","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"agdebjhfci","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8WN1EEK7RQCVBZHE0QTV\",\"runId\":\"01M53H8WN1EEK7RQCVBZHE0QTV\",\"socketPath\":\"/tmp/relayflowd-c488b505e62e.sock\",\"completedSteps\":26,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"agdebjhfciYyXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.2; printf S1","run-1 c=1 sleep 0.1; printf S0","run-3 c=1 sleep 0.3; printf S2","run-4 c=1 sleep 0.1; printf S3","run-5 c=1 sleep 0.2; printf S4","run-7 c=1 sleep 0.1; printf S6","run-6 c=1 sleep 0.3; printf S5","run-8 c=1 sleep 0.2; printf S7","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.15; printf s","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-db2e5b41644e936c3a061f42c63a3d86e58c3320e293aeefdb6083bf4cfdcda3-1 c=1 printf y >> effects","run-after-3a4ae68314c51ac46816ed0ace6fa25a1714196c37de5cbb7f13339a06bc621d-1 c=1 printf X >> effects","run-after-02d7a6df2ca6022a4a04be62387ebcbbad3b3adb1e1382383c380b5b5bf863d7-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-26 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2198} +{"s":"EQ5stall","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"gadbehjfci","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8WRZ8KCQDS0PVDQ0JVDH\",\"runId\":\"01M53H8WRZ8KCQDS0PVDQ0JVDH\",\"socketPath\":\"/tmp/relayflowd-82d9d70d65db.sock\",\"completedSteps\":26,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"gadbehjfciYyXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf S0","run-7 c=1 sleep 0.1; printf S6","run-2 c=1 sleep 0.2; printf S1","run-3 c=1 sleep 0.3; printf S2","run-5 c=1 sleep 0.2; printf S4","run-4 c=1 sleep 0.1; printf S3","run-6 c=1 sleep 0.3; printf S5","run-8 c=1 sleep 0.2; printf S7","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.15; printf s","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-db2e5b41644e936c3a061f42c63a3d86e58c3320e293aeefdb6083bf4cfdcda3-1 c=1 printf y >> effects","run-after-3a4ae68314c51ac46816ed0ace6fa25a1714196c37de5cbb7f13339a06bc621d-1 c=1 printf X >> effects","run-after-02d7a6df2ca6022a4a04be62387ebcbbad3b3adb1e1382383c380b5b5bf863d7-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-26 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2336} +{"s":"EQ5stall","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"adghjebcfi","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8X99X5RYFC87B991JS10\",\"runId\":\"01M53H8X99X5RYFC87B991JS10\",\"socketPath\":\"/tmp/relayflowd-c6bc3d0b3574.sock\",\"completedSteps\":26,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"adghjebcfiYyXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.2; printf S1","run-3 c=1 sleep 0.3; printf S2","run-8 c=1 sleep 0.2; printf S7","run-5 c=1 sleep 0.2; printf S4","run-6 c=1 sleep 0.3; printf S5","run-4 c=1 sleep 0.1; printf S3","run-7 c=1 sleep 0.1; printf S6","run-1 c=1 sleep 0.1; printf S0","run-9 c=1 sleep 0.3; printf S8","run-10 c=1 sleep 0.1; printf S9","run-11 c=1 sleep 0.15; printf s","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf a >> effects","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf d >> effects","run-after-d82ca7a1d1844e835101303539b5cac391e3274813adf20d521772e9f405d9da-1 c=1 printf g >> effects","run-after-034c6d7e90522b45cc93080e07e56fe7d1f4d36ea1633e0a9e36f3f50921979b-1 c=1 printf h >> effects","run-after-f8b3ff5690c10a03522446ac76055ec504404259087e1ace302db386044e167e-1 c=1 printf j >> effects","run-after-793745d11629652755ce91c96f19451d2fd6c9253741aad7eefb4c2c12f09862-1 c=1 printf e >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf b >> effects","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf c >> effects","run-after-5930c94e0d8891b846a84ca2e9f183cef3f887856009d7da1affca0655ca3464-1 c=1 printf f >> effects","run-after-31801d774fdfd3f2b69f67e696cfff9d783a4eeee6f769a6f7464f73132ccfa9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-80efdbcc05190ffef92ffe29559201e045d81c013505c97b9a012c568955b726-1 c=1 printf i >> effects","run-after-db2e5b41644e936c3a061f42c63a3d86e58c3320e293aeefdb6083bf4cfdcda3-1 c=1 printf y >> effects","run-after-3a4ae68314c51ac46816ed0ace6fa25a1714196c37de5cbb7f13339a06bc621d-1 c=1 printf X >> effects","run-after-02d7a6df2ca6022a4a04be62387ebcbbad3b3adb1e1382383c380b5b5bf863d7-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-26 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2474} +{"s":"EQ6expr","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"BACX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8YT09JSRKFKQEWPREFXA\",\"runId\":\"01M53H8YT09JSRKFKQEWPREFXA\",\"socketPath\":\"/tmp/relayflowd-c918be3e605d.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BACXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=1 sleep 0.3; printf C >> effects","run-after-f2f25a43d095012b1401192411775ae0d83e26fd7aabb6add8b49db34db7d765-1 c=1 printf X >> effects","run-after-b99aafbc3f01763b118691e219a345ce36c250fb2c15f7a43b4b33c4473aaeeb-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1820} +{"s":"EQ6expr","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"BACX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8Z2PJMH8NKBMBZ8RS2K7\",\"runId\":\"01M53H8Z2PJMH8NKBMBZ8RS2K7\",\"socketPath\":\"/tmp/relayflowd-bd758053b29e.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BACXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=1 sleep 0.3; printf C >> effects","run-after-f2f25a43d095012b1401192411775ae0d83e26fd7aabb6add8b49db34db7d765-1 c=1 printf X >> effects","run-after-b99aafbc3f01763b118691e219a345ce36c250fb2c15f7a43b4b33c4473aaeeb-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1840} +{"s":"EQ6expr","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"BACX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H8ZQVJY84AE8VFR8VVSDN\",\"runId\":\"01M53H8ZQVJY84AE8VFR8VVSDN\",\"socketPath\":\"/tmp/relayflowd-9bdd5a3b03e4.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BACXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.3; printf C >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-1 c=1 sleep 0.2; printf A >> effects","run-after-f2f25a43d095012b1401192411775ae0d83e26fd7aabb6add8b49db34db7d765-1 c=1 printf X >> effects","run-after-b99aafbc3f01763b118691e219a345ce36c250fb2c15f7a43b4b33c4473aaeeb-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1907} +{"s":"EQ6expr","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"BACX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H90GWN1M7BSFZ925W7D43\",\"runId\":\"01M53H90GWN1M7BSFZ925W7D43\",\"socketPath\":\"/tmp/relayflowd-714bebac583d.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BACXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-3 c=1 sleep 0.3; printf C >> effects","run-after-f2f25a43d095012b1401192411775ae0d83e26fd7aabb6add8b49db34db7d765-1 c=1 printf X >> effects","run-after-b99aafbc3f01763b118691e219a345ce36c250fb2c15f7a43b4b33c4473aaeeb-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1974} +{"s":"EQ6expr","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"BACX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H90VJXS42T3WX0N221H64\",\"runId\":\"01M53H90VJXS42T3WX0N221H64\",\"socketPath\":\"/tmp/relayflowd-404ca1f8ddca.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BACXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.1; printf B >> effects","run-1 c=1 sleep 0.2; printf A >> effects","run-3 c=1 sleep 0.3; printf C >> effects","run-after-f2f25a43d095012b1401192411775ae0d83e26fd7aabb6add8b49db34db7d765-1 c=1 printf X >> effects","run-after-b99aafbc3f01763b118691e219a345ce36c250fb2c15f7a43b4b33c4473aaeeb-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2073} +{"s":"EQ6expr","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"BACX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H91KC5RWBZHH5NFZ4TJ8V\",\"runId\":\"01M53H91KC5RWBZHH5NFZ4TJ8V\",\"socketPath\":\"/tmp/relayflowd-e32990baae46.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BACXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf A >> effects","run-3 c=1 sleep 0.3; printf C >> effects","run-2 c=1 sleep 0.1; printf B >> effects","run-after-f2f25a43d095012b1401192411775ae0d83e26fd7aabb6add8b49db34db7d765-1 c=1 printf X >> effects","run-after-b99aafbc3f01763b118691e219a345ce36c250fb2c15f7a43b4b33c4473aaeeb-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2214} +{"s":"EQ7record","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"BR3X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H92FZ0JW1GMSRC56YQF76\",\"runId\":\"01M53H92FZ0JW1GMSRC56YQF76\",\"socketPath\":\"/tmp/relayflowd-91072f33d569.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BR3XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; exit 3","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R3 >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1676} +{"s":"EQ7record","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"BR3X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H92WDB8A8W69VN6VSSNC9\",\"runId\":\"01M53H92WDB8A8W69VN6VSSNC9\",\"socketPath\":\"/tmp/relayflowd-e0d8d6dbb23c.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BR3XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; exit 3","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R3 >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1698} +{"s":"EQ7record","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"BR3X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H93RAGHK6WM56EZGPX1T2\",\"runId\":\"01M53H93RAGHK6WM56EZGPX1T2\",\"socketPath\":\"/tmp/relayflowd-82f5207d556e.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BR3XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; exit 3","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R3 >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1793} +{"s":"EQ7record","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"BR3X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H943AJV6MR2XK3Q6R43MY\",\"runId\":\"01M53H943AJV6MR2XK3Q6R43MY\",\"socketPath\":\"/tmp/relayflowd-c2e06d3a1437.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BR3XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; exit 3","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R3 >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1851} +{"s":"EQ7record","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"BR3X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H94H7JMK23NJX9B21T7M6\",\"runId\":\"01M53H94H7JMK23NJX9B21T7M6\",\"socketPath\":\"/tmp/relayflowd-dee5d94c95e9.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BR3XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; exit 3","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R3 >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1974} +{"s":"EQ8throw","start":"head","resume":"head","i":0,"fresh":true,"code1":1,"code":1,"effects":"B","effects1":"B","out1":"FAILED [protocol_error] relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\"}],\"path\":\"/w/runs/r9finals7/EQ8throw/head-head-0/chain.flow.ts\",\"rootRunId\":\"01M53H95XB5S3P6WFH608BZJT2\",\"socketPath\":\"/tmp/relayflowd-359896646074.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.2; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":880} +{"s":"EQ8throw","start":"head","resume":"head","i":1,"fresh":true,"code1":1,"code":1,"effects":"B","effects1":"B","out1":"FAILED [protocol_error] relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\"}],\"path\":\"/w/runs/r9finals7/EQ8throw/head-head-1/chain.flow.ts\",\"rootRunId\":\"01M53H96GTWKATZ6TVNP0VRVS6\",\"socketPath\":\"/tmp/relayflowd-57dc3cd63888.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.2; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":912} +{"s":"EQ7record","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"BR3X","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H95F46A2TYJHVQEZMF03T\",\"runId\":\"01M53H95F46A2TYJHVQEZMF03T\",\"socketPath\":\"/tmp/relayflowd-c14ff8e35aa7.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"BR3XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; exit 3","run-2 c=1 sleep 0.1; printf B","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 printf B >> effects","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 printf R3 >> effects","run-after-db1fac25e8ad4db0ad97b74cccbc4436dedaac80fed26e7acc72a57f775076b7-1 c=1 printf X >> effects","run-after-68986922249520ce74bdedf4b7211a326e50a5affcf697e31eef311049fcd19b-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2126} +{"s":"EQ8throw","start":"head","resume":"head","i":2,"fresh":true,"code1":1,"code":1,"effects":"B","effects1":"B","out1":"FAILED [protocol_error] relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\"}],\"path\":\"/w/runs/r9finals7/EQ8throw/head-head-2/chain.flow.ts\",\"rootRunId\":\"01M53H96T349Q6PWFNZZMJT7GC\",\"socketPath\":\"/tmp/relayflowd-c9b9087f4217.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.2; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":880} +{"s":"EQ8throw","start":"head","resume":"head","i":3,"fresh":true,"code1":1,"code":1,"effects":"B","effects1":"B","out1":"FAILED [protocol_error] relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\"}],\"path\":\"/w/runs/r9finals7/EQ8throw/head-head-3/chain.flow.ts\",\"rootRunId\":\"01M53H97CVS0C85H21GF117XJR\",\"socketPath\":\"/tmp/relayflowd-bb99886d38f0.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.2; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":893} +{"s":"EQ8throw","start":"head","resume":"head","i":4,"fresh":true,"code1":1,"code":1,"effects":"B","effects1":"B","out1":"FAILED [protocol_error] relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\"}],\"path\":\"/w/runs/r9finals7/EQ8throw/head-head-4/chain.flow.ts\",\"rootRunId\":\"01M53H97JJ593TNWW61JJFHSA5\",\"socketPath\":\"/tmp/relayflowd-cc68ee63bfa3.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.2; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":872} +{"s":"EQ8throw","start":"head","resume":"head","i":5,"fresh":true,"code1":1,"code":1,"effects":"B","effects1":"B","out1":"FAILED [protocol_error] relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: Cannot read properties of undefined (reading 'z')\"}],\"path\":\"/w/runs/r9finals7/EQ8throw/head-head-5/chain.flow.ts\",\"rootRunId\":\"01M53H97NKH5RH0J6ZMAQS0HZ7\",\"socketPath\":\"/tmp/relayflowd-a3db45852289.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.2; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":874} +{"s":"EQ9nested","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H98DRTHHGHWT8YHR8W8AQ\",\"runId\":\"01M53H98DRTHHGHWT8YHR8W8AQ\",\"socketPath\":\"/tmp/relayflowd-a9c0ca5b394a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"YabXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A1","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf A2","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf a >> effects","run-after-b1d85947f7f7b0657c73aba929eb762b7030c0bc579f0e1286abaaf5a801b9aa-1 c=1 printf b >> effects","run-after-eb54a34c99f0b39c2797c3f88eefc72cdb012022fb05220e24d5e06dee441138-1 c=1 printf X >> effects","run-after-6c93494ed8a13b90512674bc92a4b62141d7d36acd947f90b13bf8ff5ffe1503-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1923} +{"s":"EQ9nested","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H98906M1KZ9DM1FESG4M5\",\"runId\":\"01M53H98906M1KZ9DM1FESG4M5\",\"socketPath\":\"/tmp/relayflowd-d52080038890.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"YbaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf A2","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 sleep 0.3; printf A1","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-b1d85947f7f7b0657c73aba929eb762b7030c0bc579f0e1286abaaf5a801b9aa-1 c=1 printf b >> effects","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf a >> effects","run-after-eb54a34c99f0b39c2797c3f88eefc72cdb012022fb05220e24d5e06dee441138-1 c=1 printf X >> effects","run-after-6c93494ed8a13b90512674bc92a4b62141d7d36acd947f90b13bf8ff5ffe1503-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2234} +{"s":"EQ9nested","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"a","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H98H7A7RNEP3N0TSCY6R0\",\"runId\":\"01M53H98H7A7RNEP3N0TSCY6R0\",\"socketPath\":\"/tmp/relayflowd-81200725a2e7.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aYbXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf A2","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A1","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf a >> effects","run-after-b1d85947f7f7b0657c73aba929eb762b7030c0bc579f0e1286abaaf5a801b9aa-1 c=1 printf b >> effects","run-after-eb54a34c99f0b39c2797c3f88eefc72cdb012022fb05220e24d5e06dee441138-1 c=1 printf X >> effects","run-after-6c93494ed8a13b90512674bc92a4b62141d7d36acd947f90b13bf8ff5ffe1503-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1999} +{"s":"EQ9nested","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"a","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H9ADTDEP2K6THKPED80G4\",\"runId\":\"01M53H9ADTDEP2K6THKPED80G4\",\"socketPath\":\"/tmp/relayflowd-3a93abad9490.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aYbXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A1","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf A2","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf B","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf a >> effects","run-after-b1d85947f7f7b0657c73aba929eb762b7030c0bc579f0e1286abaaf5a801b9aa-1 c=1 printf b >> effects","run-after-eb54a34c99f0b39c2797c3f88eefc72cdb012022fb05220e24d5e06dee441138-1 c=1 printf X >> effects","run-after-6c93494ed8a13b90512674bc92a4b62141d7d36acd947f90b13bf8ff5ffe1503-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2287} +{"s":"EQ9nested","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"a","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H9AJ6D1B3HV7489RC9R0P\",\"runId\":\"01M53H9AJ6D1B3HV7489RC9R0P\",\"socketPath\":\"/tmp/relayflowd-16f1fba7d234.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aYbXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A1","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf A2","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf B","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf a >> effects","run-after-b1d85947f7f7b0657c73aba929eb762b7030c0bc579f0e1286abaaf5a801b9aa-1 c=1 printf b >> effects","run-after-eb54a34c99f0b39c2797c3f88eefc72cdb012022fb05220e24d5e06dee441138-1 c=1 printf X >> effects","run-after-6c93494ed8a13b90512674bc92a4b62141d7d36acd947f90b13bf8ff5ffe1503-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2284} +{"s":"EQ9nested","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"a","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H9AJEHC5SG96NBHNED2C5\",\"runId\":\"01M53H9AJEHC5SG96NBHNED2C5\",\"socketPath\":\"/tmp/relayflowd-b666144b7b91.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"aYbXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A1","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf A2","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf a >> effects","run-after-b1d85947f7f7b0657c73aba929eb762b7030c0bc579f0e1286abaaf5a801b9aa-1 c=1 printf b >> effects","run-after-eb54a34c99f0b39c2797c3f88eefc72cdb012022fb05220e24d5e06dee441138-1 c=1 printf X >> effects","run-after-6c93494ed8a13b90512674bc92a4b62141d7d36acd947f90b13bf8ff5ffe1503-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2433} +{"s":"PL1r5","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H9CHZCQNJ0SD5R36TNS5X\",\"runId\":\"01M53H9CHZCQNJ0SD5R36TNS5X\",\"socketPath\":\"/tmp/relayflowd-212f716e7cb4.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2442} +{"s":"PL1r5","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H9CPE3SAKX3RWXTPNN8J4\",\"runId\":\"01M53H9CPE3SAKX3RWXTPNN8J4\",\"socketPath\":\"/tmp/relayflowd-bfc05a7d3bef.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2463} +{"s":"PL1r5","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H9CW4DZRPGEQ5GN0MS3Q0\",\"runId\":\"01M53H9CW4DZRPGEQ5GN0MS3Q0\",\"socketPath\":\"/tmp/relayflowd-1e8fb2b7745f.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2569} +{"s":"PL1r5","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H9EWXCWTC5DK9J6R0TFW0\",\"runId\":\"01M53H9EWXCWTC5DK9J6R0TFW0\",\"socketPath\":\"/tmp/relayflowd-a437352ba04b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2603} +{"s":"PL1r5","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H9F115VJ68PC5G1JYWWEF\",\"runId\":\"01M53H9F115VJ68PC5G1JYWWEF\",\"socketPath\":\"/tmp/relayflowd-f9751d807bc3.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2707} +{"s":"PL1r5","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H9FAYYC7GJ9RH83DFNYRQ\",\"runId\":\"01M53H9FAYYC7GJ9RH83DFNYRQ\",\"socketPath\":\"/tmp/relayflowd-0865dbe6a45e.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2845} +{"s":"PL2then","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H9HFDFEDATKSCNB6FMAD7\",\"runId\":\"01M53H9HFDFEDATKSCNB6FMAD7\",\"socketPath\":\"/tmp/relayflowd-087929f13b05.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2386} +{"s":"PL2then","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H9HNNHRD3NG739VCQ56K0\",\"runId\":\"01M53H9HNNHRD3NG739VCQ56K0\",\"socketPath\":\"/tmp/relayflowd-080e5591ed6a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2427} +{"s":"PL2then","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H9J3VVYMWE8EWN36N6BDT\",\"runId\":\"01M53H9J3VVYMWE8EWN36N6BDT\",\"socketPath\":\"/tmp/relayflowd-4b8a76ad8971.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2515} +{"s":"PL2then","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H9KRBJ06H53BPQSK9XSYJ\",\"runId\":\"01M53H9KRBJ06H53BPQSK9XSYJ\",\"socketPath\":\"/tmp/relayflowd-21fe36563f56.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2515} +{"s":"PL2then","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H9M1BNE16T67AHEKR802S\",\"runId\":\"01M53H9M1BNE16T67AHEKR802S\",\"socketPath\":\"/tmp/relayflowd-9f544b82a0b2.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2656} +{"s":"PL2then","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H9MK7F49BJHP1MG2HJYRJ\",\"runId\":\"01M53H9MK7F49BJHP1MG2HJYRJ\",\"socketPath\":\"/tmp/relayflowd-a5de8db7179b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2807} +{"s":"PL3sub","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"pl3sub\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl3sub\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53H9P5KR62P344JTA60T8BJ\",\"runId\":\"01M53H9P5KR62P344JTA60T8BJ\",\"socketPath\":\"/tmp/relayflowd-b04862f6e7af.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2242} +{"s":"PL3sub","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"pl3sub\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl3sub\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53H9PMYWVHFT7SRSBGKAP05\",\"runId\":\"01M53H9PMYWVHFT7SRSBGKAP05\",\"socketPath\":\"/tmp/relayflowd-10cba1585cd4.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2338} +{"s":"PL3sub","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"pl3sub\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl3sub\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53H9Q9WDP8D7G776V37221W\",\"runId\":\"01M53H9Q9WDP8D7G776V37221W\",\"socketPath\":\"/tmp/relayflowd-2cc974fe7d91.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2441} +{"s":"PL3sub","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"pl3sub\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl3sub\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53H9RCFZ2V1ZTR8B1P5P6ZX\",\"runId\":\"01M53H9RCFZ2V1ZTR8B1P5P6ZX\",\"socketPath\":\"/tmp/relayflowd-7c8337da1086.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2514} +{"s":"PL3sub","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"pl3sub\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl3sub\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53H9RXZJDZMCHHMTE8Z97GA\",\"runId\":\"01M53H9RXZJDZMCHHMTE8Z97GA\",\"socketPath\":\"/tmp/relayflowd-d225745185db.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2648} +{"s":"PL3sub","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"pl3sub\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl3sub\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53H9SR5N1YABFYC74WKRM5Q\",\"runId\":\"01M53H9SR5N1YABFYC74WKRM5Q\",\"socketPath\":\"/tmp/relayflowd-e29a2b87abca.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2824} +{"s":"PL4ctor","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"4ctor\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl4ctor\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53H9TW294WN9XV1EYJ36SAQ\",\"runId\":\"01M53H9TW294WN9XV1EYJ36SAQ\",\"socketPath\":\"/tmp/relayflowd-6ee3bc1d0f00.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2310} +{"s":"PL4ctor","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"4ctor\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl4ctor\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53H9VGZ5YDCNXNFS6S1Z00R\",\"runId\":\"01M53H9VGZ5YDCNXNFS6S1Z00R\",\"socketPath\":\"/tmp/relayflowd-29b46a3b47f5.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2424} +{"s":"PL4ctor","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"4ctor\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl4ctor\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53H9WEZBBRDEV0P5FH1EZS0\",\"runId\":\"01M53H9WEZBBRDEV0P5FH1EZS0\",\"socketPath\":\"/tmp/relayflowd-8feeead5c9af.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2486} +{"s":"PL4ctor","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"4ctor\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl4ctor\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53H9X5649SS02GMGEAC7K8H\",\"runId\":\"01M53H9X5649SS02GMGEAC7K8H\",\"socketPath\":\"/tmp/relayflowd-53156ed61f49.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2546} +{"s":"PL4ctor","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"4ctor\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl4ctor\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53H9XYJDMVG780BY8Z5J031\",\"runId\":\"01M53H9XYJDMVG780BY8Z5J031\",\"socketPath\":\"/tmp/relayflowd-f451e8cbccad.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2699} +{"s":"PL4ctor","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":1,"out":"4ctor\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl4ctor\\\" returned with unawaited steps: run-2 (f.run), run-3 (f.run), run-4 (f.run), run-5 (f.run), run-6 (f.run), run-7 (f.run)\"}],\"rootRunId\":\"01M53H9YWMCY2B1KWJRS7NARQW\",\"runId\":\"01M53H9YWMCY2B1KWJRS7NARQW\",\"socketPath\":\"/tmp/relayflowd-0cbdf66fcb54.sock\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2821} +{"s":"PL5species","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53H9ZM57GRBXZ2NAQ4TBWP8\",\"runId\":\"01M53H9ZM57GRBXZ2NAQ4TBWP8\",\"socketPath\":\"/tmp/relayflowd-19d73bd22ffa.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2345} +{"s":"PL5species","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HA0G8STKZFM3EMHHSHQNR\",\"runId\":\"01M53HA0G8STKZFM3EMHHSHQNR\",\"socketPath\":\"/tmp/relayflowd-5c5acb93392c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2368} +{"s":"PL5species","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HA1M8KWP580EP4SE0547G\",\"runId\":\"01M53HA1M8KWP580EP4SE0547G\",\"socketPath\":\"/tmp/relayflowd-5ca8b0811a24.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2456} +{"s":"PL5species","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HA1WXWD25VVTQK2XGJ6W0\",\"runId\":\"01M53HA1WXWD25VVTQK2XGJ6W0\",\"socketPath\":\"/tmp/relayflowd-f6b40a768c77.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2590} +{"s":"PL5species","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HA2TMC1FXMHYBGCYFNYES\",\"runId\":\"01M53HA2TMC1FXMHYBGCYFNYES\",\"socketPath\":\"/tmp/relayflowd-22fa624c9d17.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2698} +{"s":"SEC7","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HA4E8DBZZERKA0VP747X8\",\"runId\":\"01M53HA4E8DBZZERKA0VP747X8\",\"socketPath\":\"/tmp/relayflowd-4aec22a724fd.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-0/un","run-4 c=1 sleep 0.15; printf U","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-0/gr","run-3 c=1 sleep 0.1; printf G","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-0/gr","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-0/un","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-0/la","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:LEAK ungranted2:LEAK later:LEAK","ok":false,"ms":1678} +{"s":"PL5species","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HA40RC3DFTMKMEFHXT946\",\"runId\":\"01M53HA40RC3DFTMKMEFHXT946\",\"socketPath\":\"/tmp/relayflowd-c74db0c48219.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2789} +{"s":"SEC7","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HA5F8F7VE9WZJPY9BKQ0Q\",\"runId\":\"01M53HA5F8F7VE9WZJPY9BKQ0Q\",\"socketPath\":\"/tmp/relayflowd-27fb8d84bb24.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-1/un","run-4 c=1 sleep 0.15; printf U","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-1/gr","run-3 c=1 sleep 0.1; printf G","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-1/gr","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-1/un","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-1/la","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:LEAK ungranted2:LEAK later:LEAK","ok":false,"ms":1737} +{"s":"SEC7","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HA62D0SW2TV7X2P26CX57\",\"runId\":\"01M53HA62D0SW2TV7X2P26CX57\",\"socketPath\":\"/tmp/relayflowd-d1f9ecccc7b3.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-2/gr","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-2/un","run-3 c=1 sleep 0.1; printf G","run-4 c=1 sleep 0.15; printf U","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-2/gr","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-2/un","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-2/la","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:LEAK ungranted2:LEAK later:LEAK","ok":false,"ms":1819} +{"s":"SEC7","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HA6REGR6QS6JN3VWH2NCD\",\"runId\":\"01M53HA6REGR6QS6JN3VWH2NCD\",\"socketPath\":\"/tmp/relayflowd-d37ca1d8689c.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf G","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-3/un","run-4 c=1 sleep 0.15; printf U","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-3/gr","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-3/gr","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-3/un","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-3/la","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:LEAK ungranted2:LEAK later:LEAK","ok":false,"ms":1875} +{"s":"SEC7","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HA75BC4XX6ZADN39D5W2Y\",\"runId\":\"01M53HA75BC4XX6ZADN39D5W2Y\",\"socketPath\":\"/tmp/relayflowd-4b3c91a2581f.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-4 c=1 sleep 0.15; printf U","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-4/gr","run-3 c=1 sleep 0.1; printf G","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-4/un","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-4/gr","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-4/un","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-4/la","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:LEAK ungranted2:LEAK later:LEAK","ok":false,"ms":1918} +{"s":"SEC7","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HA7V4WSQRTC56C80SYDN8\",\"runId\":\"01M53HA7V4WSQRTC56C80SYDN8\",\"socketPath\":\"/tmp/relayflowd-9e83f103fd05.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-5/gr","run-3 c=1 sleep 0.1; printf G","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-5/un","run-4 c=1 sleep 0.15; printf U","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-5/gr","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-5/un","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7/head-head-5/la","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:LEAK ungranted2:LEAK later:LEAK","ok":false,"ms":2120} +{"s":"PL7mid","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HA8J77VMQV4BVFJVV8TNA\",\"runId\":\"01M53HA8J77VMQV4BVFJVV8TNA\",\"socketPath\":\"/tmp/relayflowd-1fc33b0dcb55.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r9finals7/PL7mid/head-head-0/wstart; sleep 0.3; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2411} +{"s":"PL7mid","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HA90VC8RV5MJGM8JRAD71\",\"runId\":\"01M53HA90VC8RV5MJGM8JRAD71\",\"socketPath\":\"/tmp/relayflowd-c080c158712c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r9finals7/PL7mid/head-head-1/wstart; sleep 0.3; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2472} +{"s":"PL7mid","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HA9XFF5ZRQEEJD3D5NF7G\",\"runId\":\"01M53HA9XFF5ZRQEEJD3D5NF7G\",\"socketPath\":\"/tmp/relayflowd-745a24ed6726.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r9finals7/PL7mid/head-head-2/wstart; sleep 0.3; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2587} +{"s":"PL7mid","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAAXK2743AZVWDYFA26TX\",\"runId\":\"01M53HAAXK2743AZVWDYFA26TX\",\"socketPath\":\"/tmp/relayflowd-9e09d8534398.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r9finals7/PL7mid/head-head-3/wstart; sleep 0.3; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2604} +{"s":"PL7mid","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HABERYWHQG57CRZJF0K7T\",\"runId\":\"01M53HABERYWHQG57CRZJF0K7T\",\"socketPath\":\"/tmp/relayflowd-7dea3dd5f21a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r9finals7/PL7mid/head-head-4/wstart; sleep 0.3; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2766} +{"s":"PL7mid","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HACE2MXBGEA8JBYQQS4FS\",\"runId\":\"01M53HACE2MXBGEA8JBYQQS4FS\",\"socketPath\":\"/tmp/relayflowd-7562fde12c8a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r9finals7/PL7mid/head-head-5/wstart; sleep 0.3; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2893} +{"s":"PL7neutral","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HADFMGMHZKA9GVV4YFXYG\",\"runId\":\"01M53HADFMGMHZKA9GVV4YFXYG\",\"socketPath\":\"/tmp/relayflowd-fe23b30b3111.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r9finals7/PL7neutral/head-head-0/wstart; sleep 0.3; prin","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2445} +{"s":"PL7neutral","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAE54KHVDPKEXKKNR7V3F\",\"runId\":\"01M53HAE54KHVDPKEXKKNR7V3F\",\"socketPath\":\"/tmp/relayflowd-bc575e9deae0.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r9finals7/PL7neutral/head-head-1/wstart; sleep 0.3; prin","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2478} +{"s":"PL7neutral","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAF8BCNX05KWB4WJX99AB\",\"runId\":\"01M53HAF8BCNX05KWB4WJX99AB\",\"socketPath\":\"/tmp/relayflowd-f84bf0e6923a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r9finals7/PL7neutral/head-head-2/wstart; sleep 0.3; prin","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2508} +{"s":"PL7neutral","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAFW222Q16JZPTEJXDZ5K\",\"runId\":\"01M53HAFW222Q16JZPTEJXDZ5K\",\"socketPath\":\"/tmp/relayflowd-bca163886e45.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r9finals7/PL7neutral/head-head-3/wstart; sleep 0.3; prin","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2738} +{"s":"PL7neutral","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAGJSDXHE5MQK238298NV\",\"runId\":\"01M53HAGJSDXHE5MQK238298NV\",\"socketPath\":\"/tmp/relayflowd-21a41b0a5251.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r9finals7/PL7neutral/head-head-4/wstart; sleep 0.3; prin","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2806} +{"s":"PL7neutral","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAHPTZKFKKHV4SRQHAHVN\",\"runId\":\"01M53HAHPTZKFKKHV4SRQHAHVN\",\"socketPath\":\"/tmp/relayflowd-7c3249136fe0.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 touch /w/runs/r9finals7/PL7neutral/head-head-5/wstart; sleep 0.3; prin","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2885} +{"s":"PL6child","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAJH9W2QCERSKEMMQYEH3\",\"runId\":\"01M53HAJH9W2QCERSKEMMQYEH3\",\"socketPath\":\"/tmp/relayflowd-af84119dc9b0.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2332} +{"s":"PL6child","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAK9G6HNPKX1MJ3R7JQ8V\",\"runId\":\"01M53HAK9G6HNPKX1MJ3R7JQ8V\",\"socketPath\":\"/tmp/relayflowd-0aad5c93efdc.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2392} +{"s":"PL6child","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAMJ9JBKG7NJGTN26D9Z0\",\"runId\":\"01M53HAMJ9JBKG7NJGTN26D9Z0\",\"socketPath\":\"/tmp/relayflowd-7b2835af70e1.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2501} +{"s":"PL6child","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAMV901EP0HR5FPGED8K4\",\"runId\":\"01M53HAMV901EP0HR5FPGED8K4\",\"socketPath\":\"/tmp/relayflowd-b39146197d3c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2553} +{"s":"PL6child","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HANMYWF5ZQB0QRZ6WFF19\",\"runId\":\"01M53HANMYWF5ZQB0QRZ6WFF19\",\"socketPath\":\"/tmp/relayflowd-2e6f0921d969.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2652} +{"s":"PL6late","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAQADJYM3HPEJXASBJXSM\",\"runId\":\"01M53HAQADJYM3HPEJXASBJXSM\",\"socketPath\":\"/tmp/relayflowd-16f9afb1e74d.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2350} +{"s":"PL6child","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAPZTC0F13CG0P1AWVKY6\",\"runId\":\"01M53HAPZTC0F13CG0P1AWVKY6\",\"socketPath\":\"/tmp/relayflowd-1409da1c8f09.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2809} +{"s":"PL6late","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAR7YWRMMN5ZH8D123NRN\",\"runId\":\"01M53HAR7YWRMMN5ZH8D123NRN\",\"socketPath\":\"/tmp/relayflowd-340ec8285887.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2419} +{"s":"PL6late","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HASKSA595HS8A6XKVV4SA\",\"runId\":\"01M53HASKSA595HS8A6XKVV4SA\",\"socketPath\":\"/tmp/relayflowd-80f001ce60a4.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2457} +{"s":"PL6late","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HASPWGCHZCX6JSEFJ0R5V\",\"runId\":\"01M53HASPWGCHZCX6JSEFJ0R5V\",\"socketPath\":\"/tmp/relayflowd-87d626ebac19.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2538} +{"s":"PL6late","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HATJW240W76Z63H9ND2ZM\",\"runId\":\"01M53HATJW240W76Z63H9ND2ZM\",\"socketPath\":\"/tmp/relayflowd-294eb0a98b6b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2762} +{"s":"SEC7m","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAW6KNEHCWYSVTQWWK11V\",\"runId\":\"01M53HAW6KNEHCWYSVTQWWK11V\",\"socketPath\":\"/tmp/relayflowd-cba9b9106fe4.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf G","run-4 c=1 sleep 0.15; printf U","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-0/u","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-0/g","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-0/g","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-0/u","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-0/l","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:unset ungranted2:unset later:unset","ok":true,"ms":1872} +{"s":"PL6late","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAW0A6QJFMBCSA6X4Y1ZY\",\"runId\":\"01M53HAW0A6QJFMBCSA6X4Y1ZY\",\"socketPath\":\"/tmp/relayflowd-89fe9cc47c00.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2944} +{"s":"SEC7m","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAXDRSF0WMP8FNVH0M8GC\",\"runId\":\"01M53HAXDRSF0WMP8FNVH0M8GC\",\"socketPath\":\"/tmp/relayflowd-be28d8abbc8a.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-1/u","run-3 c=1 sleep 0.1; printf G","run-4 c=1 sleep 0.15; printf U","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-1/g","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-1/g","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-1/u","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-1/l","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:unset ungranted2:unset later:unset","ok":true,"ms":1910} +{"s":"SEC7m","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAY3337RNMCNPNJTFW9BY\",\"runId\":\"01M53HAY3337RNMCNPNJTFW9BY\",\"socketPath\":\"/tmp/relayflowd-667df6a21b93.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf G","run-4 c=1 sleep 0.15; printf U","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-2/u","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-2/g","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-2/g","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-2/u","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-2/l","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:unset ungranted2:unset later:unset","ok":true,"ms":1894} +{"s":"SEC7m","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAYYDCY2P7FW3AGXR8BPE\",\"runId\":\"01M53HAYYDCY2P7FW3AGXR8BPE\",\"socketPath\":\"/tmp/relayflowd-e8258e72d981.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-4 c=1 sleep 0.15; printf U","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-3/g","run-3 c=1 sleep 0.1; printf G","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-3/u","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-3/g","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-3/u","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-3/l","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:unset ungranted2:unset later:unset","ok":true,"ms":1988} +{"s":"SEC7m","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAZ7E3QXRGRT656WVW51A\",\"runId\":\"01M53HAZ7E3QXRGRT656WVW51A\",\"socketPath\":\"/tmp/relayflowd-0022372a2236.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf G","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-4/u","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-4/g","run-4 c=1 sleep 0.15; printf U","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-4/g","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-4/u","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-4/l","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:unset ungranted2:unset later:unset","ok":true,"ms":2063} +{"s":"SEC7miss","start":"head","resume":"head","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R7_TOK\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R7_TOK\\\" is not available to this run\"}],\"path\":\"/w/runs/r9finals7/SEC7miss/head-head-0/chain.flow.ts\",\"rootRunId\":\"01M53HB0Y0B3RM2HDNRMEYNA3B\",\"socketPath\":\"/tmp/relayflowd-916b10791659.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"granted:missing granted2:missing ungranted:missing ungranted2:missing later:missing","ok":true,"ms":695} +{"s":"SEC7miss","start":"head","resume":"head","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R7_TOK\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R7_TOK\\\" is not available to this run\"}],\"path\":\"/w/runs/r9finals7/SEC7miss/head-head-1/chain.flow.ts\",\"rootRunId\":\"01M53HB18FKD482VJ06KQP9VGX\",\"socketPath\":\"/tmp/relayflowd-56a0ad45ce54.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"granted:missing granted2:missing ungranted:missing ungranted2:missing later:missing","ok":true,"ms":670} +{"s":"SEC7m","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"","code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HAZV3EPATW874PQ1XEWHK\",\"runId\":\"01M53HAZV3EPATW874PQ1XEWHK\",\"socketPath\":\"/tmp/relayflowd-219ed1339f24.sock\",\"completedSteps\":9,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"Z","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-3 c=1 sleep 0.1; printf G","run-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-5/g","run-2 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-5/u","run-4 c=1 sleep 0.15; printf U","run-after-e27a70cca008b65a57071cd8901f67cb1453ae3fa6b9a3bda919c85c2385e15d-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-5/g","run-after-e45db452087a68dd63e9613a3b8c543a3c8cb5cd00e5eddb3078acc4e354476b-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-5/u","run-after-8cc3dceac19c0b44ea8753b01d6e5693e7cfe06455e6fb1183cb655dbf0a0a04-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals7/SEC7m/head-head-5/l","run-after-5c70395db0baca413448b6d9f4e1ce5679306fc392675c6f919c31d2f2c546e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-9 c=1 :"],"letterDup":false,"replay":false,"sec":"granted:ok granted2:ok ungranted:unset ungranted2:unset later:unset","ok":true,"ms":2166} +{"s":"SEC7miss","start":"head","resume":"head","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R7_TOK\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R7_TOK\\\" is not available to this run\"}],\"path\":\"/w/runs/r9finals7/SEC7miss/head-head-2/chain.flow.ts\",\"rootRunId\":\"01M53HB1FQ91Y8QCSQBJEKHDYZ\",\"socketPath\":\"/tmp/relayflowd-32dc55cc4e47.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"granted:missing granted2:missing ungranted:missing ungranted2:missing later:missing","ok":true,"ms":582} +{"s":"SEC7miss","start":"head","resume":"head","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R7_TOK\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R7_TOK\\\" is not available to this run\"}],\"path\":\"/w/runs/r9finals7/SEC7miss/head-head-3/chain.flow.ts\",\"rootRunId\":\"01M53HB1X4BWT46SA1RD9S8FRZ\",\"socketPath\":\"/tmp/relayflowd-e93acaa3eae1.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"granted:missing granted2:missing ungranted:missing ungranted2:missing later:missing","ok":true,"ms":650} +{"s":"SEC7miss","start":"head","resume":"head","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R7_TOK\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R7_TOK\\\" is not available to this run\"}],\"path\":\"/w/runs/r9finals7/SEC7miss/head-head-4/chain.flow.ts\",\"rootRunId\":\"01M53HB21661AMWPHDMAZQG0NC\",\"socketPath\":\"/tmp/relayflowd-160f6bc7b439.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"granted:missing granted2:missing ungranted:missing ungranted2:missing later:missing","ok":true,"ms":629} +{"s":"SEC7miss","start":"head","resume":"head","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [protocol_error] relayflowd could not complete the run request: step secret \"R7_TOK\" is not available to this run\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the run request: step secret \\\"R7_TOK\\\" is not available to this run\"}],\"path\":\"/w/runs/r9finals7/SEC7miss/head-head-5/chain.flow.ts\",\"rootRunId\":\"01M53HB22WGX361QGEGX7ZM6NZ\",\"socketPath\":\"/tmp/relayflowd-2a9a9582e669.sock\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":[],"letterDup":false,"replay":false,"sec":"granted:missing granted2:missing ungranted:missing ungranted2:missing later:missing","ok":true,"ms":588} +SUMMARY HY1 head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=PBZ +SUMMARY HY1s head>head ok=6/6 replay=0 fresh=6 mode=serial codes=0 effects=PB +SUMMARY HY2 head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=ABZ +SUMMARY PAR1 head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=bcaZ +SUMMARY PAR2 head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=baZ +SUMMARY EQ1twice head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=aaXZ +SUMMARY EQ2ret head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=abZ +SUMMARY EQ3midret head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=BARXZ +SUMMARY EQ4fail head>head ok=6/6 replay=0 fresh=6 mode=parallel codes=1 effects=FB +SUMMARY EQ5wide head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=gdabhejfkcilXZ|adgbehjcfkilXZ|adgehjbckfilXZ|agdhjbefckilXZ|dgabhjefkcilXZ|gadbehjfckilXZ +SUMMARY EQ5stall head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=adgbehjfYyciXZ|agdhbejcfYyiXZ|agdhebjfciYyXZ|agdebjhfciYyXZ|gadbehjfciYyXZ|adghjebcfiYyXZ +SUMMARY EQ6expr head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=BACXZ +SUMMARY EQ7record head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=BR3XZ +SUMMARY EQ8throw head>head ok=6/6 replay=0 fresh=6 mode=parallel codes=1 effects=B +SUMMARY EQ9nested head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=YabXZ|YbaXZ|aYbXZ +SUMMARY PL1r5 head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY PL2then head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY PL3sub head>head ok=0/6 replay=0 fresh=0 mode=serial codes=1 effects=abcXZ +SUMMARY PL4ctor head>head ok=0/6 replay=0 fresh=0 mode=serial codes=1 effects=abcXZ +SUMMARY PL5species head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY SEC7 head>head ok=0/6 replay=0 fresh=0 mode=parallel codes=0 effects=Z +SUMMARY PL7mid head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY PL7neutral head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY PL6child head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY PL6late head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY SEC7m head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=Z +SUMMARY SEC7miss head>head ok=6/6 replay=0 fresh=6 mode=parallel codes=1 effects= diff --git a/evidence/native-parallel-review9/final-s8.log b/evidence/native-parallel-review9/final-s8.log new file mode 100644 index 000000000..c9e2c80c8 --- /dev/null +++ b/evidence/native-parallel-review9/final-s8.log @@ -0,0 +1,378 @@ +{"s":"PL8r","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":761,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HB72RS74X1C0SXH8D91DG\",\"runId\":\"01M53HB72RS74X1C0SXH8D91DG\",\"socketPath\":\"/tmp/relayflowd-f9c5e7e7542e.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2615} +{"s":"PL8r","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":752,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HB72K1AVN3JM40FHB6X95\",\"runId\":\"01M53HB72K1AVN3JM40FHB6X95\",\"socketPath\":\"/tmp/relayflowd-1aa93a4681fe.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2668} +{"s":"PL8r","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":742,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HB72K48V9CFXSCZEAM4SM\",\"runId\":\"01M53HB72K48V9CFXSCZEAM4SM\",\"socketPath\":\"/tmp/relayflowd-39ef3a4229d6.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2715} +{"s":"PL8r","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":732,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HB9HCSZEMDNYZS0FFHW5Z\",\"runId\":\"01M53HB9HCSZEMDNYZS0FFHW5Z\",\"socketPath\":\"/tmp/relayflowd-d48f3eb87380.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2701} +{"s":"PL8r","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":700,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HB9K0S7Z2A9R1PEDGQJMB\",\"runId\":\"01M53HB9K0S7Z2A9R1PEDGQJMB\",\"socketPath\":\"/tmp/relayflowd-3a0b337c4bcf.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2721} +{"s":"PL8r","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":712,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HB9M5QSYFMEQB0GP6B3ZN\",\"runId\":\"01M53HB9M5QSYFMEQB0GP6B3ZN\",\"socketPath\":\"/tmp/relayflowd-87bb700ae2a7.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2803} +{"s":"PL8r","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":543,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBC08RXPRQ66MR9T57T0N\",\"runId\":\"01M53HBC08RXPRQ66MR9T57T0N\",\"socketPath\":\"/tmp/relayflowd-b5a3fc7c8523.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2021} +{"s":"PL8r","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":557,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBC2H8E2WAZKBGMQ6FF0M\",\"runId\":\"01M53HBC2H8E2WAZKBGMQ6FF0M\",\"socketPath\":\"/tmp/relayflowd-6777139df301.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2072} +{"s":"PL8r","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":626,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBC65WEHVC3YQ9GAF8QPZ\",\"runId\":\"01M53HBC65WEHVC3YQ9GAF8QPZ\",\"socketPath\":\"/tmp/relayflowd-9de7af80d38b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2218} +{"s":"PL8r","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":517,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBE11SCPMG4M7HSJQSHPP\",\"runId\":\"01M53HBE11SCPMG4M7HSJQSHPP\",\"socketPath\":\"/tmp/relayflowd-e97447dd103b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2275} +{"s":"PL8r","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":537,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBE3DGNPXWCHAZWWR1T4W\",\"runId\":\"01M53HBE3DGNPXWCHAZWWR1T4W\",\"socketPath\":\"/tmp/relayflowd-220755c870f0.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2351} +{"s":"PL8r","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":545,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBEBPJCQN7T5GFZRNC1HK\",\"runId\":\"01M53HBEBPJCQN7T5GFZRNC1HK\",\"socketPath\":\"/tmp/relayflowd-9fd94c61df3f.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2451} +{"s":"PL8rplain","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":691,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBGBQAS2BJ7J09ANF9MAT\",\"runId\":\"01M53HBGBQAS2BJ7J09ANF9MAT\",\"socketPath\":\"/tmp/relayflowd-dce191903211.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2295} +{"s":"PL8rplain","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":751,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBGJFFBBY7651X8CGMYRS\",\"runId\":\"01M53HBGJFFBBY7651X8CGMYRS\",\"socketPath\":\"/tmp/relayflowd-0a7201e74c1b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2443} +{"s":"PL8rplain","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":703,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBGY35DKSPAVMZB2M0F3M\",\"runId\":\"01M53HBGY35DKSPAVMZB2M0F3M\",\"socketPath\":\"/tmp/relayflowd-9e24d880b275.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2468} +{"s":"PL8rplain","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":702,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBJM28RJNTCJNAJCMZN24\",\"runId\":\"01M53HBJM28RJNTCJNAJCMZN24\",\"socketPath\":\"/tmp/relayflowd-c3c9ca01e6e7.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2595} +{"s":"PL8rplain","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":717,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBJYDJKGQYBH5PPV3S631\",\"runId\":\"01M53HBJYDJKGQYBH5PPV3S631\",\"socketPath\":\"/tmp/relayflowd-a4edea0e16d4.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2679} +{"s":"PL8rplain","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":698,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBKB9X8ECH60HFZ7KWGW0\",\"runId\":\"01M53HBKB9X8ECH60HFZ7KWGW0\",\"socketPath\":\"/tmp/relayflowd-c521572e484b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2775} +{"s":"PL8rplain","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":491,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBMZAB8K791V1SQW4Z75C\",\"runId\":\"01M53HBMZAB8K791V1SQW4Z75C\",\"socketPath\":\"/tmp/relayflowd-535db9b0798d.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1936} +{"s":"PL8rplain","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":492,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBNDCA55NGGVRF155RVTW\",\"runId\":\"01M53HBNDCA55NGGVRF155RVTW\",\"socketPath\":\"/tmp/relayflowd-05573e73c2a2.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2004} +{"s":"PL8rplain","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":508,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBNW60TNT81E2G3ZEDH6C\",\"runId\":\"01M53HBNW60TNT81E2G3ZEDH6C\",\"socketPath\":\"/tmp/relayflowd-ce1dfd2a62a9.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2077} +{"s":"PL8rplain","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":548,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBPVQW1EWYY9N1NB240RY\",\"runId\":\"01M53HBPVQW1EWYY9N1NB240RY\",\"socketPath\":\"/tmp/relayflowd-f4c5ad03999e.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2229} +{"s":"PL8rplain","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":550,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBQB7K15XCF8XM8A6GS0Y\",\"runId\":\"01M53HBQB7K15XCF8XM8A6GS0Y\",\"socketPath\":\"/tmp/relayflowd-1c611d55b51a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2327} +{"s":"PL8hide","start":"head","resume":"head","i":0,"fresh":true,"code1":1,"code":1,"effects":"b","effects1":"b","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r9finals8/PL8hide/head-head-0/chain.flow.ts\",\"rootRunId\":\"01M53HBS6R31JJA9E5B0NGN9HJ\",\"socketPath\":\"/tmp/relayflowd-cff542b8b634.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1228} +{"s":"PL8rplain","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":524,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBQWN475DRWNPYB54E3B9\",\"runId\":\"01M53HBQWN475DRWNPYB54E3B9\",\"socketPath\":\"/tmp/relayflowd-abb675887f0e.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2424} +{"s":"PL8hide","start":"head","resume":"head","i":1,"fresh":true,"code1":1,"code":1,"effects":"b","effects1":"b","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r9finals8/PL8hide/head-head-1/chain.flow.ts\",\"rootRunId\":\"01M53HBSS30HD6F1PF75KDT4B9\",\"socketPath\":\"/tmp/relayflowd-8a6c044b4348.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1210} +{"s":"PL8hide","start":"head","resume":"head","i":2,"fresh":true,"code1":1,"code":1,"effects":"b","effects1":"b","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r9finals8/PL8hide/head-head-2/chain.flow.ts\",\"rootRunId\":\"01M53HBTD6GSFT33JSFTDRXG7K\",\"socketPath\":\"/tmp/relayflowd-f2249fbb170a.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1213} +{"s":"PL8hide","start":"head","resume":"head","i":3,"fresh":true,"code1":1,"code":1,"effects":"b","effects1":"b","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r9finals8/PL8hide/head-head-3/chain.flow.ts\",\"rootRunId\":\"01M53HBTENED5DJVSPDZ85BS7Q\",\"socketPath\":\"/tmp/relayflowd-b37ef8c3fca3.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1228} +{"s":"PL8hide","start":"head","resume":"head","i":4,"fresh":true,"code1":1,"code":1,"effects":"b","effects1":"b","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r9finals8/PL8hide/head-head-4/chain.flow.ts\",\"rootRunId\":\"01M53HBTZ3WPD1EPZNF83D5136\",\"socketPath\":\"/tmp/relayflowd-b6f97acd9f82.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1230} +{"s":"PL8hide","start":"head","resume":"head","i":5,"fresh":true,"code1":1,"code":1,"effects":"b","effects1":"b","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r9finals8/PL8hide/head-head-5/chain.flow.ts\",\"rootRunId\":\"01M53HBVJQ900BQ6HK41XMXS0A\",\"socketPath\":\"/tmp/relayflowd-3292b5b6a828.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1193} +{"s":"PL8hide","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":535,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBVF8HBRF93MVT43JWQ9K\",\"runId\":\"01M53HBVF8HBRF93MVT43JWQ9K\",\"socketPath\":\"/tmp/relayflowd-36d1dce055e7.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1968} +{"s":"PL8hide","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":531,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBW0EDD52RQP1GADDJZA5\",\"runId\":\"01M53HBW0EDD52RQP1GADDJZA5\",\"socketPath\":\"/tmp/relayflowd-73949cb38af0.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2032} +{"s":"PL8hide","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":571,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBWK8M0P3JN5XNDHHG0SE\",\"runId\":\"01M53HBWK8M0P3JN5XNDHHG0SE\",\"socketPath\":\"/tmp/relayflowd-5042d6eaf5f8.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2183} +{"s":"PL8hide","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":552,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBXD57SAHJBT0DFC3H29M\",\"runId\":\"01M53HBXD57SAHJBT0DFC3H29M\",\"socketPath\":\"/tmp/relayflowd-ef9dd1061989.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2240} +{"s":"PL8hide","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":522,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBY033GKB9NRKC7NPNW87\",\"runId\":\"01M53HBY033GKB9NRKC7NPNW87\",\"socketPath\":\"/tmp/relayflowd-7aa900971eda.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2295} +{"s":"PL8hide","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":563,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBYQG3HP7C77JMT9MA61S\",\"runId\":\"01M53HBYQG3HP7C77JMT9MA61S\",\"socketPath\":\"/tmp/relayflowd-41fe6001d0aa.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2479} +{"s":"PL8iter","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":699,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HBZRDDJBQ9ZWHMKRH04SB\",\"runId\":\"01M53HBZRDDJBQ9ZWHMKRH04SB\",\"socketPath\":\"/tmp/relayflowd-862b7162ec98.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2361} +{"s":"PL8iter","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":780,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HC0CXFAPDBGTVSMPXY0QP\",\"runId\":\"01M53HC0CXFAPDBGTVSMPXY0QP\",\"socketPath\":\"/tmp/relayflowd-fcc828d30ffd.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2468} +{"s":"PL8iter","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":683,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HC1AMB533MTNB2HKQSWH9\",\"runId\":\"01M53HC1AMB533MTNB2HKQSWH9\",\"socketPath\":\"/tmp/relayflowd-a12c7fea6124.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2476} +{"s":"PL8iter","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":801,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HC229G5YEV6NNH1WG2DKW\",\"runId\":\"01M53HC229G5YEV6NNH1WG2DKW\",\"socketPath\":\"/tmp/relayflowd-dd0ebac9e928.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2689} +{"s":"PL8iter","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":737,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HC2TDWT529968A1WCZ1V3\",\"runId\":\"01M53HC2TDWT529968A1WCZ1V3\",\"socketPath\":\"/tmp/relayflowd-b980a774d767.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2743} +{"s":"PL8iter","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":741,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HC3SRYF6NG5E150N0876Q\",\"runId\":\"01M53HC3SRYF6NG5E150N0876Q\",\"socketPath\":\"/tmp/relayflowd-4b454bce1293.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2900} +{"s":"PL8iter","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":537,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HC4HYFV5CZBN39YJDM7WQ\",\"runId\":\"01M53HC4HYFV5CZBN39YJDM7WQ\",\"socketPath\":\"/tmp/relayflowd-e9a68b5dcb4a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2042} +{"s":"PL8iter","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":501,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HC5AMNKS4MDA79J9QRRBX\",\"runId\":\"01M53HC5AMNKS4MDA79J9QRRBX\",\"socketPath\":\"/tmp/relayflowd-11e760ea83f6.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2036} +{"s":"PL8iter","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":539,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HC6D3DFM0FZ5HFKE0XQCQ\",\"runId\":\"01M53HC6D3DFM0FZ5HFKE0XQCQ\",\"socketPath\":\"/tmp/relayflowd-547586321b31.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2138} +{"s":"PL8iter","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":556,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HC6GPCZH4DNN2MBJ0ZR4A\",\"runId\":\"01M53HC6GPCZH4DNN2MBJ0ZR4A\",\"socketPath\":\"/tmp/relayflowd-a43e9378ff9e.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2238} +{"s":"PL8iter","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":547,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HC7AYQTSKPS0HSDVDMQWP\",\"runId\":\"01M53HC7AYQTSKPS0HSDVDMQWP\",\"socketPath\":\"/tmp/relayflowd-4069c2936bc7.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2387} +{"s":"PL9dep","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":677,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HC8T35GDDEEJBCQ7AQCP9\",\"runId\":\"01M53HC8T35GDDEEJBCQ7AQCP9\",\"socketPath\":\"/tmp/relayflowd-15a58cdda892.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2243} +{"s":"PL8iter","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":557,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HC8G9QSB7DYCK0SVKX08H\",\"runId\":\"01M53HC8G9QSB7DYCK0SVKX08H\",\"socketPath\":\"/tmp/relayflowd-f95958428cbd.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2514} +{"s":"PL9dep","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":618,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HC9SG5GRH25P6DZKRDZ4E\",\"runId\":\"01M53HC9SG5GRH25P6DZKRDZ4E\",\"socketPath\":\"/tmp/relayflowd-8623ba664563.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2294} +{"s":"PL9dep","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":661,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCB02Y48EETEW37N1VYA3\",\"runId\":\"01M53HCB02Y48EETEW37N1VYA3\",\"socketPath\":\"/tmp/relayflowd-05e57a17c8fc.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2366} +{"s":"PL9dep","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":632,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCB1TKAQ36YTXK2S8Y62S\",\"runId\":\"01M53HCB1TKAQ36YTXK2S8Y62S\",\"socketPath\":\"/tmp/relayflowd-427be805bc17.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2417} +{"s":"PL9dep","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":628,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCBZSJ3F45CYAAQRX71HG\",\"runId\":\"01M53HCBZSJ3F45CYAAQRX71HG\",\"socketPath\":\"/tmp/relayflowd-131a848466d0.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2586} +{"s":"PL9dep","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":447,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCD7FC4W772MVBYWBNZA9\",\"runId\":\"01M53HCD7FC4W772MVBYWBNZA9\",\"socketPath\":\"/tmp/relayflowd-a7d3186733f2.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1808} +{"s":"PL9dep","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":637,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCD9R9PB2E6A2MJ4NSCXK\",\"runId\":\"01M53HCD9R9PB2E6A2MJ4NSCXK\",\"socketPath\":\"/tmp/relayflowd-d9efea320d96.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2616} +{"s":"PL9dep","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":492,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCEB381W6N9PCNF8DGBND\",\"runId\":\"01M53HCEB381W6N9PCNF8DGBND\",\"socketPath\":\"/tmp/relayflowd-ebb33f81a281.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1960} +{"s":"PL9dep","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":480,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCF0A6WAF6F2Q9REXEAHG\",\"runId\":\"01M53HCF0A6WAF6F2Q9REXEAHG\",\"socketPath\":\"/tmp/relayflowd-2ee1cf05b101.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2016} +{"s":"PL9dep","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":515,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCFPYTDKF2K833MTXBC3Q\",\"runId\":\"01M53HCFPYTDKF2K833MTXBC3Q\",\"socketPath\":\"/tmp/relayflowd-9f78e0d5d71c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2148} +{"s":"PL9dep","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":481,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCG943JEGBVMWCWH9WY61\",\"runId\":\"01M53HCG943JEGBVMWCWH9WY61\",\"socketPath\":\"/tmp/relayflowd-8d9de5baf0a6.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2224} +{"s":"PL9dep","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":476,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCGZES8ESVCZXKFYR6M9X\",\"runId\":\"01M53HCGZES8ESVCZXKFYR6M9X\",\"socketPath\":\"/tmp/relayflowd-6a948f4662f2.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2319} +{"s":"PL9depsnap","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":621,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCJ17EQT8JQCPF2GJMJD6\",\"runId\":\"01M53HCJ17EQT8JQCPF2GJMJD6\",\"socketPath\":\"/tmp/relayflowd-85e237e4f9b4.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2258} +{"s":"PL9depsnap","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":623,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCJKZ3RA78SY5SSQF32T2\",\"runId\":\"01M53HCJKZ3RA78SY5SSQF32T2\",\"socketPath\":\"/tmp/relayflowd-e2bf49d34629.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2248} +{"s":"PL9depsnap","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":620,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCKDAHZZWZ6RTYP29RRQW\",\"runId\":\"01M53HCKDAHZZWZ6RTYP29RRQW\",\"socketPath\":\"/tmp/relayflowd-0a62e43fba97.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2327} +{"s":"PL9depsnap","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":622,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCM5AXH8NJV3ZRAES8YC0\",\"runId\":\"01M53HCM5AXH8NJV3ZRAES8YC0\",\"socketPath\":\"/tmp/relayflowd-b92e423ae72d.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2405} +{"s":"PL9depsnap","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":620,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCMSD3YNV6CYC2AGPZ8N1\",\"runId\":\"01M53HCMSD3YNV6CYC2AGPZ8N1\",\"socketPath\":\"/tmp/relayflowd-5978eb868d55.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2531} +{"s":"PL9depsnap","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":652,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCNNS9ABNRR82WTSE2920\",\"runId\":\"01M53HCNNS9ABNRR82WTSE2920\",\"socketPath\":\"/tmp/relayflowd-34c682df8512.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"serial","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2674} +{"s":"PL9depsnap","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":471,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCPAWAXS1EZ4Y48AR2D79\",\"runId\":\"01M53HCPAWAXS1EZ4Y48AR2D79\",\"socketPath\":\"/tmp/relayflowd-647698238fac.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1864} +{"s":"PL9depsnap","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":450,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCQ3CNBPF84YN4RD7D3ZQ\",\"runId\":\"01M53HCQ3CNBPF84YN4RD7D3ZQ\",\"socketPath\":\"/tmp/relayflowd-0f037626e8e0.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1910} +{"s":"PL9depsnap","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":480,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCR43Y0NPNC78BM5YD0D4\",\"runId\":\"01M53HCR43Y0NPNC78BM5YD0D4\",\"socketPath\":\"/tmp/relayflowd-281fc5ec92a2.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2020} +{"s":"PL9depsnap","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":470,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCR56KCSK7PVE8QPFN6MF\",\"runId\":\"01M53HCR56KCSK7PVE8QPFN6MF\",\"socketPath\":\"/tmp/relayflowd-73816eba973d.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2074} +{"s":"PL9depsnap","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":433,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCRZ71H0F75B3BY9Y8Q2T\",\"runId\":\"01M53HCRZ71H0F75B3BY9Y8Q2T\",\"socketPath\":\"/tmp/relayflowd-a44cdc130d68.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2168} +{"s":"PL9depnone","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":766,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCTBBGTYCGSF9X0T3CWMV\",\"runId\":\"01M53HCTBBGTYCGSF9X0T3CWMV\",\"socketPath\":\"/tmp/relayflowd-a988913b293e.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2083} +{"s":"PL9depsnap","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":525,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCT34PX0YGDS3AZ64Q943\",\"runId\":\"01M53HCT34PX0YGDS3AZ64Q943\",\"socketPath\":\"/tmp/relayflowd-92a95db89fe2.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2385} +{"s":"PL9depnone","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":718,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCV8EE1CRDYHQS31J7445\",\"runId\":\"01M53HCV8EE1CRDYHQS31J7445\",\"socketPath\":\"/tmp/relayflowd-e1782b7ce3c3.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2138} +{"s":"PL9depnone","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":692,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCWFCSK6VVSYAR4GESKDG\",\"runId\":\"01M53HCWFCSK6VVSYAR4GESKDG\",\"socketPath\":\"/tmp/relayflowd-8723fb7503f8.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2229} +{"s":"PL9depnone","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":655,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCWNY6MJ4M8KPARY0JP09\",\"runId\":\"01M53HCWNY6MJ4M8KPARY0JP09\",\"socketPath\":\"/tmp/relayflowd-a5b88b6a5217.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2275} +{"s":"PL9depnone","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":617,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCXBEHASK6QWE4FZ2QCB2\",\"runId\":\"01M53HCXBEHASK6QWE4FZ2QCB2\",\"socketPath\":\"/tmp/relayflowd-fdaea560f518.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2293} +{"s":"PL9depnone","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":445,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCYN34GD2RWHGFYCXXND7\",\"runId\":\"01M53HCYN34GD2RWHGFYCXXND7\",\"socketPath\":\"/tmp/relayflowd-d5d8addfaf62.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1815} +{"s":"PL9depnone","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":641,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCYK0G0KT4ZHWM5HJ6Z2X\",\"runId\":\"01M53HCYK0G0KT4ZHWM5HJ6Z2X\",\"socketPath\":\"/tmp/relayflowd-598f0f7cd8cd.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2406} +{"s":"PL9depnone","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":449,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HCZDNBVR6B484TJ1D15K4\",\"runId\":\"01M53HCZDNBVR6B484TJ1D15K4\",\"socketPath\":\"/tmp/relayflowd-2cb75f2521d5.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1926} +{"s":"PL9depnone","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":456,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HD0DHBFTY7YV3DGW4SF6W\",\"runId\":\"01M53HD0DHBFTY7YV3DGW4SF6W\",\"socketPath\":\"/tmp/relayflowd-a1691263c5ad.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1975} +{"s":"PL9depnone","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":389,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HD0REPAQ0YZ3NEH2JZ17X\",\"runId\":\"01M53HD0REPAQ0YZ3NEH2JZ17X\",\"socketPath\":\"/tmp/relayflowd-dff4794f2a5d.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1998} +{"s":"PL9depnone","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":441,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HD19JFKZN5ER80H0Y7XXV\",\"runId\":\"01M53HD19JFKZN5ER80H0Y7XXV\",\"socketPath\":\"/tmp/relayflowd-77a74ae6501b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2172} +{"s":"PL9depnone","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":484,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HD2B64K7FTM1CEQN3M01Y\",\"runId\":\"01M53HD2B64K7FTM1CEQN3M01Y\",\"socketPath\":\"/tmp/relayflowd-90dfe3745096.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2335} +{"s":"RS1","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":723,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HD2YQ7E32TWWEBZ59QBHZ\",\"runId\":\"01M53HD2YQ7E32TWWEBZ59QBHZ\",\"socketPath\":\"/tmp/relayflowd-c1576e1f36f5.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2101} +{"s":"RS1","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":692,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HD3ND530HZ2TFDHNJ85CE\",\"runId\":\"01M53HD3ND530HZ2TFDHNJ85CE\",\"socketPath\":\"/tmp/relayflowd-15368c103a91.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2149} +{"s":"RS1","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":734,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HD4WXCXY24KG2C8ZA4Y04\",\"runId\":\"01M53HD4WXCXY24KG2C8ZA4Y04\",\"socketPath\":\"/tmp/relayflowd-8de343547887.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2285} +{"s":"RS1","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":734,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HD516N2ZBVGZGFQYR0WHZ\",\"runId\":\"01M53HD516N2ZBVGZGFQYR0WHZ\",\"socketPath\":\"/tmp/relayflowd-289e59fbf234.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2465} +{"s":"RS1","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":661,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HD5RWCGPMVA2D1EN0NYWC\",\"runId\":\"01M53HD5RWCGPMVA2D1EN0NYWC\",\"socketPath\":\"/tmp/relayflowd-b74951610bfd.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2420} +{"s":"RS1","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":563,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HD7801PF7K3D8DE3VXW4A\",\"runId\":\"01M53HD7801PF7K3D8DE3VXW4A\",\"socketPath\":\"/tmp/relayflowd-e6fd2cd9648a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2021} +{"s":"RS1","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":700,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HD74QA7C8MT6ZAF1RBW2J\",\"runId\":\"01M53HD74QA7C8MT6ZAF1RBW2J\",\"socketPath\":\"/tmp/relayflowd-70b0dbebc91f.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2563} +{"s":"RS1","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":534,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HD7XGGD8S38RX0A1VN46G\",\"runId\":\"01M53HD7XGGD8S38RX0A1VN46G\",\"socketPath\":\"/tmp/relayflowd-ae3e32420469.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2013} +{"s":"RS1","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":575,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HD96BC30ZR3G6XMS0M60E\",\"runId\":\"01M53HD96BC30ZR3G6XMS0M60E\",\"socketPath\":\"/tmp/relayflowd-3ecf3143e65a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2144} +{"s":"RS1","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":532,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HD9EN1J6Y7E3E4N9YCBM6\",\"runId\":\"01M53HD9EN1J6Y7E3E4N9YCBM6\",\"socketPath\":\"/tmp/relayflowd-e57c23811651.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2217} +{"s":"RS1","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":525,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HD9XKM1FF9YEXZ20FP8XA\",\"runId\":\"01M53HD9XKM1FF9YEXZ20FP8XA\",\"socketPath\":\"/tmp/relayflowd-94ec1551fc66.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2340} +{"s":"RS1","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":525,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDB9A8ZPAYA6HZWXBXAZS\",\"runId\":\"01M53HDB9A8ZPAYA6HZWXBXAZS\",\"socketPath\":\"/tmp/relayflowd-e6144ee3b17c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2409} +{"s":"RS1bh","start":"head","resume":"head","i":0,"fresh":false,"code1":0,"effects1":"bcaXZ","resumeMs":699,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDBRYEACMZ9VQ7EYZW165\",\"runId\":\"01M53HDBRYEACMZ9VQ7EYZW165\",\"socketPath\":\"/tmp/relayflowd-7d61f586fa18.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDBRYEACMZ9VQ7EYZW165\",\"runId\":\"01M53HDBRYEACMZ9VQ7EYZW165\",\"socketPath\":\"/tmp/relayflowd-7d61f586fa18.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2641} +{"s":"RS1bh","start":"head","resume":"head","i":1,"fresh":false,"code1":0,"effects1":"bcaXZ","resumeMs":668,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDCC3BGDQW0NGMHH063T4\",\"runId\":\"01M53HDCC3BGDQW0NGMHH063T4\",\"socketPath\":\"/tmp/relayflowd-77e07cbeeacd.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDCC3BGDQW0NGMHH063T4\",\"runId\":\"01M53HDCC3BGDQW0NGMHH063T4\",\"socketPath\":\"/tmp/relayflowd-77e07cbeeacd.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2651} +{"s":"RS1bh","start":"head","resume":"head","i":2,"fresh":false,"code1":0,"effects1":"bcaXZ","resumeMs":805,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDDVSE885GGCF6BTJS06Z\",\"runId\":\"01M53HDDVSE885GGCF6BTJS06Z\",\"socketPath\":\"/tmp/relayflowd-11dc60bb17bf.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDDVSE885GGCF6BTJS06Z\",\"runId\":\"01M53HDDVSE885GGCF6BTJS06Z\",\"socketPath\":\"/tmp/relayflowd-11dc60bb17bf.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2984} +{"s":"RS1bh","start":"head","resume":"head","i":3,"fresh":false,"code1":0,"effects1":"bcaXZ","resumeMs":819,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDECCA1FT21B68BKVYC96\",\"runId\":\"01M53HDECCA1FT21B68BKVYC96\",\"socketPath\":\"/tmp/relayflowd-49017427453f.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDECCA1FT21B68BKVYC96\",\"runId\":\"01M53HDECCA1FT21B68BKVYC96\",\"socketPath\":\"/tmp/relayflowd-49017427453f.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":3081} +{"s":"RS1bh","start":"head","resume":"head","i":4,"fresh":false,"code1":0,"effects1":"bcaXZ","resumeMs":765,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDF2W9RP20JYBD3XJJHMJ\",\"runId\":\"01M53HDF2W9RP20JYBD3XJJHMJ\",\"socketPath\":\"/tmp/relayflowd-85866f0c0f63.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDF2W9RP20JYBD3XJJHMJ\",\"runId\":\"01M53HDF2W9RP20JYBD3XJJHMJ\",\"socketPath\":\"/tmp/relayflowd-85866f0c0f63.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":3185} +{"s":"RS1bb","start":"base","resume":"base","i":0,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":536,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDH6VJ9WTWBBA5ZCM2D8S\",\"runId\":\"01M53HDH6VJ9WTWBBA5ZCM2D8S\",\"socketPath\":\"/tmp/relayflowd-c1f208c33a11.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDH6VJ9WTWBBA5ZCM2D8S\",\"runId\":\"01M53HDH6VJ9WTWBBA5ZCM2D8S\",\"socketPath\":\"/tmp/relayflowd-c1f208c33a11.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2408} +{"s":"RS1bh","start":"head","resume":"head","i":5,"fresh":false,"code1":0,"effects1":"bcaXZ","resumeMs":704,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDGR9851S8NNEFEGK0V5Z\",\"runId\":\"01M53HDGR9851S8NNEFEGK0V5Z\",\"socketPath\":\"/tmp/relayflowd-3243adc9de15.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDGR9851S8NNEFEGK0V5Z\",\"runId\":\"01M53HDGR9851S8NNEFEGK0V5Z\",\"socketPath\":\"/tmp/relayflowd-3243adc9de15.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":3112} +{"s":"RS1bb","start":"base","resume":"base","i":1,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":543,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDHWQQCDQ6B4F1RGAN0EM\",\"runId\":\"01M53HDHWQQCDQ6B4F1RGAN0EM\",\"socketPath\":\"/tmp/relayflowd-39218065bff0.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDHWQQCDQ6B4F1RGAN0EM\",\"runId\":\"01M53HDHWQQCDQ6B4F1RGAN0EM\",\"socketPath\":\"/tmp/relayflowd-39218065bff0.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2419} +{"s":"RS1bb","start":"base","resume":"base","i":2,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":556,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDKHNX5QMY83W424QA8DZ\",\"runId\":\"01M53HDKHNX5QMY83W424QA8DZ\",\"socketPath\":\"/tmp/relayflowd-cbe5912b1405.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDKHNX5QMY83W424QA8DZ\",\"runId\":\"01M53HDKHNX5QMY83W424QA8DZ\",\"socketPath\":\"/tmp/relayflowd-cbe5912b1405.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2542} +{"s":"RS1bb","start":"base","resume":"base","i":3,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":503,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDKK6BZDM63YF7Z4W7Y5Q\",\"runId\":\"01M53HDKK6BZDM63YF7Z4W7Y5Q\",\"socketPath\":\"/tmp/relayflowd-9a037e96fcae.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDKK6BZDM63YF7Z4W7Y5Q\",\"runId\":\"01M53HDKK6BZDM63YF7Z4W7Y5Q\",\"socketPath\":\"/tmp/relayflowd-9a037e96fcae.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2549} +{"s":"RS1bb","start":"base","resume":"base","i":4,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":542,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDM8SJCYZYVJE3YW0K00S\",\"runId\":\"01M53HDM8SJCYZYVJE3YW0K00S\",\"socketPath\":\"/tmp/relayflowd-77449fbe3602.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDM8SJCYZYVJE3YW0K00S\",\"runId\":\"01M53HDM8SJCYZYVJE3YW0K00S\",\"socketPath\":\"/tmp/relayflowd-77449fbe3602.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2717} +{"s":"RS2","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":691,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDP8PBZGWQGPDPWJVJ4DR\",\"runId\":\"01M53HDP8PBZGWQGPDPWJVJ4DR\",\"socketPath\":\"/tmp/relayflowd-b22231002d67.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2076} +{"s":"RS1bb","start":"base","resume":"base","i":5,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":543,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDP1KP4QFBP88C8PFK7SJ\",\"runId\":\"01M53HDP1KP4QFBP88C8PFK7SJ\",\"socketPath\":\"/tmp/relayflowd-2c9f5c8fa062.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDP1KP4QFBP88C8PFK7SJ\",\"runId\":\"01M53HDP1KP4QFBP88C8PFK7SJ\",\"socketPath\":\"/tmp/relayflowd-2c9f5c8fa062.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2893} +{"s":"RS2","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":760,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDQ2X78BRVG6W11468797\",\"runId\":\"01M53HDQ2X78BRVG6W11468797\",\"socketPath\":\"/tmp/relayflowd-ccdc1107af96.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2198} +{"s":"RS2","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":709,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDRAP52X48QNQNR9QT6A3\",\"runId\":\"01M53HDRAP52X48QNQNR9QT6A3\",\"socketPath\":\"/tmp/relayflowd-342a52825cff.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2253} +{"s":"RS2","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":746,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDS1M90ZMHG3MVXR6VRVD\",\"runId\":\"01M53HDS1M90ZMHG3MVXR6VRVD\",\"socketPath\":\"/tmp/relayflowd-9cdcb42e7f0c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2385} +{"s":"RS2","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":739,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDS8JZAV6VE1Y8767B6DX\",\"runId\":\"01M53HDS8JZAV6VE1Y8767B6DX\",\"socketPath\":\"/tmp/relayflowd-33da4c245a95.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2513} +{"s":"RS2","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":752,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDTHMACA9VCYDRSXQE56M\",\"runId\":\"01M53HDTHMACA9VCYDRSXQE56M\",\"socketPath\":\"/tmp/relayflowd-64fddae4565d.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2643} +{"s":"RS2","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":483,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDV65AW6VGRJJ9V33BJQV\",\"runId\":\"01M53HDV65AW6VGRJJ9V33BJQV\",\"socketPath\":\"/tmp/relayflowd-abf91d944e85.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1951} +{"s":"RS2","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":530,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDVGYZCK3AXP72X21HKM3\",\"runId\":\"01M53HDVGYZCK3AXP72X21HKM3\",\"socketPath\":\"/tmp/relayflowd-b878b945e185.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2089} +{"s":"RS2","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":540,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDWYTBD5RFF4WJ7ZEB6BY\",\"runId\":\"01M53HDWYTBD5RFF4WJ7ZEB6BY\",\"socketPath\":\"/tmp/relayflowd-49efa8015e1f.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2143} +{"s":"RS2","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":547,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDX34JS84Y10ETRW5ZJ4J\",\"runId\":\"01M53HDX34JS84Y10ETRW5ZJ4J\",\"socketPath\":\"/tmp/relayflowd-017081d3627c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2230} +{"s":"RS2","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":550,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDXJE22WAWCGYGKW6B0Z8\",\"runId\":\"01M53HDXJE22WAWCGYGKW6B0Z8\",\"socketPath\":\"/tmp/relayflowd-9ce0491b6e57.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2359} +{"s":"RS2","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":560,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDZ0HM76ZJE0PSDK13B8Y\",\"runId\":\"01M53HDZ0HM76ZJE0PSDK13B8Y\",\"socketPath\":\"/tmp/relayflowd-637b6b9e751b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2498} +{"s":"RS2bh","start":"head","resume":"head","i":0,"fresh":false,"code1":0,"effects1":"bcaXZ","resumeMs":720,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDZEF55JKR2B9AEDZQHSA\",\"runId\":\"01M53HDZEF55JKR2B9AEDZQHSA\",\"socketPath\":\"/tmp/relayflowd-14e5d41e5163.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HDZEF55JKR2B9AEDZQHSA\",\"runId\":\"01M53HDZEF55JKR2B9AEDZQHSA\",\"socketPath\":\"/tmp/relayflowd-14e5d41e5163.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2681} +{"s":"RS2bh","start":"head","resume":"head","i":1,"fresh":false,"code1":0,"effects1":"bcaXZ","resumeMs":708,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE00NC7D3J7VKMEWXYFS2\",\"runId\":\"01M53HE00NC7D3J7VKMEWXYFS2\",\"socketPath\":\"/tmp/relayflowd-e2f55482c485.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE00NC7D3J7VKMEWXYFS2\",\"runId\":\"01M53HE00NC7D3J7VKMEWXYFS2\",\"socketPath\":\"/tmp/relayflowd-e2f55482c485.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2700} +{"s":"RS2bh","start":"head","resume":"head","i":2,"fresh":false,"code1":0,"effects1":"bcaXZ","resumeMs":701,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE1MMH3WB11JBHD6KVWQ4\",\"runId\":\"01M53HE1MMH3WB11JBHD6KVWQ4\",\"socketPath\":\"/tmp/relayflowd-88919bebd24c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE1MMH3WB11JBHD6KVWQ4\",\"runId\":\"01M53HE1MMH3WB11JBHD6KVWQ4\",\"socketPath\":\"/tmp/relayflowd-88919bebd24c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2779} +{"s":"RS2bh","start":"head","resume":"head","i":3,"fresh":false,"code1":0,"effects1":"bcaXZ","resumeMs":713,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE22SXYRQ18TDTM5JG29J\",\"runId\":\"01M53HE22SXYRQ18TDTM5JG29J\",\"socketPath\":\"/tmp/relayflowd-3b203d05cf0b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE22SXYRQ18TDTM5JG29J\",\"runId\":\"01M53HE22SXYRQ18TDTM5JG29J\",\"socketPath\":\"/tmp/relayflowd-3b203d05cf0b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2922} +{"s":"RS2bh","start":"head","resume":"head","i":4,"fresh":false,"code1":0,"effects1":"bcaXZ","resumeMs":717,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE2NR348GKAT8M8M30VEP\",\"runId\":\"01M53HE2NR348GKAT8M8M30VEP\",\"socketPath\":\"/tmp/relayflowd-5912fd2910d2.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE2NR348GKAT8M8M30VEP\",\"runId\":\"01M53HE2NR348GKAT8M8M30VEP\",\"socketPath\":\"/tmp/relayflowd-5912fd2910d2.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2982} +{"s":"RS2bb","start":"base","resume":"base","i":0,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":561,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE4QXHPP6P72671HXPPS9\",\"runId\":\"01M53HE4QXHPP6P72671HXPPS9\",\"socketPath\":\"/tmp/relayflowd-5cd75fe2ea67.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE4QXHPP6P72671HXPPS9\",\"runId\":\"01M53HE4QXHPP6P72671HXPPS9\",\"socketPath\":\"/tmp/relayflowd-5cd75fe2ea67.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2402} +{"s":"RS2bh","start":"head","resume":"head","i":5,"fresh":false,"code1":0,"effects1":"bcaXZ","resumeMs":716,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE4C0ESHYR0HRY7ENK7VS\",\"runId\":\"01M53HE4C0ESHYR0HRY7ENK7VS\",\"socketPath\":\"/tmp/relayflowd-17034c61452d.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE4C0ESHYR0HRY7ENK7VS\",\"runId\":\"01M53HE4C0ESHYR0HRY7ENK7VS\",\"socketPath\":\"/tmp/relayflowd-17034c61452d.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":3154} +{"s":"RS2bb","start":"base","resume":"base","i":1,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":536,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE5DRRXAXPMKB403TDK5Z\",\"runId\":\"01M53HE5DRRXAXPMKB403TDK5Z\",\"socketPath\":\"/tmp/relayflowd-430af97a2acd.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE5DRRXAXPMKB403TDK5Z\",\"runId\":\"01M53HE5DRRXAXPMKB403TDK5Z\",\"socketPath\":\"/tmp/relayflowd-430af97a2acd.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2469} +{"s":"RS2bb","start":"base","resume":"base","i":2,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":537,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE72MKQFSRY6BRJR8W92D\",\"runId\":\"01M53HE72MKQFSRY6BRJR8W92D\",\"socketPath\":\"/tmp/relayflowd-4488d5ff8cc6.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE72MKQFSRY6BRJR8W92D\",\"runId\":\"01M53HE72MKQFSRY6BRJR8W92D\",\"socketPath\":\"/tmp/relayflowd-4488d5ff8cc6.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2475} +{"s":"RS2bb","start":"base","resume":"base","i":3,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":529,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE78W0KXDRB0KY3W2Y9FV\",\"runId\":\"01M53HE78W0KXDRB0KY3W2Y9FV\",\"socketPath\":\"/tmp/relayflowd-f9dde5ba1242.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE78W0KXDRB0KY3W2Y9FV\",\"runId\":\"01M53HE78W0KXDRB0KY3W2Y9FV\",\"socketPath\":\"/tmp/relayflowd-f9dde5ba1242.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2571} +{"s":"RS2bb","start":"base","resume":"base","i":4,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":508,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE7VADQMM149PGZFBH036\",\"runId\":\"01M53HE7VADQMM149PGZFBH036\",\"socketPath\":\"/tmp/relayflowd-e4d5d731ff7f.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE7VADQMM149PGZFBH036\",\"runId\":\"01M53HE7VADQMM149PGZFBH036\",\"socketPath\":\"/tmp/relayflowd-e4d5d731ff7f.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2717} +{"s":"RS3","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":423,"code":2,"out":" a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"refusal\",\"kind\":\"invalid_spec\",\"message\":\"unsupported_promise_lifecycle: pinned parallel root 01M53HE9YF5SE7CSXBH0RR06FS cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\"}],\"rootRunId\":\"01M53HE9YF5SE7CSXBH0RR06FS\",\"runId\":\"01M53HE9YF5SE7CSXBH0RR06FS\",\"socketPath\":\"/tmp/relayflowd-34b0aebd4c1a.sock\",\"subscriptions\":[]}\n","effects":"bcaX","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1820} +{"s":"RS2bb","start":"base","resume":"base","i":5,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":523,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE9GSYSQN5BJ9R8ZVMR74\",\"runId\":\"01M53HE9GSYSQN5BJ9R8ZVMR74\",\"socketPath\":\"/tmp/relayflowd-c37e78033527.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HE9GSYSQN5BJ9R8ZVMR74\",\"runId\":\"01M53HE9GSYSQN5BJ9R8ZVMR74\",\"socketPath\":\"/tmp/relayflowd-c37e78033527.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2826} +{"s":"RS3","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":427,"code":2,"out":" a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"refusal\",\"kind\":\"invalid_spec\",\"message\":\"unsupported_promise_lifecycle: pinned parallel root 01M53HEANGCHQGGNBRV7E9Z31P cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\"}],\"rootRunId\":\"01M53HEANGCHQGGNBRV7E9Z31P\",\"runId\":\"01M53HEANGCHQGGNBRV7E9Z31P\",\"socketPath\":\"/tmp/relayflowd-b7b461c5a82b.sock\",\"subscriptions\":[]}\n","effects":"bcaX","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1883} +{"s":"RS3","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":432,"code":2,"out":" a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"refusal\",\"kind\":\"invalid_spec\",\"message\":\"unsupported_promise_lifecycle: pinned parallel root 01M53HEBQ611TZ7T8E1NXPSYKR cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\"}],\"rootRunId\":\"01M53HEBQ611TZ7T8E1NXPSYKR\",\"runId\":\"01M53HEBQ611TZ7T8E1NXPSYKR\",\"socketPath\":\"/tmp/relayflowd-a68934ad3b68.sock\",\"subscriptions\":[]}\n","effects":"bcaX","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1959} +{"s":"RS3","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":436,"code":2,"out":" a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"refusal\",\"kind\":\"invalid_spec\",\"message\":\"unsupported_promise_lifecycle: pinned parallel root 01M53HECEDX1VB4X4CZ90PBF1X cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\"}],\"rootRunId\":\"01M53HECEDX1VB4X4CZ90PBF1X\",\"runId\":\"01M53HECEDX1VB4X4CZ90PBF1X\",\"socketPath\":\"/tmp/relayflowd-64023c00e998.sock\",\"subscriptions\":[]}\n","effects":"bcaX","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2042} +{"s":"RS3","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":432,"code":2,"out":" a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"refusal\",\"kind\":\"invalid_spec\",\"message\":\"unsupported_promise_lifecycle: pinned parallel root 01M53HECFQN6VVRVSV9V33512S cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\"}],\"rootRunId\":\"01M53HECFQN6VVRVSV9V33512S\",\"runId\":\"01M53HECFQN6VVRVSV9V33512S\",\"socketPath\":\"/tmp/relayflowd-e1e29aeab32f.sock\",\"subscriptions\":[]}\n","effects":"bcaX","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2135} +{"s":"RS3","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":440,"code":2,"out":" a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"refusal\",\"kind\":\"invalid_spec\",\"message\":\"unsupported_promise_lifecycle: pinned parallel root 01M53HEDKHCBRDJZ9APT47WBG2 cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\"}],\"rootRunId\":\"01M53HEDKHCBRDJZ9APT47WBG2\",\"runId\":\"01M53HEDKHCBRDJZ9APT47WBG2\",\"socketPath\":\"/tmp/relayflowd-efe5694ba38f.sock\",\"subscriptions\":[]}\n","effects":"bcaX","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2279} +{"s":"RS3","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":524,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEE8QF33EMBHR8XXSXNP9\",\"runId\":\"01M53HEE8QF33EMBHR8XXSXNP9\",\"socketPath\":\"/tmp/relayflowd-98b6603d9f0b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1988} +{"s":"RS3","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":516,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEECZFA2101334ZJGJE5E\",\"runId\":\"01M53HEECZFA2101334ZJGJE5E\",\"socketPath\":\"/tmp/relayflowd-05566c5a25be.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2025} +{"s":"RS3","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":547,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEFNXPRKHRBDTTB2GP1BM\",\"runId\":\"01M53HEFNXPRKHRBDTTB2GP1BM\",\"socketPath\":\"/tmp/relayflowd-0e9ab1ccb34c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2139} +{"s":"RS3","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":521,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEG7GJQZTE6H3YEN675N5\",\"runId\":\"01M53HEG7GJQZTE6H3YEN675N5\",\"socketPath\":\"/tmp/relayflowd-1eba0c82c405.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2217} +{"s":"RS3","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":537,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEGDA4X9P1NQPP3M43QE0\",\"runId\":\"01M53HEGDA4X9P1NQPP3M43QE0\",\"socketPath\":\"/tmp/relayflowd-ab55f3ee3683.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2334} +{"s":"RS3","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":519,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEHRRA7T955GAEMME04VW\",\"runId\":\"01M53HEHRRA7T955GAEMME04VW\",\"socketPath\":\"/tmp/relayflowd-96a95f50a92c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2421} +{"s":"RS3bh","start":"head","resume":"head","i":0,"fresh":false,"code1":2,"effects1":"bcaX","resumeMs":427,"code":0,"out":" a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"refusal\",\"kind\":\"invalid_spec\",\"message\":\"unsupported_promise_lifecycle: pinned parallel root 01M53HEJHVH05NPNC2ZAV9P322 cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\"}],\"rootRunId\":\"01M53HEJHVH05NPNC2ZAV9P322\",\"runId\":\"01M53HEJHVH05NPNC2ZAV9P322\",\"socketPath\":\"/tmp/relayflowd-f562cd7d24a3.sock\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaX","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEJHVH05NPNC2ZAV9P322\",\"runId\":\"01M53HEJHVH05NPNC2ZAV9P322\",\"socketPath\":\"/tmp/relayflowd-f562cd7d24a3.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2515} +{"s":"RS3bh","start":"head","resume":"head","i":1,"fresh":false,"code1":2,"effects1":"bcaX","resumeMs":455,"code":0,"out":" a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"refusal\",\"kind\":\"invalid_spec\",\"message\":\"unsupported_promise_lifecycle: pinned parallel root 01M53HEJTDP7WFZ8XHPVARFS70 cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\"}],\"rootRunId\":\"01M53HEJTDP7WFZ8XHPVARFS70\",\"runId\":\"01M53HEJTDP7WFZ8XHPVARFS70\",\"socketPath\":\"/tmp/relayflowd-d1fdc9e09a12.sock\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaX","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEJTDP7WFZ8XHPVARFS70\",\"runId\":\"01M53HEJTDP7WFZ8XHPVARFS70\",\"socketPath\":\"/tmp/relayflowd-d1fdc9e09a12.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2575} +{"s":"RS3bh","start":"head","resume":"head","i":2,"fresh":false,"code1":2,"effects1":"bcaX","resumeMs":420,"code":0,"out":" a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"refusal\",\"kind\":\"invalid_spec\",\"message\":\"unsupported_promise_lifecycle: pinned parallel root 01M53HEMAKR5W8TZHSMM0TFNB7 cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\"}],\"rootRunId\":\"01M53HEMAKR5W8TZHSMM0TFNB7\",\"runId\":\"01M53HEMAKR5W8TZHSMM0TFNB7\",\"socketPath\":\"/tmp/relayflowd-81c3139e63af.sock\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaX","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEMAKR5W8TZHSMM0TFNB7\",\"runId\":\"01M53HEMAKR5W8TZHSMM0TFNB7\",\"socketPath\":\"/tmp/relayflowd-81c3139e63af.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2716} +{"s":"RS3bh","start":"head","resume":"head","i":3,"fresh":false,"code1":2,"effects1":"bcaX","resumeMs":438,"code":0,"out":" a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"refusal\",\"kind\":\"invalid_spec\",\"message\":\"unsupported_promise_lifecycle: pinned parallel root 01M53HEN07PP6V316VTARQH7FC cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\"}],\"rootRunId\":\"01M53HEN07PP6V316VTARQH7FC\",\"runId\":\"01M53HEN07PP6V316VTARQH7FC\",\"socketPath\":\"/tmp/relayflowd-44595a49cabb.sock\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaX","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEN07PP6V316VTARQH7FC\",\"runId\":\"01M53HEN07PP6V316VTARQH7FC\",\"socketPath\":\"/tmp/relayflowd-44595a49cabb.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2755} +{"s":"RS3bh","start":"head","resume":"head","i":4,"fresh":false,"code1":2,"effects1":"bcaX","resumeMs":447,"code":0,"out":" a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"refusal\",\"kind\":\"invalid_spec\",\"message\":\"unsupported_promise_lifecycle: pinned parallel root 01M53HENB9AQF64SZ3HHHEV33E cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\"}],\"rootRunId\":\"01M53HENB9AQF64SZ3HHHEV33E\",\"runId\":\"01M53HENB9AQF64SZ3HHHEV33E\",\"socketPath\":\"/tmp/relayflowd-3c4e5ccd024a.sock\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaX","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HENB9AQF64SZ3HHHEV33E\",\"runId\":\"01M53HENB9AQF64SZ3HHHEV33E\",\"socketPath\":\"/tmp/relayflowd-3c4e5ccd024a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2882} +{"s":"RS3bh","start":"head","resume":"head","i":5,"fresh":false,"code1":2,"effects1":"bcaX","resumeMs":429,"code":0,"out":" a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"refusal\",\"kind\":\"invalid_spec\",\"message\":\"unsupported_promise_lifecycle: pinned parallel root 01M53HEPZ8KP0NBKSC5GZ3FQQ6 cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\"}],\"rootRunId\":\"01M53HEPZ8KP0NBKSC5GZ3FQQ6\",\"runId\":\"01M53HEPZ8KP0NBKSC5GZ3FQQ6\",\"socketPath\":\"/tmp/relayflowd-9a996fd84eef.sock\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaX","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEPZ8KP0NBKSC5GZ3FQQ6\",\"runId\":\"01M53HEPZ8KP0NBKSC5GZ3FQQ6\",\"socketPath\":\"/tmp/relayflowd-9a996fd84eef.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":3013} +{"s":"RS3bb","start":"base","resume":"base","i":0,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":519,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEQGVYMCDNEWRMJB7AGS1\",\"runId\":\"01M53HEQGVYMCDNEWRMJB7AGS1\",\"socketPath\":\"/tmp/relayflowd-9245f8369f4f.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEQGVYMCDNEWRMJB7AGS1\",\"runId\":\"01M53HEQGVYMCDNEWRMJB7AGS1\",\"socketPath\":\"/tmp/relayflowd-9245f8369f4f.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2365} +{"s":"RS3bb","start":"base","resume":"base","i":1,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":551,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HER0JXM8CDSXVNTFSAE3S\",\"runId\":\"01M53HER0JXM8CDSXVNTFSAE3S\",\"socketPath\":\"/tmp/relayflowd-22bc96b8e23a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HER0JXM8CDSXVNTFSAE3S\",\"runId\":\"01M53HER0JXM8CDSXVNTFSAE3S\",\"socketPath\":\"/tmp/relayflowd-22bc96b8e23a.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2495} +{"s":"RS3bb","start":"base","resume":"base","i":2,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":593,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HESPWMDVES16V4MD73HE3\",\"runId\":\"01M53HESPWMDVES16V4MD73HE3\",\"socketPath\":\"/tmp/relayflowd-0cded5a928fc.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HESPWMDVES16V4MD73HE3\",\"runId\":\"01M53HESPWMDVES16V4MD73HE3\",\"socketPath\":\"/tmp/relayflowd-0cded5a928fc.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2568} +{"s":"RS3bb","start":"base","resume":"base","i":3,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":517,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEST588NAKW75CT961QJ9\",\"runId\":\"01M53HEST588NAKW75CT961QJ9\",\"socketPath\":\"/tmp/relayflowd-b248b005e44e.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEST588NAKW75CT961QJ9\",\"runId\":\"01M53HEST588NAKW75CT961QJ9\",\"socketPath\":\"/tmp/relayflowd-b248b005e44e.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2568} +{"s":"RS3bb","start":"base","resume":"base","i":4,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":499,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HETEMMKSG68HP35AHF1AD\",\"runId\":\"01M53HETEMMKSG68HP35AHF1AD\",\"socketPath\":\"/tmp/relayflowd-cbe322f48562.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HETEMMKSG68HP35AHF1AD\",\"runId\":\"01M53HETEMMKSG68HP35AHF1AD\",\"socketPath\":\"/tmp/relayflowd-cbe322f48562.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2749} +{"s":"RS0","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":740,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEWGF3GWZFGBD35XY2NGJ\",\"runId\":\"01M53HEWGF3GWZFGBD35XY2NGJ\",\"socketPath\":\"/tmp/relayflowd-49c3bc12555f.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2131} +{"s":"RS3bb","start":"base","resume":"base","i":5,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":537,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEW87GF4VHHENAS9QXW0N\",\"runId\":\"01M53HEW87GF4VHHENAS9QXW0N\",\"socketPath\":\"/tmp/relayflowd-d2b1406e0355.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEW87GF4VHHENAS9QXW0N\",\"runId\":\"01M53HEW87GF4VHHENAS9QXW0N\",\"socketPath\":\"/tmp/relayflowd-d2b1406e0355.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2864} +{"s":"RS0","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":756,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEX8Y0HTK4S8J0S6WGCDE\",\"runId\":\"01M53HEX8Y0HTK4S8J0S6WGCDE\",\"socketPath\":\"/tmp/relayflowd-07ad50aae84f.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2177} +{"s":"RS0","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":712,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEYK4CMEN6DECGZN9ZM0D\",\"runId\":\"01M53HEYK4CMEN6DECGZN9ZM0D\",\"socketPath\":\"/tmp/relayflowd-9fd90fe923ed.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2232} +{"s":"RS0","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":728,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEZ6DXQXRBC1Z483FSS6W\",\"runId\":\"01M53HEZ6DXQXRBC1Z483FSS6W\",\"socketPath\":\"/tmp/relayflowd-47f6681161b6.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2373} +{"s":"RS0","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":737,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HEZD7VM3RQMN8YWEJW60C\",\"runId\":\"01M53HEZD7VM3RQMN8YWEJW60C\",\"socketPath\":\"/tmp/relayflowd-02b94d90bdc8.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2455} +{"s":"RS0","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":719,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HF0RJPK4Y77DJ1XXCMWNE\",\"runId\":\"01M53HF0RJPK4Y77DJ1XXCMWNE\",\"socketPath\":\"/tmp/relayflowd-557b7550aabe.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2543} +{"s":"RS0","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":569,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HF1AR904SQY7ENH52FFF8\",\"runId\":\"01M53HF1AR904SQY7ENH52FFF8\",\"socketPath\":\"/tmp/relayflowd-af9ef32a17c8.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1998} +{"s":"RS0","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":536,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HF1MQ14KX5XN17P1HNHV8\",\"runId\":\"01M53HF1MQ14KX5XN17P1HNHV8\",\"socketPath\":\"/tmp/relayflowd-19d96e7e7b77.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2068} +{"s":"RS0","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":555,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HF335TBMRB8AZ2K75H5D8\",\"runId\":\"01M53HF335TBMRB8AZ2K75H5D8\",\"socketPath\":\"/tmp/relayflowd-a01aa3c3300c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2195} +{"s":"RS0","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":596,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HF38R0XMXQYV62AZ6BC5P\",\"runId\":\"01M53HF38R0XMXQYV62AZ6BC5P\",\"socketPath\":\"/tmp/relayflowd-43f4323b6e2b.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2241} +{"s":"RS0","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":563,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HF3N3EKWF0RK5VT3KHKC8\",\"runId\":\"01M53HF3N3EKWF0RK5VT3KHKC8\",\"socketPath\":\"/tmp/relayflowd-66b49ece8740.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2379} +{"s":"RS0","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"abcX","resumeMs":585,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HF57M1A1X8EZDXGG982TZ\",\"runId\":\"01M53HF57M1A1X8EZDXGG982TZ\",\"socketPath\":\"/tmp/relayflowd-f3642456409c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2499} +{"s":"RS0bh","start":"head","resume":"head","i":0,"fresh":false,"code1":0,"effects1":"bcaXZ","resumeMs":765,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HF5MTN0XG6P8VZHV96MTS\",\"runId\":\"01M53HF5MTN0XG6P8VZHV96MTS\",\"socketPath\":\"/tmp/relayflowd-add559f67e12.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HF5MTN0XG6P8VZHV96MTS\",\"runId\":\"01M53HF5MTN0XG6P8VZHV96MTS\",\"socketPath\":\"/tmp/relayflowd-add559f67e12.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2706} +{"s":"RS0bh","start":"head","resume":"head","i":1,"fresh":false,"code1":0,"effects1":"bcaXZ","resumeMs":754,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HF65EMRY42N8M6EW99P2P\",\"runId\":\"01M53HF65EMRY42N8M6EW99P2P\",\"socketPath\":\"/tmp/relayflowd-dc9dc18432c8.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HF65EMRY42N8M6EW99P2P\",\"runId\":\"01M53HF65EMRY42N8M6EW99P2P\",\"socketPath\":\"/tmp/relayflowd-dc9dc18432c8.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2757} +{"s":"RS0bh","start":"head","resume":"head","i":2,"fresh":false,"code1":0,"effects1":"bcaXZ","resumeMs":730,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HF7VB1KNYCZ2H0XR8JVVK\",\"runId\":\"01M53HF7VB1KNYCZ2H0XR8JVVK\",\"socketPath\":\"/tmp/relayflowd-509e6e711221.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HF7VB1KNYCZ2H0XR8JVVK\",\"runId\":\"01M53HF7VB1KNYCZ2H0XR8JVVK\",\"socketPath\":\"/tmp/relayflowd-509e6e711221.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2980} +{"s":"RS0bh","start":"head","resume":"head","i":3,"fresh":false,"code1":0,"effects1":"bcaXZ","resumeMs":876,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HF89XGW5YSQNN83JXV70Y\",\"runId\":\"01M53HF89XGW5YSQNN83JXV70Y\",\"socketPath\":\"/tmp/relayflowd-678abec08ec2.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HF89XGW5YSQNN83JXV70Y\",\"runId\":\"01M53HF89XGW5YSQNN83JXV70Y\",\"socketPath\":\"/tmp/relayflowd-678abec08ec2.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":3093} +{"s":"RS0bh","start":"head","resume":"head","i":4,"fresh":false,"code1":0,"effects1":"bcaXZ","resumeMs":841,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HF8VJ2JY7PTR5SZNXXF2K\",\"runId\":\"01M53HF8VJ2JY7PTR5SZNXXF2K\",\"socketPath\":\"/tmp/relayflowd-884e9114c962.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HF8VJ2JY7PTR5SZNXXF2K\",\"runId\":\"01M53HF8VJ2JY7PTR5SZNXXF2K\",\"socketPath\":\"/tmp/relayflowd-884e9114c962.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":3125} +{"s":"RS0bb","start":"base","resume":"base","i":0,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":610,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFB5SRRM0F8N4ES0YMZ1M\",\"runId\":\"01M53HFB5SRRM0F8N4ES0YMZ1M\",\"socketPath\":\"/tmp/relayflowd-781d4655f09c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFB5SRRM0F8N4ES0YMZ1M\",\"runId\":\"01M53HFB5SRRM0F8N4ES0YMZ1M\",\"socketPath\":\"/tmp/relayflowd-781d4655f09c.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2489} +{"s":"RS0bh","start":"head","resume":"head","i":5,"fresh":false,"code1":0,"effects1":"bcaXZ","resumeMs":784,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFATP3KTDZWHJATX1TJP3\",\"runId\":\"01M53HFATP3KTDZWHJATX1TJP3\",\"socketPath\":\"/tmp/relayflowd-77ae0246bcdf.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFATP3KTDZWHJATX1TJP3\",\"runId\":\"01M53HFATP3KTDZWHJATX1TJP3\",\"socketPath\":\"/tmp/relayflowd-77ae0246bcdf.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bcaXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":3301} +{"s":"RS0bb","start":"base","resume":"base","i":1,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":624,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFBQ5CF2J4RKRCQNXQ4AE\",\"runId\":\"01M53HFBQ5CF2J4RKRCQNXQ4AE\",\"socketPath\":\"/tmp/relayflowd-978ad56aee95.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFBQ5CF2J4RKRCQNXQ4AE\",\"runId\":\"01M53HFBQ5CF2J4RKRCQNXQ4AE\",\"socketPath\":\"/tmp/relayflowd-978ad56aee95.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2558} +{"s":"RS0bb","start":"base","resume":"base","i":2,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":590,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFDK97H80ETKHCW4W940B\",\"runId\":\"01M53HFDK97H80ETKHCW4W940B\",\"socketPath\":\"/tmp/relayflowd-e51fce2aee29.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFDK97H80ETKHCW4W940B\",\"runId\":\"01M53HFDK97H80ETKHCW4W940B\",\"socketPath\":\"/tmp/relayflowd-e51fce2aee29.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2641} +{"s":"RS0bb","start":"base","resume":"base","i":3,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":590,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFDV1CARXHYA9FTG6RWY2\",\"runId\":\"01M53HFDV1CARXHYA9FTG6RWY2\",\"socketPath\":\"/tmp/relayflowd-9385ce318ee2.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFDV1CARXHYA9FTG6RWY2\",\"runId\":\"01M53HFDV1CARXHYA9FTG6RWY2\",\"socketPath\":\"/tmp/relayflowd-9385ce318ee2.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2736} +{"s":"RS0bb","start":"base","resume":"base","i":4,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":617,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFE89D57D3CSS4Y0ZCJYA\",\"runId\":\"01M53HFE89D57D3CSS4Y0ZCJYA\",\"socketPath\":\"/tmp/relayflowd-ef8a56bb102e.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFE89D57D3CSS4Y0ZCJYA\",\"runId\":\"01M53HFE89D57D3CSS4Y0ZCJYA\",\"socketPath\":\"/tmp/relayflowd-ef8a56bb102e.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2847} +{"s":"DP1","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":677,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFGNHKPMSJZSVGB9E1AC4\",\"runId\":\"01M53HFGNHKPMSJZSVGB9E1AC4\",\"socketPath\":\"/tmp/relayflowd-93890018d322.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1864} +{"s":"DP1","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":681,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFH55M1T7N7BCXZX83GB0\",\"runId\":\"01M53HFH55M1T7N7BCXZX83GB0\",\"socketPath\":\"/tmp/relayflowd-5cbec67de6c6.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1882} +{"s":"RS0bb","start":"base","resume":"base","i":5,"fresh":false,"code1":0,"effects1":"abcXZ","resumeMs":603,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFG602RD08V4YY6PD2W6C\",\"runId\":\"01M53HFG602RD08V4YY6PD2W6C\",\"socketPath\":\"/tmp/relayflowd-4b23b943a137.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects0":"abcX","effectsMid":"abcXZ","out2":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFG602RD08V4YY6PD2W6C\",\"runId\":\"01M53HFG602RD08V4YY6PD2W6C\",\"socketPath\":\"/tmp/relayflowd-4b23b943a137.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abcXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.4; printf A","run-3 c=1 printf B","run-4 c=1 sleep 0.2; printf C","run-5 c=1 printf a >> effects","run-6 c=1 printf b >> effects","run-7 c=1 printf c >> effects","run-8 c=1 printf X >> effects","run-9 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2899} +{"s":"DP1","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":663,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFJF7WS9TQY7DV83K6313\",\"runId\":\"01M53HFJF7WS9TQY7DV83K6313\",\"socketPath\":\"/tmp/relayflowd-7c78347193ff.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1980} +{"s":"DP1","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":703,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFK18SB04K73M6TPTM7CY\",\"runId\":\"01M53HFK18SB04K73M6TPTM7CY\",\"socketPath\":\"/tmp/relayflowd-dd9727ba8a99.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2101} +{"s":"DP1","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":701,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFK55VCT8NQ81TXBD8C6D\",\"runId\":\"01M53HFK55VCT8NQ81TXBD8C6D\",\"socketPath\":\"/tmp/relayflowd-48b642c7b827.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2210} +{"s":"DP1","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"abX","resumeMs":554,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFMWN9RFQ9X22C22M611K\",\"runId\":\"01M53HFMWN9RFQ9X22C22M611K\",\"socketPath\":\"/tmp/relayflowd-77d1c763dbb3.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1683} +{"s":"DP1","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":726,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFMDAE17NW0H62HBC91KR\",\"runId\":\"01M53HFMDAE17NW0H62HBC91KR\",\"socketPath\":\"/tmp/relayflowd-5255d84f7610.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2380} +{"s":"DP1","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"abX","resumeMs":521,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFN4ZFSCMEMEQNJKB4FY9\",\"runId\":\"01M53HFN4ZFSCMEMEQNJKB4FY9\",\"socketPath\":\"/tmp/relayflowd-b0e8ffc4634b.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1726} +{"s":"DP1","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"abX","resumeMs":504,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFPHTRPM2WJV8T4GAH6KX\",\"runId\":\"01M53HFPHTRPM2WJV8T4GAH6KX\",\"socketPath\":\"/tmp/relayflowd-623aeceb1c32.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1795} +{"s":"DP1","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"abX","resumeMs":504,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFPJ8GZD48QWBBD1MXK06\",\"runId\":\"01M53HFPJ8GZD48QWBBD1MXK06\",\"socketPath\":\"/tmp/relayflowd-1ea825e1b004.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1874} +{"s":"DP1","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"abX","resumeMs":523,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFPTM70XA29PZM0CQGJHT\",\"runId\":\"01M53HFPTM70XA29PZM0CQGJHT\",\"socketPath\":\"/tmp/relayflowd-815351f947f8.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1991} +{"s":"OPT1","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":718,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFRJ42A7TNHZ8FZXBHA0Z\",\"runId\":\"01M53HFRJ42A7TNHZ8FZXBHA0Z\",\"socketPath\":\"/tmp/relayflowd-1fc62fc0dac8.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1887} +{"s":"DP1","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"abX","resumeMs":516,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFRAHMNAKEVYVQ71VK09C\",\"runId\":\"01M53HFRAHMNAKEVYVQ71VK09C\",\"socketPath\":\"/tmp/relayflowd-255e8966bfc6.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2132} +{"s":"OPT1","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":730,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFRXJFNAD1BRPBW4ZTANH\",\"runId\":\"01M53HFRXJFNAD1BRPBW4ZTANH\",\"socketPath\":\"/tmp/relayflowd-374d7d202009.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1944} +{"s":"OPT1","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":673,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFTD9NQYJMZXG9DP72A94\",\"runId\":\"01M53HFTD9NQYJMZXG9DP72A94\",\"socketPath\":\"/tmp/relayflowd-176069fa549f.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1991} +{"s":"OPT1","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":735,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFTJ9QHVD92Q6S9N7TMPK\",\"runId\":\"01M53HFTJ9QHVD92Q6S9N7TMPK\",\"socketPath\":\"/tmp/relayflowd-a1da8921a3bf.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2132} +{"s":"OPT1","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":687,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFTV6G9PC8MXPJ16XW2RZ\",\"runId\":\"01M53HFTV6G9PC8MXPJ16XW2RZ\",\"socketPath\":\"/tmp/relayflowd-52dfa50a7ecc.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2198} +{"s":"OPT1","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"abX","resumeMs":503,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFWF4SFX822V4PJXZV541\",\"runId\":\"01M53HFWF4SFX822V4PJXZV541\",\"socketPath\":\"/tmp/relayflowd-29359f03e07b.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1624} +{"s":"OPT1","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":721,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFWC22E9V0XARPJ4K961Z\",\"runId\":\"01M53HFWC22E9V0XARPJ4K961Z\",\"socketPath\":\"/tmp/relayflowd-0e1341ed050d.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2402} +{"s":"OPT1","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"abX","resumeMs":549,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFWV4HF62S888X3TRZ1RR\",\"runId\":\"01M53HFWV4HF62S888X3TRZ1RR\",\"socketPath\":\"/tmp/relayflowd-dcaf7a968915.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1759} +{"s":"OPT1","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"abX","resumeMs":499,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFY2R3VVKQDPT7Z7584GE\",\"runId\":\"01M53HFY2R3VVKQDPT7Z7584GE\",\"socketPath\":\"/tmp/relayflowd-33b5774d3422.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1822} +{"s":"OPT1","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"abX","resumeMs":511,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFYHE4WNCGQTYTB908MG7\",\"runId\":\"01M53HFYHE4WNCGQTYTB908MG7\",\"socketPath\":\"/tmp/relayflowd-8e7e8105f61a.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1909} +{"s":"OPT1","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"abX","resumeMs":501,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFYHY0M14RTND6CGJPHHX\",\"runId\":\"01M53HFYHY0M14RTND6CGJPHHX\",\"socketPath\":\"/tmp/relayflowd-316183964fa1.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2014} +{"s":"OPT1","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"abX","resumeMs":553,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HFZTSPV86XJHEHR4CMDGM\",\"runId\":\"01M53HFZTSPV86XJHEHR4CMDGM\",\"socketPath\":\"/tmp/relayflowd-195a67c92f84.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"abXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf a >> effects","run-5 c=1 printf b >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2137} +{"s":"TV1","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"b4a2X","resumeMs":700,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HG0HXFJ0MYV4G472M8YQP\",\"runId\":\"01M53HG0HXFJ0MYV4G472M8YQP\",\"socketPath\":\"/tmp/relayflowd-8accd01c2a09.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"b4a2XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf vv","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; exit 4","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b4 >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a2 >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1868} +{"s":"TV1","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"b4a2X","resumeMs":692,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HG0NZEGXRXD0DX1PPB6Q2\",\"runId\":\"01M53HG0NZEGXRXD0DX1PPB6Q2\",\"socketPath\":\"/tmp/relayflowd-fc3a8899b671.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"b4a2XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; exit 4","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf vv","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b4 >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a2 >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1924} +{"s":"TV1","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"b4a2X","resumeMs":688,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HG230P70FMKJHNH4R5A22\",\"runId\":\"01M53HG230P70FMKJHNH4R5A22\",\"socketPath\":\"/tmp/relayflowd-5d05fd3bf5f0.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"b4a2XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf vv","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; exit 4","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b4 >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a2 >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1995} +{"s":"TV1","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"b4a2X","resumeMs":739,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HG2CXG5PGGHWDV9DC8CSR\",\"runId\":\"01M53HG2CXG5PGGHWDV9DC8CSR\",\"socketPath\":\"/tmp/relayflowd-868afb832150.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"b4a2XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf vv","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; exit 4","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b4 >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a2 >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2155} +{"s":"TV1","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"b4a2X","resumeMs":692,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HG2JJDRYY37KP3NC39CNR\",\"runId\":\"01M53HG2JJDRYY37KP3NC39CNR\",\"socketPath\":\"/tmp/relayflowd-48770623a571.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"b4a2XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf vv","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; exit 4","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b4 >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a2 >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2201} +{"s":"TV1","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"a2b4X","resumeMs":508,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HG4A1S6N3QJW7PADFGVKT\",\"runId\":\"01M53HG4A1S6N3QJW7PADFGVKT\",\"socketPath\":\"/tmp/relayflowd-c979e120b4c1.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"a2b4XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-2 c=1 sleep 0.3; printf vv","run-3 c=1 sleep 0.1; exit 4","run-4 c=1 printf a2 >> effects","run-5 c=1 printf b4 >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1630} +{"s":"TV1","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"b4a2X","resumeMs":700,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HG41NH1E8NY2HAP1PQEZH\",\"runId\":\"01M53HG41NH1E8NY2HAP1PQEZH\",\"socketPath\":\"/tmp/relayflowd-f57184e97d7f.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"b4a2XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf vv","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; exit 4","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b4 >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a2 >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2340} +{"s":"TV1","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"a2b4X","resumeMs":528,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HG4HDQTJ4E24T59QDCAGW\",\"runId\":\"01M53HG4HDQTJ4E24T59QDCAGW\",\"socketPath\":\"/tmp/relayflowd-950426434b77.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"a2b4XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-2 c=1 sleep 0.3; printf vv","run-3 c=1 sleep 0.1; exit 4","run-4 c=1 printf a2 >> effects","run-5 c=1 printf b4 >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1710} +{"s":"TV1","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"a2b4X","resumeMs":541,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HG5X1XDQS8XH1K8XNT1BQ\",\"runId\":\"01M53HG5X1XDQS8XH1K8XNT1BQ\",\"socketPath\":\"/tmp/relayflowd-d1a535f213c4.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"a2b4XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-2 c=1 sleep 0.3; printf vv","run-3 c=1 sleep 0.1; exit 4","run-4 c=1 printf a2 >> effects","run-5 c=1 printf b4 >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1809} +{"s":"TV1","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"a2b4X","resumeMs":559,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HG65AZKBNKVGJ3GGFTZMM\",\"runId\":\"01M53HG65AZKBNKVGJ3GGFTZMM\",\"socketPath\":\"/tmp/relayflowd-eafded0dffd6.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"a2b4XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-2 c=1 sleep 0.3; printf vv","run-3 c=1 sleep 0.1; exit 4","run-4 c=1 printf a2 >> effects","run-5 c=1 printf b4 >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1909} +{"s":"TV1","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"a2b4X","resumeMs":497,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HG6749NJTQ1076QR86T43\",\"runId\":\"01M53HG6749NJTQ1076QR86T43\",\"socketPath\":\"/tmp/relayflowd-41500aa99dcb.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"a2b4XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-2 c=1 sleep 0.3; printf vv","run-3 c=1 sleep 0.1; exit 4","run-4 c=1 printf a2 >> effects","run-5 c=1 printf b4 >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1967} +{"s":"TV1","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"a2b4X","resumeMs":555,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HG7P2M6B0WTQGPSQQT16G\",\"runId\":\"01M53HG7P2M6B0WTQGPSQQT16G\",\"socketPath\":\"/tmp/relayflowd-305a58d17b9e.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"a2b4XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-2 c=1 sleep 0.3; printf vv","run-3 c=1 sleep 0.1; exit 4","run-4 c=1 printf a2 >> effects","run-5 c=1 printf b4 >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2154} +{"s":"EP1","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"bya2X","resumeMs":713,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HG86S0NJCNW6JBCS2MSPK\",\"runId\":\"01M53HG86S0NJCNW6JBCS2MSPK\",\"socketPath\":\"/tmp/relayflowd-2d6f2dcfd86c.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bya2XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf by >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a2 >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1906} +{"s":"EP1","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"bya2X","resumeMs":741,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HG89N0SH17SXRB275M73X\",\"runId\":\"01M53HG89N0SH17SXRB275M73X\",\"socketPath\":\"/tmp/relayflowd-b78b5d6bd9d5.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bya2XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf by >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a2 >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1991} +{"s":"EP1","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"bya2X","resumeMs":734,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HG9ZMTQ7BTBZK6HHJ9HP3\",\"runId\":\"01M53HG9ZMTQ7BTBZK6HHJ9HP3\",\"socketPath\":\"/tmp/relayflowd-43c6dde8bf6a.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bya2XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf by >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a2 >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2106} +{"s":"EP1","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"bya2X","resumeMs":705,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGA0VADSCNQSTF9G28JMA\",\"runId\":\"01M53HGA0VADSCNQSTF9G28JMA\",\"socketPath\":\"/tmp/relayflowd-7b28600447f6.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bya2XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf by >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a2 >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2076} +{"s":"EP1","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"bya2X","resumeMs":722,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGA8E77P8999B9XQ6FXEZ\",\"runId\":\"01M53HGA8E77P8999B9XQ6FXEZ\",\"socketPath\":\"/tmp/relayflowd-7f029e856b71.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bya2XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf by >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a2 >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2265} +{"s":"EP1","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"a2byX","resumeMs":614,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGBY3A6D56F23ZKAMSJB2\",\"runId\":\"01M53HGBY3A6D56F23ZKAMSJB2\",\"socketPath\":\"/tmp/relayflowd-9d8124d2a5f2.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"a2byXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf a2 >> effects","run-5 c=1 printf by >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1763} +{"s":"EP1","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"a2byX","resumeMs":602,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGC9PEQDD45NVRZNSR5YF\",\"runId\":\"01M53HGC9PEQDD45NVRZNSR5YF\",\"socketPath\":\"/tmp/relayflowd-4a7596e7b400.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"a2byXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf a2 >> effects","run-5 c=1 printf by >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1792} +{"s":"EP1","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"bya2X","resumeMs":778,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGC0W3JHWRT7WGVTBDW4Q\",\"runId\":\"01M53HGC0W3JHWRT7WGVTBDW4Q\",\"socketPath\":\"/tmp/relayflowd-a43264a137e1.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bya2XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf by >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a2 >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2421} +{"s":"EP1","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"a2byX","resumeMs":541,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGDP479Q1RB3JY25PQ68C\",\"runId\":\"01M53HGDP479Q1RB3JY25PQ68C\",\"socketPath\":\"/tmp/relayflowd-becbf13b37af.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"a2byXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf a2 >> effects","run-5 c=1 printf by >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1852} +{"s":"EP1","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"a2byX","resumeMs":549,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGE38665F1B8ZRGX7S9C4\",\"runId\":\"01M53HGE38665F1B8ZRGX7S9C4\",\"socketPath\":\"/tmp/relayflowd-4367da4409f0.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"a2byXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf a2 >> effects","run-5 c=1 printf by >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1963} +{"s":"EP1","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"a2byX","resumeMs":501,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGE7CM6FBSWYD1RZC48D8\",\"runId\":\"01M53HGE7CM6FBSWYD1RZC48D8\",\"socketPath\":\"/tmp/relayflowd-f420b325fd1a.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"a2byXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf a2 >> effects","run-5 c=1 printf by >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1979} +{"s":"FT1wrap","start":"deep","resume":"deep","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r9finals8/FT1wrap/deep-deep-0/chain.flow.ts\",\"rootRunId\":\"01M53HGG54KABFN5ASA5BQ5DT7\",\"socketPath\":\"/tmp/relayflowd-15ce5dbf4552.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A"],"letterDup":false,"replay":false,"ok":false,"ms":1181} +{"s":"FT1wrap","start":"deep","resume":"deep","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r9finals8/FT1wrap/deep-deep-1/chain.flow.ts\",\"rootRunId\":\"01M53HGGARV15J9KKC5B2R5TTX\",\"socketPath\":\"/tmp/relayflowd-26b07f5700dd.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B"],"letterDup":false,"replay":false,"ok":false,"ms":1184} +{"s":"EP1","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"a2byX","resumeMs":597,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGFFNGW7B1218VKBHQB8K\",\"runId\":\"01M53HGFFNGW7B1218VKBHQB8K\",\"socketPath\":\"/tmp/relayflowd-bed7ca983463.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"a2byXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf vv","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf a2 >> effects","run-5 c=1 printf by >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2222} +{"s":"FT1wrap","start":"deep","resume":"deep","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r9finals8/FT1wrap/deep-deep-2/chain.flow.ts\",\"rootRunId\":\"01M53HGHAXGEKJTYN7REAB5P55\",\"socketPath\":\"/tmp/relayflowd-2dcbffed0424.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A"],"letterDup":false,"replay":false,"ok":false,"ms":1209} +{"s":"FT1wrap","start":"deep","resume":"deep","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r9finals8/FT1wrap/deep-deep-3/chain.flow.ts\",\"rootRunId\":\"01M53HGHG47SZHYVNKNTYCHB08\",\"socketPath\":\"/tmp/relayflowd-159d9040f66e.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A"],"letterDup":false,"replay":false,"ok":false,"ms":1176} +{"s":"FT1wrap","start":"deep","resume":"deep","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r9finals8/FT1wrap/deep-deep-4/chain.flow.ts\",\"rootRunId\":\"01M53HGHSJ6WKAEAM6N9PNPAK8\",\"socketPath\":\"/tmp/relayflowd-57c6fa28b9d7.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A"],"letterDup":false,"replay":false,"ok":false,"ms":1145} +{"s":"FT1wrap","start":"deep","resume":"deep","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: its causal frontier passes through an unregistered aggregate\"}],\"path\":\"/w/runs/r9finals8/FT1wrap/deep-deep-5/chain.flow.ts\",\"rootRunId\":\"01M53HGJF7A5KTZ9EQZ987HWG4\",\"socketPath\":\"/tmp/relayflowd-6c76c504ea28.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B"],"letterDup":false,"replay":false,"ok":false,"ms":1147} +{"s":"FT1wrap","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"X","resumeMs":507,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGJEKTB9317WKD5GW18Q2\",\"runId\":\"01M53HGJEKTB9317WKD5GW18Q2\",\"socketPath\":\"/tmp/relayflowd-8f01ec000bb0.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1712} +{"s":"FT1wrap","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"X","resumeMs":503,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGJR31F6C94WJ9KMTMCJE\",\"runId\":\"01M53HGJR31F6C94WJ9KMTMCJE\",\"socketPath\":\"/tmp/relayflowd-d4af43063406.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1804} +{"s":"FT1wrap","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"X","resumeMs":519,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGKDKJ5REPFE8CH3QVTWS\",\"runId\":\"01M53HGKDKJ5REPFE8CH3QVTWS\",\"socketPath\":\"/tmp/relayflowd-738c882a9afd.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1876} +{"s":"FT1wrap","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"X","resumeMs":505,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGM3MFENPMFMW3KN2MJTW\",\"runId\":\"01M53HGM3MFENPMFMW3KN2MJTW\",\"socketPath\":\"/tmp/relayflowd-af8270680e77.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1931} +{"s":"FT1wrap","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"X","resumeMs":512,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGMG43456S7CFYHDZQ95B\",\"runId\":\"01M53HGMG43456S7CFYHDZQ95B\",\"socketPath\":\"/tmp/relayflowd-0dfb53786f3c.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2036} +{"s":"FT1wrap","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"X","resumeMs":561,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGN93805GMHAHAVW1WDV3\",\"runId\":\"01M53HGN93805GMHAHAVW1WDV3\",\"socketPath\":\"/tmp/relayflowd-9693772591ef.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2238} +{"s":"FT2asyncStep","start":"deep","resume":"deep","i":0,"fresh":false,"code1":"killed","effects1":"X","resumeMs":758,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGP6074SARPMF6B27G0ST\",\"runId\":\"01M53HGP6074SARPMF6B27G0ST\",\"socketPath\":\"/tmp/relayflowd-69003adaed33.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2040} +{"s":"FT2asyncStep","start":"deep","resume":"deep","i":1,"fresh":false,"code1":"killed","effects1":"X","resumeMs":699,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGPN94JDQVF0X5M9XMF7Q\",\"runId\":\"01M53HGPN94JDQVF0X5M9XMF7Q\",\"socketPath\":\"/tmp/relayflowd-008777f00709.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2036} +{"s":"FT2asyncStep","start":"deep","resume":"deep","i":2,"fresh":false,"code1":"killed","effects1":"X","resumeMs":648,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGQMVGA1SRGHW1Q453X7D\",\"runId\":\"01M53HGQMVGA1SRGHW1Q453X7D\",\"socketPath\":\"/tmp/relayflowd-2b32d0ace288.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2098} +{"s":"FT2asyncStep","start":"deep","resume":"deep","i":3,"fresh":false,"code1":"killed","effects1":"X","resumeMs":690,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGR5ND5G2X6VQVF38CS0X\",\"runId\":\"01M53HGR5ND5G2X6VQVF38CS0X\",\"socketPath\":\"/tmp/relayflowd-be02fb5c88d5.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2183} +{"s":"FT2asyncStep","start":"deep","resume":"deep","i":4,"fresh":false,"code1":"killed","effects1":"X","resumeMs":640,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGRM74B5C2BV3DYPZM42D\",\"runId\":\"01M53HGRM74B5C2BV3DYPZM42D\",\"socketPath\":\"/tmp/relayflowd-f45317f03803.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2226} +{"s":"FT2asyncStep","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"X","resumeMs":521,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGT3WDHB6RY7B2TVSW92F\",\"runId\":\"01M53HGT3WDHB6RY7B2TVSW92F\",\"socketPath\":\"/tmp/relayflowd-be92ca042360.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1702} +{"s":"FT2asyncStep","start":"deep","resume":"deep","i":5,"fresh":false,"code1":"killed","effects1":"X","resumeMs":641,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGSNKQJEKMKP8XWX04RNY\",\"runId\":\"01M53HGSNKQJEKMKP8XWX04RNY\",\"socketPath\":\"/tmp/relayflowd-ad88811f86b0.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-6108a797cbef3f3fbc44e21cd10e0fd52397f262b058de4548a64e228a3ff826-1 c=1 printf X >> effects","run-after-c6968c6d4c7df0991abc260c19c039ec4af45f7c64dab454ee640d6fa721837e-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2375} +{"s":"FT2asyncStep","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"X","resumeMs":475,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGTMY7GHJW3YS5WEC3FCS\",\"runId\":\"01M53HGTMY7GHJW3YS5WEC3FCS\",\"socketPath\":\"/tmp/relayflowd-9fab0378e42c.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1747} +{"s":"FT2asyncStep","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"X","resumeMs":461,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGVSTTGFWK3GJW88DPXCK\",\"runId\":\"01M53HGVSTTGFWK3GJW88DPXCK\",\"socketPath\":\"/tmp/relayflowd-7c94d16366ac.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1804} +{"s":"FT2asyncStep","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"X","resumeMs":451,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGVT7P2BTPB0VQXMY49WE\",\"runId\":\"01M53HGVT7P2BTPB0VQXMY49WE\",\"socketPath\":\"/tmp/relayflowd-018fd1b7bf25.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1883} +{"s":"FT2asyncStep","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"X","resumeMs":468,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGWC00ZP2VDGRGHA3MVE0\",\"runId\":\"01M53HGWC00ZP2VDGRGHA3MVE0\",\"socketPath\":\"/tmp/relayflowd-5ac03eea056a.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2013} +{"s":"FT3retThen","start":"deep","resume":"deep","i":0,"fresh":false,"code1":"killed","effects1":"X","resumeMs":694,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGXT3DDS1DA9XKGBY5ZCV\",\"runId\":\"01M53HGXT3DDS1DA9XKGBY5ZCV\",\"socketPath\":\"/tmp/relayflowd-a743fdba561d.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf X >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1976} +{"s":"FT2asyncStep","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"X","resumeMs":483,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGXHT8NVRBC491B1DH0TH\",\"runId\":\"01M53HGXHT8NVRBC491B1DH0TH\",\"socketPath\":\"/tmp/relayflowd-68770beace37.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2139} +{"s":"FT3retThen","start":"deep","resume":"deep","i":1,"fresh":false,"code1":"killed","effects1":"X","resumeMs":685,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGYFFWSCZCSB8PHNZXZB4\",\"runId\":\"01M53HGYFFWSCZCSB8PHNZXZB4\",\"socketPath\":\"/tmp/relayflowd-d5fdb6372e53.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf X >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2017} +{"s":"FT3retThen","start":"deep","resume":"deep","i":2,"fresh":false,"code1":"killed","effects1":"X","resumeMs":680,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGZRGTJ41HJERS9PNSTJG\",\"runId\":\"01M53HGZRGTJ41HJERS9PNSTJG\",\"socketPath\":\"/tmp/relayflowd-e5a944daab29.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf X >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2105} +{"s":"FT3retThen","start":"deep","resume":"deep","i":3,"fresh":false,"code1":"killed","effects1":"X","resumeMs":659,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HGZTPA131CJPXGCZJ9NRE\",\"runId\":\"01M53HGZTPA131CJPXGCZJ9NRE\",\"socketPath\":\"/tmp/relayflowd-b63ae850d996.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf X >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2183} +{"s":"FT3retThen","start":"deep","resume":"deep","i":4,"fresh":false,"code1":"killed","effects1":"X","resumeMs":723,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HH0EFNDQVWNDGADPZ18R5\",\"runId\":\"01M53HH0EFNDQVWNDGADPZ18R5\",\"socketPath\":\"/tmp/relayflowd-175f78d6af38.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf X >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2317} +{"s":"FT3retThen","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"X","resumeMs":508,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HH1T82RKR88SBA1GSEX9A\",\"runId\":\"01M53HH1T82RKR88SBA1GSEX9A\",\"socketPath\":\"/tmp/relayflowd-f038da865306.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1767} +{"s":"FT3retThen","start":"deep","resume":"deep","i":5,"fresh":false,"code1":"killed","effects1":"X","resumeMs":689,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HH1TFK158R59VSTPXV3EM\",\"runId\":\"01M53HH1TFK158R59VSTPXV3EM\",\"socketPath\":\"/tmp/relayflowd-e0693264cd2b.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf X >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2446} +{"s":"FT3retThen","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"X","resumeMs":504,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HH2H6YXB7188A7GXDKE75\",\"runId\":\"01M53HH2H6YXB7188A7GXDKE75\",\"socketPath\":\"/tmp/relayflowd-4b2629833b55.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1766} +{"s":"FT3retThen","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"X","resumeMs":505,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HH3GB24Q6234JY0VBM15J\",\"runId\":\"01M53HH3GB24Q6234JY0VBM15J\",\"socketPath\":\"/tmp/relayflowd-7d05b966690a.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1864} +{"s":"FT3retThen","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"X","resumeMs":484,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HH4031GSTTXDX9DJGKC06\",\"runId\":\"01M53HH4031GSTTXDX9DJGKC06\",\"socketPath\":\"/tmp/relayflowd-dacb10cae06c.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1888} +{"s":"FT3retThen","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"X","resumeMs":510,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HH493XYCBR7Z6A967NEYQ\",\"runId\":\"01M53HH493XYCBR7Z6A967NEYQ\",\"socketPath\":\"/tmp/relayflowd-5d47750ec298.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2047} +{"s":"FT3retThen","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"X","resumeMs":512,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HH5AGGDCVS33ASFT76BYV\",\"runId\":\"01M53HH5AGGDCVS33ASFT76BYV\",\"socketPath\":\"/tmp/relayflowd-5ef3c1cd5ce9.sock\",\"completedSteps\":6,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-6 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2182} +{"s":"FT4awaitThen","start":"deep","resume":"deep","i":0,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":720,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HH609K2FHH7BRQJG971BF\",\"runId\":\"01M53HH609K2FHH7BRQJG971BF\",\"socketPath\":\"/tmp/relayflowd-4e658520e566.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2012} +{"s":"FT4awaitThen","start":"deep","resume":"deep","i":1,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":697,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HH6EW4FENZ86N3XAWSSFK\",\"runId\":\"01M53HH6EW4FENZ86N3XAWSSFK\",\"socketPath\":\"/tmp/relayflowd-fcb0b6455779.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2087} +{"s":"FT4awaitThen","start":"deep","resume":"deep","i":2,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":725,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HH7MG4ZDZ2PXQJEX1E9VR\",\"runId\":\"01M53HH7MG4ZDZ2PXQJEX1E9VR\",\"socketPath\":\"/tmp/relayflowd-8f2bdcf3f9ec.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2171} +{"s":"FT4awaitThen","start":"deep","resume":"deep","i":3,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":717,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HH7ZPD724133416TVWG8C\",\"runId\":\"01M53HH7ZPD724133416TVWG8C\",\"socketPath\":\"/tmp/relayflowd-37542546f3ed.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2223} +{"s":"FT4awaitThen","start":"deep","resume":"deep","i":4,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":670,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HH8FEDYKZDDVC1G89AG0Z\",\"runId\":\"01M53HH8FEDYKZDDVC1G89AG0Z\",\"socketPath\":\"/tmp/relayflowd-cb1df98233c5.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2289} +{"s":"FT4awaitThen","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":581,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HHA03ASDEN7VP5V3TT8TN\",\"runId\":\"01M53HHA03ASDEN7VP5V3TT8TN\",\"socketPath\":\"/tmp/relayflowd-e5f9edd9804f.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf b >> effects","run-5 c=1 printf a >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1799} +{"s":"FT4awaitThen","start":"deep","resume":"deep","i":5,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":817,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HH9QPJWYQENRPZ4E6W9MH\",\"runId\":\"01M53HH9QPJWYQENRPZ4E6W9MH\",\"socketPath\":\"/tmp/relayflowd-01725505cc5a.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 sleep 0.1; printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.3; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2566} +{"s":"FT4awaitThen","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":577,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HHAJJYYC6RH7GFWS5CY4D\",\"runId\":\"01M53HHAJJYYC6RH7GFWS5CY4D\",\"socketPath\":\"/tmp/relayflowd-30451a7d531b.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf b >> effects","run-5 c=1 printf a >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1926} +{"s":"FT4awaitThen","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":551,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HHBV6J098CF1VXZW4GC4Q\",\"runId\":\"01M53HHBV6J098CF1VXZW4GC4Q\",\"socketPath\":\"/tmp/relayflowd-5ba30c21a103.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf b >> effects","run-5 c=1 printf a >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2001} +{"s":"FT4awaitThen","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":545,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HHC2VDXFXP0SRF33RZPEK\",\"runId\":\"01M53HHC2VDXFXP0SRF33RZPEK\",\"socketPath\":\"/tmp/relayflowd-8623c24f9eef.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf b >> effects","run-5 c=1 printf a >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2016} +{"s":"FT4awaitThen","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":555,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HHCEE2GDEDS18GXBKFTR9\",\"runId\":\"01M53HHCEE2GDEDS18GXBKFTR9\",\"socketPath\":\"/tmp/relayflowd-7e6551d92043.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf b >> effects","run-5 c=1 printf a >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2101} +{"s":"FT5wrapped","start":"deep","resume":"deep","i":0,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r9finals8/FT5wrapped/deep-deep-0/chain.flow.ts\",\"rootRunId\":\"01M53HHE9YQBKWT4FQ5FNV2STG\",\"socketPath\":\"/tmp/relayflowd-ba02d6fbc91d.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W"],"letterDup":false,"replay":false,"ok":false,"ms":898} +{"s":"FT5wrapped","start":"deep","resume":"deep","i":1,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r9finals8/FT5wrapped/deep-deep-1/chain.flow.ts\",\"rootRunId\":\"01M53HHEN42Z3PVANH2BT5D13Y\",\"socketPath\":\"/tmp/relayflowd-e41bee9e3464.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W"],"letterDup":false,"replay":false,"ok":false,"ms":809} +{"s":"FT5wrapped","start":"deep","resume":"deep","i":2,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r9finals8/FT5wrapped/deep-deep-2/chain.flow.ts\",\"rootRunId\":\"01M53HHF3EBK4RHZNJ5376BG78\",\"socketPath\":\"/tmp/relayflowd-f51b38e68be1.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W"],"letterDup":false,"replay":false,"ok":false,"ms":838} +{"s":"FT4awaitThen","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"baX","resumeMs":522,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HHDPRXPH9Q2694CTBK2KR\",\"runId\":\"01M53HHDPRXPH9Q2694CTBK2KR\",\"socketPath\":\"/tmp/relayflowd-0b371186c857.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"baXZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-2 c=1 sleep 0.3; printf A","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf b >> effects","run-5 c=1 printf a >> effects","run-6 c=1 printf X >> effects","run-7 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2206} +{"s":"FT5wrapped","start":"deep","resume":"deep","i":3,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r9finals8/FT5wrapped/deep-deep-3/chain.flow.ts\",\"rootRunId\":\"01M53HHFEGF15CR78C48J8ZXBN\",\"socketPath\":\"/tmp/relayflowd-0ac2d2d53090.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W"],"letterDup":false,"replay":false,"ok":false,"ms":823} +{"s":"FT5wrapped","start":"deep","resume":"deep","i":4,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r9finals8/FT5wrapped/deep-deep-4/chain.flow.ts\",\"rootRunId\":\"01M53HHFXJ6FH9NME6M8ZSQSTE\",\"socketPath\":\"/tmp/relayflowd-6841b4b4542b.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W"],"letterDup":false,"replay":false,"ok":false,"ms":840} +{"s":"FT5wrapped","start":"deep","resume":"deep","i":5,"fresh":true,"code1":1,"code":1,"effects":"","effects1":"","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r9finals8/FT5wrapped/deep-deep-5/chain.flow.ts\",\"rootRunId\":\"01M53HHG0ZDNEVG0KVZ52QXD8E\",\"socketPath\":\"/tmp/relayflowd-61a51dc41e79.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W"],"letterDup":false,"replay":false,"ok":false,"ms":796} +{"s":"FT5wrapped","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"X","resumeMs":437,"code":1,"out":" for run-1 (f.run) rejected: unawaited_step: flow \"ft5wrapped\" returned with unawaited steps: run-2 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: operation_callback_failed: flow \\\"ft5wrapped\\\" derived handler for run-1 (f.run) rejected: unawaited_step: flow \\\"ft5wrapped\\\" returned with unawaited steps: run-2 (f.run)\"}],\"rootRunId\":\"01M53HHG2JNH852PFHZ1QZX1QT\",\"runId\":\"01M53HHG2JNH852PFHZ1QZX1QT\",\"socketPath\":\"/tmp/relayflowd-942fb8b99c3c.sock\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1300} +{"s":"FT5wrapped","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"X","resumeMs":440,"code":1,"out":" for run-1 (f.run) rejected: unawaited_step: flow \"ft5wrapped\" returned with unawaited steps: run-2 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: operation_callback_failed: flow \\\"ft5wrapped\\\" derived handler for run-1 (f.run) rejected: unawaited_step: flow \\\"ft5wrapped\\\" returned with unawaited steps: run-2 (f.run)\"}],\"rootRunId\":\"01M53HHGJ3VPA61GVR3HXCFMHW\",\"runId\":\"01M53HHGJ3VPA61GVR3HXCFMHW\",\"socketPath\":\"/tmp/relayflowd-6b19f099e0cf.sock\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1373} +{"s":"FT5wrapped","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"X","resumeMs":440,"code":1,"out":" for run-1 (f.run) rejected: unawaited_step: flow \"ft5wrapped\" returned with unawaited steps: run-2 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: operation_callback_failed: flow \\\"ft5wrapped\\\" derived handler for run-1 (f.run) rejected: unawaited_step: flow \\\"ft5wrapped\\\" returned with unawaited steps: run-2 (f.run)\"}],\"rootRunId\":\"01M53HHGMV8CYKSBQVMB48K8MV\",\"runId\":\"01M53HHGMV8CYKSBQVMB48K8MV\",\"socketPath\":\"/tmp/relayflowd-efa313a75c53.sock\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1446} +{"s":"FT5wrapped","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"X","resumeMs":454,"code":1,"out":" for run-1 (f.run) rejected: unawaited_step: flow \"ft5wrapped\" returned with unawaited steps: run-2 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: operation_callback_failed: flow \\\"ft5wrapped\\\" derived handler for run-1 (f.run) rejected: unawaited_step: flow \\\"ft5wrapped\\\" returned with unawaited steps: run-2 (f.run)\"}],\"rootRunId\":\"01M53HHHBMAS3W63PCHDBJWZ5P\",\"runId\":\"01M53HHHBMAS3W63PCHDBJWZ5P\",\"socketPath\":\"/tmp/relayflowd-2456486279e7.sock\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1549} +{"s":"FT5wrapped","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"X","resumeMs":474,"code":1,"out":" for run-1 (f.run) rejected: unawaited_step: flow \"ft5wrapped\" returned with unawaited steps: run-2 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: operation_callback_failed: flow \\\"ft5wrapped\\\" derived handler for run-1 (f.run) rejected: unawaited_step: flow \\\"ft5wrapped\\\" returned with unawaited steps: run-2 (f.run)\"}],\"rootRunId\":\"01M53HHHX6NGPC6KXGX9DDAKQQ\",\"runId\":\"01M53HHHX6NGPC6KXGX9DDAKQQ\",\"socketPath\":\"/tmp/relayflowd-5d22245a41fb.sock\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1674} +{"s":"FT5wrapped","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"X","resumeMs":466,"code":1,"out":" for run-1 (f.run) rejected: unawaited_step: flow \"ft5wrapped\" returned with unawaited steps: run-2 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: operation_callback_failed: flow \\\"ft5wrapped\\\" derived handler for run-1 (f.run) rejected: unawaited_step: flow \\\"ft5wrapped\\\" returned with unawaited steps: run-2 (f.run)\"}],\"rootRunId\":\"01M53HHJ24XC37C3K0NKBB2GSA\",\"runId\":\"01M53HHJ24XC37C3K0NKBB2GSA\",\"socketPath\":\"/tmp/relayflowd-375dff270606.sock\",\"subscriptions\":[]}\n","effects":"XZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-3 c=1 sleep 0.1; printf B","run-4 c=1 printf X >> effects","run-5 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1787} +{"s":"F5x","start":"deep","resume":"deep","i":0,"fresh":true,"code1":1,"code":1,"effects":"AB","effects1":"AB","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r9finals8/F5x/deep-deep-0/chain.flow.ts\",\"rootRunId\":\"01M53HHK1M3D0F0JXH494FGXSB\",\"socketPath\":\"/tmp/relayflowd-5baa7a19d061.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 0.6; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":1248} +{"s":"F5x","start":"deep","resume":"deep","i":1,"fresh":true,"code1":1,"code":1,"effects":"AB","effects1":"AB","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r9finals8/F5x/deep-deep-1/chain.flow.ts\",\"rootRunId\":\"01M53HHKQ6K63CZJT1MJA800SH\",\"socketPath\":\"/tmp/relayflowd-05026a492f11.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 0.6; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":1236} +{"s":"F5x","start":"deep","resume":"deep","i":2,"fresh":true,"code1":1,"code":1,"effects":"AB","effects1":"AB","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r9finals8/F5x/deep-deep-2/chain.flow.ts\",\"rootRunId\":\"01M53HHM0F3BHY73ZS5AHHZF40\",\"socketPath\":\"/tmp/relayflowd-23b4cebe4e3f.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.6; printf B >> effects","run-1 c=1 sleep 0.1; printf A >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":1268} +{"s":"F5x","start":"deep","resume":"deep","i":3,"fresh":true,"code1":1,"code":1,"effects":"AB","effects1":"AB","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r9finals8/F5x/deep-deep-3/chain.flow.ts\",\"rootRunId\":\"01M53HHM8WPBX18FSB8MHDN4GP\",\"socketPath\":\"/tmp/relayflowd-0724eed0a1f4.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.6; printf B >> effects","run-1 c=1 sleep 0.1; printf A >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":1245} +{"s":"F5x","start":"deep","resume":"deep","i":4,"fresh":true,"code1":1,"code":1,"effects":"AB","effects1":"AB","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r9finals8/F5x/deep-deep-4/chain.flow.ts\",\"rootRunId\":\"01M53HHMXFYT9RG4P8TQMRZ5HD\",\"socketPath\":\"/tmp/relayflowd-683bdc2d1630.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 0.6; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":1254} +{"s":"F5x","start":"deep","resume":"deep","i":5,"fresh":true,"code1":1,"code":1,"effects":"AB","effects1":"AB","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r9finals8/F5x/deep-deep-5/chain.flow.ts\",\"rootRunId\":\"01M53HHN6WARD8F2V6TBPJ50TP\",\"socketPath\":\"/tmp/relayflowd-47bf61a998ce.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 0.6; printf B >> effects"],"letterDup":false,"replay":false,"ok":true,"ms":1220} +{"s":"F5x","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"ABLQ","resumeMs":493,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HHNA8YP7WYNMJHM17FEKD\",\"runId\":\"01M53HHNA8YP7WYNMJHM17FEKD\",\"socketPath\":\"/tmp/relayflowd-a460be11ab3b.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABLQZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 0.6; printf B >> effects","run-3 c=1 printf a1","run-4 c=1 printf L >> effects","run-5 c=1 printf Q >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":1820} +{"s":"F5x","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"ABLQ","resumeMs":491,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HHNZ1APYAX3P0BN3A91FW\",\"runId\":\"01M53HHNZ1APYAX3P0BN3A91FW\",\"socketPath\":\"/tmp/relayflowd-4e613407f0bc.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABLQZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 0.6; printf B >> effects","run-3 c=1 printf a1","run-4 c=1 printf L >> effects","run-5 c=1 printf Q >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":1839} +{"s":"F5x","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"ABLQ","resumeMs":512,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HHP7A6HQ6FSBG4FNM13SC\",\"runId\":\"01M53HHP7A6HQ6FSBG4FNM13SC\",\"socketPath\":\"/tmp/relayflowd-34376e9de133.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABLQZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 0.6; printf B >> effects","run-3 c=1 printf a1","run-4 c=1 printf L >> effects","run-5 c=1 printf Q >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":1947} +{"s":"F5x","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"ABLQ","resumeMs":471,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HHQ2QZT0HR8SG3DR23NHM\",\"runId\":\"01M53HHQ2QZT0HR8SG3DR23NHM\",\"socketPath\":\"/tmp/relayflowd-8f766a8c4e8c.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABLQZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 0.6; printf B >> effects","run-3 c=1 printf a1","run-4 c=1 printf L >> effects","run-5 c=1 printf Q >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":1975} +{"s":"F5x","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"ABLQ","resumeMs":475,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HHQRV6Y6XSVTJNZ35YE0Z\",\"runId\":\"01M53HHQRV6Y6XSVTJNZ35YE0Z\",\"socketPath\":\"/tmp/relayflowd-64875a97548f.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABLQZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 0.6; printf B >> effects","run-3 c=1 printf a1","run-4 c=1 printf L >> effects","run-5 c=1 printf Q >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2107} +{"s":"F5x","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"ABLQ","resumeMs":487,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HHR4ZK29R8CT66B3K4XSR\",\"runId\":\"01M53HHR4ZK29R8CT66B3K4XSR\",\"socketPath\":\"/tmp/relayflowd-5c5564f5c205.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABLQZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 0.6; printf B >> effects","run-3 c=1 printf a1","run-4 c=1 printf L >> effects","run-5 c=1 printf Q >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":2275} +{"s":"F5w","start":"deep","resume":"deep","i":0,"fresh":true,"code1":1,"code":1,"effects":"AB","effects1":"AB","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r9finals8/F5w/deep-deep-0/chain.flow.ts\",\"rootRunId\":\"01M53HHS4WVBHTXPJF8SS8MCTM\",\"socketPath\":\"/tmp/relayflowd-77b03643c756.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 15; printf B >> effects","run-1 c=1 sleep 0.1; printf A >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":15621} +{"s":"F5w","start":"deep","resume":"deep","i":1,"fresh":true,"code1":1,"code":1,"effects":"AB","effects1":"AB","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r9finals8/F5w/deep-deep-1/chain.flow.ts\",\"rootRunId\":\"01M53HHSZM5HTSJZTV34E3QZY6\",\"socketPath\":\"/tmp/relayflowd-65086b83b26a.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 15; printf B >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":15606} +{"s":"F5w","start":"deep","resume":"deep","i":2,"fresh":true,"code1":1,"code":1,"effects":"AB","effects1":"AB","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r9finals8/F5w/deep-deep-2/chain.flow.ts\",\"rootRunId\":\"01M53HHTHMJ3JZM1ACGCZ1T6VW\",\"socketPath\":\"/tmp/relayflowd-167006f1048e.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 15; printf B >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":15641} +{"s":"F5w","start":"deep","resume":"deep","i":3,"fresh":true,"code1":1,"code":1,"effects":"AB","effects1":"AB","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r9finals8/F5w/deep-deep-3/chain.flow.ts\",\"rootRunId\":\"01M53HJ8G148ZVDY5AJD1YBQR1\",\"socketPath\":\"/tmp/relayflowd-67c63013163c.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 15; printf B >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":15717} +{"s":"F5w","start":"deep","resume":"deep","i":4,"fresh":true,"code1":1,"code":1,"effects":"AB","effects1":"AB","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r9finals8/F5w/deep-deep-4/chain.flow.ts\",\"rootRunId\":\"01M53HJ98A3CRKBPM24PHAB2GJ\",\"socketPath\":\"/tmp/relayflowd-f1d37c0dbe6d.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 15; printf B >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":15678} +{"s":"F5w","start":"deep","resume":"deep","i":5,"fresh":true,"code1":1,"code":1,"effects":"AB","effects1":"AB","out1":"FAILED [step_failed] parallel Promise.all contains a member with no tracked provenance\n{\"ok\":false,\"command\":\"run\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"parallel Promise.all contains a member with no tracked provenance\"}],\"path\":\"/w/runs/r9finals8/F5w/deep-deep-5/chain.flow.ts\",\"rootRunId\":\"01M53HJ9TPTVR126T113T7NVPK\",\"socketPath\":\"/tmp/relayflowd-f242a3d4a112.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 15; printf B >> effects","run-1 c=1 sleep 0.1; printf A >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":15663} +{"s":"F5w","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"ABLQ","resumeMs":483,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HJQMHAQQA954EM6M0AVX1\",\"runId\":\"01M53HJQMHAQQA954EM6M0AVX1\",\"socketPath\":\"/tmp/relayflowd-25b22e7260f3.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABLQZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 15; printf B >> effects","run-3 c=1 printf a1","run-4 c=1 printf L >> effects","run-5 c=1 printf Q >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":16224} +{"s":"F5w","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"ABLQ","resumeMs":482,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HJRCJ0MQV7P6X38Z4715J\",\"runId\":\"01M53HJRCJ0MQV7P6X38Z4715J\",\"socketPath\":\"/tmp/relayflowd-981e43fe4d0a.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABLQZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 15; printf B >> effects","run-3 c=1 printf a1","run-4 c=1 printf L >> effects","run-5 c=1 printf Q >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":16246} +{"s":"F5w","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"ABLQ","resumeMs":468,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HJRYF6WJ3PRT4YY61NQJC\",\"runId\":\"01M53HJRYF6WJ3PRT4YY61NQJC\",\"socketPath\":\"/tmp/relayflowd-133008a4fbf2.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABLQZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 15; printf B >> effects","run-3 c=1 printf a1","run-4 c=1 printf L >> effects","run-5 c=1 printf Q >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":16328} +{"s":"F5w","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"ABLQ","resumeMs":504,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HK7EJN1ZJY7J14PBEYN4A\",\"runId\":\"01M53HK7EJN1ZJY7J14PBEYN4A\",\"socketPath\":\"/tmp/relayflowd-b44c53bf10bf.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABLQZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 15; printf B >> effects","run-3 c=1 printf a1","run-4 c=1 printf L >> effects","run-5 c=1 printf Q >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":16454} +{"s":"F5w","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"ABLQ","resumeMs":485,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HK87XXFM795SY4RRDMQE7\",\"runId\":\"01M53HK87XXFM795SY4RRDMQE7\",\"socketPath\":\"/tmp/relayflowd-813062055639.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABLQZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 15; printf B >> effects","run-3 c=1 printf a1","run-4 c=1 printf L >> effects","run-5 c=1 printf Q >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":16516} +{"s":"F5w","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"ABLQ","resumeMs":466,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HK8W32W6YM6G6F10MEY51\",\"runId\":\"01M53HK8W32W6YM6G6F10MEY51\",\"socketPath\":\"/tmp/relayflowd-e0319a904898.sock\",\"completedSteps\":7,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"ABLQZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf A >> effects","run-2 c=1 sleep 15; printf B >> effects","run-3 c=1 printf a1","run-4 c=1 printf L >> effects","run-5 c=1 printf Q >> effects","run-6 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-7 c=1 :"],"letterDup":false,"replay":false,"ok":false,"ms":16614} +{"s":"SEC8m","start":"head","resume":"head","i":0,"fresh":false,"code1":"killed","effects1":"","resumeMs":1162,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HKQMKQ0QRJT1SPBXHN2RE\",\"runId\":\"01M53HKQMKQ0QRJT1SPBXHN2RE\",\"socketPath\":\"/tmp/relayflowd-10ed45999493.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"YZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=2 sleep 0.15; printf U","run-1 c=1 sleep 0.1; printf G","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/head-head-0/g","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 sleep 0.3; printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/he","run-after-0fb6dd51631e99823391b1ff2cc3891b0438ac5ccd7315dc79270634c2618466-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/head-head-0/l","run-after-8dcc8ebba2039a748abe59390f0d4fafc59632255b454368c2175c6d5a857890-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"sec":"granted2:ok ungranted2:unset later:unset","ok":true,"ms":1925} +{"s":"SEC8m","start":"head","resume":"head","i":1,"fresh":false,"code1":"killed","effects1":"","resumeMs":992,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HKRHDKR3BT8JWNRQGYVXV\",\"runId\":\"01M53HKRHDKR3BT8JWNRQGYVXV\",\"socketPath\":\"/tmp/relayflowd-fc7597d1d0ba.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"YZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.15; printf U","run-1 c=1 sleep 0.1; printf G","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=2 sleep 0.3; printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/he","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/head-head-1/g","run-after-0fb6dd51631e99823391b1ff2cc3891b0438ac5ccd7315dc79270634c2618466-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/head-head-1/l","run-after-8dcc8ebba2039a748abe59390f0d4fafc59632255b454368c2175c6d5a857890-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"sec":"granted2:ok ungranted2:unset later:unset","ok":true,"ms":1865} +{"s":"SEC8m","start":"head","resume":"head","i":2,"fresh":false,"code1":"killed","effects1":"","resumeMs":1010,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HKS9G3NMT61A80PSXJVRM\",\"runId\":\"01M53HKS9G3NMT61A80PSXJVRM\",\"socketPath\":\"/tmp/relayflowd-4deed2d4e06a.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"YZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf G","run-2 c=1 sleep 0.15; printf U","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=2 sleep 0.3; printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/he","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/head-head-2/g","run-after-0fb6dd51631e99823391b1ff2cc3891b0438ac5ccd7315dc79270634c2618466-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/head-head-2/l","run-after-8dcc8ebba2039a748abe59390f0d4fafc59632255b454368c2175c6d5a857890-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"sec":"granted2:ok ungranted2:unset later:unset","ok":true,"ms":2001} +{"s":"SEC8m","start":"head","resume":"head","i":3,"fresh":false,"code1":"killed","effects1":"","resumeMs":993,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HKSJKQA2TPHQ30G2FCPAP\",\"runId\":\"01M53HKSJKQA2TPHQ30G2FCPAP\",\"socketPath\":\"/tmp/relayflowd-bd02f05faf5f.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"YZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-2 c=1 sleep 0.15; printf U","run-1 c=1 sleep 0.1; printf G","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=2 sleep 0.3; printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/he","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/head-head-3/g","run-after-0fb6dd51631e99823391b1ff2cc3891b0438ac5ccd7315dc79270634c2618466-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/head-head-3/l","run-after-8dcc8ebba2039a748abe59390f0d4fafc59632255b454368c2175c6d5a857890-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"sec":"granted2:ok ungranted2:unset later:unset","ok":true,"ms":2020} +{"s":"SEC8m","start":"head","resume":"head","i":4,"fresh":false,"code1":"killed","effects1":"","resumeMs":1008,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HKTC9VPMTWSTPH48J84QH\",\"runId\":\"01M53HKTC9VPMTWSTPH48J84QH\",\"socketPath\":\"/tmp/relayflowd-4b4a18732680.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"YZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf G","run-2 c=1 sleep 0.15; printf U","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=2 sleep 0.3; printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/he","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/head-head-4/g","run-after-0fb6dd51631e99823391b1ff2cc3891b0438ac5ccd7315dc79270634c2618466-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/head-head-4/l","run-after-8dcc8ebba2039a748abe59390f0d4fafc59632255b454368c2175c6d5a857890-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"sec":"granted2:ok ungranted2:unset later:unset","ok":true,"ms":2164} +{"s":"SEC8m","start":"head","resume":"head","i":5,"fresh":false,"code1":"killed","effects1":"","resumeMs":715,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HKV7PXV3VQ95GG49SQ83Y\",\"runId\":\"01M53HKV7PXV3VQ95GG49SQ83Y\",\"socketPath\":\"/tmp/relayflowd-74b5ce048487.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"YZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf G","run-2 c=1 sleep 0.15; printf U","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-after-5642cfab48b0887bc299b9316f1b0a7c5b61429fda2e147c4264f5163cf0e9d6-1 c=1 sleep 0.3; printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/he","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/head-head-5/g","run-after-0fb6dd51631e99823391b1ff2cc3891b0438ac5ccd7315dc79270634c2618466-1 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/head-head-5/l","run-after-8dcc8ebba2039a748abe59390f0d4fafc59632255b454368c2175c6d5a857890-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"sec":"granted2:ok ungranted2:unset later:unset","ok":true,"ms":2002} +{"s":"SEC8m","start":"base","resume":"base","i":0,"fresh":false,"code1":"killed","effects1":"","resumeMs":885,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HKVC93DJPB4CAWQSZWTG2\",\"runId\":\"01M53HKVC93DJPB4CAWQSZWTG2\",\"socketPath\":\"/tmp/relayflowd-d9bab357613e.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"YZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf G","run-2 c=1 sleep 0.15; printf U","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-4 c=1 sleep 0.3; printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/ba","run-5 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/base-base-0/g","run-6 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/base-base-0/l","run-7 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"sec":"granted2:ok ungranted2:unset later:unset","ok":true,"ms":1711} +{"s":"SEC8m","start":"base","resume":"base","i":1,"fresh":false,"code1":"killed","effects1":"","resumeMs":821,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HKW8QJPW7D88R48TNSJS8\",\"runId\":\"01M53HKW8QJPW7D88R48TNSJS8\",\"socketPath\":\"/tmp/relayflowd-5ba5231b2a7e.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"YZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf G","run-2 c=1 sleep 0.15; printf U","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-4 c=1 sleep 0.3; printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/ba","run-5 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/base-base-1/g","run-6 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/base-base-1/l","run-7 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"sec":"granted2:ok ungranted2:unset later:unset","ok":true,"ms":1648} +{"s":"SEC8m","start":"base","resume":"base","i":2,"fresh":false,"code1":"killed","effects1":"","resumeMs":811,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HKX1DAM6FRYP6KCGMHCYF\",\"runId\":\"01M53HKX1DAM6FRYP6KCGMHCYF\",\"socketPath\":\"/tmp/relayflowd-508fe689bc87.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"YZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf G","run-2 c=1 sleep 0.15; printf U","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-4 c=1 sleep 0.3; printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/ba","run-5 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/base-base-2/g","run-6 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/base-base-2/l","run-7 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"sec":"granted2:ok ungranted2:unset later:unset","ok":true,"ms":1783} +{"s":"SEC8m","start":"base","resume":"base","i":3,"fresh":false,"code1":"killed","effects1":"","resumeMs":821,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HKX2D1DHAY8EM2HKC0B4T\",\"runId\":\"01M53HKX2D1DHAY8EM2HKC0B4T\",\"socketPath\":\"/tmp/relayflowd-b4e9a0882b77.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"YZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf G","run-2 c=1 sleep 0.15; printf U","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-4 c=1 sleep 0.3; printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/ba","run-5 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/base-base-3/g","run-6 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/base-base-3/l","run-7 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"sec":"granted2:ok ungranted2:unset later:unset","ok":true,"ms":1856} +{"s":"SEC8m","start":"base","resume":"base","i":4,"fresh":false,"code1":"killed","effects1":"","resumeMs":838,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HKXXSRKAWHMEB5S3XEVPS\",\"runId\":\"01M53HKXXSRKAWHMEB5S3XEVPS\",\"socketPath\":\"/tmp/relayflowd-a1d77d1e5db4.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"YZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf G","run-2 c=1 sleep 0.15; printf U","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-4 c=1 sleep 0.3; printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/ba","run-5 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/base-base-4/g","run-6 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/base-base-4/l","run-7 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"sec":"granted2:ok ungranted2:unset later:unset","ok":true,"ms":1988} +{"s":"SEC8m","start":"base","resume":"base","i":5,"fresh":false,"code1":"killed","effects1":"","resumeMs":866,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HKYRGNAAPH0BHC6ZC4Q8W\",\"runId\":\"01M53HKYRGNAAPH0BHC6ZC4Q8W\",\"socketPath\":\"/tmp/relayflowd-114969b5341a.sock\",\"completedSteps\":8,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"YZ","mode":"absent","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.1; printf G","run-2 c=1 sleep 0.15; printf U","run-3 c=2 test -f release || { touch stalled; sleep 120; }; printf Y >> effects","run-4 c=1 sleep 0.3; printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/ba","run-5 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/base-base-5/g","run-6 c=1 printf \"%s\" \"${R7_TOK:-unset}\" > /w/runs/r9finals8/SEC8m/base-base-5/l","run-7 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-8 c=1 :"],"letterDup":false,"replay":false,"sec":"granted2:ok ungranted2:unset later:unset","ok":true,"ms":2138} +SUMMARY PL8r head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY PL8r base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcXZ +SUMMARY PL8rplain head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY PL8rplain base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcXZ +SUMMARY PL8hide head>head ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects=b +SUMMARY PL8hide base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcXZ +SUMMARY PL8iter head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY PL8iter base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcXZ +SUMMARY PL9dep head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY PL9dep base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcXZ +SUMMARY PL9depsnap head>head ok=6/6 replay=0 fresh=0 mode=serial codes=0 effects=abcXZ +SUMMARY PL9depsnap base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcXZ +SUMMARY PL9depnone head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=bcaXZ +SUMMARY PL9depnone base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcXZ +SUMMARY RS1 head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=bcaXZ +SUMMARY RS1 base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcXZ +SUMMARY RS1bh head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=bcaXZ +SUMMARY RS1bb base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcXZ +SUMMARY RS2 head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=bcaXZ +SUMMARY RS2 base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcXZ +SUMMARY RS2bh head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=bcaXZ +SUMMARY RS2bb base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcXZ +SUMMARY RS3 head>head ok=0/6 replay=0 fresh=0 mode=parallel codes=2 effects=bcaX +SUMMARY RS3 base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcXZ +SUMMARY RS3bh head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=bcaXZ +SUMMARY RS3bb base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcXZ +SUMMARY RS0 head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=bcaXZ +SUMMARY RS0 base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcXZ +SUMMARY RS0bh head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=bcaXZ +SUMMARY RS0bb base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abcXZ +SUMMARY DP1 head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=baXZ +SUMMARY DP1 base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abXZ +SUMMARY OPT1 head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=baXZ +SUMMARY OPT1 base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=abXZ +SUMMARY TV1 head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=b4a2XZ +SUMMARY TV1 base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=a2b4XZ +SUMMARY EP1 head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=bya2XZ +SUMMARY EP1 base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=a2byXZ +SUMMARY FT1wrap deep>deep ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FT1wrap base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=XZ +SUMMARY FT2asyncStep deep>deep ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=XZ +SUMMARY FT2asyncStep base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=XZ +SUMMARY FT3retThen deep>deep ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=XZ +SUMMARY FT3retThen base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=XZ +SUMMARY FT4awaitThen deep>deep ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=baXZ +SUMMARY FT4awaitThen base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=baXZ +SUMMARY FT5wrapped deep>deep ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects= +SUMMARY FT5wrapped base>base ok=0/6 replay=0 fresh=0 mode=absent codes=1 effects=XZ +SUMMARY F5x deep>deep ok=6/6 replay=0 fresh=6 mode=parallel codes=1 effects=AB +SUMMARY F5x base>base ok=0/6 replay=0 fresh=0 mode=absent codes=0 effects=ABLQZ +SUMMARY F5w deep>deep ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects=AB +SUMMARY F5w base>base ok=0/6 replay=0 fresh=0 mode=absent codes=0 effects=ABLQZ +SUMMARY SEC8m head>head ok=6/6 replay=0 fresh=0 mode=parallel codes=0 effects=YZ +SUMMARY SEC8m base>base ok=6/6 replay=0 fresh=0 mode=absent codes=0 effects=YZ diff --git a/evidence/native-parallel-review9/final-timing.log b/evidence/native-parallel-review9/final-timing.log new file mode 100644 index 000000000..1d2d0f3d1 --- /dev/null +++ b/evidence/native-parallel-review9/final-timing.log @@ -0,0 +1,22 @@ +{"side":"head","i":0,"code":0,"mode":"parallel","cli":1098,"body":464,"routeSpread":9,"routesOverlap":true,"depsOverlap":true} +{"side":"base","i":0,"code":0,"mode":"absent","cli":1869,"body":1389,"routeSpread":661,"routesOverlap":false,"depsOverlap":false} +{"side":"base","i":1,"code":0,"mode":"absent","cli":1850,"body":1384,"routeSpread":672,"routesOverlap":false,"depsOverlap":false} +{"side":"head","i":1,"code":0,"mode":"parallel","cli":1088,"body":447,"routeSpread":3,"routesOverlap":true,"depsOverlap":true} +{"side":"head","i":2,"code":0,"mode":"parallel","cli":1086,"body":449,"routeSpread":6,"routesOverlap":true,"depsOverlap":true} +{"side":"base","i":2,"code":0,"mode":"absent","cli":1860,"body":1405,"routeSpread":666,"routesOverlap":false,"depsOverlap":false} +{"side":"base","i":3,"code":0,"mode":"absent","cli":1850,"body":1399,"routeSpread":665,"routesOverlap":false,"depsOverlap":false} +{"side":"head","i":3,"code":0,"mode":"parallel","cli":1081,"body":462,"routeSpread":6,"routesOverlap":true,"depsOverlap":true} +{"side":"head","i":4,"code":0,"mode":"parallel","cli":1100,"body":473,"routeSpread":6,"routesOverlap":true,"depsOverlap":true} +{"side":"base","i":4,"code":0,"mode":"absent","cli":1785,"body":1349,"routeSpread":651,"routesOverlap":false,"depsOverlap":false} +{"side":"base","i":5,"code":0,"mode":"absent","cli":1811,"body":1349,"routeSpread":652,"routesOverlap":false,"depsOverlap":false} +{"side":"head","i":5,"code":0,"mode":"parallel","cli":1109,"body":461,"routeSpread":8,"routesOverlap":true,"depsOverlap":true} +{"side":"head","i":6,"code":0,"mode":"parallel","cli":1089,"body":465,"routeSpread":3,"routesOverlap":true,"depsOverlap":true} +{"side":"base","i":6,"code":0,"mode":"absent","cli":1842,"body":1383,"routeSpread":657,"routesOverlap":false,"depsOverlap":false} +{"side":"base","i":7,"code":0,"mode":"absent","cli":1847,"body":1379,"routeSpread":664,"routesOverlap":false,"depsOverlap":false} +{"side":"head","i":7,"code":0,"mode":"parallel","cli":1058,"body":440,"routeSpread":6,"routesOverlap":true,"depsOverlap":true} +{"side":"head","i":8,"code":0,"mode":"parallel","cli":1077,"body":461,"routeSpread":5,"routesOverlap":true,"depsOverlap":true} +{"side":"base","i":8,"code":0,"mode":"absent","cli":1820,"body":1361,"routeSpread":653,"routesOverlap":false,"depsOverlap":false} +{"side":"base","i":9,"code":0,"mode":"absent","cli":1828,"body":1352,"routeSpread":656,"routesOverlap":false,"depsOverlap":false} +{"side":"head","i":9,"code":0,"mode":"parallel","cli":1086,"body":452,"routeSpread":5,"routesOverlap":true,"depsOverlap":true} +TIMING head mode=parallel codes=0 body p50=461 max=473 cli p50=1088 max=1109 spread p50=6 routesOverlap=10/10 depsOverlap=10/10 +TIMING base mode=absent codes=0 body p50=1383 max=1405 cli p50=1847 max=1869 spread p50=661 routesOverlap=0/10 depsOverlap=0/10 diff --git a/evidence/native-parallel-review9/h7.mjs b/evidence/native-parallel-review9/h7.mjs new file mode 100644 index 000000000..353e4dc18 --- /dev/null +++ b/evidence/native-parallel-review9/h7.mjs @@ -0,0 +1,217 @@ +// Review-7 crash/resume harness for flows#667. Runs inside node:22-trixie. +// usage: node --no-warnings h7.mjs [--reps=6] [--conc=3] [--tag=x] [--sides=a:b/c:d] [--keep] +import fs from 'node:fs'; +import path from 'node:path'; +import { spawn } from 'node:child_process'; +import { createRequire } from 'node:module'; +import { DatabaseSync } from 'node:sqlite'; +globalThis.require = createRequire(import.meta.url); + +const args = process.argv.slice(2); +const opt = (k, d) => { const a = args.find(x => x.startsWith(`--${k}=`)); return a ? a.slice(k.length + 3) : d; }; +const file = args[0]; +const names = args[1]; +const reps = Number(opt('reps', '6')); +const conc = Number(opt('conc', '3')); +const tag = opt('tag', 't'); +const sidesOverride = opt('sides', undefined)?.split('/').map(p => p.split(':')); +const keep = args.includes('--keep'); +const DELAYS = [0, 60, 130, 220, 330, 450, 30, 180, 270, 400]; + +const SIDES = { + head: { cli: '/w/head/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + base: { cli: '/w/base/packages/sdk/dist/cli.js', nm: '/w/base/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + forced: { cli: '/w/forced/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + fix: { cli: '/w/fix/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + deep: { cli: '/w/deep/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + p2050: { cli: '/w/p2050/node_modules/@relayflows/sdk/dist/cli.js', nm: '/w/p2050/node_modules', daemon: '/w/relayflowd-2050' }, + p2051: { cli: '/w/p2051/node_modules/@relayflows/sdk/dist/cli.js', nm: '/w/p2051/node_modules', daemon: '/w/relayflowd-main' }, +}; + +const sleep = ms => new Promise(r => setTimeout(r, ms)); +const read = p => { try { return fs.readFileSync(p, 'utf8'); } catch { return ''; } }; + +function start(side, argv, root, env = {}) { + const s = SIDES[side]; + const child = spawn(process.execPath, [s.cli, ...argv], { + cwd: root, env: { ...process.env, ...env, RELAYFLOWD_BIN: s.daemon }, stdio: ['ignore', 'pipe', 'pipe'], + }); + let out = ''; + child.stdout.on('data', d => { out += d; }); + child.stderr.on('data', d => { out += d; }); + return { child, closed: new Promise(r => child.once('close', (code, signal) => r({ code, signal }))), get out() { return out; } }; +} + +function sweep(root) { + const targets = new Set(); + try { targets.add(JSON.parse(read(path.join(root, 'data/connection.json'))).pid); } catch {} + for (const e of fs.readdirSync('/proc')) { + if (!/^\d+$/.test(e)) continue; + const pid = Number(e); + if (pid === process.pid) continue; + try { + const cwd = fs.readlinkSync(`/proc/${pid}/cwd`); + const cmd = fs.readFileSync(`/proc/${pid}/cmdline`, 'utf8'); + if (cwd === root || cwd.startsWith(root + '/') || cmd.includes(root)) targets.add(pid); + } catch {} + } + for (const pid of targets) { try { if (pid) process.kill(pid, 'SIGKILL'); } catch {} } +} + +function journals(root) { + const dir = path.join(root, 'data/runs'); + if (!fs.existsSync(dir)) return []; + return fs.readdirSync(dir).filter(f => f.endsWith('.sqlite3')).sort().map(f => { + let db; + try { db = new DatabaseSync(path.join(dir, f), { readOnly: true }); } catch { return { runId: f.slice(0, -8), step: undefined, completed: 0 }; } + try { + if (!db.prepare("select name from sqlite_master where type='table' and name='entries'").get()) return { runId: f.slice(0, -8), step: undefined, completed: 0 }; + const sp = db.prepare("select payload from entries where entry_type='run.spawned' order by seq limit 1").get(); + const done = db.prepare("select count(*) as n from entries where entry_type='step.completed'").get().n; + const payload = sp ? JSON.parse(sp.payload) : undefined; + const spec = payload?.spec ?? payload?.payload?.spec ?? payload?.run?.spec; + return { runId: f.slice(0, -8), step: spec?.steps?.[0], completed: Number(done) }; + } finally { db.close(); } + }); +} + +function rootOf(js) { return js.find(j => j.step?.id === 'authored-root'); } +function modeOf(r) { + try { const m = JSON.parse(r.step.instruction); return m.executionMode ?? (m.identityVersion ? 'v2?' : 'absent'); } catch { return 'unknown'; } +} + +function replayCheck(js, rootId, expected = {}) { + const seen = new Map(); + const ids = []; + let replay = false; + const dups = []; + for (const j of js) { + if (j.runId === rootId || !j.step) continue; + const st = j.step; + const cmd = st.command ?? st.instruction ?? ''; + ids.push(`${st.id} c=${j.completed} ${String(cmd).slice(0, 70)}`); + if (!st.command) continue; + const ns = st.id.includes('--') ? st.id.slice(0, st.id.lastIndexOf('--')) : ''; + const key = `${ns}|${st.command}`; + const prev = seen.get(key) ?? []; + prev.push({ id: st.id, completed: j.completed }); + seen.set(key, prev); + const distinct = new Set(prev.map(p => p.id)); + if (distinct.size > (expected[st.command] ?? 1) && prev.some(p => p.completed > 0)) { + replay = true; dups.push(`${st.command.slice(0, 50)}: ${[...distinct].join(' & ')}`); + } + } + return { replay, ids, dups }; +} + +async function one(sc, startSide, resumeSide, i) { + const root = `/w/runs/${tag}/${sc.name}/${startSide}-${resumeSide}-${i}`; + fs.rmSync(root, { recursive: true, force: true }); + fs.mkdirSync(root, { recursive: true }); + const nmSide = sc.nmSide ?? startSide; + fs.writeFileSync(path.join(root, 'package.json'), '{"type":"module"}'); + fs.symlinkSync(SIDES[nmSide].nm, path.join(root, 'node_modules')); + fs.writeFileSync(path.join(root, 'flows.json'), JSON.stringify({ cli: path.join(root, 'adapter.mjs'), models: ['test-model'] })); + fs.writeFileSync(path.join(root, 'adapter.mjs'), '#!/usr/bin/env node\nprocess.exit(0);\n', { mode: 0o755 }); + for (const [f, src] of Object.entries(sc.files)) { + const t = path.join(root, f); + fs.mkdirSync(path.dirname(t), { recursive: true }); + fs.writeFileSync(t, src.replaceAll('', root)); + if (f.endsWith('adapter.mjs')) fs.chmodSync(t, 0o755); + } + if (sc.bluebird) { + const d = path.join(root, 'bb'); + fs.cpSync('/w/head/packages/sdk/node_modules/bluebird/js/release', d, { recursive: true }); + fs.writeFileSync(path.join(d, 'package.json'), '{"type":"commonjs"}'); + } + const env = Object.fromEntries(Object.entries(sc.env ?? {}).map(([k, v]) => [k, String(v).replaceAll('', root)])); + const entry = path.join(root, sc.entry ?? 'chain.flow.ts'); + const res = { s: sc.name, start: startSide, resume: resumeSide, i }; + const t0 = Date.now(); + const first = start(startSide, ['run', '--no-observer-link', '--json', ...(sc.extraArgs ?? []), '--data-dir', path.join(root, 'data'), entry, '--input', '{}'], root, env); + let early; + const deadline = Date.now() + 90_000; + while (!fs.existsSync(path.join(root, 'stalled'))) { + if (first.child.exitCode !== null || first.child.signalCode !== null) { early = await first.closed; break; } + if (Date.now() > deadline) { first.child.kill('SIGKILL'); early = { code: 'timeout' }; break; } + await sleep(15); + } + try { + if (early) { + res.fresh = true; res.code1 = early.code; res.code = early.code; + res.effects1 = res.effects = read(path.join(root, 'effects')); + res.out1 = first.out.slice(-600); + } else { + res.fresh = false; + await sleep(sc.delays?.[i] ?? DELAYS[i % DELAYS.length]); + first.child.kill('SIGKILL'); + await Promise.race([first.closed, sleep(2000)]); + sweep(root); await sleep(100); sweep(root); + res.code1 = 'killed'; + res.effects1 = read(path.join(root, 'effects')); + fs.writeFileSync(path.join(root, 'release'), ''); + const r0 = rootOf(journals(root)); + if (!r0) throw new Error('no root journal'); + const resumed = start(resumeSide, ['resume', '--no-observer-link', '--json', ...(sc.extraArgs ?? []), '--data-dir', path.join(root, 'data'), r0.runId], root, env); + const to = setTimeout(() => resumed.child.kill('SIGKILL'), 150_000); + const rr = await resumed.closed; clearTimeout(to); + res.code = rr.code; res.out = resumed.out.slice(-600); + sweep(root); + if (sc.secondResume) { + res.effects0 = res.effects1; + res.effectsMid = read(path.join(root, 'effects')); + res.code1 = rr.code; res.effects1 = res.effectsMid; + const fin = start(sc.secondResume, ['resume', '--no-observer-link', '--json', ...(sc.extraArgs ?? []), '--data-dir', path.join(root, 'data'), r0.runId], root, env); + const to2 = setTimeout(() => fin.child.kill('SIGKILL'), 150_000); + const fr = await fin.closed; clearTimeout(to2); + res.code = fr.code; res.out2 = fin.out.slice(-400); + sweep(root); + } + res.effects = read(path.join(root, 'effects')); + } + const js = journals(root); + const r = rootOf(js); + res.mode = r ? modeOf(r) : 'noroot'; + const rc = replayCheck(js, r?.runId, sc.expectedCounts); + res.journalReplay = rc.replay; res.dups = rc.dups; res.ids = rc.ids; + const letters = [...res.effects].filter(c => /[A-Za-z]/.test(c)); + res.letterDup = new Set(letters).size !== letters.length; + res.replay = res.journalReplay || (res.letterDup && !sc.allowDupLetters); + if (sc.extraCheck) Object.assign(res, sc.extraCheck(root)); + const okDefault = r => r.code === 0 && !r.replay && (sc.noZ || r.effects.includes('Z')); + res.ok = sc.okIf ? (sc.okIf(res) && !res.replay) : sc.expect ? (sc.expect(res) && !res.replay && res.code === 0) : okDefault(res); + } catch (e) { + res.error = String(e?.stack ?? e).slice(0, 400); res.ok = false; + } finally { + try { first.child.kill('SIGKILL'); } catch {} + sweep(root); + res.ms = Date.now() - t0; + if (!keep && res.ok) fs.rmSync(root, { recursive: true, force: true }); + } + return res; +} + +const mod = await import(path.resolve(file)); +let scen = mod.default; +if (names !== 'all') { const want = names.split(','); scen = want.map(n => { const s = scen.find(x => x.name === n); if (!s) throw new Error(`no scenario ${n}`); return s; }); } +const jobs = []; +for (const sc of scen) for (const [a, b] of (sidesOverride ?? sc.sides)) for (let i = 0; i < reps; i++) jobs.push([sc, a, b, i]); +const results = []; +let next = 0; +await Promise.all(Array.from({ length: conc }, async () => { + while (next < jobs.length) { + const [sc, a, b, i] = jobs[next++]; + const r = await one(sc, a, b, i); + results.push(r); + console.log(JSON.stringify(r)); + } +})); +const groups = new Map(); +for (const r of results) { + const k = `${r.s} ${r.start}>${r.resume}`; + const g = groups.get(k) ?? { ok: 0, n: 0, replay: 0, fresh: 0, modes: new Set(), effects: new Set(), codes: new Set() }; + g.n++; if (r.ok) g.ok++; if (r.replay) g.replay++; if (r.fresh) g.fresh++; + g.modes.add(r.mode); g.effects.add(r.effects); g.codes.add(String(r.code)); + groups.set(k, g); +} +for (const [k, g] of groups) console.log(`SUMMARY ${k} ok=${g.ok}/${g.n} replay=${g.replay} fresh=${g.fresh} mode=${[...g.modes]} codes=${[...g.codes]} effects=${[...g.effects].join('|')}`); diff --git a/evidence/native-parallel-review9/h8.mjs b/evidence/native-parallel-review9/h8.mjs new file mode 100644 index 000000000..bf9683ec8 --- /dev/null +++ b/evidence/native-parallel-review9/h8.mjs @@ -0,0 +1,230 @@ +// Review-8 copy of the review-7 harness (only SIDES extended with mutant sides). +// Review-7 crash/resume harness for flows#667. Runs inside node:22-trixie. +// usage: node --no-warnings h7.mjs [--reps=6] [--conc=3] [--tag=x] [--sides=a:b/c:d] [--keep] +import fs from 'node:fs'; +import path from 'node:path'; +import { spawn } from 'node:child_process'; +import { createRequire } from 'node:module'; +import { DatabaseSync } from 'node:sqlite'; +globalThis.require = createRequire(import.meta.url); + +const args = process.argv.slice(2); +const opt = (k, d) => { const a = args.find(x => x.startsWith(`--${k}=`)); return a ? a.slice(k.length + 3) : d; }; +const file = args[0]; +const names = args[1]; +const reps = Number(opt('reps', '6')); +const conc = Number(opt('conc', '3')); +const tag = opt('tag', 't'); +const sidesOverride = opt('sides', undefined)?.split('/').map(p => p.split(':')); +const keep = args.includes('--keep'); +const DELAYS = [0, 60, 130, 220, 330, 450, 30, 180, 270, 400]; + +const SIDES = { + head: { cli: '/w/head/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + base: { cli: '/w/base/packages/sdk/dist/cli.js', nm: '/w/base/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + forced: { cli: '/w/forced/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + fix: { cli: '/w/fix/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + deep: { cli: '/w/deep/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + p2050: { cli: '/w/p2050/node_modules/@relayflows/sdk/dist/cli.js', nm: '/w/p2050/node_modules', daemon: '/w/relayflowd-2050' }, + p2051: { cli: '/w/p2051/node_modules/@relayflows/sdk/dist/cli.js', nm: '/w/p2051/node_modules', daemon: '/w/relayflowd-main' }, + m1: { cli: '/w/m1/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + m2: { cli: '/w/m2/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + m3: { cli: '/w/m3/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + m4deep: { cli: '/w/m4deep/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + m5: { cli: '/w/m5/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + m6: { cli: '/w/m6/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + m3deep: { cli: '/w/m3deep/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, + fx: { cli: '/w/fx/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules', daemon: '/w/relayflowd-main' }, +}; + +const sleep = ms => new Promise(r => setTimeout(r, ms)); +const read = p => { try { return fs.readFileSync(p, 'utf8'); } catch { return ''; } }; + +function start(side, argv, root, env = {}, nodeArgs = []) { + const s = SIDES[side]; + const child = spawn(process.execPath, [...nodeArgs, s.cli, ...argv], { + cwd: root, env: { ...process.env, ...env, RELAYFLOWD_BIN: s.daemon }, stdio: ['ignore', 'pipe', 'pipe'], + }); + let out = ''; + child.stdout.on('data', d => { out += d; }); + child.stderr.on('data', d => { out += d; }); + return { child, closed: new Promise(r => child.once('close', (code, signal) => r({ code, signal }))), get out() { return out; } }; +} + +function sweep(root) { + const targets = new Set(); + try { targets.add(JSON.parse(read(path.join(root, 'data/connection.json'))).pid); } catch {} + for (const e of fs.readdirSync('/proc')) { + if (!/^\d+$/.test(e)) continue; + const pid = Number(e); + if (pid === process.pid) continue; + try { + const cwd = fs.readlinkSync(`/proc/${pid}/cwd`); + const cmd = fs.readFileSync(`/proc/${pid}/cmdline`, 'utf8'); + if (cwd === root || cwd.startsWith(root + '/') || cmd.includes(root)) targets.add(pid); + } catch {} + } + for (const pid of targets) { try { if (pid) process.kill(pid, 'SIGKILL'); } catch {} } +} + +function journals(root) { + const dir = path.join(root, 'data/runs'); + if (!fs.existsSync(dir)) return []; + return fs.readdirSync(dir).filter(f => f.endsWith('.sqlite3')).sort().map(f => { + let db; + try { db = new DatabaseSync(path.join(dir, f), { readOnly: true }); } catch { return { runId: f.slice(0, -8), step: undefined, completed: 0 }; } + try { + if (!db.prepare("select name from sqlite_master where type='table' and name='entries'").get()) return { runId: f.slice(0, -8), step: undefined, completed: 0 }; + const sp = db.prepare("select payload from entries where entry_type='run.spawned' order by seq limit 1").get(); + const done = db.prepare("select count(*) as n from entries where entry_type='step.completed'").get().n; + const payload = sp ? JSON.parse(sp.payload) : undefined; + const spec = payload?.spec ?? payload?.payload?.spec ?? payload?.run?.spec; + return { runId: f.slice(0, -8), step: spec?.steps?.[0], completed: Number(done) }; + } finally { db.close(); } + }); +} + +function rootOf(js) { return js.find(j => j.step?.id === 'authored-root'); } +function modeOf(r) { + try { const m = JSON.parse(r.step.instruction); return m.executionMode ?? (m.identityVersion ? 'v2?' : 'absent'); } catch { return 'unknown'; } +} + +function replayCheck(js, rootId, expected = {}) { + const seen = new Map(); + const ids = []; + let replay = false; + const dups = []; + for (const j of js) { + if (j.runId === rootId || !j.step) continue; + const st = j.step; + const cmd = st.command ?? st.instruction ?? ''; + ids.push(`${st.id} c=${j.completed} ${String(cmd).slice(0, 70)}`); + if (!st.command) continue; + const ns = st.id.includes('--') ? st.id.slice(0, st.id.lastIndexOf('--')) : ''; + const key = `${ns}|${st.command}`; + const prev = seen.get(key) ?? []; + prev.push({ id: st.id, completed: j.completed }); + seen.set(key, prev); + const distinct = new Set(prev.map(p => p.id)); + if (distinct.size > (expected[st.command] ?? 1) && prev.some(p => p.completed > 0)) { + replay = true; dups.push(`${st.command.slice(0, 50)}: ${[...distinct].join(' & ')}`); + } + } + return { replay, ids, dups }; +} + +async function one(sc, startSide, resumeSide, i) { + const root = `/w/runs/${tag}/${sc.name}/${startSide}-${resumeSide}-${i}`; + fs.rmSync(root, { recursive: true, force: true }); + fs.mkdirSync(root, { recursive: true }); + const nmSide = sc.nmSide ?? startSide; + fs.writeFileSync(path.join(root, 'package.json'), '{"type":"module"}'); + if (sc.realNodeModules) fs.mkdirSync(path.join(root, 'node_modules'), { recursive: true }); + else fs.symlinkSync(SIDES[nmSide].nm, path.join(root, 'node_modules')); + fs.writeFileSync(path.join(root, 'flows.json'), JSON.stringify({ cli: path.join(root, 'adapter.mjs'), models: ['test-model'] })); + fs.writeFileSync(path.join(root, 'adapter.mjs'), '#!/usr/bin/env node\nprocess.exit(0);\n', { mode: 0o755 }); + for (const [f, src] of Object.entries(sc.files)) { + const t = path.join(root, f); + fs.mkdirSync(path.dirname(t), { recursive: true }); + fs.writeFileSync(t, src.replaceAll('', root).replaceAll('', SIDES[nmSide].nm)); + if (f.endsWith('adapter.mjs')) fs.chmodSync(t, 0o755); + } + if (sc.bluebird) { + const d = path.join(root, 'bb'); + fs.cpSync('/w/head/packages/sdk/node_modules/bluebird/js/release', d, { recursive: true }); + fs.writeFileSync(path.join(d, 'package.json'), '{"type":"commonjs"}'); + } + const env = Object.fromEntries(Object.entries(sc.env ?? {}).map(([k, v]) => [k, String(v).replaceAll('', root)])); + const renv = { ...env, ...Object.fromEntries(Object.entries(sc.resumeEnv ?? {}).map(([k, v]) => [k, String(v).replaceAll('', root)])) }; + const nargs = (sc.nodeArgs ?? []).map(a => a.replaceAll('', root)); + const rargs = (sc.resumeNodeArgs ?? sc.nodeArgs ?? []).map(a => a.replaceAll('', root)); + const entry = path.join(root, sc.entry ?? 'chain.flow.ts'); + const res = { s: sc.name, start: startSide, resume: resumeSide, i }; + const t0 = Date.now(); + const first = start(startSide, ['run', '--no-observer-link', '--json', ...(sc.extraArgs ?? []), '--data-dir', path.join(root, 'data'), entry, '--input', '{}'], root, env, nargs); + let early; + const deadline = Date.now() + 90_000; + while (!fs.existsSync(path.join(root, 'stalled'))) { + if (first.child.exitCode !== null || first.child.signalCode !== null) { early = await first.closed; break; } + if (Date.now() > deadline) { first.child.kill('SIGKILL'); early = { code: 'timeout' }; break; } + await sleep(15); + } + try { + if (early) { + res.fresh = true; res.code1 = early.code; res.code = early.code; + res.effects1 = res.effects = read(path.join(root, 'effects')); + res.out1 = first.out.slice(-600); + } else { + res.fresh = false; + await sleep(sc.delays?.[i] ?? DELAYS[i % DELAYS.length]); + first.child.kill('SIGKILL'); + await Promise.race([first.closed, sleep(2000)]); + sweep(root); await sleep(100); sweep(root); + res.code1 = 'killed'; + res.effects1 = read(path.join(root, 'effects')); + fs.writeFileSync(path.join(root, 'release'), ''); + const r0 = rootOf(journals(root)); + if (!r0) throw new Error('no root journal'); + const resumed = start(resumeSide, ['resume', '--no-observer-link', '--json', ...(sc.extraArgs ?? []), '--data-dir', path.join(root, 'data'), r0.runId], root, renv, rargs); + const to = setTimeout(() => resumed.child.kill('SIGKILL'), 150_000); + const tr = Date.now(); const rr = await resumed.closed; clearTimeout(to); res.resumeMs = Date.now() - tr; + res.code = rr.code; res.out = resumed.out.slice(-600); + sweep(root); + if (sc.secondResume) { + res.effects0 = res.effects1; + res.effectsMid = read(path.join(root, 'effects')); + res.code1 = rr.code; res.effects1 = res.effectsMid; + const fin = start(sc.secondResume, ['resume', '--no-observer-link', '--json', ...(sc.extraArgs ?? []), '--data-dir', path.join(root, 'data'), r0.runId], root, env, nargs); + const to2 = setTimeout(() => fin.child.kill('SIGKILL'), 150_000); + const fr = await fin.closed; clearTimeout(to2); + res.code = fr.code; res.out2 = fin.out.slice(-400); + sweep(root); + } + res.effects = read(path.join(root, 'effects')); + } + const js = journals(root); + const r = rootOf(js); + res.mode = r ? modeOf(r) : 'noroot'; + const rc = replayCheck(js, r?.runId, sc.expectedCounts); + res.journalReplay = rc.replay; res.dups = rc.dups; res.ids = rc.ids; + const letters = [...res.effects].filter(c => /[A-Za-z]/.test(c)); + res.letterDup = new Set(letters).size !== letters.length; + res.replay = res.journalReplay || (res.letterDup && !sc.allowDupLetters); + if (sc.extraCheck) Object.assign(res, sc.extraCheck(root)); + const okDefault = r => r.code === 0 && !r.replay && (sc.noZ || r.effects.includes('Z')); + res.ok = sc.okIf ? (sc.okIf(res) && !res.replay) : sc.expect ? (sc.expect(res) && !res.replay && res.code === 0) : okDefault(res); + } catch (e) { + res.error = String(e?.stack ?? e).slice(0, 400); res.ok = false; + } finally { + try { first.child.kill('SIGKILL'); } catch {} + sweep(root); + res.ms = Date.now() - t0; + if (!keep && res.ok) fs.rmSync(root, { recursive: true, force: true }); + } + return res; +} + +const mod = await import(path.resolve(file)); +let scen = mod.default; +if (names !== 'all') { const want = names.split(','); scen = want.map(n => { const s = scen.find(x => x.name === n); if (!s) throw new Error(`no scenario ${n}`); return s; }); } +const jobs = []; +for (const sc of scen) for (const [a, b] of (sidesOverride ?? sc.sides)) for (let i = 0; i < reps; i++) jobs.push([sc, a, b, i]); +const results = []; +let next = 0; +await Promise.all(Array.from({ length: conc }, async () => { + while (next < jobs.length) { + const [sc, a, b, i] = jobs[next++]; + const r = await one(sc, a, b, i); + results.push(r); + console.log(JSON.stringify(r)); + } +})); +const groups = new Map(); +for (const r of results) { + const k = `${r.s} ${r.start}>${r.resume}`; + const g = groups.get(k) ?? { ok: 0, n: 0, replay: 0, fresh: 0, modes: new Set(), effects: new Set(), codes: new Set() }; + g.n++; if (r.ok) g.ok++; if (r.replay) g.replay++; if (r.fresh) g.fresh++; + g.modes.add(r.mode); g.effects.add(r.effects); g.codes.add(String(r.code)); + groups.set(k, g); +} +for (const [k, g] of groups) console.log(`SUMMARY ${k} ok=${g.ok}/${g.n} replay=${g.replay} fresh=${g.fresh} mode=${[...g.modes]} codes=${[...g.codes]} effects=${[...g.effects].join('|')}`); diff --git a/evidence/native-parallel-review9/mut-f1-parser.log b/evidence/native-parallel-review9/mut-f1-parser.log new file mode 100644 index 000000000..84275e7c1 --- /dev/null +++ b/evidence/native-parallel-review9/mut-f1-parser.log @@ -0,0 +1,7 @@ +{"s":"RS1","start":"fx","resume":"fx","i":0,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":440,"code":2,"out":" a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"refusal\",\"kind\":\"invalid_spec\",\"message\":\"unsupported_promise_lifecycle: pinned parallel root 01M53HMKG4FWGJETPN6D68N15Q cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\"}],\"rootRunId\":\"01M53HMKG4FWGJETPN6D68N15Q\",\"runId\":\"01M53HMKG4FWGJETPN6D68N15Q\",\"socketPath\":\"/tmp/relayflowd-e402402e2ce7.sock\",\"subscriptions\":[]}\n","effects":"bcaX","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2125} +{"s":"RS1","start":"fx","resume":"fx","i":1,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":429,"code":2,"out":" a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"refusal\",\"kind\":\"invalid_spec\",\"message\":\"unsupported_promise_lifecycle: pinned parallel root 01M53HMKG4BYTB0ANAJ6TT7S1Y cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\"}],\"rootRunId\":\"01M53HMKG4BYTB0ANAJ6TT7S1Y\",\"runId\":\"01M53HMKG4BYTB0ANAJ6TT7S1Y\",\"socketPath\":\"/tmp/relayflowd-1e90f908e47d.sock\",\"subscriptions\":[]}\n","effects":"bcaX","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2167} +{"s":"RS1","start":"fx","resume":"fx","i":2,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":428,"code":2,"out":" a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"refusal\",\"kind\":\"invalid_spec\",\"message\":\"unsupported_promise_lifecycle: pinned parallel root 01M53HMKG4YN5C6HTF0F96SSYW cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\"}],\"rootRunId\":\"01M53HMKG4YN5C6HTF0F96SSYW\",\"runId\":\"01M53HMKG4YN5C6HTF0F96SSYW\",\"socketPath\":\"/tmp/relayflowd-3439efd1742f.sock\",\"subscriptions\":[]}\n","effects":"bcaX","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2235} +{"s":"RS1","start":"fx","resume":"fx","i":3,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":386,"code":2,"out":" a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"refusal\",\"kind\":\"invalid_spec\",\"message\":\"unsupported_promise_lifecycle: pinned parallel root 01M53HMNDCPSXSPJWS0BM8T0D5 cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\"}],\"rootRunId\":\"01M53HMNDCPSXSPJWS0BM8T0D5\",\"runId\":\"01M53HMNDCPSXSPJWS0BM8T0D5\",\"socketPath\":\"/tmp/relayflowd-fc9253b2a118.sock\",\"subscriptions\":[]}\n","effects":"bcaX","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2061} +{"s":"RS1","start":"fx","resume":"fx","i":4,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":424,"code":2,"out":" a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"refusal\",\"kind\":\"invalid_spec\",\"message\":\"unsupported_promise_lifecycle: pinned parallel root 01M53HMNEEWCDX7HJDZFMFXA11 cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\"}],\"rootRunId\":\"01M53HMNEEWCDX7HJDZFMFXA11\",\"runId\":\"01M53HMNEEWCDX7HJDZFMFXA11\",\"socketPath\":\"/tmp/relayflowd-ae39b7a9c170.sock\",\"subscriptions\":[]}\n","effects":"bcaX","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2172} +{"s":"RS1","start":"fx","resume":"fx","i":5,"fresh":false,"code1":"killed","effects1":"bcaX","resumeMs":426,"code":2,"out":" a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"refusal\",\"kind\":\"invalid_spec\",\"message\":\"unsupported_promise_lifecycle: pinned parallel root 01M53HMNG646T3H7KMTBDB7A8A cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.\"}],\"rootRunId\":\"01M53HMNG646T3H7KMTBDB7A8A\",\"runId\":\"01M53HMNG646T3H7KMTBDB7A8A\",\"socketPath\":\"/tmp/relayflowd-075fb81103e5.sock\",\"subscriptions\":[]}\n","effects":"bcaX","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2248} +SUMMARY RS1 fx>fx ok=0/6 replay=0 fresh=0 mode=parallel codes=2 effects=bcaX diff --git a/evidence/native-parallel-review9/mut-f1-resume.log b/evidence/native-parallel-review9/mut-f1-resume.log new file mode 100644 index 000000000..859bce4e3 --- /dev/null +++ b/evidence/native-parallel-review9/mut-f1-resume.log @@ -0,0 +1,7 @@ +{"s":"RS3bh","start":"m1","resume":"m1","i":0,"fresh":false,"code1":1,"effects1":"bcaX","resumeMs":547,"code":1,"out":"FAILED [step_failed] cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\"}],\"rootRunId\":\"01M53HMWX70PW92YQ42DRF458B\",\"runId\":\"01M53HMWX70PW92YQ42DRF458B\",\"socketPath\":\"/tmp/relayflowd-9784acf9295f.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaX","out2":"ep_failed)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root \\\"01M53HMWX70PW92YQ42DRF458B\\\" is failed (step_failed)\"}],\"rootRunId\":\"01M53HMWX70PW92YQ42DRF458B\",\"runId\":\"01M53HMWX70PW92YQ42DRF458B\",\"socketPath\":\"/tmp/relayflowd-9784acf9295f.sock\",\"subscriptions\":[]}\n","effects":"bcaX","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2567} +{"s":"RS3bh","start":"m1","resume":"m1","i":1,"fresh":false,"code1":1,"effects1":"bcaX","resumeMs":584,"code":1,"out":"FAILED [step_failed] cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\"}],\"rootRunId\":\"01M53HMWX8CRXVDHTBMGTWX88C\",\"runId\":\"01M53HMWX8CRXVDHTBMGTWX88C\",\"socketPath\":\"/tmp/relayflowd-f75ae0402402.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaX","out2":"ep_failed)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root \\\"01M53HMWX8CRXVDHTBMGTWX88C\\\" is failed (step_failed)\"}],\"rootRunId\":\"01M53HMWX8CRXVDHTBMGTWX88C\",\"runId\":\"01M53HMWX8CRXVDHTBMGTWX88C\",\"socketPath\":\"/tmp/relayflowd-f75ae0402402.sock\",\"subscriptions\":[]}\n","effects":"bcaX","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2718} +{"s":"RS3bh","start":"m1","resume":"m1","i":2,"fresh":false,"code1":1,"effects1":"bcaX","resumeMs":598,"code":1,"out":"FAILED [step_failed] cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\"}],\"rootRunId\":\"01M53HMWXCPEJ00GRTXN3ZC7EP\",\"runId\":\"01M53HMWXCPEJ00GRTXN3ZC7EP\",\"socketPath\":\"/tmp/relayflowd-22a856491d53.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaX","out2":"ep_failed)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root \\\"01M53HMWXCPEJ00GRTXN3ZC7EP\\\" is failed (step_failed)\"}],\"rootRunId\":\"01M53HMWXCPEJ00GRTXN3ZC7EP\",\"runId\":\"01M53HMWXCPEJ00GRTXN3ZC7EP\",\"socketPath\":\"/tmp/relayflowd-22a856491d53.sock\",\"subscriptions\":[]}\n","effects":"bcaX","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2827} +{"s":"RS3bh","start":"m1","resume":"m1","i":3,"fresh":false,"code1":1,"effects1":"bcaX","resumeMs":598,"code":1,"out":"FAILED [step_failed] cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\"}],\"rootRunId\":\"01M53HMZC61PBNP9WFWEF4SVRB\",\"runId\":\"01M53HMZC61PBNP9WFWEF4SVRB\",\"socketPath\":\"/tmp/relayflowd-43f408584f65.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaX","out2":"ep_failed)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root \\\"01M53HMZC61PBNP9WFWEF4SVRB\\\" is failed (step_failed)\"}],\"rootRunId\":\"01M53HMZC61PBNP9WFWEF4SVRB\",\"runId\":\"01M53HMZC61PBNP9WFWEF4SVRB\",\"socketPath\":\"/tmp/relayflowd-43f408584f65.sock\",\"subscriptions\":[]}\n","effects":"bcaX","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2781} +{"s":"RS3bh","start":"m1","resume":"m1","i":4,"fresh":false,"code1":1,"effects1":"bcaX","resumeMs":601,"code":1,"out":"FAILED [step_failed] cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\"}],\"rootRunId\":\"01M53HMZFQJ59ZEZFDBX766W9X\",\"runId\":\"01M53HMZFQJ59ZEZFDBX766W9X\",\"socketPath\":\"/tmp/relayflowd-af14208f8ed8.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaX","out2":"ep_failed)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root \\\"01M53HMZFQJ59ZEZFDBX766W9X\\\" is failed (step_failed)\"}],\"rootRunId\":\"01M53HMZFQJ59ZEZFDBX766W9X\",\"runId\":\"01M53HMZFQJ59ZEZFDBX766W9X\",\"socketPath\":\"/tmp/relayflowd-af14208f8ed8.sock\",\"subscriptions\":[]}\n","effects":"bcaX","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2833} +{"s":"RS3bh","start":"m1","resume":"m1","i":5,"fresh":false,"code1":1,"effects1":"bcaX","resumeMs":585,"code":1,"out":"FAILED [step_failed] cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"step_failed\",\"message\":\"cannot assign a replay-stable f.run identity: a Promise intrinsic was replaced\"}],\"rootRunId\":\"01M53HMZKFA0N22NAJ9SMN1TCW\",\"runId\":\"01M53HMZKFA0N22NAJ9SMN1TCW\",\"socketPath\":\"/tmp/relayflowd-8dd6136ae3c5.sock\",\"status\":\"failed\",\"completionReason\":\"step_failed\",\"subscriptions\":[]}\n","effects0":"bcaX","effectsMid":"bcaX","out2":"ep_failed)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: authored root \\\"01M53HMZKFA0N22NAJ9SMN1TCW\\\" is failed (step_failed)\"}],\"rootRunId\":\"01M53HMZKFA0N22NAJ9SMN1TCW\",\"runId\":\"01M53HMZKFA0N22NAJ9SMN1TCW\",\"socketPath\":\"/tmp/relayflowd-8dd6136ae3c5.sock\",\"subscriptions\":[]}\n","effects":"bcaX","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-fcafce286f10473ae0899f5154dd1225c6001b7eaab22f3d9d659c7e92e3a53b-1 c=1 printf X >> effects","run-after-cc28348b5a6b9119f2a5b23b10d250edf69bfbee95f55850bcec07c793615291-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2953} +SUMMARY RS3bh m1>m1 ok=0/6 replay=0 fresh=0 mode=parallel codes=1 effects=bcaX diff --git a/evidence/native-parallel-review9/mut-f2-backstop.log b/evidence/native-parallel-review9/mut-f2-backstop.log new file mode 100644 index 000000000..3ea4ea658 --- /dev/null +++ b/evidence/native-parallel-review9/mut-f2-backstop.log @@ -0,0 +1,7 @@ +{"s":"PL9dep","start":"m3","resume":"m3","i":0,"fresh":true,"code1":1,"code":1,"effects":"b","effects1":"b","out1":"at process.processTicksAndRejections (node:internal/process/task_queues:103:5)\n at async executeAuthoredFlow (file:///w/m3/packages/sdk/dist/authored-flow-executor.js:563:13)\n at async file:///w/m3/packages/sdk/dist/authored-root.js:286:24\n at async withWorkerLease (file:///w/m3/packages/sdk/dist/worker-lease.js:89:22)\n at async driveRoot (file:///w/m3/packages/sdk/dist/authored-root.js:269:24) {\n code: 'step_failed',\n completionReason: undefined,\n runId: undefined,\n details: undefined,\n suspension: undefined,\n rootRunId: undefined,\n parkCause: undefined\n}\n\nNode.js v22.23.3\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=0 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1255} +{"s":"PL9dep","start":"m3","resume":"m3","i":2,"fresh":true,"code1":1,"code":1,"effects":"b","effects1":"b","out1":"at process.processTicksAndRejections (node:internal/process/task_queues:103:5)\n at async executeAuthoredFlow (file:///w/m3/packages/sdk/dist/authored-flow-executor.js:563:13)\n at async file:///w/m3/packages/sdk/dist/authored-root.js:286:24\n at async withWorkerLease (file:///w/m3/packages/sdk/dist/worker-lease.js:89:22)\n at async driveRoot (file:///w/m3/packages/sdk/dist/authored-root.js:269:24) {\n code: 'step_failed',\n completionReason: undefined,\n runId: undefined,\n details: undefined,\n suspension: undefined,\n rootRunId: undefined,\n parkCause: undefined\n}\n\nNode.js v22.23.3\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=0 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1255} +{"s":"PL9dep","start":"m3","resume":"m3","i":1,"fresh":true,"code1":1,"code":1,"effects":"b","effects1":"b","out1":"at process.processTicksAndRejections (node:internal/process/task_queues:103:5)\n at async executeAuthoredFlow (file:///w/m3/packages/sdk/dist/authored-flow-executor.js:563:13)\n at async file:///w/m3/packages/sdk/dist/authored-root.js:286:24\n at async withWorkerLease (file:///w/m3/packages/sdk/dist/worker-lease.js:89:22)\n at async driveRoot (file:///w/m3/packages/sdk/dist/authored-root.js:269:24) {\n code: 'step_failed',\n completionReason: undefined,\n runId: undefined,\n details: undefined,\n suspension: undefined,\n rootRunId: undefined,\n parkCause: undefined\n}\n\nNode.js v22.23.3\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=0 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1274} +{"s":"PL9dep","start":"m3","resume":"m3","i":3,"fresh":true,"code1":1,"code":1,"effects":"b","effects1":"b","out1":"at process.processTicksAndRejections (node:internal/process/task_queues:103:5)\n at async executeAuthoredFlow (file:///w/m3/packages/sdk/dist/authored-flow-executor.js:563:13)\n at async file:///w/m3/packages/sdk/dist/authored-root.js:286:24\n at async withWorkerLease (file:///w/m3/packages/sdk/dist/worker-lease.js:89:22)\n at async driveRoot (file:///w/m3/packages/sdk/dist/authored-root.js:269:24) {\n code: 'step_failed',\n completionReason: undefined,\n runId: undefined,\n details: undefined,\n suspension: undefined,\n rootRunId: undefined,\n parkCause: undefined\n}\n\nNode.js v22.23.3\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=0 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1044} +{"s":"PL9dep","start":"m3","resume":"m3","i":5,"fresh":true,"code1":1,"code":1,"effects":"b","effects1":"b","out1":"at process.processTicksAndRejections (node:internal/process/task_queues:103:5)\n at async executeAuthoredFlow (file:///w/m3/packages/sdk/dist/authored-flow-executor.js:563:13)\n at async file:///w/m3/packages/sdk/dist/authored-root.js:286:24\n at async withWorkerLease (file:///w/m3/packages/sdk/dist/worker-lease.js:89:22)\n at async driveRoot (file:///w/m3/packages/sdk/dist/authored-root.js:269:24) {\n code: 'step_failed',\n completionReason: undefined,\n runId: undefined,\n details: undefined,\n suspension: undefined,\n rootRunId: undefined,\n parkCause: undefined\n}\n\nNode.js v22.23.3\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=0 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1024} +{"s":"PL9dep","start":"m3","resume":"m3","i":4,"fresh":true,"code1":1,"code":1,"effects":"b","effects1":"b","out1":"at process.processTicksAndRejections (node:internal/process/task_queues:103:5)\n at async executeAuthoredFlow (file:///w/m3/packages/sdk/dist/authored-flow-executor.js:563:13)\n at async file:///w/m3/packages/sdk/dist/authored-root.js:286:24\n at async withWorkerLease (file:///w/m3/packages/sdk/dist/worker-lease.js:89:22)\n at async driveRoot (file:///w/m3/packages/sdk/dist/authored-root.js:269:24) {\n code: 'step_failed',\n completionReason: undefined,\n runId: undefined,\n details: undefined,\n suspension: undefined,\n rootRunId: undefined,\n parkCause: undefined\n}\n\nNode.js v22.23.3\n","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=0 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1042} +SUMMARY PL9dep m3>m3 ok=0/6 replay=0 fresh=6 mode=parallel codes=1 effects=b diff --git a/evidence/native-parallel-review9/mut-f2-hide.log b/evidence/native-parallel-review9/mut-f2-hide.log new file mode 100644 index 000000000..312cd315b --- /dev/null +++ b/evidence/native-parallel-review9/mut-f2-hide.log @@ -0,0 +1,13 @@ +{"s":"PL8hide","start":"m2","resume":"m2","i":0,"fresh":false,"code1":"killed","effects1":"bX","resumeMs":1052,"code":1,"out":"37423f7c84cdabeb55baa44c70beb20591-3 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl8hide\\\" returned with unawaited steps: run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 (f.run), run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 (f.run)\"}],\"rootRunId\":\"01M53HNTF54TJBJMYTJGTZ7JRN\",\"runId\":\"01M53HNTF54TJBJMYTJGTZ7JRN\",\"socketPath\":\"/tmp/relayflowd-c90d5e0d4b1b.sock\",\"subscriptions\":[]}\n","effects":"bXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=2 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2130} +{"s":"PL8hide","start":"m2","resume":"m2","i":1,"fresh":false,"code1":"killed","effects1":"bX","resumeMs":1015,"code":1,"out":"37423f7c84cdabeb55baa44c70beb20591-3 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl8hide\\\" returned with unawaited steps: run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 (f.run), run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 (f.run)\"}],\"rootRunId\":\"01M53HNTESKYAGDQ7SQXJ0QJSG\",\"runId\":\"01M53HNTESKYAGDQ7SQXJ0QJSG\",\"socketPath\":\"/tmp/relayflowd-743657e964e9.sock\",\"subscriptions\":[]}\n","effects":"bXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=2 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2143} +{"s":"PL8hide","start":"m2","resume":"m2","i":2,"fresh":false,"code1":"killed","effects1":"bX","resumeMs":1003,"code":1,"out":"flow \"pl8hide\" returned with unawaited steps: run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl8hide\\\" returned with unawaited steps: run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 (f.run)\"}],\"rootRunId\":\"01M53HNTF1P32HBTYVJSKD6AWE\",\"runId\":\"01M53HNTF1P32HBTYVJSKD6AWE\",\"socketPath\":\"/tmp/relayflowd-1408606f2622.sock\",\"subscriptions\":[]}\n","effects":"bXcZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2200} +{"s":"PL8hide","start":"m2","resume":"m2","i":4,"fresh":false,"code1":"killed","effects1":"bXc","resumeMs":701,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HNWHVQF428J1A8ZK359RR\",\"runId\":\"01M53HNWHVQF428J1A8ZK359RR\",\"socketPath\":\"/tmp/relayflowd-a5cc1dd461fb.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bXcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":2073} +{"s":"PL8hide","start":"m2","resume":"m2","i":5,"fresh":false,"code1":"killed","effects1":"bXca","resumeMs":687,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HNWKM4KM8YGMKYDETTTVS\",\"runId\":\"01M53HNWKM4KM8YGMKYDETTTVS\",\"socketPath\":\"/tmp/relayflowd-98b063e0cff4.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bXcaXZ","mode":"parallel","journalReplay":true,"dups":["printf X >> effects: run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 & run-after-0acfcd17016bf0988da869b9a66192eb7518639eac013ae43df7323b5c562192-1","test -f release || { touch stalled; sleep 120; }; : run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 & run-after-8d87fb4f1971b899bbdc4ba50a1d88a4ffd64653badfcab426bfa6053a09f2dc-1"],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-0acfcd17016bf0988da869b9a66192eb7518639eac013ae43df7323b5c562192-1 c=1 printf X >> effects","run-after-8d87fb4f1971b899bbdc4ba50a1d88a4ffd64653badfcab426bfa6053a09f2dc-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":true,"replay":true,"ok":false,"ms":2155} +{"s":"PL8hide","start":"m2","resume":"m2","i":3,"fresh":false,"code1":"killed","effects1":"bXc","resumeMs":969,"code":1,"out":"flow \"pl8hide\" returned with unawaited steps: run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl8hide\\\" returned with unawaited steps: run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 (f.run)\"}],\"rootRunId\":\"01M53HNWHW92N5NK4AZJRFVZDD\",\"runId\":\"01M53HNWHW92N5NK4AZJRFVZDD\",\"socketPath\":\"/tmp/relayflowd-1918da3f743d.sock\",\"subscriptions\":[]}\n","effects":"bXcXZ","mode":"parallel","journalReplay":true,"dups":["printf X >> effects: run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 & run-after-b1d85947f7f7b0657c73aba929eb762b7030c0bc579f0e1286abaaf5a801b9aa-1","test -f release || { touch stalled; sleep 120; }; : run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 & run-after-55bee009df4eb28006ca70724ed8fb1bd02920268a8625688e9b6becf771e01b-1"],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-b1d85947f7f7b0657c73aba929eb762b7030c0bc579f0e1286abaaf5a801b9aa-1 c=1 printf X >> effects","run-after-55bee009df4eb28006ca70724ed8fb1bd02920268a8625688e9b6becf771e01b-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":true,"replay":true,"ok":false,"ms":2272} +{"s":"PL8hide","start":"m2","resume":"m2","i":6,"fresh":false,"code1":"killed","effects1":"bX","resumeMs":966,"code":1,"out":"37423f7c84cdabeb55baa44c70beb20591-3 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl8hide\\\" returned with unawaited steps: run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 (f.run), run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 (f.run)\"}],\"rootRunId\":\"01M53HNYJY9N0TYD04AKE740BP\",\"runId\":\"01M53HNYJY9N0TYD04AKE740BP\",\"socketPath\":\"/tmp/relayflowd-e74a1acbff21.sock\",\"subscriptions\":[]}\n","effects":"bXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=2 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1992} +{"s":"PL8hide","start":"m2","resume":"m2","i":7,"fresh":false,"code1":"killed","effects1":"bXc","resumeMs":989,"code":1,"out":"flow \"pl8hide\" returned with unawaited steps: run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl8hide\\\" returned with unawaited steps: run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 (f.run)\"}],\"rootRunId\":\"01M53HNYPGBJFCXQRS4V2Q55TJ\",\"runId\":\"01M53HNYPGBJFCXQRS4V2Q55TJ\",\"socketPath\":\"/tmp/relayflowd-8c7ac3f6c520.sock\",\"subscriptions\":[]}\n","effects":"bXcZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2143} +{"s":"PL8hide","start":"m2","resume":"m2","i":8,"fresh":false,"code1":"killed","effects1":"bXc","resumeMs":987,"code":1,"out":"flow \"pl8hide\" returned with unawaited steps: run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl8hide\\\" returned with unawaited steps: run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 (f.run)\"}],\"rootRunId\":\"01M53HNYQWV4P5NS4RHVW8EXPA\",\"runId\":\"01M53HNYQWV4P5NS4RHVW8EXPA\",\"socketPath\":\"/tmp/relayflowd-14de752b6670.sock\",\"subscriptions\":[]}\n","effects":"bXcXZ","mode":"parallel","journalReplay":true,"dups":["printf X >> effects: run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 & run-after-b1d85947f7f7b0657c73aba929eb762b7030c0bc579f0e1286abaaf5a801b9aa-1","test -f release || { touch stalled; sleep 120; }; : run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 & run-after-55bee009df4eb28006ca70724ed8fb1bd02920268a8625688e9b6becf771e01b-1"],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-b1d85947f7f7b0657c73aba929eb762b7030c0bc579f0e1286abaaf5a801b9aa-1 c=1 printf X >> effects","run-after-55bee009df4eb28006ca70724ed8fb1bd02920268a8625688e9b6becf771e01b-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":true,"replay":true,"ok":false,"ms":2222} +{"s":"PL8hide","start":"m2","resume":"m2","i":9,"fresh":false,"code1":"killed","effects1":"bXca","resumeMs":727,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HP0K1ME2KYHVBM0YK8QDQ\",\"runId\":\"01M53HP0K1ME2KYHVBM0YK8QDQ\",\"socketPath\":\"/tmp/relayflowd-1cce9f1a5f42.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bXcaXZ","mode":"parallel","journalReplay":true,"dups":["printf X >> effects: run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 & run-after-0acfcd17016bf0988da869b9a66192eb7518639eac013ae43df7323b5c562192-1","test -f release || { touch stalled; sleep 120; }; : run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 & run-after-8d87fb4f1971b899bbdc4ba50a1d88a4ffd64653badfcab426bfa6053a09f2dc-1"],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-0acfcd17016bf0988da869b9a66192eb7518639eac013ae43df7323b5c562192-1 c=1 printf X >> effects","run-after-8d87fb4f1971b899bbdc4ba50a1d88a4ffd64653badfcab426bfa6053a09f2dc-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":true,"replay":true,"ok":false,"ms":2216} +{"s":"PL8hide","start":"m2","resume":"m2","i":10,"fresh":false,"code1":"killed","effects1":"bX","resumeMs":1026,"code":1,"out":"37423f7c84cdabeb55baa44c70beb20591-3 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl8hide\\\" returned with unawaited steps: run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 (f.run), run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 (f.run)\"}],\"rootRunId\":\"01M53HP0VK761X2KB6RRJ50RR9\",\"runId\":\"01M53HP0VK761X2KB6RRJ50RR9\",\"socketPath\":\"/tmp/relayflowd-18ab69c24bec.sock\",\"subscriptions\":[]}\n","effects":"bXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=2 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2067} +{"s":"PL8hide","start":"m2","resume":"m2","i":11,"fresh":false,"code1":"killed","effects1":"bX","resumeMs":1049,"code":1,"out":"37423f7c84cdabeb55baa44c70beb20591-3 (f.run)\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: unawaited_step: flow \\\"pl8hide\\\" returned with unawaited steps: run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 (f.run), run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 (f.run)\"}],\"rootRunId\":\"01M53HP0YMXA6GCSSEJ7KXHZ0W\",\"runId\":\"01M53HP0YMXA6GCSSEJ7KXHZ0W\",\"socketPath\":\"/tmp/relayflowd-0ef9e0055d41.sock\",\"subscriptions\":[]}\n","effects":"bXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=2 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2129} +SUMMARY PL8hide m2>m2 ok=1/12 replay=4 fresh=0 mode=parallel codes=1,0 effects=bXZ|bXcZ|bXcaZ|bXcaXZ|bXcXZ diff --git a/evidence/native-parallel-review9/mut-f2-removed.log b/evidence/native-parallel-review9/mut-f2-removed.log new file mode 100644 index 000000000..ff743bfd3 --- /dev/null +++ b/evidence/native-parallel-review9/mut-f2-removed.log @@ -0,0 +1,13 @@ +{"s":"PL9dep","start":"m2","resume":"m2","i":0,"fresh":false,"code1":"killed","effects1":"bX","resumeMs":798,"code":1,"out":"ertOperationAllowed (file:///w/m2/packages/sdk/dist/authored-flow-executor.js:688:15)\n at Object.runOperation [as run] (file:///w/m2/packages/sdk/dist/authored-flow-executor.js:294:9)\n at c (eval at instrumentParallelBody (file:///w/m2/packages/sdk/dist/authored-parallel-body.js:65:21), :7:71)\n at process.processTicksAndRejections (node:internal/process/task_queues:103:5) {\n code: 'operation_after_completion',\n completionReason: 'success',\n runId: undefined,\n details: undefined,\n suspension: undefined,\n rootRunId: undefined,\n parkCause: undefined\n}\n\nNode.js v22.23.3\n","effects":"bXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=2 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1822} +{"s":"PL9dep","start":"m2","resume":"m2","i":1,"fresh":false,"code1":"killed","effects1":"bX","resumeMs":794,"code":1,"out":"ertOperationAllowed (file:///w/m2/packages/sdk/dist/authored-flow-executor.js:688:15)\n at Object.runOperation [as run] (file:///w/m2/packages/sdk/dist/authored-flow-executor.js:294:9)\n at c (eval at instrumentParallelBody (file:///w/m2/packages/sdk/dist/authored-parallel-body.js:65:21), :7:71)\n at process.processTicksAndRejections (node:internal/process/task_queues:103:5) {\n code: 'operation_after_completion',\n completionReason: 'success',\n runId: undefined,\n details: undefined,\n suspension: undefined,\n rootRunId: undefined,\n parkCause: undefined\n}\n\nNode.js v22.23.3\n","effects":"bXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=2 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1876} +{"s":"PL9dep","start":"m2","resume":"m2","i":2,"fresh":false,"code1":"killed","effects1":"bXc","resumeMs":1008,"code":1,"out":"w \"pl9dep\" derived handler for run-1 (f.run) rejected: operation_after_completion: flow \"pl9dep\" called f.run after done()\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: operation_callback_failed: flow \\\"pl9dep\\\" derived handler for run-1 (f.run) rejected: operation_after_completion: flow \\\"pl9dep\\\" called f.run after done()\"}],\"rootRunId\":\"01M53HND7BQSKEZV0306BJT3ZP\",\"runId\":\"01M53HND7BQSKEZV0306BJT3ZP\",\"socketPath\":\"/tmp/relayflowd-448c29eaf393.sock\",\"subscriptions\":[]}\n","effects":"bXcZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2160} +{"s":"PL9dep","start":"m2","resume":"m2","i":4,"fresh":false,"code1":"killed","effects1":"bXc","resumeMs":624,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HNF0ZTN9E4NM8GHVVQ0P0\",\"runId\":\"01M53HNF0ZTN9E4NM8GHVVQ0P0\",\"socketPath\":\"/tmp/relayflowd-20e914fb3ff4.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bXcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1872} +{"s":"PL9dep","start":"m2","resume":"m2","i":3,"fresh":false,"code1":"killed","effects1":"bXc","resumeMs":960,"code":1,"out":"w \"pl9dep\" derived handler for run-1 (f.run) rejected: operation_after_completion: flow \"pl9dep\" called f.run after done()\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: operation_callback_failed: flow \\\"pl9dep\\\" derived handler for run-1 (f.run) rejected: operation_after_completion: flow \\\"pl9dep\\\" called f.run after done()\"}],\"rootRunId\":\"01M53HNEZJAZQ0FT903F4FQ1B8\",\"runId\":\"01M53HNEZJAZQ0FT903F4FQ1B8\",\"socketPath\":\"/tmp/relayflowd-17bbfad40467.sock\",\"subscriptions\":[]}\n","effects":"bXcZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2119} +{"s":"PL9dep","start":"m2","resume":"m2","i":5,"fresh":false,"code1":"killed","effects1":"bXca","resumeMs":634,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HNF9AHAHYTZ05VKRN16AY\",\"runId\":\"01M53HNF9AHAHYTZ05VKRN16AY\",\"socketPath\":\"/tmp/relayflowd-5c5889bfcace.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bXcaZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","complete-10 c=1 :"],"letterDup":false,"replay":false,"ok":true,"ms":1980} +{"s":"PL9dep","start":"m2","resume":"m2","i":6,"fresh":false,"code1":"killed","effects1":"bX","resumeMs":732,"code":1,"out":"ertOperationAllowed (file:///w/m2/packages/sdk/dist/authored-flow-executor.js:688:15)\n at Object.runOperation [as run] (file:///w/m2/packages/sdk/dist/authored-flow-executor.js:294:9)\n at c (eval at instrumentParallelBody (file:///w/m2/packages/sdk/dist/authored-parallel-body.js:65:21), :7:71)\n at process.processTicksAndRejections (node:internal/process/task_queues:103:5) {\n code: 'operation_after_completion',\n completionReason: 'success',\n runId: undefined,\n details: undefined,\n suspension: undefined,\n rootRunId: undefined,\n parkCause: undefined\n}\n\nNode.js v22.23.3\n","effects":"bXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=2 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1658} +{"s":"PL9dep","start":"m2","resume":"m2","i":7,"fresh":false,"code1":"killed","effects1":"bXc","resumeMs":959,"code":1,"out":"w \"pl9dep\" derived handler for run-1 (f.run) rejected: operation_after_completion: flow \"pl9dep\" called f.run after done()\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: operation_callback_failed: flow \\\"pl9dep\\\" derived handler for run-1 (f.run) rejected: operation_after_completion: flow \\\"pl9dep\\\" called f.run after done()\"}],\"rootRunId\":\"01M53HNH125HTVP1QZDEFNGTJF\",\"runId\":\"01M53HNH125HTVP1QZDEFNGTJF\",\"socketPath\":\"/tmp/relayflowd-276a95fef996.sock\",\"subscriptions\":[]}\n","effects":"bXcZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2022} +{"s":"PL9dep","start":"m2","resume":"m2","i":8,"fresh":false,"code1":"killed","effects1":"bXc","resumeMs":960,"code":1,"out":"w \"pl9dep\" derived handler for run-1 (f.run) rejected: operation_after_completion: flow \"pl9dep\" called f.run after done()\n{\"ok\":false,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[{\"severity\":\"failure\",\"kind\":\"protocol_error\",\"message\":\"relayflowd could not complete the resume request: operation_callback_failed: flow \\\"pl9dep\\\" derived handler for run-1 (f.run) rejected: operation_after_completion: flow \\\"pl9dep\\\" called f.run after done()\"}],\"rootRunId\":\"01M53HNH75RSEM92JPCP221P2H\",\"runId\":\"01M53HNH75RSEM92JPCP221P2H\",\"socketPath\":\"/tmp/relayflowd-f050f20ff795.sock\",\"subscriptions\":[]}\n","effects":"bXcZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=2 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":2155} +{"s":"PL9dep","start":"m2","resume":"m2","i":9,"fresh":false,"code1":"killed","effects1":"bXca","resumeMs":624,"code":0,"out":"{\"ok\":true,\"command\":\"resume\",\"resolutions\":[],\"diagnostics\":[],\"rootRunId\":\"01M53HNJEVPHNBJHPZXMM8B8NK\",\"runId\":\"01M53HNJEVPHNBJHPZXMM8B8NK\",\"socketPath\":\"/tmp/relayflowd-2f7d00be87b3.sock\",\"completedSteps\":10,\"status\":\"completed\",\"completionReason\":\"success\",\"subscriptions\":[]}\n","effects":"bXcaXZ","mode":"parallel","journalReplay":true,"dups":["printf X >> effects: run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 & run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1","test -f release || { touch stalled; sleep 120; }; : run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 & run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1"],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=1 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=0 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","run-after-24779733dc18d4220760dcb11d0decc769a320d326be94565f248d8333069ec9-1 c=1 printf c >> effects","run-after-caf9c393341cdac6baf67e013f48353bc4f4b2d649836488b26856254ef6fb4c-1 c=1 printf a >> effects","run-after-99abf0ae09afc36ee0b4f7579db8c2734ed35cb53097b4596ad3dcebb8d66512-1 c=1 printf X >> effects","run-after-f0eddd81c644b13aabf509fff8a95c0257fd3664cbf7584a39e45395870fc2e8-1 c=1 test -f release || { touch stalled; sleep 120; }; printf Z >> effects","complete-10 c=1 :"],"letterDup":true,"replay":true,"ok":false,"ms":1927} +{"s":"PL9dep","start":"m2","resume":"m2","i":10,"fresh":false,"code1":"killed","effects1":"bX","resumeMs":728,"code":1,"out":"ertOperationAllowed (file:///w/m2/packages/sdk/dist/authored-flow-executor.js:688:15)\n at Object.runOperation [as run] (file:///w/m2/packages/sdk/dist/authored-flow-executor.js:294:9)\n at c (eval at instrumentParallelBody (file:///w/m2/packages/sdk/dist/authored-parallel-body.js:65:21), :7:71)\n at process.processTicksAndRejections (node:internal/process/task_queues:103:5) {\n code: 'operation_after_completion',\n completionReason: 'success',\n runId: undefined,\n details: undefined,\n suspension: undefined,\n rootRunId: undefined,\n parkCause: undefined\n}\n\nNode.js v22.23.3\n","effects":"bXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=2 sleep 0.2; printf C","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1630} +{"s":"PL9dep","start":"m2","resume":"m2","i":11,"fresh":false,"code1":"killed","effects1":"bX","resumeMs":746,"code":1,"out":"ertOperationAllowed (file:///w/m2/packages/sdk/dist/authored-flow-executor.js:688:15)\n at Object.runOperation [as run] (file:///w/m2/packages/sdk/dist/authored-flow-executor.js:294:9)\n at c (eval at instrumentParallelBody (file:///w/m2/packages/sdk/dist/authored-parallel-body.js:65:21), :7:71)\n at process.processTicksAndRejections (node:internal/process/task_queues:103:5) {\n code: 'operation_after_completion',\n completionReason: 'success',\n runId: undefined,\n details: undefined,\n suspension: undefined,\n rootRunId: undefined,\n parkCause: undefined\n}\n\nNode.js v22.23.3\n","effects":"bXZ","mode":"parallel","journalReplay":false,"dups":[],"ids":["run-1 c=1 sleep 0.2; printf W","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-3 c=2 sleep 0.2; printf C","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-2 c=1 printf B","run-after-1a5e08852ff225736404e43cc9976737423f7c84cdabeb55baa44c70beb20591-1 c=1 sleep 0.4; printf A","run-after-0b75ffa3a546982a6ddaa206c19ccc7d86099db00d0568845013201461c2b675-1 c=1 printf b >> effects","run-after-e24f35e9494ab0df6487bb87098fb48f0d7b6c38723606b155ea9e21da75966c-1 c=1 printf X >> effects","run-after-0005c4ab09bcede7db767285d2dc25c6249b1d5dcf0760895e7ee13afd6a18ac-1 c=2 test -f release || { touch stalled; sleep 120; }; printf Z >> effects"],"letterDup":false,"replay":false,"ok":false,"ms":1713} +SUMMARY PL9dep m2>m2 ok=2/12 replay=1 fresh=0 mode=parallel codes=1,0 effects=bXZ|bXcZ|bXcaZ|bXcaXZ diff --git a/evidence/native-parallel-review9/mutation-stage.log b/evidence/native-parallel-review9/mutation-stage.log new file mode 100644 index 000000000..f4b8be3ba --- /dev/null +++ b/evidence/native-parallel-review9/mutation-stage.log @@ -0,0 +1,2 @@ +Created fx (old F1 parser), m1 (no F1 resume guard), +m3 (F2 backstop only), and m2 (no Array gate or F2 backstop). diff --git a/evidence/native-parallel-review9/mutation-stage.py b/evidence/native-parallel-review9/mutation-stage.py new file mode 100644 index 000000000..ca07e4331 --- /dev/null +++ b/evidence/native-parallel-review9/mutation-stage.py @@ -0,0 +1,70 @@ +"""Create scratch dist variants for review-8 F1/F2 revert proofs inside /w.""" + +from pathlib import Path +import shutil + +root = Path('/w') +head = root / 'sdk-head' + + +def side(name: str) -> Path: + sdk = root / name / 'packages/sdk' + shutil.rmtree(sdk, ignore_errors=True) + sdk.mkdir(parents=True) + shutil.copytree(head / 'dist', sdk / 'dist') + shutil.copy2(head / 'package.json', sdk / 'package.json') + (sdk / 'node_modules').symlink_to(root / 'node_modules') + return sdk / 'dist' + + +def replace(path: Path, before: str, after: str, count: int = 1) -> None: + source = path.read_text() + found = source.count(before) + assert found == count, (path, before, found, count) + path.write_text(source.replace(before, after)) + + +def without_array_gate(path: Path) -> None: + source = path.read_text() + guards = [ + "|| !sameDescriptor(Object.getOwnPropertyDescriptor(Array.prototype, Symbol.iterator), nativeArrayIteratorDescriptor)", + "|| Array.prototype[Symbol.iterator] !== nativeArrayIterator", + "|| !sameDescriptor(Object.getOwnPropertyDescriptor(nativeArrayIteratorPrototype, 'next'), nativeArrayIteratorNextDescriptor)", + "|| nativeArrayIteratorPrototype.next !== nativeArrayIteratorNext", + ] + for guard in guards: + assert source.count(guard) == 1, guard + source = source.replace(guard, '|| false') + path.write_text(source) + + +# F1a: restore the regex that falsely called benign --*-r* flags preloads. +dist = side('fx') +path = dist / 'authored-flow-lifecycle.js' +source = path.read_text() +start = source.index('function authoredProcessHasPreload() {') +end = source.index('/** NODE_OPTIONS is a command-line string', start) +source = source[:start] + '''function authoredProcessHasPreload() { + const preload = /--(?:import|require|loader|experimental-loader)(?:=|\\s|$)|-r(?:=|\\s|\\S)/u; + return process.execArgv.some(arg => preload.test(arg)) + || preload.test(process.env['NODE_OPTIONS'] ?? ''); +} +''' + source[end:] +path.write_text(source) + +# F1b: remove only the pre-dispatch pinned-root check. +dist = side('m1') +replace(dist / 'authored-root.js', ' assertParallelResumeRuntime(metadata, rootRunId);', ' void 0;', 2) + +# F2a: keep the settlement backstop, but disable the Array iterator admission gate. +dist = side('m3') +without_array_gate(dist / 'authored-flow-lifecycle.js') + +# F2b: remove that backstop too. The iterator attack can now replay effects. +dist = side('m2') +path = dist / 'authored-flow-lifecycle.js' +without_array_gate(path) +replace(path, 'return this.hasInvalidAllSettlement()', 'return false') + +print('Created fx (old F1 parser), m1 (no F1 resume guard),') +print('m3 (F2 backstop only), and m2 (no Array gate or F2 backstop).') diff --git a/evidence/native-parallel-review9/probe8.log b/evidence/native-parallel-review9/probe8.log new file mode 100644 index 000000000..23cb6905f --- /dev/null +++ b/evidence/native-parallel-review9/probe8.log @@ -0,0 +1,27 @@ +baseline_native: certified=true grammar=true wrappedCalls=2 +esc_branch_name: certified=false grammar=false wrappedCalls= +esc_value_name: certified=false grammar=false wrappedCalls= +esc_call_only: certified=false grammar=false wrappedCalls= +param_name: certified=false grammar=false wrappedCalls= +destructure_name: certified=false grammar=false wrappedCalls= +shorthand_name: certified=false grammar=false wrappedCalls= +property_name: certified=false grammar=false wrappedCalls= +string_name: certified=true grammar=true wrappedCalls=2 +template_name: certified=true grammar=true wrappedCalls=2 +template_value: certified=true grammar=true wrappedCalls=2 +double_paren: certified=true grammar=true wrappedCalls=2 +paren_callee: certified=false grammar=false wrappedCalls= +paren_optional: certified=true grammar=true wrappedCalls=2 +comma_member: certified=false grammar=false wrappedCalls= +void_member: certified=false grammar=false wrappedCalls= +await_member: certified=false grammar=false wrappedCalls= +not_member: certified=false grammar=false wrappedCalls= +expr_noawait_branch: certified=false grammar=false wrappedCalls= +return_thenable: certified=false grammar=false wrappedCalls= +await_thenable: certified=false grammar=false wrappedCalls= +wrapped_step_member: certified=false grammar=false wrappedCalls= +run_member_paren: certified=true grammar=true wrappedCalls=0 +nested_branch_call: certified=false grammar=false wrappedCalls= +iife_async_check: certified=false grammar=false wrappedCalls= +done_detail: certified=true grammar=true wrappedCalls=2 +elem_proto: certified=true grammar=true wrappedCalls=2 diff --git a/evidence/native-parallel-review9/probe8.mjs b/evidence/native-parallel-review9/probe8.mjs new file mode 100644 index 000000000..e67549877 --- /dev/null +++ b/evidence/native-parallel-review9/probe8.mjs @@ -0,0 +1,120 @@ +// Review-8 probe (copy of review-7 probe.mjs with new cases). Probe head's certifier on candidate entry modules (no daemon). +import fs from 'node:fs'; +import path from 'node:path'; +import { pathToFileURL } from 'node:url'; +const sdk = '/w/head/packages/sdk/dist'; +const { parallelRunEligible, parallelBodySyntaxEligible } = await import(`${sdk}/authored-parallel-eligibility.js`); +const { instrumentParallelBody } = await import(`${sdk}/authored-parallel-body.js`); +const SURF = `import { flow } from '@relayflows/surface';`; +const body = (b) => `${SURF}\nexport default flow('p', async f => {\n${b}\n});\n`; +const cases = { + baseline_native: body(` const a = async () => { await f.run('A'); await f.run('a'); }; + const b = async () => { await f.run('B'); await f.run('b'); }; + await Promise.all([a(), b()]); + await f.run('X');`), + esc_branch_name: body(` const \\u005f_certifyParallelBranch = async () => { await f.run('P'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([\\u005f_certifyParallelBranch(), b()]); + await f.run('X');`), + esc_value_name: body(` const \\u005f\\u005fcertifyParallelBranch = await f.run('V'); + const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]); + await f.run('X');`), + esc_call_only: body(` const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]); + await f.run('X' + \\u005f_certifyParallelBranch);`), + param_name: `${SURF}\nexport default flow('p', async __certifyParallelBranch => {\n const a = async () => { await __certifyParallelBranch.run('A'); };\n const b = async () => { await __certifyParallelBranch.run('B'); };\n await Promise.all([a(), b()]);\n});\n`, + destructure_name: body(` const { __certifyParallelBranch } = await f.run('V'); + const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]);`), + shorthand_name: body(` const a = async () => { await f.run('A', { __certifyParallelBranch }); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]);`), + property_name: body(` const v = await f.run('V'); + const a = async () => { await f.run('A' + v.__certifyParallelBranch); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]);`), + string_name: body(` const a = async () => { await f.run('__certifyParallelBranch'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]);`), + template_name: body(` const a = async () => { await f.run(\`printf __certifyParallelBranch\`); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]);`), + template_value: body(` const v = await f.run('V'); + const a = async () => { await f.run(\`printf \${v} \${v.length}\`); }; + const b = async () => { await f.run(\`B\`); }; + await Promise.all([a(), b()]);`), + double_paren: body(` const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([((a())), (((b())))]); + await f.run('X');`), + paren_callee: body(` const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([(a)(), b()]);`), + paren_optional: body(` const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([(a?.()), (b())]); + await f.run('X');`), + comma_member: body(` const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([(0, a()), b()]);`), + void_member: body(` const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([void a(), b()]);`), + await_member: body(` const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([await a(), b()]);`), + not_member: body(` const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([!a(), b()]);`), + expr_noawait_branch: body(` const a = async () => f.run('A'); + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]); + await f.run('X');`), + return_thenable: body(` const a = async () => { await f.run('A'); return { then(r) { r(1); } }; }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]);`), + await_thenable: body(` const a = async () => { await f.run('A'); await { then(r) { r(1); } }; await f.run('a'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]);`), + wrapped_step_member: body(` const b = async () => { await f.run('B'); }; + await Promise.all([{ x: f.run('A') }, b()]);`), + run_member_paren: body(` await Promise.all([(f.run('A')), ((f.run('B')))]); + await f.run('X');`), + nested_branch_call: body(` const a = async () => { await f.run('A'); }; + const b = async () => { await Promise.all([a(), f.run('B')]); }; + await Promise.all([a(), b()]);`), + iife_async_check: body(` await Promise.all([(() => f.run('A'))(), (async () => { await f.run('B'); })()]);`), + done_detail: body(` const a = async () => { await f.run('A'); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]); + f.done('success', { detail: 'x' });`), + elem_proto: body(` const v = await f.run('V'); + const a = async () => { await f.run('A' + v['constructor']); }; + const b = async () => { await f.run('B'); }; + await Promise.all([a(), b()]);`), +}; +const dir = '/w/probe8'; +fs.rmSync(dir, { recursive: true, force: true }); +fs.mkdirSync(dir, { recursive: true }); +fs.writeFileSync(path.join(dir, 'package.json'), '{"type":"module"}'); +fs.symlinkSync('/w/head/packages/sdk/node_modules', path.join(dir, 'node_modules')); +const { getFlowDefinition } = await import('/w/head/packages/sdk/node_modules/@relayflows/surface/dist/runtime.js'); +for (const [name, src] of Object.entries(cases)) { + const file = path.join(dir, `${name}.flow.ts`); + fs.writeFileSync(file, src); + let line; + try { + const mod = await import(pathToFileURL(file).href); + const def = getFlowDefinition(mod.default); + const full = parallelRunEligible(def.body, src); + const grammar = parallelBodySyntaxEligible(def.body); + let instr = ''; + if (grammar) { try { instr = String(instrumentParallelBody(def.body, () => {})).match(/__certifyParallelBranch\([^)]*\)/g)?.length ?? 0; } catch (e) { instr = 'throw:' + e.message; } } + line = `${name}: certified=${full} grammar=${grammar} wrappedCalls=${instr}`; + } catch (e) { line = `${name}: LOAD ERROR ${String(e.message).slice(0, 120)}`; } + console.log(line); +} diff --git a/evidence/native-parallel-review9/raw-logs.tar.gz b/evidence/native-parallel-review9/raw-logs.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7afdda394e3166f519e5a84ef3ef14d8c541f373 GIT binary patch literal 38759 zcmY(qRajh2(>08{yF0;Mhv06(EfCz@-Q6Vwhv4o`a2ecPf!i;=J45b$!%>wL|1cyZqaOR&u4# zen4R6q7rFWG9~mktQ|@OvN8{zpokj6#B*5}iy685z}_!%ttA}m6k_r;CCeJ|Qr3tN z*=OF%3su^6@7H&UbssB|Z}#PyMQk6p^oBe46ZdQoQT}fMcdiH+gMk7s>v_35XA4U$ z9o%gn3lp#6$LA|&Aj3ODigW~dW`-BcS76@83i6Z94BO%hdF^B3Uy&~VYTs(nDTMZ? zbS|G*cefWJmGRM|zr8!;)F|(6aJg6?y|V`N}(TBY23T30t?_y+U-TFE04@NinD)!jQE7@!$w#m)VxH>WqS zPFuRe-re87<#}x|(B0Mv?3Xm1&~r~|9e@7SJw3TwAFb$WZ=@Al6W-VENhdOoi7K%q1UOCfxf2e%`s z7gOY!57*b-Jk5d;6Oo=|*;ge%4Cw7RqH6lfQTER`!ZW;G>)MPR>cQ-cQD*daFO52fiPj_s-Oc_*HKI%na7?9_iiCN29u8vkd%j89D$m1&~#e zk4|B~-i`~ldHdI}0hP&nyUHda9j}3Go~(DL+8{Ja>c_ty^*=3v*jMMUCS74azLO-t z#d7OYWLwtpo!{6=H>k;~(tZb>o8H;Aw^$Z|&8Ye&C}@CGdkndSVQYfE-NuoYp?Ewj zOCh`+&bj`@xl;`5%T3pFz8=C42Y%usMuc%D0*2GBv6ky7p9S@rQHwLM`nlb5{i}1P zhFWvKBy2a~`>{_Qa+Wj|#C;lbBhV9EH(A|XYpKSmKvW5{K3W?YUn8+QTf2P}>dbK# zj)t?M_?nbxq~#QAsRu^PhN{Jclx;`@%m}N^r0w(&wg2V>xcC-)o`HM#_V|8P=j^_} zTMrx((YM>(ChvXRajcs%H0bV0;d|;~diS}jHK@ydi_HEAUb*}19&o)sE*03-b63!E zoPju&3@H$v^ig%z*^ArnT7P5R6R@k-$tq~P z5>DKCNf4BRdMrr)l^bN$K=Ae3ipeVNa0yMdF@#ZA&e^@Q{-?p^+E}Gk_qpNP&%`&d z2@9Eq&p`eJBW9LbTaI%l{ZZV(R4ZfXpJ(@G`W-E2d)OZOT@`0|emPN!lAIFORHgk` zdv~?ATwv411QU*Eobv!+>VB`1X&s+aT)5AIDB@K{mH!!JRs}JLGjQR=yED0_FGqd zXJz*MH*G_&$kCs;6aCyIg9;inE?CS5^wG=?mK^80MQ~WueN{33+GX=H(?7j^r+!YY zJd-`|`EEUjtwpr+-0-*abSNxm*quFH9Sa3Q27mi=!W}d2hj1f_hIb~kZLzxhl$s<9 z4dotcd-Ozi`V`_Y^>q9wv`vgjUW!O%z#6hE`Ke$C1l|KvFh-NKQv?xY&QV_Zk-}ix zouA)ruA!0;iCl<8otZ1gfVxA)Wj&#XSC38RvI@7FdYOmPA_z0gNpFU3+M zdk_Tdz{KiHyY2`HGbwSd(xJtzC88~;hONQG(~$Tr*!9J}6IDYayG=}Wok|j50fX_y zNnc@%a3qIf!$l(2y@*j?RhL0Zb}HCA7$Ws**FNQfS01~>sEVR5##OeNP;mYx26E6Q zhJ6TQxg|-S7xfcXRckQMh=%+Uk*&9Dw#*K3gMmjillpi)cqCO0#!qX%Z9FRMf z+0T^YeEvQ)OSKJyau_*cD|V)5!wJE5*}m*@GJjU!z4SN zb6pmhdf3AS`=Dh9;e*HF>#2w*;;WWwJJTLYx;{QvIfTrFg91&hL9mE-NU4Oiau3ZotgHoa zPA&Y`tB#F;sxyK(jj)j?!4Jn*>{S;OcUT4*v_rH* z8FW|3zGZe9@P7dq*O+v3VO>Se5NBci-q0zVRaj8#?%_V4T9n2=+Yxlvu(k+*uulfp zr>A6AV?fk`nqtJ9oxd+cm2sODU1f3@uP7kna|XH4B<+T9){p(jr(gM)KRKf3*9cUQ zK5am`#u{rg*7JPtg42`$c(Qx4i+E&Yd-nQsmx0%3rEZTKHNpCFV1lqqud`h?ZnN5g zuhB*{nx$Fzy$ltkkNu8zNC)Zq*y6&FHE^~)ZQK1}*Qpi@ZKO}(__a88lAKFG0q%z# zzh0tywz2kSsd)aNVSUVZ1F{4W&gH3{OF(H+LPkO^%=sxG=xxFtuXUZBG92><0;XKN z_+pO6;W$eLe~5~)t2GjiroCR9MMwq5V#g2$6xDi1aH9{i(ylGwAPpeU_#Adyh~ov7 zk_=-eK%#Q&%Kc@pLS&L9#f0PBhP670Dk7Po@>fwx8SojKBfTi4CuQI(o4nYFG6UzZ z)i2qbg1k5{otP4P<;bb}P&M6%lv=r1SUcq$wGMh{fz&;Eb9MRevfvf`z$+X%vxjo% z#8_pFWll1;D}uL0$V2^&D3Ev7iE*d`M}{GfK`O)`MLZ!-t;-1S(F8D4Mq3K#!!}+! zao{@7$0-cPQKOu!D8eaIBPsD)^O|$qlSs@{dxdzW(yjk~WvrM^^RvcL$%^M(e#V6B zx&lF+2RZ?4$}iu(uGfEA^O&#T|AufTv_$zxlLxPk7}`KERm3?O6YaQ*9cv7qcSY1X z*eAMMDom57G1C;X&jI*@87-kX6AEaxuWEvI?<*=xph$L8^y4*`;=T7rvHQ$x7oqQ; zj7X<~J(}sXxLdw&t_FWBMtXc)K}`}TV}>~cuY)$`ltt_E)zok~`Hh!_LYDfZ9H=^i zT#SZjj($oZqfClP_k^N26oiT=h6#H5rK3#B3!I)`)}+RyM6@a|LX#n7OBBEmeW=vA zt~;74GL!db`#kttfn*pMGG3A4yPqMK$P#h(1hiO9Wx|C+K$3?ha_h5aubT50gnPn6 zaRTj2kU_s>Uhv}Xk&JcpANrJ6FtH$t6C@F7R@vB3)3f)QK=A1hC~DzA#q(De_q$86 zZ@SeK^K8)d+d$)R_#wFKVyZ>yB()Wn2c z9~qP{!$x7^n3Tk<967}K!vp}#EorKos&4|3rr9&m?~3w6?!pWr<6s~(20%gO1_cqY zC+-v6WT1A@02P#&fBM)*=)W2Zd&d(%HCE;XIYI5Y!G?vs=|KF1Kt{m~GEYXMCr^-W z&nPWu%Z0UzAY~46(<{od(TKfY{Az@3>jpIhAcfC zt^A$j|7MtbR@Hmj+pV5giy}C!^$73<9ZuCO)bs#e%7(iZCJblTrnQehj+#UYkIHz` zRV|nU-n`!MABl4H4J%`-63JQXn)JB1jGi5j4n0MByj`yy548_Z0tEC5UQW+FMyD_7 zO_)O|h*B1w%w+w~6N}6P?t$oFQH_Tw@;X~?dne%<;C-K17wBsr;C1(`)_Mfzul;(r zncri8x{1#B0bQqk|6z40&@ptZY?=MBR`c_%KcMS*227u**Zb}PmoMOTz>s*eAfRlT zE#O;xf8t6TPIKC~5ff2U0=#18k)k0gGvwGoT~HA5#c>UBJ_R>M(ZjOu-|OSk{$7Q` zVgGlZnNjIt-yCuOlBq{B*^h(ak?Eb^6*ymKnuSDBATFRy9+O1{O?PvU6DRk|M+u4W zLiI&aUV;f~A+OueTalx7hbg9?WTy{8P&4>I1Zdb3aH%}#zrKrCDmu|s(IjZcob)?((Ple8RO37l56TVcWws-3c+guF=w-4aZY0AdXsEBv z#&*NlMlwpz#@wf%9dO2p`)w_fq%O(h&c)k>QnuM{H%SH`X@k8EQR~B86Z|Fl9~AH| zp-eW=2fa|Edj0G5MdSG3oLMbE{Pb1`^J^(XgRSniV5H)t{Ctg|Wl4|YPfNtX8F!Ez z-f|SI>@jNJXZE>S4-ZV(b`>@yF$Z=kOP!P&#l@{1kdne-$=rUQgqKkFgLyQMw)CH5GaRWzxYA zrOpuo9WpGNEO)|k6krXA^aWGW_#&H06~ew5vK;J%jj`{W$??4I4MK<%@3PmpQ~KC= zSIg@akqlv;8aY^nKPb*A4d}rEMjvonWE-!jvX{>Xalv2=Z_6bWjMN4PvQK|58?P_f z5RxJ79(7sez@6;>3E4on^BLNv6Skeps5P?K6K=o*Ho&saex~mdrT7AG53~-`sxUf( zH!Gl#7YR;p_7r|PWo#-nzd}%P!mNTTFc%1nV$7v%HM7@Zhoi6|8*Fr8h+?#?0W5k@ zR@B6I>~9atY3~bRytoAj2(=kjL=i2j(mK2Hizyj_wyN4yLz4Lw4p~UhtQz{*@h6P% zUxm89xbEP&D7*1v_7z*8u3)KzO&({q1qVY!kZ_yV9HQFEg=T6Uj_W|v@>sAqFeD+! zvwpB!{k3b`oku~jr!bS{jNvb7Nvlsg+>{kJ4*eamgr#Zvlq9#Iaf#(sOn z``aU1OXHV4!;kz3Q9^u)sOl_c7dZMQ9@s%YohbQzDxykV)1WwV1dD)L%KhhE`+(K} zUW+&zIc}@4q+JASs9)ELN+!DUsMgwYZ<+z{=RR6Ey;= zFT!=6*FIEFgJUf#(kyw&em#o`xjKs1u=+re5ftcpv2?vour%!c2e|%fGK9Jp6Z%__ z0t2@w#--1A69F;5U0+{JykY*AW_2>0Vtlg7a>z0QawVlb*;Z-m<}knJx`sO{J@=0^ zt+sh^B9p6-gs?H%km&o(4h`F!wy}XMs-gZVPHJe5oaA}qc`ZX(A6Us-58WqN-4D<8 z3Wbt_A<@FUH76U42(jTOF#Op|Pg9n$9J9QB7~K)HZM4yQ+$7^xF4*o#0PP=b3k+$Nd7Lgf{zR%* z_jj+HRf0XfT|YVFqpN5gbat0LRe#28Hx|tq_K5%+e#!A+#M|<1xuQp4Xz7xvzLV}) z05*5QF%m~hnFjl3y}*{;9(a34wAeobT%RwrdY$KFdhM6WO1!HoJw?t!mwL@<3Szw( zB!XQ(9ol`@^AQC%MsBmCMF%9g=bVPoDz?euK-14P>Q8PqWpuNSo$0GTvjTh#qB*ob zJi0iqy-)bGKMrr#xfUHYc7&hpt9r;BHJd6Y1irnqj1ek!S!KaGXUL()vs{>gRoQcV z0UUI^259pKJbB>9z?<{d*Isv|Y$fNGPVi|&b)NCH1@0ydoJKE}R|S6Fvn!nFZGX*P za1^@BrkwD7zBqh;*$(p2*4ZW#?VN&(B{(b!n+idUNwW%K_QeO|*T~q|_z`i(75wF~ zlsLD(XKggTxa!};c=p29WiMo$s>=b@j?`UPzsp|`PPsa3YFFIc&C ztn0DKYm~Za@OW`w!ntb@%q&)EEO>a+*~uv?GsV7AXQ+PS86KT{DZxx&0t^TBX)2ty za!`DP-aoyW)4awh&`-fc6qgP^AYdn*z!9*S)rf0|p&@dUg?SfQ>uYv}6PUVkX)U4j zTS(Aa3jUtWGtSi|?6!g_f-0V$j6+>)U1NFSB+hJgVTUd za>*O{_4@XT*vfHUd*?Cp{h~*?MV&=hgyBej!zU{5sDvPI1y8+5u(vxVh!bUa}KW+2eV_+*t&#m`??rwU|>k| z#^q-vPi>RV2O&UTa^->xUHL(7rRcdeO_3g}zf$sbwB$0joOId2vn^oK$GY9#vz#dP z`jTCD+Nz132xLbz`F6k#wUAj-);v{T)y;-k$jQ!;kdIz{a0%y4uIun{+5J<%=Hb5Q zr@Y;Rly2EUg5Ct+`;vs2(07P{6U3&Ymiv?DjX7HYgO4>}-nI=W*8Hs%XWxkE(1;Vg z%!nJEMNiW{f>c+D0(+O=DkEAya?!;Q{z>k}rL)cYbA*H2Nb$i2FI-!EzrCrGHy}OT zRkzk~e>>M3&~Y#v=_!&;X@g#HfTzZ4r8OM9)05(qB2oX(7o9gQ!_iLAjEVrj)pBH~ zSU_^uw=%4=6uC}E|JCljTJ=WZ-mVSM@8=yKe-g*EInuG6=9~o=<+1|=I>Q!{g}@iD z_79=z9(eP4SE9?R z+MAvss75RN4?XqlE#zuS>=wA%L0MBd)LnvBcno>T{AiFy%_@=Ypf0q8rlulKe0dbN z*bi=8NB$yWsP<&Fie=d=Jke<<*a9PIy^Ldr(akVrphi?kE2mg;>xQ7R6l0t%wRt@! zx2Djt!|gkN1XQpve*|67K5bT9a)Infz#f}aS`mj~qG`4jfya)H))$GX90;Q?N~9xt6b{HFj{Rt8Bb~cC zP+RaLkB`pG{rR%S18;%`@{-78SY3D{TEN<=!P&`5MosnLpS2#>kA3`?d?KI9g7%-R zzGHI(hoFiP`YEaLNWgtpCq;+~Tsx_S#nVOSSAMbO-Ny>2IEWE{Cq-q55hs$_>Z^1h z<(GZh%=p3QFEC(a)B*xIL`KjU)_us{^}eiA2p+)lUGB%Ax&ZliZtoO=X%uo(_p ze|biNeu{mtgdwkRzQ9AQDDtq%Eq+*&8w4L1J_N>fgz=xXU+w4odh)6yb)!^Da$3`{g*owOglR96u_|zf zO^I?Li#K^O*(P1vxq45>{Nl9YSAgf!ZX3&wmNxv(eVoTkfgR|!59pDuj@{IywuT4C z53+E}kE8vA$TRf2$cMnC^mKC8kNtBdx0zG)ye&RUeDc~E;oj}0GtcKqKgQux5s}P> z*Ar$He5OzZke5ZZu-{_(%F*-bxrFciN#WeZQ@F$QyY<~VD7MY=<1z5#IuAS(DQ#Xi zeu6IZ?^sQmoz$$o4Lq3uooze5H)?p@Ii zG!%LoVcU3Iw{`8WT1lTL$o8Bu41E7%SSP$q?(hz8u=02DX(+Mk==u6NZF`xMPydm7 z1Y2uR0xqnV#GcoCu!^ggfEs0E+tAWen_m4xc{ISYY zwJIW?6fN;&Oaq@@lNHyBhT9uujXb8AbL_9Q}g;+yas~b+r*egaW)2$*$ z%9zK)crskBI3kgS+8@P&?U)t1>r&JTfmEk!KqyE-3AU6v=uRc|HWv1LL%?lDm~-U1iuj5l6lH;YwBsX*Ky(dsmm(mHH8cw4rT6k>-3xje{H`Q z5o_K166+z&NT6SaA{-@~ZY-*B!%+4STAd;dz;SofYNG<#p-`o(=aW^W^&};!*@uJV z^hFFn>~O&dnT1>ORt3gbJlRIIWCh`wio` zmm2>e2hq;+&kbc^Uy`q&LJ^`;KQp>~8l(bFJ%NY4Ge;iUP84JD6J=2lqp~IAmB#I> z&XS4H1uX=nM3ckS$WdcMiMIcF5~g}nedwAvSPl|0>D!-EHiu5^2}6I>?smFQoM&?sby-` zLiIiqu>o^lLP>Q2S+V5(3iI|2aLdaX(CeS%CQxIyPnOq9IBdB388lA?B+n zuz{ojWpZyIL<;Os+|T_a>KZjleeODLIvdb9HtA1GviC`c<3)jRYD>#|s1sgS2aI1&e zL`p>t2^pzkJmbb5KmY9U;>}z%CK*;eo*MQ}dS+JYa(Wxv(gG@RyF{BIJHwVs6iMup z%|^kVg$}EamY^-TWrXvSIx!#hr!+R0Pg`-FOH$9K$d?nBk`R#+J$zS?>Ov<{rpy)? z0C{KPe2iy*w-)K&R&yF8E+@u{ITD!3P*rD})OcwSVBkTE-XXxRUx)Fh%Ti)GBO?u7c>; zb! z0dt5@O&)A6)+OosE602w5?jDnVWL$X952Dwx<-@4u)#)PYms18Ssx4n=YQ68!7OP- zPMI)3W6sz?wVPl|N_Oy2M*U6`h$>!?|K$MT{0Wzsl;zF0hUXZS3Iy8cMn2x?Q^sJQ3d=}BWEiI2|}=AHn?<8!mjxKR_7 zoLaF9N2DrXfVqv-0ouCtfg+Z7J@f7r0*l7|4%P%{i~Nb=ZSA2_h{*$IY{I5*i> zu}%oiVXGyR4N#;>LIH4RV@3z`iigmwL54B3q>v~qC>G$M&X_d)Vqxv6E>A+gL7!T2 zia$Y|0Gunza$^5D6{7qfpfks~ORmq_qS~|#*SXEIy7rd|9X;*ErTyNhmQmk>>f6(z z+L^nhCTs3CMS60xcavx}M|q0?4$QMTuseTuQxPXr!4`%Puxx!cXZs9vT63u}r8G>d3bTJm`YLTqHSM|_?;%cz?x5Trz%h9no* zt7$`51*6ItI6jsOYppgR{y$Aj2Fe^w-+&IbypxNC=#JqpHQ=HZMkCCMmVXF02z4Pv zuG)LkrVpVcs|7aa$HS=f`&;kxk#bofE4m$h1R;e6~~)8)$|DpA5Va6mY&;%OAmRh z!XJCv)Q+!rv>pC$2AQ_oelMrle}v4s9BuYso@0Gr%plSBzj7)Sdi~0f8(@xes{DHU9bKkJcC)pI+if}5kK2p8JTGiN;n1Etlc!eRftY~{u%l~ z6Ol)Yb#TpM%hMjNuzBt_-RZ3Mu()scIez6y;q~;DOPF9{Le|loDoD^puord)`B!)D z$jCJ4EBELsw`CE|Of02*=>(dMTY~AN@wo)f z!pfztdo%lUeykQJ&lacPYL+y9*gP(g56<)UD~{C0^G(}h$6YLZiA?Y2uhCvVW6kqZ zdbE}y=mD}vp>WhBtV!taQ`VeBG$twDl!n{EgEp(0i!dU$I!l4J58{TA0NXyKB5sAPGpcB!@H=y7EQJ_6b3tMGnO9Hu;mjV69{_;b4<( zj32-tQRBT*j>m@5ySV#cb;U%}6S8O|1lD#Gw-5jaWw+x zxLB-sr*N@w%CH$ypl45m9NBNUwV=%LDN6<>>aZq9#7ZsM#!saZjNE(p{4cs$Oie36Uy)BYAemtjwXGJ9W zRX8EpOjlZ>i>#j)hz7&NMH->P+fp55i+{B9E3t@{{S%$7Wz2bTMu~HL!sFLP>74J;5g*9^gX%Fi*YC{c zRQwAcj2W8!$sBXxU=e=7ZY+jB!bOM#JXt3EHl<5}X-DH)GYrO5+f)7Y?K^ zAoP)G$}uka#UqE`++0t>ht*}P4)-^TlF?ju8-~1u>Do(3fBdtAYKG|3<;vfm4j;fr=)u@Ajh-CdKq>?(er>4Iv`qu6BwEW_@+ z%T4T5y)6-q9t-NY7wR|KW^98O41?sPi}00(yqs=?CP6qUPE2P3@(@XskUM^`kizx0 zrXeb*Jbme|&HWf#>lGHX@HUjm8+a35;Xr2dS{y(oYq<(h^0KGynpAZ5trWQjHYvn$ z%*@ls(w$i0;m^0p{;OA(xQ4US7+{#9H%WXAN2L>!1!GkBP_~vmn~I40j!_Hhn}ym9(=#2yhNqo^8LW_b1YsP?W_~msRi8e{ zxBqdL{QNYKO6S^q`aB{cT}cO~GpPE8r;!K&L@$4TJ++w-h+dD~{4Vr5d3GgC=MQ{~ zxY6Do+UkAt#mRlkOH3!P6A7y*i={TqZRmg+XLu)bn?IV{xe;>eZmEL zBC7g$H4{$Fn}j!t*o>Pi@osW7*z}3NP6JhC_o{!COmA16c0U2p4;`nJr^tKTA4wb? zA|KHqM+ofj?Eil~FP?{IH*eyq06=f&2C&T&)M??OAr|Gi(k-XHX%PP#3q)AtVbPeyS!20ZDW0mR-;X;df` zS)^qC6GHv98`V*0d_r^4tc504Cp`9C z=jZB7?$8`*EI!NOLB6bcXiMgRL#;rqE}ApqT*+tQZ$OI+z&H-vLI zFP`?b#(Q=?TROHYZZefE>5s$t_b?uyFl2b8HsqPa*cd(m*{{lfjQ_`k#b1HCsGEAt%3H*qB z4Wx@sPqhSM<<>|)8)|=iez}@3T($M^c(DqEwB$qJ`l#J{G<0Y~{aLf)ZXVzPU*4qsJUeCOn604pK?srtjV)}U93q-!*2DICpZ+FtXU39Ja%Wm^l`jiDa z1Xj#!v!#6$WwoUSJh*PY-#nFgYcBORx3O*W9;P~+t#9)>PHn$ei+o(@EmgnYU$#Bu z-F^~jexY-Jv9o{j^$&PpPvuS2eSd!{sh!-Mnb>wT%+mfV-1~ZC=hMvd|c5z+==%%ls<}lizeR=^m@^G&O47j(XziOAnNECWYHkQ-2?c!0 z*YuPWWY2b#6{wkKsGVB&DaksRpN!6uPLkU3%{Uu)IOiNjX(GiwVY(6y#tQ048;CO> z;eSQ#w23HoK;^_tMs*!^8{LrEUnk?h{u`m_2VpjDoWxc{qc~xXw&$fYd*EaC8|8D- z8pfQ7K4L=nS={kI;4KkYPYJW+%_PJ=$Rq$9z>rGW!U-!p^o0JJWwe>VV@MH}G0yu- zWrzDeba>9W`_bY~N^CMJi%)J@>CRYR{Mj?u$=TGAIawlpMpkO17Lb&DcY#j;m|Y${ zir9%+nCD&ybN)5>o0DAvBO=5JP0=_+lg*iC<|6%sqLXCJb$-gGi0fc$fE;s$NvW=> z{k->^5`^;|v6^EcVRF-@Ddh&50vlB-49O924?mVN#8Gb+1RgS97y*tjCQ64O1k41? zE}=6YW`L_0nVkm~geLH!pNgcobKrmFj0fY#o(v{KHWGTYlv#6Y*Fd1+rAm}a9FiqP z=dTj|GiMMKos6TH43*=gKqNmbvKG!!T&7;ISZ)9N1A8DF4(j}W{&(r%;q;uCQu9MF z+jB}%!jodZO_TcGPsqUh&q)_rTzjGOx=yoDk&2O%LKN5w7e|?HBPbX`5S(vg^ckgo z((u=u3eZ+3$L2ieYEAaka#Q)4R;_56Xqmo%fOkmF_>-q0Y@8WR@1VW4V39kQKZ%bB zvTX6@dsE9mFdIz=6i5jDCj@@O?38533lF5)^lF;)!nzn$U=F@&U0e}Qp!RfeDGUhD+@m7W=4 ztf7q@-T0(1gKx^ZOLDjn!VEzD&)U5dt@H~mQ(uYI#z0Ky(dAVbR#U)L*yjNdgzF49 zilF>LzftZ`(!8B;lLifV9LCv};!+K${VtA{ihPoQ;PvIiDGX zNwi~*gO*9_11_-!Ya+g^Qw${~|FiaG2t0b*X*Vrl0YC`Sfvh2m3YpE3)X6cEQqOk( zh4G1$O(juKNy_j3g??9Zb41zu(4&Nd)?0`gj8b88i4Fvl2HCI?I6!?L_&}Fdt1K{h zQ?zgx;lca#PgyT~nFDQl7d-@0`Q2euEwznoRx3F@ot@^xZoZCutzmVTwrlSY2=p}; zE?wul3iU2uf@Hl&tZFixbT#;vXZZ2Hu=aG9`V_0Iefsv*_o@F?#W2^OJFu#5T1)6& zq}$)Klok9f)VI^NqeI^G4uHDjc9!<3uEBX>7RtA1|YHLX0XzeSD|H$_)D(-mfCk2|J&#O8900S@+&8v;Ou@>tGpaeTxGEp zK{bI8QWE>yikizX2OUCN7hbW0MhTO|fjp*~tC0bPDD5lIzK6C)XcMkxe?~~3*mL&k z!d`U9dY!SF-dHVz!FYi_972zDNN=SJ6Ge7S1A;qX9r=?KM(>XvWR8ITE#!+%V-9AnvZe77x|G~Tb_f$c37Mi5X#i= z)$+n+$$vuqRPqK0z&cc`yP!l+#_rM_x{*weS~P#cse+`$?U&^LdBZJW&c$+_;c~p{ zh6Ljug#n=Q14u^k(hhtbh4U5!dYQeGTf{EKu!iQ0av#Yt9{LL1CUR>~rurpYP{K;8$a`gXmEh#!IpJuLhi& zZ<&vBz78D?P1#I7 zjstNn^pU~+6UOX6@Eb9B2unnEvN-=ti~XRoAI%tkLj2(3vr&ryG3bv9pF?^g^wGO7 zv?Izislxgiq;4Wu@R2Eb^*zyNjt!d5&J%(QWk@9`y(x$wRF(gjFxUsq3SMlyUi@%d zN>@goHpc@~VN4%lC$y9hb(v7z1y^-Y_7RL|g!3&pweDHaN5c0boU8vlvxu+U>n#M) zPj&yPKqO-dWY$RE@Ak&vparZg-0i@VK;_wX555*(eRG*?3tX4Pppj&F>ni&+l|uqW=(DRLBeWZv`bZ41jZPDu)6*cL+|gs1vU~x)QiD zZEdAW(P)W~HGx-xpB4&Ihcbdc+Fx2Gqi{(!CY-UZzg1_RP|dg+fcj^Q8KR-6(Oki_ zm!?L-|De_*qeAXA%sTBU_HGAUW3~{5XL04H_OZC`xb18x z*t48LPm|i(UN6+S!Z8mT=LC7lMPBnm#abIh=YU=RTX&$sh@c-y;vWz3MOAvtWVf=)d zT-k+v66l?wh^&Aa0v<6?!emr`AFQt23;;uSYam4XlHQsZi3m&Gk%>U?4xucF5lGLC zqL*%D!(l6+f`4H>~K$hT@WT# z|02H1M_Ek{R;;jgqoE8f=LLc;yjW&ugGGB{XCd!5-l(4_JXm)jBB$>&e@nj8tEq|D zH2?ccEe>;hgRu;F7{D8M*MFE0-f|9cMlUQ%i>b;Ti!`au&nBecoitSs5;XbJ9@2$p ze^Gx@-=5CGPz}%PIkCtYhZgjOpV(J@a(vAs&PA0oMX%nP<6It&(!d(hN>f6+;|OeB z=($Qq*sNEWRse0K8RH*ty;9(z@O@0bu(NBMAj^073`c2Uyn3UG92jfn zf#AG|vj%VqW%R0J#O8$6kp0yt6gll) zW&2hLi5CC!I4ovB&`=%ff=V-ruCXl1@V(_genh6+5_o>##@tOyxlObkyRoc*pMc+`xrDr-ANZMzMN4WT zjofl-XHH|zPQ|8ava>mf1-r4bMia$4WL;iPyZ7j-9p69JOBrl#=o=Io7ZTN5VFC9Ouz9q_$6JPV$yXrR}$`+!HX27T#erjf2YI#>_6L z*aC{DCV!Sk(&=$SfrXrId+4ZWsh@l&>da^lcZ(`=E;&Wgix8>31P$EFZ|M=|{{dw@ z$EcmY112KiwTz$ld3k*v`golIO)U@$S*?@?**hvdt%DN$A_^#n&EOhrp6%OR*mWhp zYsI)7JVIRFuz*RY_*o2zA0R$~5oY$EuX);_T6vaQB*&NN`28+R4)N}W=(be1$)NI5 z;zRu==|HlIbk5_+t0Br@(I9rKBU-9m#k6|&>hidOEbKcY;#u821YfQ^nnr>qHd&GQ zrj}+BWAX1?K7ao5qoaZn4iy_M4=wMdJk~O>T>00dQ^AAbw)WB~dRbxv^y2okUm!bE zs2JGhK_^ z>PdK7a|KG;FVItEnp_Y@LoI5!;w%nk!1C($G}-Ln;U(ZYbM@a+X(((})gea20=w^p zxC6K_sD+|@EI%~$tXZrTD)RFy-BG=!Xf2WoKjZWB9?&`|AGDbAnYjg#Msq2CLRLW= zAn{d@E=|_y5CBVf4;m_3YjwmmoAh?4aa)lQgxTD2qCKS66fW^GPsavE(;q9O_$Hiw|D zTTafX8)vJNg@40ct`XG#N7Y+~#o09Bg2UiGxVyW%ySoHU26qYW?(QMM9fA{_;O_1a zAh^3Hu#@-OJ=fX))zj7eRNWa_+kFSr~xHzRKIaiABbM9evY4u;RG8^+dQP|=etZ?Wd0T4>=@Xxco-H!{0;cl zsmwtTM$Z%x+KPf3%e{B{6@q|^4!OLNJSuiSH>yM1-0M2ef`a|i@itYwlcCSlnTElD zA+82uTtt$D6-<3W0L0<*^oqsJq~DBc|2%eDK9~9LK>sdc{^0^FlD?eaOBC(rWBDnf zLToxy4d!b+7~y!O!E+3v#h%|k7T{^X5S^rb(fathvL5vUfws>0yJNd3er z<|l|nv0z=xa8}T5AN!~EY)@&0bfTUc>s~<FoqV%R z3@y)h6)Lp*Xq`Dyt^W845Q!UBo_&K*q^}|UmNHf$W@Hcqv9$n8R0b=;=FFyrl0RxC zU6T%i9t`h?t@p4!4h$r@8@XRVWfX(pR_P!7#HCacq1GZLkivd?63q!|R483cK}FAd z*MvEe60)m3qc)b3%jWpxU1;Szg?a>B8p>TLq=7jq8oh2mJDxLP-VbIW3_FsoldS(1 z2q}tz6&hCruS3)l=NQZx3|?+~T|jE%DA>&dkavI|S@jFr%{sB{pVKaES^gt8s-{{0 zHs`s~I)YY*pz?zfUpb{MQWC#}oF%qL@))IKdzGIx=9_b zlIF8^*fP`pI%!#?1z@RFI;lXANSTA zDkr3$ZC)j32fXa{plwPuOaWhG07L(J)47-er#*BG`NTH$39fzhR zM_=q?3eG}54*W36VM;>)`jl259Ij#u#E%G`)7wpVVI0kcG_yi$l%%VNj--g+lEka^jsDpOYqsYtU929`#HQWAW`jxNXOv8J)S+ zr_PerW8KH)0Ex*7u%~WEwmsMpOb@1I1;80BdJtfeMXcj^)6q%#a2}hO!)98y`Ex#J z`Ovg1Hb*n*+>GvmNN5MjrC9^y#hy!X#I=)nXhF_W0uM_qqBm~^c*TrT7?PLIF9tOOVJeUS)}G-23= z)cQOyIbnc!hLHL~ho(AwM&avkZ>_Gh|6`*v!|&r_is|br^tq5P0Dgs5Xrwrw9nXev za2AYmu+Wh755nUk5p-2pCJ|=v#C*LV4Cq!HH5F%xw5~#jSwmKy3Hg%4TOaZ;m(G)C zbLI`O6L~R2VaDb+;d{)sNvi{7E1O{*AFeRr)+b4G7tf%^&Iv&G7ClnL+@hqV$bu@0 z!N?&a3s?m*GZ4d6dY8`o9Zn|+@ba7B3UW_oJ%#1}_D%!9 z48S}t2=VM3?88Qy=Q5%0{;xg$1SGQF!O-P#c?ZoK(3<{cgCBHbN2D9H7Ns<4Ce4I= z`FR77Bt9^R@L)>YjV`Za@~5NCVNiUG!1~99IW2>=uRYgc%4UI-(&V()nTHvIpCA^= zJErM#lR+aAJDu&P0kDw9YqoTCl9!;lm{R7XA zG3%($u+(v7O^&xMMQ(D(33KRP!Z4c#CA*vSImG!0Op(zrlYqHQ3y=uRp(&9va|{1wi@<4@l6c3$q>VVn#gnsiA=WaUO8_ED%H{WLDIVtwLN(}6F^(|=q<*deu=)x++U zFhOu%tN#PKG0EmH4PJ8Kn=<$VV5$bIJfZ~mI8r+?h7w{8XzL4EF_K$0_zaymD{7x&A_;=@)acEFu z^rddxQ%P){^hTC;WwOc>($onI4UiL$GY6Be_aQ7<8$gB z6#&0S&8%R=39mqjPk!0bgN1RfjTuwb5hQLk$`K#8Uq8e?aEa z%xZP|4>>UlAjo-4BJ>PpYW3|ax&!-zB_#$T+^w}~0c2tZd`|5YwC(%*!!NhC&qhjk zo86}j_&ASlA7suZ287MCzgth*RuoqUSKBNn2ov`xpEp>vm|N+}dWsD``{rGUj>6KQ zH?U+D(#K}N>PVM3u!N9DT^d5;;!6JYxo56xzr}`IAF_9tSUORy6uKuiT+Rt770HgK z>C#8zFq|V<6e3yLiTbQZ<}T>p_H{}nM8S7*YG>{xkZ5uh~Z%zUO==K#2r9LvSLrG7t_?W@pqFosMJ0WAVft_rB>@ z=shV~xllc6(cLfTjYZ!cfg@Fei+kB{jj}~%%%Dw|R7cUcb^6T4R1#>B@wUjHOgSC!a=^zE&`omOu(Kf66&W;?`g;)Z(hb*fqM$zf~H3eQCMG*mzPQ~!M+~h+-CT< zOUpnI@r^Isz}J&_`wwe*`5h=8ZsQ>@#%>3Ahgu@|c&=sadA?gDe+OPF@aB8IvS#md z!7#>kKV&y|86-vvc3ky68M3v03(&bFd5m?rW4AkYRr_?p>~!*MrN~#xhJ5EdedmsM ztsMCNdX|BvtCk#$?k0tNuQOTpVatg%p$6~Q>dlE*DIbff)u+xMHcvL6D?;}94%_j5 zSvCE+@o8@D`uQ`{E-s+mD1M;qM+ND?W&1o?&iJu?DcPGx$x!s@a9aVUK+Rl0_?H(d z6{=2B@M0I1*N?9mdLm)B=i}Pw5~NapcHi+UT%=m~v`Q4%uhW#syvEQK0G+w{4x@H_ zhDesxfLTo|0AI^|{z%odt{V9&!w3+pXMhK=bc1Sjhk7^yVy`u6b{bYT#dbo~jvz+l zm^nl7y7_YHe1l1y0_+6X12xsi-{ac>95_ zXP>b~@VQ2rnBzl&1eD{^gC(prrm|p80%CMDo@pLpB_NTU*pi7$4>mIrn09(7v8@an z*Q^sX!Pq0h*rQn@91==NkUS?HqFRq6H=GaPbMyTH$Q2+@W9P)b7Z9C1NMaL{uxK4>cP~MgbgHVBgP&# zY?HzsCtoLs2#0)tyBb)$ioN}JX9>c)1XM=Wy=MIfM`iPZT})Btr5O(T9@NcWRRGAv zA+c+wDg5@;ljeo7mCDzJGJtK>fTDCn2rjKHY1vP1jUpDssiSO%7=~)oPCD75xAIL6 zY;P_^+8iAgzoDR9838=JmQ@=k8X;6gia8*bCA1}EQU_y+LQ_zFX`nJ~yg`v96C9Wj z1}g}W-hw%ww6Lq8r?F>4YK>l;n}uD27o0+DTduucq*|+gi8EefDBXm{+{_C-Pn`*) zOd~=D7o2!2GByUhodjV0UMOXrvK~87CvG3Ii@zACt`j8vu(sA|H$T|}xka5*?JoF` zCqG?r7Iqf)M}V^Vnq5xU(m+PfMA3;}wGlbhYVf&ZS*Rh5CsPkV8FG8NMQS!->3zyz zWM$+D5rEdKrcJN{*Gr}VcK`QBAJ_{;MZ0jtN*yS3_6-!}RIuh%r1xhpbT3SOttFr< z8_vm$fj{j}i|{}#BV310CX5xF(KDu$_?LV%>yCNW0tFLtA$*d-n7s%`Crbs$avY&C zb?&znTzr#={mIuRk*f30SM3Wz zE2P%Tt?+ft!=w(0x&^C6Qah?Ae|3>t7d?{6LeJ|9*0b&_71$-Zk?_G$C8jH}36l>a zR`ylrCVZlX>-}q_@U;ljbL*sDa_i8@cD`q`57yAXj_aTz?6+}!HU(=l5_%t2X3i&H z7O6A6JP6Yls5r0u-dF4s{f36tNS7Y!nj@P;&>VbcNPd%=%dLm5_$79(k;>>F=@J~P zId^`nMPaWY4nMzcT!;H>3sM%0q9u=klRyAnCrmwzSp4JT7IG33heRo|PzrUQ_0Ws< z1Ip_2db#x?E{sVuYrL$#nAIxIP3soJU|)NP9{#n(R3007EH>AmkJ6NDIY^ma(Ochj zr!!r_g0DWmey~Tc+8S&>-?92Gmga?ELYg(*-qhQw!`Q;q|FKeIFWi94vD7scjG03v zNhRWMA$=yW_s`OlZDp;6j9dG_g>`U}PZoe>(79zD(r^rMfp}lg@mU z6%8ez&-4+QbMbZUf}B#dXGh;zuk!brvt~8UcxJ*-xv`x+T&V&(L&Yb!6?F2#w6#Hp ztOcjkm-F8qx%VR`K1CT9CrgJKH(vB!)rxTUJ|)IS;}_NlYjA>m2(*i(5~9>W3_%Pc z-bD`(J4@K)G+K@mSIlE;!dsMa;2be4A1ATtkkVxxBuccTXwmP8kqVxRfqs-k5>`Vr zjW@`GTrO4f>5=vcrA=4=_|IRIWlZ&`UG?!@vABwQxlaOVg%%-J?Dq}Zt5DwMWzoWK}kikL%!5D>~o5> z)FwK#3BzU$tpQ|V?iO$KJ*Ek{R&s&^G+U%vYGugBqIqhwsc}?(!gPcFhXcKK4ffzU zhJC`8&)l0IGUm>0@G|CDN)Er=E2HT8ysW_+l6H@~A5+LKp`v=)Xb*sVTm>`WkvIR$ z19hEYCIlu^a4BsJz`yN#(gduPnSH{Q6Mmp1r@{rY*h4-C;l!_8NwfA++Vd+D)@Gs z{AeB-x&c^>JA`V)yAOah$>f(@Ug6XUVN(B$vlnX*Rid(Q8DN*XT)=NMdlH5^eBgHY zRbV{Z$n=f4?yeo{;=2%oz|RZw#<`PtMB7;0N|cf_aw&un>dZ!Dp(KtN1X+O^%P!na zZ;1A}mrcSow9lWYs(SluMtdygJY6kzfA>=ln|x^HmT+f3i5>#aY$zYn_7?A{lH+I* zpG3o{ee}#70Izc?pA(eodKzppz{=MOT_?0_T@h=dhY>GExNTfEuLJpHq0xr2jyE9N z_Kk+i`T@d_>?i)I$4k!AWn=q%ZZ9IWYOT;{O?zq&vD;yOFrnG6&%TXfHi@!2=FZ{D zA&71@66JUHpT3wl_@pREdSd15m{R%OZx@9@vUdc zQV=5SGXi+*)Nyn4(=c5hG=INx!>wB?bye6a)Jru}Z@Mok?j>DoI19BNXVCTg6m2Ku zuOHcqsxQ!I!YJ18uu@K-_Z{tZMndqc!}eZqJY4^>*9SfFj+8yWQ3)3I|7OJ5g4Re+ zS#l`Xqb2U65%g8FhYq96NGuqkaZpM-%4S;&h58XOeFFJ2KK&LRg&B4s3!V&RejhtF zJ2>nK_)=6$}#J6etXOeCqe(#t!N^4J;RCLjZLFf`!^U}74L8u)M zYxBNjb~v&(DVzybOaMj_?J&!M#|ADN0V7)`Oe*7BcnZ~puMeU8cz6af3mz#I9;H{F zKqm`cioH>$R9c@bLSBxQJgwr;?HH^)7i_V6iAa ztbp1$UC|Z9xm3t;G5}g{Cx2LJoec~_EgN{$(e_~t_a$L(9zY8O-|>_%d41vh2w+lm zsWD0lX5yyE>zX5)c&e&Dr!~XjRyd$$jxLD{JQ+K1Ry-(GD^|`q@O_ifBpIJHf?UkD zBpE%143tUc)6x>8Q|nuGfqS5VUxD%yP+;XIr+xjjai)#~#9D!KQYEk!#|E)6?#5vv zCC7wt`1*eOe$~6DZ<#j^*WroipHMZj(xQ*hVh1_xpWd+@Y##kD0IE-+%* zVr%c?cvR7q;zXd;X${BL!dK{{GP$<6Zpwuw zzg+5kTl$P%rxPXh*(>Ot5C*4py+%#ios)41xyRYM6=ETRWuT-q0FrDVUVMvC4PJcr z;^S-K>Us$-0wVUv9=}?3rzYgdF|hEF3%@ncMt+SKk=B`_P#bYHlWf0TXM~Ul(r2~` zPFq_UX~bjuBE{faB-><6-)~y0MVu0CXuXUI;DXpK<;u>aNCa|#{ZPSXtW|tG)npef zH4lO1dQ6`yfO}%k^=LWmI7tH1oO*FDb>^P;XSmEb?#$xN7*i28r3g922%)fo zhI5%-Zg@`n5l4UZjPmi9hRIFc;Urhchai_ikH}3z@L6dww;r8I*-5^TS?yJ!T~%D# zQ|}rlsrz=8CT+K1BhE`$m`g$HgsH3yLT%DV5UvU7NhxqoWg#G?BTzIU@BgwEpEAt4 zZ<2mjNfkU3nIvTX@PY_uqBC778?mEQb-SVVd^qy zJ>@f}-11tS)^)rPCtF=$H`7_{wj;7k!W;V zttCJIG<9YgFvx#Q0Fgt&Ln;P#C6t&q?PI9LdNR?eIec}anm@lQs5y?BqKPtL$F;gvPV-0z7x zhm2-8i66@s4#`nXc25q*fCNf$lsEGi^3EaGBxP1yp*7>dBloby7s72=65~2~};HoG0vx z$b<(qdcaRud*%zDCHSM0W(=JCvjk5+RgQXRqB;vroT^-NS>^y~kbpW-B zP%NYg1pH2%;uE&ZH_l@RFjIvfJRUPfAn=+ckX`vT>Mt=Ru;)SN7H@mjuabj4+Qek4<#wHOml;MsQMk zqtWk5HxoJH0jJtUdW}NiTw0XN%Dg5BXG%y? zQ9rGSwK9Pb3z`PvIn#3hP>M_k4L}y@fIog`IanW2jX^lV1t^Wa|CAfZ$ zL#|TR$JtT%F>}Hf6QK$E=k{ufFo6)0AyeEhDGweua5+3HN58bjJpWZO|H7G#YspSE zA&!GE~vA)n9Y(bvsr6NL)`VSZz~-+rbaI0Kj`m?v_3lnWc-L?^AcZ;6`~ z(|SOBC;hqOkxjvd%;?b+(d*QiZVSx4Q5fi^HC4e*sD5_aWVZ!!2&GNJ>b&DrU;J72 z(RLb;ePuTAsn(7;HP)1)A>5fmm23$Nh#q`2XF<2~7G7PE)G)~0sbU{DF;jv?hE#{> zVW)m{7s^)(QN3BqSNSI+(u8f;&IWHSDUp8Cce_ zm&ZWoQyV$^HNxjcxwb3Nt@H!3|KNR}kZa*{_*>C8AxH^TlXFei1Y3<*;OC!TT}84g zr?vdE+K@;tZ>|1jd6op^Z5I0Sa3^m2i>za=x2K1{d_QQH8fV(2Ys;<8+(|rEakZOn z{qx(%Z1}ZG*IHitRV8rtYr{a_1v`}JUCTU;q&IP&$5C8l50r~8im_nye@SiYRj z#OJ-gi%3^Q6;-kdKh&$5Z3;f+L!AB&!<<<-n|$jdxv;sWpcg`d>i9KFS|9F4THZA? zd#KI@o3XYsEqf&jJ~37S7^GI@NbzxsvOWrDJ2ZwnxFlZlANqwd3q>^@Iw4}FqT3kz zfUuoWSNV&b(M|raVxC7ES;)-x__IaZ4&FVPsC<0x*n39}eBSr3Fj%1*voE7!H*-T0jK$QVv}uHL@+u-CKvg9-))!|sBt zs4cNal>*vcU{9ML#%Yp*r|&iO#cRf~dGm9{M;OzNq+k>pa&l8;eKdiwq+b7k075j1 z3@O!csgWh(Ij1_4AL-Q^j)F;a^;19nic9y?8$ThnC(tG>Y52E8uiJsgLjY|MEXVeN+;|-FhD#?k{y9Uog9gwFGVhj zf=nHQQ8M}}6IZ;iKbf~?HDi4Un)WM#Ub!#6thnM4@y$QPkk4c0k+#DgCGbI#f&H>dHcI9&ML~4ZwJJHLVD;yFa-I)2u zNp8a;A(}7@7*Lc+Qn+}^!CBQy_Utee%dJ}&NKx_5z`@~`h_VxVnnA)G7#Q`vdGRQ# z#EyDw)9R!aX^QqwLRtu;rr~=M6fCMSjbSm+Mx>s!EFmbmQ3~w!_6UROLY#U4BIJ7A zkqUJLNri-o@jaMA;w54uVdmx7D!v1mJ+v38XcQbjm5^xNDCuDMyKGBdx+|4^7+~X% z+!Fmedo=RnmaI+Ll2u!e0c(C>@iM6sTr|XCs;9!16vsz=u*I~hu5eVj|FZNWb3W(Z zK7t3n&vgXV)zIu?C0~TsMp?fi;s>RO4ML$pzZA&066wg+F|_z~k{fmR6*7<)?Jo`|Z+(J`O8j zyA)$4$biZ#H2{&ig>4wQf=dlJDWV1bW3IG#3Dj`;u!AgA=A8k(=-x;Qis4yA58t4|s zd=NyJS(~@7C+>ma=MgO}#TFD9Lbj{SZ9|lity`@IBo9idn%(q*_YdaW41{PikYg`m z=Nk-jP9zt4M87qvoeNR0RKf>e%9HDJ#>=1yh^Bs=bO7l&Y5VxE+B|N`I&cMN!eAjt zYp7us9_A#TS;8ujmr0U?W=IgJm2x>IOgR^ zQrbTX>H`IEfW3&U6Ud7sB7aPcNZNt--$W>027y)gOjPYdS)z*pL>3&{R0!`R? zxf$0YtLPuw0FuR3FYP_`C}3^;*d!7k{xNMY43I+9R30hrp1WD_LFIVGm?9*hQrM1U zIVQ@Dps$z%F4PoxZpbnUqK^%+Jbz!lA$*15r8`rhQRQr)l5W_;jU{eGfYN(4t`TBP zG;h3C9p9~-+%+J2P&WF|NeR;t*zY8SHMqF(XL+hu3vUoppG1zEa8g_QDE&b z)mDeWwwMkd97OJyPHZyPANRMIF`WA(Lr&SJoV9^pvd4Ge+m2yHdM)`(VzMhkMQPG!Dk0=qTKcIV!I|&jg*;KP%1y3WCWGgAf&~;&(DqLGD zXk6teU|9UXc8xN+)s0sk!&)G4CrZbt8j*0~Vt}L+(H&(1@TK`v80(6y6=qX@Yot)_ zIa_HCe3i#I05jYulucj+U;CL~fc3Cwpcx?Vlkym@ig$Y!7`g>CGDLEN7$UN+;$}tc*(nRsYmnBrihhIo3jAt;=6js&5<_yMu zY<%73V9@;h6ytpl>z?aBLOetIQss_TZ_8gumDO4fZB(r`03;W_1{URlkBhya7TAfIL1H#mX-WPTR+QAAy!OSkj;7rR> zWRvKU9Y*11aE48K+<`iN$4BBixTHeu@X%Rvd0QIOkqI6|+7gl%QaGp(QojdoZsf*P zXhI<10;N%zi7jofj@Vc-^rl?!Bq*RZ=CjjW1-^?LB;p&NMcDyhoNF_ksu|{sC`YUt z7bV*hvY_YdFqZ4qq`j&y$PQXAo-07lKzwQ;T%7rDf@uh#%30|bWJ%`7QI zH@ch9uRFY3{*XO^{AOFc$ok(QesUhs*D}iCO;gt+$aqxUb?61p7Dn0=UqCqX4RqVb z+rW6Cr6Dt}&%%VxEIJzN!i zl)YShShcKA6Ct8gbuwcUV{r*79t|a-DJP?2`Z@GZKsbHevU_iZb@4s%nzlFvE`2R7 zy}4a}9ATBgmvi0lrh($E^N#d$)yp|mwCL%=PqhLs&B2mA3E~C+k-8b?FZ2{|)S%er z3uLM7fP;jyPL4@?vomsApTPfLPnL{bzEzSYoE)LI{ zyM#uWL0->=IZVfe)q7aM^KFDH zP|`V5Yd_NQwu3)FpJd=CkB<5mI7?ct+w*=Hl91d1bAL;qN7r3;6nEW$jX*?>8> ztdFww@Bf@j+q>6iXM#Vb+2i&mtd5;w6$XZl1T3Tk zj;_2}^~K3UKXqrWc&AUdh#YX_^r0&PI3P@^0mD+B3yWiEBN5L0AK@?Z8K90)RiZ%d zolU{VJZ;1kM$K@4O!`k4;YG{H->Z{umd~$SkjwRKRl@)G(^H=vqfN^ALkic}Vstw< zXq&40x`U_+wGo8zF_6DoO^SWP)gA~raSyRQ^*dTB7xb{Gl@;teZ}!15U~~F{9{-nJ zoWdMm@AgtaT_Xiod*Oei8^^pvxIPvdGSCOOLa0a^)!aBc0R#DTB?xJ-i>~>SV6O6q zG+Sf(weyNMej$8hhs)La>u2r7-vagDbe( zhu|q*ACHWwi^@;~`Bqf66tqEdJ?PBYssyTfrQuj(Fl9z)vX@uDO3$wzLw3b$juIPu z#QGMP$_4^7nOrpY>|pyHw?5~Tu(EKhsnQ%Tw6%)Zb}YOF-@;G*`=ov6K6YH$$|2Fi zrY=Lm7$BM|4?!FL&);xWsj0GE%6Zq$QCBkKU!YrNbHRc&nNw(x+}vPy)b_%>nS!+W zj$6C4B&c{vm76GA8tqW@ZlpNcTrJILD5h0G)?dnm36f2UQ59#P!axP(Pzx=G?rs55&Rt2??m2AKg5pNT>2JeFW)f;SgheJZ+A-Vaia zWz1T6RMcp4H~kbiSLoidmDvid%-AYK@S~d95DDfM_5tJe*9K)8Vo*ncZS~&ojPi!B z{lQsX@Sh*kM@|@#`1>Ie>}L^X}6Jh&V)v_flR-&z~@w>0pmat zq-fFb6b-X6RvLp>mfD?q9(nwJ9-oTVzvH!Uh7=dinX;(k$88TKK?)OW*f8!fG>JJt zIhJn&xATwYOTGk>)GXPYmXFc>WmG&qC2-d6@IU)y^^_4J8|w*FAKJsI1rd{4uBg+x`OgCKy3aG&Vm|(L1=n+&L&MYP_up*}~ z?2tqWbqtN>-ZJle_H|qO`1(g7FC5Is9AE_XvARZQK@)zB%(a#A%uUZv`By>Cgr?l) zySSD0j4;(>nUeqUvflv}F_#*IzyJ|&d{vZRHe~@N)KklVdl~N?!FEscq@+1CpVi?Hv z{J@uO?)H-8t{f<-jxF=QVFeh(F#j7?ASVo>MiBY*%v}RlUTuMP$7V37)cR8et~f5w z)M>H4C)PZOW(elQ7yh3MjuXUB3AD2lA;-AZ7>UAepO<`!LL39pFq$T-g=8Iew@qG( zy|MkJyo1b(3A}%zdvuyiysWW8cE1;UN$eI>`@ok0cm?$zZQcZK_aDM{7RBY0-}q7b ziTG@wC#7`_B+1OclcJZ`&c>Ky`^Zc5L5KW?Irl0N0V+nE&91kJ6?rZvh#rwd`Qb)f zpXaA&lE=~96$JE41ckq0fS7*kR|8=r6MQOr=?=IPQ<=3 z3M8tr3xO(2iDZZA^1RbV+hR|@3}>EIO5Q)!c)GV9fP;Y}oBs?rI^g!)td_w&n8=B8q`7VFH zR}dRA1}g49T0A$GxuoZ^cFTwv2L=TdNHw2e2|pRwVg8yKyOc3vXy@504DNjwLyw2e!*Yc zjOS)CK$(wN+WtoucZhw{AK1QB3a@%l-0>!G>4@zl5MuJ2lHL9maUqo2tWoTK;VLGa{`!{b(^C zObk>>kjl)p@KCD-9bNGxW=YLDxJCSAmQF-y*>t)aw9J5H8_51BVnm4Ev|4;kH6wW9 zWQN|t9It!D3T(0Zy7}P^b|Tn9w$8}9-qvZuWKy$Qhb_J`OMi$ubAVG^ItK9=zIKSE ziP@DsLxQcJ^GIct6Ifxs zU~x5GhZ3N~OhvCW&Dp{B1u47V_Skyik_Wlpr&6=nU-&zUpg;6DK1^x?Oc=!>g*NwH zw8d8~GlCmVW~pD8P!;P6eu3H7SkjpNpl7z;kG_^3+0T{Z(F7}+w8o> zkJrodGt<)M^YbDFpRGDFuPmZpR)N0$t%nIiEEjE&Z(sgC&OSbFC^bHc7WzM4!46@Z z`xAer>~OlE@|hWiN4;nZWn+)?y6i`I_$60&N!r!JA0m=y*7gJ5=Z=&ovnkXLGBkP@ zLN$*2xFY3Q7m0?6E@I1RhMugpL|ApU%MutkGpuNZ?*FH23A`A-b+D!veY*Kh`0gY( z|ELhU>hqi*Ib!IS2m2Xe+l0>(UsbEa_lzaClIbz_+j&c^XZ1yW*}pW#?y9a=egH0i6x%FM3&zQ5n^ni7gK zSopMLJi5W_JL8r)Lo>X+6a``gB*sFecE9m=w{~g%9rxZCk@LQN{q6K=@y|rZPh;+= z{v`CbMx!F5&9`3KwBeR+!$*TnBX)0J*QjtmH_xH%)YmQ6q-sy_b4$EP(5Og0xEek& zFYj}s7CNamxpDyP?>8LKTRE~<aD_yQZ7u&(1jbWJod4G;3VHPI^e(DZ%kI0|+iVrFc&Zg3 zZ2Ezm34W&fWAM*Bs4ERT=~9B8=5IlEEoHv>`LEYjqq}M|gz#ct1JkUsq5NV=uU<*7 z%811w+jUJc<=Ytm&eEX=cv}uPgrRIo3CL51$*MnJrFL+|a7_W)WY7ov(T}i@N||?2 zk{EEVQ(23>U@y8`-a3s9BLq;AcY**~`nrxsx{ylr<@XyPMG0c`t&8PBbWZ0nG#CLKe{s7{43Bc;pbntJn zweq9;9fKIJyF;Ilr<<0>L5bgP;gNE($sMg|?J5|aKi6I7b7I@HGN(H)r`$Yv@}_YA z^=arLQwAgL){2x>*LpO56ziDzW*m45`(eKJq;oewW9pAjY031L;TpF8)2K0(#uuAt zl$ctxMMq4MN6Yp1`uN%v$C&NskI1rNHLFkeKas>(Saq)Uo}Nxuf4|(^m{9Gysj&f!d7%~CK$b;q>k-~z}O%NnYF8hnivQRlpyHdh9 z2`MNggE`=ozl)3hRB_I9&48pMDgE=rDS9ap8hsCr@n|fhDQHX(?$?p<0W*hVw|-%i z#A8Vs1kNUeq_?5AKP z0D9{}fS?SY7U0b0wI8kQCxura`wZ_Gx}{ctyup6Ur~MDa9Wv_Hc!U$~-ed`h($69n z%^J@R*vf15rPNW>pqQ(xc*gE??&12QUMuZ3odDhE&g>gA;rJUVg7mz)F{kb^r;Sn? zUC+vVM*VIvQqt%f-wlVN8%T>%{vY;UO&N-XDkA-TtMt5oOC7WW5Xx@;IMeP&!u}X@ zN*t>-W_5ol3Mk_^3pG`0%~wv8cy@pkzVBOMDhn5WphPv1-H_#}h z8UfTrhjLXn>t#2U+7Tr;QOiX83QamBIOM`e`;U;~`+X~rG9!F>-CY|U^hmJrt&n5w z9HUs}pO36(qZ)+!a$JmJr_bj)&x`mbtTnfm<187mKgp5g3jX}-LimFcf;fh5-E{{W z24H%TP5<oU)r^=JBOC(Z_=%RNt@}J8$ z0-~yi_*>-C)nMc0GKXGWf_)B><32oEEW>pPRy)m^pZgW`YWcEB?la6hhfgKILHKmp4bKW0^&_7DE>w3Nrh3ymdDJZ&R;>o(zngp+!!c@D z?dJ125yLnA?By!*-(k{KZwp?snEPM|L}bQFS6{-iMWfS5_L0-|zbmLl!i#o)~W`E{fZ`Hw7!DvMKoUIBGq8%`|a z$fDVBOgPkrEVS9SaLv+1d?9}p(gYyg37P{CWs2(r|M&U6Q}hJ`O*hwscadQ;SmwtL zyQARkJ-{^{&5L+Q-PCOjRNjr6w|~1x5qfI$Bp&IWAmRQEu-qm*zkAbKzUTZM!ui1R zcUC8%r*__X&&AX1D4q`MRX>0DE68g_HpIfE~sf$#=)JS1xS@Xwe55m%<|}hayCkQRoBH66&#aqct3@TjE!b_C2-MV0c07 zfW=h3^}KqSjsQ7)Wt$A3T`0IvjDFQ4I4H2MOnK$`@KSoR&4|Hm`gwwII!+ee`&~ zvy*f=$Co^IjxXLo?zQ^l+k4+LFi7yS~QS6cL?K3wk&Asdsi3Z5g+U z+;U(l;=Un{kO&Ou5vNl64Pl!}Qs65XD=~=DkOZmns)>}h63BQYfI6QJPHRRH1>4Vu^e81P! zP(Q0>8P|Nh`22;2mg0plY~(bIphx8FMSHoX2#DLuq@Q}GQ5g*Oax%Yv+yn?coHa3> zt=oj{sZ--(g-HGC{43kC)2ZCLy=WEPPcN>ST#^ytHC^P8R4A33RGk;URmLfK+44I7e!?YElbe^|OPE46yRJ1SlV(Mk<@OU)@7tIXU zesH2+`-0~4!mBRTyIjqyHlH%LF1#Fv>qWb&?~{=nxgQIybCFf|YT3&!KHjGVUaHps zl%)qg zN9nanF0ED1RD92y(bGRssg~oI8tJZ!2n@;@;>&na8tSDq^+BqDUE#7~Nz(jMbNrKJ zp7E#i{SVw{Noh&y8lRUqCtK2W7dc@HHYDECFEwK0HLW)(_3A4>GoG*-Jgif`uth3F z9_MUffh^jwr)S-hWW_8&Gd@A1rd(4``C6yc*63jmqKw@{Cw~gJt$wMkI$l2}#c!O} zdVqF-@Ls?3Q$hS^E==`8q@8S;UzF#GUxkfN_ML@$i@DX8{JpwsJiE`f0Lqst@u3k^ z+YWx8kM1n;D&>R0RQRidteB>)G=@s%5b84J;@nRyE(`7`a@HUBO#G92lIlkGd z`Q56~#sxELhbv-xTs1B^St~5$+mectG`*u5^yEmL{py|~-^>Y|yob-IBukc6&u)7< zpYtr=qanRF62|uaYmM4M&q%n@g3iT~3iybXE5B4?(n_nec6&`4zxsp$p!lva{c15i zx}<-TFc<~`x{hENdtuXSk)jT*l%7BanTyiH&YD>?GWT3j@OZnq!8|rZH&f$Q-U}nD zd?B7j;Hn20R6%rC0kCAP6Po{%z8YNMw}Bn^pEE#J?=A&m8VF+~n6=n<9*n@WFk2UBfYKUCWVo z2Lb}k*7P*tIfMxGJ&0OhKUZSvFgRGOw5DCy?HfvzKe(I{m*e@~rdaMsMYqNm5~;O~ zcB-LMZ}jo!tuO+dZlml-r%@Kxm&|>Z=f>oJ zjTr|G_mOf^;$B{jl276P z6*j9fpexluqgE_;ml9<^atc(QZt4d%3(&rgvodP)c$1j5WUqbB1v~2c;qtZGJC zeHHbk8h7ma_n@GEA>>(&^roOs4zcKQAa)d;@scGE1?h00!5oDO9P!6OzpAyTvxS=d zSJ3q+sQ0Lvb6&UCXYrKACQl!bt$6Ao&c}lAOyY8do}tz0w_IShp`TXi60-Lj%WVF` zdJ(uKB6DWO^TOZ5v?%o$Z^hJZJ?!Y3P77}8+fC`lde5_Y=~dIM#Wf}DZx(si%294_ zn-_Tlj?I$X-}d>2YhBC-Ek1PW@}MN+jtK|Xmk)F3HR#a)gLKsAP zM5vgyowy6?sM^FXRqOH4D%CquE+S1ffKj?f$!wy^ut-_FDO7Mm`6M(w%{-fOnR zj4rCB?EgO4h#xn<0uJ{!-(B8&?pnueqXD>aV4R7@0ae@WC2*=q=i?cIHQ>d!XGAq} zMS|=B$n1iD<3WJ7P1#*MFTM7v_WfeGc}2|;#G{GHl96yS{Wr2PabJB;S;fxr2mjxB z@XiBgP#L{l<7oE^W(4BevGbO!?9SMoU0uYo%2oKcEVP6M%~$>UYaH#n)?G#pFx z>5PVVV!0Bq+Gb)ne%tBIk+E_TD zYQFeAvs+09N@xo-L|)-)nQff<6WhPKnwevw2ul+^QH7J@Y2rp8JvlV^1>#UrdWK#ME@8D>y9?df4pB*f3*fNdRAnqTr7T_=jT`s?$_)(BY z$e8=kLvbN9OUWB&Qbu0ryUz+eetqrSpHq5&_dBpo$W8M%*|TZEq1)tcAJOnVhFPb*aMVv8DPkKzK!l!vK`(R-5F!fnAYbAkE8?%xw_u;E+Y(- zlN-f`EimSvpjUEARK{H{tjWFa$ZGhL7^Q0b-V$XFwO|k@cl_4lxPy+r_&uuE*&5@e zIPI27W%Y}gqiTCcE`k?-yD#@oXf5gw?c;b)O5);JFoM(pgrv^sY>W&X$fpOk#gNCUe5t1N?T$MM)tHz~U=>XL?zFK; z6>wK=a* z)e-gzzP_Ur!CkdyUW!6_2MLDXEj(sgaj^07GvkE3T%OL3-bOU{j7FHof`q~Qr;rmG zGh;TWQsT@N{d<;~*EW0B%vmGb_5cZA@WF#{v)>SN30kQHO`kQq6t#nqFh2bAB1 zS8ZoHbw+=`|N8HuD|YaJ|D|L-w9JE!$Fm+*gby&qfL7fF2*0?CmwIYXtRc8(bEztA zq@G|Lli*X0`BM-=#3_9N4wn9n7-YB+?Sn6uRH&S7(a=xCASTQ>X#Nm|IYNs-e$h& z2p+Y6B@mn4dw9$!Bs9^R7Sb8CzoPMltOTK!4jMfdaBPd0(XkpFNUURculH2#BfjAg z@^=BZgdW>Lo$YAT{MXUKs#<`6&PV8(Jf{P)%x>8QfE;8W?>d};H2V-;un7e>`@GM{ zIzI!1hhAu2dVmA$0T)Iv)TkbS`v~ZjGmR|95f|RjfR+`&We5n0veGJZ$0FHF9S=G0 ZqSUz71`_|55yqqg`Q7)Y*({H+{U5fQf*}9^ literal 0 HcmV?d00001 diff --git a/evidence/native-parallel-review9/s.mjs b/evidence/native-parallel-review9/s.mjs new file mode 100644 index 000000000..1de1d721f --- /dev/null +++ b/evidence/native-parallel-review9/s.mjs @@ -0,0 +1,164 @@ +// Scenario definitions for review 6 of flows#667. +const STALL = ` await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success');`; +const SURF = `import { flow } from '@relayflows/surface';`; +const flowSrc = (name, body, { fnExpr = false, header = '', pre = '' } = {}) => `${SURF} +${pre}export default flow('${name}'${header}, ${fnExpr ? 'async function(f)' : 'async f =>'} {${body} +${STALL} +}); +`; +const ADAPTER = `#!/usr/bin/env node +import fs from 'node:fs'; +if (process.argv[2] === 'auth') process.exit(0); +if (process.argv[2] === '--relayflows-adapter-v1') { + process.stdout.write('relayflows-agent-cli-v1\\n'); + let input = ''; + for await (const chunk of process.stdin) input += chunk; + if (input.trim() === '') process.exit(0); + const request = JSON.parse(input); + if (request.protocol !== 'relayflows-agent-cli-v1') process.exit(2); + process.stdout.write('relayflows-agent-cli-v1-execute\\n'); + fs.appendFileSync('/calls', 'x'); + process.stdout.write('{"message":"ok"}'); +} +`; +const HS = [['head', 'head'], ['base', 'base']]; +const S = []; +const add = (s) => S.push({ sides: HS, ...s }); + +// ---- review-5 fixtures, verbatim ---- +const P_BIND = `const Promise = { all: globalThis.Promise.all.bind(globalThis.Promise) };`; +const P_HAND = `const Promise = { all: (xs) => new globalThis.Promise((res, rej) => { const out = []; let n = xs.length; xs.forEach((x, i) => globalThis.Promise.resolve(x).then(v => { out[i] = v; if (--n === 0) res(out); }, rej)); }) };`; +const CHAIN = `export { default } from './impl.ts';\n`; +const TAIL5 = ` await f.run('printf X >> effects'); + await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); + f.done('success'); +}); +`; +const G3 = ` await Promise.all([f.run('sleep 0.5; printf A'), f.run('printf B'), f.run('sleep 0.1; printf C')]);\n`; +const NAT = ` const a = async () => { await f.run('sleep 0.4; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.2; printf C'); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]);\n`; +const impl = (name, P, body) => `${SURF}\n${P}\nexport default flow('${name}', async f => {\n${body}${TAIL5}`; +const W2 = ` await f.run('sleep 0.2; printf W');\n`; +add({ name: 'Q5', files: { 'chain.flow.ts': CHAIN, 'impl.ts': impl('q5', P_BIND, G3) } }); +add({ name: 'Q5n', files: { 'chain.flow.ts': CHAIN, 'impl.ts': impl('q5n', P_BIND, NAT) } }); +add({ name: 'Q5h', files: { 'chain.flow.ts': CHAIN, 'impl.ts': impl('q5h', P_HAND, G3) } }); +add({ name: 'Q5w', files: { 'chain.flow.ts': CHAIN, 'impl.ts': impl('q5w', P_BIND, W2 + G3) } }); +add({ name: 'Q5wn', files: { 'chain.flow.ts': CHAIN, 'impl.ts': impl('q5wn', P_BIND, W2 + NAT) } }); +add({ name: 'Q5wh', files: { 'chain.flow.ts': CHAIN, 'impl.ts': impl('q5wh', P_HAND, W2 + G3) } }); +add({ name: 'Q6Pw', files: { + 'chain.flow.ts': `${SURF}\nimport './lib/patch.mjs';\nexport default flow('q6Pw', async f => {\n await f.run('sleep 0.3; printf W');\n${NAT}${TAIL5}`, + 'lib/patch.mjs': `const I = Function('return this')()['Pro' + 'mise']; +const intrinsicAll = I.all; +const t = setInterval(() => { if (I.all !== intrinsicAll) { clearInterval(t); I.all = function all(xs) { return intrinsicAll.call(I, xs); }; } }, 2); +t.unref(); +` } }); + +// ---- P-series (review 4) ---- +add({ name: 'P1', files: { 'chain.flow.ts': `${SURF}\n${P_BIND}\nexport default flow('p1', async f => {\n${G3}${TAIL5}` } }); +add({ name: 'P1h', files: { 'chain.flow.ts': `${SURF}\n${P_HAND}\nexport default flow('p1h', async f => {\n${G3}${TAIL5}` } }); +add({ name: 'P1c', files: { 'chain.flow.ts': `${SURF}\nclass Promise extends globalThis.Promise { static all(xs) { return globalThis.Promise.all.call(globalThis.Promise, xs); } }\nexport default flow('p1c', async f => {\n${G3}${TAIL5}` } }); +add({ name: 'P1n', files: { 'chain.flow.ts': `${SURF}\n${P_BIND}\nexport default flow('p1n', async f => {\n${NAT}${TAIL5}` } }); +add({ name: 'P1bn', files: { 'chain.flow.ts': `${SURF}\nimport Promise from './bb/bluebird.js';\nexport default flow('p1bn', async f => {\n${NAT}${TAIL5}` }, bluebird: true }); +add({ name: 'P2', files: { 'chain.flow.ts': flowSrc('p2', ` + const warm = async () => {}; + await Promise.all([warm(), warm()]); + await f.run('printf X >> effects');`) } }); + +// ---- prior matrix ---- +add({ name: 'A1', files: { 'chain.flow.ts': flowSrc('a1', ` + const left = async () => { + await Promise.all([f.run('sleep 0.3; printf A'), f.run('printf B')]); + await f.run('printf L >> effects'); + }; + const right = async () => { + await Promise.all([f.run('printf C'), f.run('sleep 0.3; printf D')]); + await f.run('printf R >> effects'); + }; + await Promise.all([left(), right()]);`) } }); +add({ name: 'B1', files: { 'chain.flow.ts': flowSrc('b1', ` + const left = async () => { + await f.run('printf A'); + await f.run('printf B'); + await f.run('printf L >> effects'); + }; + const right = async () => { + await Promise.all([f.run('printf C'), f.run('printf D')]); + await f.run('printf R >> effects'); + }; + await Promise.all([left(), right()]);`) } }); +const N2 = ` + const a = async () => { await f.run('sleep 0.3; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.2; printf C'); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]);`; +add({ name: 'N2', files: { 'chain.flow.ts': flowSrc('n2', N2) } }); +add({ name: 'C1e', files: { 'chain.flow.ts': flowSrc('c1e', ` + const background = (async () => { await f.run('printf X >> effects'); })(); + await new Promise(resolve => setTimeout(resolve, 300)); + await f.run('printf Y >> effects'); + await background;`) } }); +add({ name: 'G1', files: { 'chain.flow.ts': flowSrc('g1', ` + await Promise.race([f.run('printf A >> effects'), f.run('sleep 0.3; printf B >> effects')]); + await f.run('printf G >> effects');`) } }); +const LLM_OUT = `const output = { type: 'object', properties: { message: { type: 'string' } }, required: ['message'] };`; +add({ name: 'H1', adapter: true, extraArgs: ['--local-agent'], files: { 'adapter.mjs': ADAPTER, 'chain.flow.ts': flowSrc('h1', ` + ${LLM_OUT} + const left = async () => { await f.llm('left', { output, model: 'test-model' }); await f.run('printf L >> effects'); }; + const right = async () => { await f.llm('right', { output, model: 'test-model' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`) } }); +add({ name: 'H2', adapter: true, extraArgs: ['--local-agent'], files: { 'adapter.mjs': ADAPTER, 'chain.flow.ts': flowSrc('h2', ` + const left = async () => { await f.agent('left', { task: 'left', model: 'test-model' }); await f.run('printf L >> effects'); }; + const right = async () => { await f.agent('right', { task: 'right', model: 'test-model' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`) } }); +add({ name: 'K4', adapter: true, extraArgs: ['--local-agent'], files: { 'adapter.mjs': ADAPTER, 'chain.flow.ts': flowSrc('k4', ` + const g = arguments[0]; + ${LLM_OUT} + const left = async () => { await g.llm('left', { output, model: 'test-model' }); await f.run('printf L >> effects'); }; + const right = async () => { await g.llm('right', { output, model: 'test-model' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`, { fnExpr: true }) } }); +add({ name: 'I1', files: { + 'child.flow.ts': `${SURF} +export default flow('child', async (f, input) => { + await Promise.all([f.run('printf first'), f.run('printf second')]); + await f.run('printf ' + input.token + ' >> effects'); + f.done('success'); +}); +`, + 'chain.flow.ts': flowSrc('i1', ` + const left = async () => { await f.dispatch('child', { token: 'x' }); await f.run('printf L >> effects'); }; + const right = async () => { await f.dispatch('child', { token: 'y' }); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`, { header: `, { use: ['./child.flow.ts'] }` }) } }); +add({ name: 'K1', files: { 'chain.flow.ts': flowSrc('k1', ` + const pause = () => sleep(300); + const late = async () => { await Promise.all([pause(), pause()]); await f.run('printf L >> effects'); }; + const fast = async () => { await f.run('sleep 0.2; printf A >> effects'); await f.run('sleep 0.2; printf B >> effects'); await f.run('printf C >> effects'); }; + await Promise.all([fast(), late()]);`, { pre: `import { setTimeout as sleep } from 'node:timers/promises';\n` }) } }); +add({ name: 'K2b', files: { 'chain.flow.ts': flowSrc('k2b', ` + const a = async () => { await f.run('sleep 0.3; printf A >> effects'); signal(); }; + const b = async () => { await f.run('sleep 0.1; printf B >> effects'); signal(); }; + const c = async () => { await Promise.all([ready(), ready()]); await f.run('printf C >> effects'); }; + await Promise.all([a(), b(), c()]);`, { pre: `let signal; const first = new Promise(r => { signal = r; });\nconst ready = async () => { await first; };\n` }) } }); +add({ name: 'K3', files: { 'chain.flow.ts': flowSrc('k3', ` + const out = []; + const a = async () => { out.push(await f.run('sleep 0.3; printf a')); }; + const b = async () => { out.push(await f.run('sleep 0.1; printf b')); }; + await Promise.all([a(), b()]); + await f.run('printf ' + out.join('') + ' >> effects');`) }, expect: r => /^(ab|ba)Z$/.test(r.effects) }); +add({ name: 'K5b', files: { 'chain.flow.ts': flowSrc('k5b', ` + const tree = async (d) => { if (d === 0) return; await Promise.all([tree(d - 1), tree(d - 1)]); }; + await f.run('printf A >> effects'); + await tree(12); + try { await f.run('printf B >> effects'); } catch (e) { void e; }`) }, expect: r => r.effects.includes('B') }); +add({ name: 'K13b', files: { 'chain.flow.ts': `${SURF} +export default flow('k13b', async f => { + const b = async () => { await f.run('sleep 0.4; printf B >> effects'); await f.run('printf C >> effects'); }; + const a = async () => { await f.run('sleep 0.1; printf A >> effects'); await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' }); f.done('success'); }; + await Promise.all([b(), a()]); +}); +` } }); + +export default S; +export { STALL, SURF, flowSrc, ADAPTER, HS, P_BIND, P_HAND, CHAIN, TAIL5, G3, NAT, impl, W2, add }; diff --git a/evidence/native-parallel-review9/s2.mjs b/evidence/native-parallel-review9/s2.mjs new file mode 100644 index 000000000..81fc5f813 --- /dev/null +++ b/evidence/native-parallel-review9/s2.mjs @@ -0,0 +1,181 @@ +// Review-6 attack scenarios. +import { STALL, SURF, flowSrc, HS, P_BIND, G3, NAT, TAIL5, W2, impl } from './s.mjs'; +const S = []; +const add = (s) => S.push({ sides: HS, ...s }); +const FORCED = [['forced', 'forced'], ['base', 'base']]; + +// ---------- entry-file rule bypass (natural, unforced) ---------- +// The entry defines `flow` locally; the screen sees `export default flow()`, +// but the loaded definition is impl.ts's, whose module scope binds Promise. +const BYPASS = `import impl from './impl.ts'; +const flow = (..._args: unknown[]) => impl; +export default flow('decoy', async f => { + await f.run('printf decoy'); +}); +`; +// A spec-exact Promise.all built only from registered combinators; its one +// unregistered join is a *member* of a registered all. +const P_WRAP = `const Promise = { all: (xs) => globalThis.Promise.all([new globalThis.Promise((res, rej) => { const out = []; let n = xs.length; xs.forEach((x, i) => globalThis.Promise.all([x]).then(([v]) => { out[i] = v; if (--n === 0) res(out); }, rej)); })]).then(([v]) => v) };`; +const P_RACE = `const Promise = { all: (xs) => globalThis.Promise.race(xs) };`; +add({ name: 'R1', files: { 'chain.flow.ts': BYPASS, 'impl.ts': impl('r1', P_WRAP, G3) } }); +add({ name: 'R1w', files: { 'chain.flow.ts': BYPASS, 'impl.ts': impl('r1w', P_WRAP, W2 + G3) } }); +add({ name: 'R1wn', files: { 'chain.flow.ts': BYPASS, 'impl.ts': impl('r1wn', P_WRAP, W2 + NAT) } }); +add({ name: 'R2w', files: { 'chain.flow.ts': BYPASS, 'impl.ts': impl('r2w', P_RACE, W2 + G3) } }); +add({ name: 'R3w', files: { 'chain.flow.ts': BYPASS, 'impl.ts': impl('r3w', P_BIND, W2 + G3) } }); +add({ name: 'R3', files: { 'chain.flow.ts': BYPASS, 'impl.ts': impl('r3', P_BIND, G3) } }); +// same bypass, `flow` imported from a local helper module +add({ name: 'R4w', files: { + 'chain.flow.ts': `import { flow } from './wrap.ts'; +export default flow('decoy', async f => { + await f.run('printf decoy'); +}); +`, + 'wrap.ts': `import impl from './impl.ts';\nexport const flow = (..._args: unknown[]) => impl;\n`, + 'impl.ts': impl('r4w', P_WRAP, W2 + G3) } }); +// Without the bypass the wrapped all is serial (control) +add({ name: 'R1c', files: { 'chain.flow.ts': `${SURF}\n${P_WRAP}\nexport default flow('r1c', async f => {\n${W2}${G3}${TAIL5}` } }); + +// ---------- runtime rule with eligibility forced on ---------- +const forced = (name, body, pre = '') => ({ name, sides: FORCED, files: { 'chain.flow.ts': flowSrc(name.toLowerCase(), body, { pre }) } }); +S.push(forced('FRrace', ` + await f.run('sleep 0.2; printf W'); + await Promise.race([f.run('sleep 0.3; printf A'), f.run('sleep 0.1; printf B')]); + await f.run('printf X >> effects');`)); +S.push(forced('FRany', ` + await f.run('sleep 0.2; printf W'); + await Promise.any([f.run('sleep 0.3; printf A'), f.run('sleep 0.1; printf B')]); + await f.run('printf X >> effects');`)); +S.push(forced('FRnestrace', ` + await f.run('sleep 0.2; printf W'); + await Promise.all([Promise.race([f.run('sleep 0.3; printf A'), f.run('sleep 0.1; printf B')]), f.run('printf C')]); + await f.run('printf X >> effects');`)); +S.push(forced('FRdefer', ` + await f.run('sleep 0.2; printf W'); + let signal; const first = new Promise(r => { signal = r; }); + const a = async () => { await f.run('sleep 0.3; printf A >> effects'); signal(); }; + const b = async () => { await f.run('sleep 0.1; printf B >> effects'); signal(); }; + const c = async () => { await Promise.all([first, f.run('printf c0')]); await f.run('printf C >> effects'); }; + await Promise.all([a(), b(), c()]);`)); +S.push(forced('FRthen', ` + await f.run('sleep 0.2; printf W'); + const sa = f.run('sleep 0.3; printf A'); + const th = { then: (r, j) => sa.then(r, j) }; + await Promise.all([th, f.run('sleep 0.1; printf B')]); + await f.run('printf X >> effects');`)); +S.push(forced('FRsettled', ` + await f.run('sleep 0.2; printf W'); + await Promise.allSettled([f.run('sleep 0.3; exit 3', { onNonZero: 'record' }), f.run('sleep 0.1; printf B')]); + await f.run('printf X >> effects');`)); +S.push(forced('FRset', ` + await f.run('sleep 0.2; printf W'); + await Promise.all(new Set([f.run('sleep 0.3; printf A'), f.run('sleep 0.1; printf B')])); + await f.run('printf X >> effects');`)); +S.push(forced('FRgen', ` + await f.run('sleep 0.2; printf W'); + function* g() { yield f.run('sleep 0.3; printf A'); yield f.run('sleep 0.1; printf B'); } + await Promise.all(g()); + await f.run('printf X >> effects');`)); +S.push(forced('FRthenagg', ` + await f.run('sleep 0.2; printf W'); + await Promise.all([f.run('sleep 0.3; printf A'), f.run('sleep 0.1; printf B')]).then(v => v); + await f.run('printf X >> effects');`)); +S.push(forced('FRmicro', ` + await f.run('sleep 0.2; printf W'); + const a = async () => { await f.run('sleep 0.3; printf A'); await new Promise(r => queueMicrotask(r)); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await new Promise(r => process.nextTick(r)); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.2; printf C'); await new Promise(r => setImmediate(r)); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]); + await f.run('printf X >> effects');`)); +S.push(forced('FRcatch', ` + await f.run('sleep 0.2; printf W'); + const a = async () => { await f.run('sleep 0.1; printf A'); throw new Error('a'); }; + const b = async () => { await f.run('sleep 0.3; printf B'); throw new Error('b'); }; + try { await Promise.all([a(), b()]); } catch (e) { void e; } + await f.run('sleep 0.5; printf X >> effects');`)); +S.push(forced('FRfinally', ` + await f.run('sleep 0.2; printf W'); + const a = async () => { try { await f.run('sleep 0.3; printf A'); } finally { await f.run('printf F >> effects'); } }; + const b = async () => { await f.run('sleep 0.1; printf B'); }; + await Promise.all([a(), b()]); + await f.run('printf X >> effects');`)); +S.push(forced('FRiter', ` + await f.run('sleep 0.2; printf W'); + const ps = [f.run('sleep 0.3; printf A'), f.run('sleep 0.1; printf B')]; + for await (const v of ps) { void v; } + await f.run('printf X >> effects');`)); +// forced wrapped-all directly in the entry (no bypass needed) +S.push({ name: 'FRwrap', sides: FORCED, files: { 'chain.flow.ts': `${SURF}\n${`const PW = ${P_WRAP.slice('const Promise = '.length).replace(/;$/, '')};`}\nexport default flow('frwrap', async f => {\n${W2} await PW.all([f.run('sleep 0.5; printf A'), f.run('printf B'), f.run('sleep 0.1; printf C')]);\n${TAIL5}` } }); + +// ---------- entry-file rule probes (natural) ---------- +add({ name: 'E1factory', files: { 'chain.flow.ts': `${SURF} +const make = () => flow('e1', async f => { +${NAT}${TAIL5}export default make(); +` } }); +add({ name: 'E2helper', files: { + 'chain.flow.ts': flowSrc('e2', ` + const a = async () => { await f.run('sleep 0.3; printf A'); await pause(); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + await Promise.all([a(), b()]);`, { pre: `import { pause } from './helper.ts';\n` }), + 'helper.ts': `export const pause = async () => { await new Promise(r => setTimeout(r, 50)); };\n` } }); +add({ name: 'E3dyn', files: { + 'chain.flow.ts': flowSrc('e3', ` + const a = async () => { await f.run('sleep 0.3; printf A'); await import('./helper.ts'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + await Promise.all([a(), b()]);`), + 'helper.ts': `export const x = 1;\n` } }); +add({ name: 'E4json', files: { + 'chain.flow.ts': flowSrc('e4', N2body(), { pre: `import data from './d.json' with { type: 'json' };\nvoid data;\n` }), + 'd.json': `{"k":"v"}` } }); +add({ name: 'E4jsonuse', files: { + 'chain.flow.ts': flowSrc('e4u', ` + const a = async () => { await f.run('sleep 0.3; printf A'); await f.run('printf ' + data.k + ' >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + await Promise.all([a(), b()]);`, { pre: `import data from './d.json' with { type: 'json' };\n` }), + 'd.json': `{"k":"a"}` } }); +add({ name: 'E5ns', files: { 'chain.flow.ts': `${SURF} +import * as surface from '@relayflows/surface'; +export default surface.flow('e5', async f => { +${NAT}${TAIL5}` } }); +function N2body() { return ` + const a = async () => { await f.run('sleep 0.3; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.2; printf C'); await f.run('printf c >> effects'); }; + await Promise.all([a(), b(), c()]);`; } + +// ---------- upgrade / rollback ---------- +const UP = [['p2050', 'head'], ['p2051', 'head']]; +const CI4 = flowSrc('ci4', ` + await f.run('printf a >> effects'); + await Promise.resolve(f.run('printf b >> effects')); + await Promise.all([f.run('printf c >> effects'), f.run('printf d >> effects')]); + await f.run('test -f release || { touch stalled; sleep 120; }; printf y >> effects', { timeout: '5m' }); + await Promise.all([Promise.resolve(f.run('printf e >> effects')), Promise.resolve(f.run('printf g >> effects'))]);`); +const CI5 = flowSrc('ci5', ` + await f.run('printf a >> effects'); + await Promise.resolve(f.run('printf b >> effects')); + await Promise.all([f.run('printf c >> effects'), f.run('printf d >> effects')]); + await f.run('printf e >> effects'); + await f.run('test -f release || { touch stalled; sleep 120; }; printf y >> effects', { timeout: '5m' }); + await Promise.all([Promise.resolve(f.run('printf g >> effects')), Promise.resolve(f.run('printf h >> effects'))]);`); +const A1b = ` + const left = async () => { + await Promise.all([f.run('sleep 0.3; printf A'), f.run('printf B')]); + await f.run('printf L >> effects'); + }; + const right = async () => { + await Promise.all([f.run('printf C'), f.run('sleep 0.3; printf D')]); + await f.run('printf R >> effects'); + }; + await Promise.all([left(), right()]);`; +const B1b = ` + const left = async () => { await f.run('printf A'); await f.run('printf B'); await f.run('printf L >> effects'); }; + const right = async () => { await Promise.all([f.run('printf C'), f.run('printf D')]); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`; +for (const [n, src] of [['CI4', CI4], ['CI5', CI5], ['A1', flowSrc('a1', A1b)], ['B1', flowSrc('b1', B1b)], ['N2', flowSrc('n2', N2body())]]) { + S.push({ name: 'U' + n, sides: UP, files: { 'chain.flow.ts': src } }); + S.push({ name: 'RB' + n, sides: [['head', 'p2050'], ['head', 'p2051']], secondResume: 'head', + expect: r => r.code1 !== 0 && !r.effects1.includes('Z') && r.effects.includes('Z'), + files: { 'chain.flow.ts': src } }); +} + +export default S; diff --git a/evidence/native-parallel-review9/s3.mjs b/evidence/native-parallel-review9/s3.mjs new file mode 100644 index 000000000..4f6fb0375 --- /dev/null +++ b/evidence/native-parallel-review9/s3.mjs @@ -0,0 +1,55 @@ +// FB set (eligibility forced) + secrets. +import { SURF, flowSrc, ADAPTER, NAT, G3, P_BIND, TAIL5 } from './s.mjs'; +const F = [['forced', 'forced']]; +const LLM_OUT = `const output = { type: 'object', properties: { message: { type: 'string' } }, required: ['message'] };`; +const refused = (forbid) => r => r.fresh === true && r.code !== 0 && ![...forbid].some(c => r.effects.includes(c)); +const S = [ + { name: 'FB1', sides: F, adapter: true, extraArgs: ['--local-agent'], okIf: r => refused('LR')(r) && !r.calls, + extraCheck: root => { try { return { calls: require('fs').readFileSync(root + '/calls', 'utf8').length }; } catch { return { calls: 0 }; } }, + files: { 'adapter.mjs': ADAPTER, 'chain.flow.ts': flowSrc('fb1', ` + ${LLM_OUT} + const left = async () => { await f.run('printf l'); await f.llm('left', { output, model: 'test-model' }); await f.run('printf L >> effects'); }; + const right = async () => { await f.run('sleep 0.2; printf r'); await f.run('printf R >> effects'); }; + await Promise.all([left(), right()]);`) } }, + { name: 'FB2', sides: F, adapter: true, extraArgs: ['--local-agent'], okIf: refused('E'), files: { 'adapter.mjs': ADAPTER, 'chain.flow.ts': flowSrc('fb2', ` + ${LLM_OUT} + await Promise.all([f.run('printf a'), f.run('printf b')]); + try { await f.llm('x', { output, model: 'test-model' }); } catch (e) { void e; } + await f.run('printf E >> effects');`) } }, + { name: 'FB3', sides: F, okIf: refused('C'), files: { 'chain.flow.ts': flowSrc('fb3', ` + await Promise.all([f.run('printf a'), f.run('printf b')]); + await new Promise(r => setTimeout(r, 100)); + const late = async () => { await f.run('printf C >> effects'); }; + await late();`) } }, + { name: 'FB3c', sides: F, okIf: refused('CD'), files: { 'chain.flow.ts': flowSrc('fb3c', ` + const a = async () => { await new Promise(r => setTimeout(r, 100)); try { await f.run('printf C >> effects'); } catch (e) { void e; } }; + const b = async () => { await f.run('sleep 0.4; printf B'); await f.run('printf D >> effects'); }; + await Promise.all([a(), b()]);`) } }, + { name: 'FB4', sides: F, okIf: refused('B'), files: { 'chain.flow.ts': flowSrc('fb4', ` + const tree = async (d) => { if (d === 0) return; await Promise.all([tree(d - 1), tree(d - 1)]); }; + await f.run('printf A >> effects'); + await tree(12); + try { await f.run('printf B >> effects'); } catch (e) { void e; }`) } }, + { name: 'FB6', sides: F, files: { 'chain.flow.ts': flowSrc('fb6', ` +${NAT}`) } }, + { name: 'FB7', sides: F, okIf: refused('X'), files: { 'chain.flow.ts': `${SURF}\n${P_BIND}\nexport default flow('fb7', async f => {\n${G3}${TAIL5}` } }, + { name: 'FB8', sides: F, okIf: refused('q'), files: { 'chain.flow.ts': flowSrc('fb8', ` + const v = async () => { await new Promise(r => setTimeout(r, 100)); try { await f.run('printf v >> effects'); } catch (e) { void e; } }; + await Promise.all([f.run('sleep 0.6; printf 1'), f.run('sleep 0.6; printf 2'), f.run('sleep 0.6; printf 3'), f.run('sleep 0.6; printf 4'), + f.run('sleep 0.6; printf 5'), f.run('sleep 0.6; printf 6'), f.run('sleep 0.6; printf 7'), f.run('sleep 0.6; printf 8'), + f.run('printf q >> effects'), v()]);`) } }, +]; +// secrets +const SEC = ` + await Promise.all([ + f.run('printf "%s" "\${R6_TOK:-unset}" > /granted; sleep 0.2', { secrets: ['R6_TOK'] }), + f.run('printf "%s" "\${R6_TOK:-unset}" > /ungranted; sleep 0.1'), + ]); + await f.run('printf "%s" "\${R6_TOK:-unset}" > /later');`; +const secCheck = root => { const fs = require('fs'); const rd = n => { try { return fs.readFileSync(root + '/' + n, 'utf8'); } catch { return 'missing'; } }; + return { sec: [rd('granted') === 'r6-secret-value' ? 'G:ok' : 'G:' + (rd('granted') === 'unset' ? 'unset' : rd('granted') === 'missing' ? 'missing' : 'other'), + rd('ungranted') === 'unset' ? 'U:unset' : rd('ungranted') === 'missing' ? 'U:missing' : 'U:LEAK', rd('later') === 'unset' ? 'L:unset' : rd('later') === 'missing' ? 'L:missing' : 'L:LEAK'].join(' ') }; }; +const HS = [['head', 'head'], ['base', 'base']]; +S.push({ name: 'S1', sides: HS, env: { R6_TOK: 'r6-secret-value' }, extraCheck: secCheck, files: { 'chain.flow.ts': flowSrc('s1', SEC) } }); +S.push({ name: 'S2missing', sides: HS, env: { R6_TOK: '' }, okIf: r => r.code !== 0, extraCheck: secCheck, files: { 'chain.flow.ts': flowSrc('s2', SEC.replaceAll('R6_TOK', 'R6_ABSENT')) } }); +export default S; diff --git a/evidence/native-parallel-review9/s4.mjs b/evidence/native-parallel-review9/s4.mjs new file mode 100644 index 000000000..4bb8fa470 --- /dev/null +++ b/evidence/native-parallel-review9/s4.mjs @@ -0,0 +1,20 @@ +import { SURF, NAT, TAIL5, W2 } from './s.mjs'; +const PATCH = `const I = Function('return this')()['Pro' + 'mise']; +const resolve = I.resolve; +let gate; +I.resolve = function (x) { + if (this !== I || !(x instanceof I) || !/at (Promise|Function)\\.all /.test(new Error().stack)) return resolve.call(this, x); + if (gate === undefined) { + let open; const g = new I(r => { open = r; }); g.open = open; gate = g; + queueMicrotask(() => { gate = undefined; }); + } + const g = gate; + x.then(v => g.open(v), () => {}); + return g; +}; +`; +export default [ + { name: 'R5n', sides: [['head', 'head'], ['base', 'base']], files: { + 'chain.flow.ts': `${SURF}\nimport './lib/p.mjs';\nexport default flow('r5n', async f => {\n${W2}${NAT}${TAIL5}`, + 'lib/p.mjs': PATCH } }, +]; diff --git a/evidence/native-parallel-review9/s7.mjs b/evidence/native-parallel-review9/s7.mjs new file mode 100644 index 000000000..dc7ed4882 --- /dev/null +++ b/evidence/native-parallel-review9/s7.mjs @@ -0,0 +1,182 @@ +// Review-7 new attack scenarios for flows#667 (head e3503c08). +import { SURF, flowSrc, NAT, W2, TAIL5 } from './s.mjs'; +const HS = [['head', 'head'], ['base', 'base']]; +const S = []; +const add = (s) => S.push({ sides: HS, ...s }); +const STALL = ` await f.run('test -f release || { touch stalled; sleep 120; }; printf Z >> effects', { timeout: '5m' });`; +const perm = (letters) => (e) => e.length === letters.length && [...letters].every(c => e.split(c).length - 1 === letters.split(c).length - 1); + +// ---- HY: the instrumentation re-evaluates the body with a parameter named +// __certifyParallelBranch; an authored binding of that name captures it. +add({ name: 'HY1', files: { 'chain.flow.ts': flowSrc('hy1', ` + const __certifyParallelBranch = async () => { await f.run('printf P >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B >> effects'); }; + await Promise.all([__certifyParallelBranch(), b()]);`) }, + expect: r => perm('PBZ')(r.effects) }); +add({ name: 'HY1s', files: { 'chain.flow.ts': `${SURF} +export default flow('hy1s', async f => { + const __certifyParallelBranch = async () => { await f.run('printf P >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B >> effects'); }; + await Promise.all([__certifyParallelBranch(), b()]); + f.done('success'); +}); +` }, noZ: true, okIf: r => r.code === 0 && perm('PB')(r.effects) }); +add({ name: 'HY2', files: { 'chain.flow.ts': flowSrc('hy2', ` + const __certifyParallelBranch = await f.run('printf V'); + const a = async () => { await f.run('sleep 0.2; printf A >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B >> effects'); }; + await Promise.all([a(), b()]);`) }, expect: r => perm('ABZ')(r.effects) }); + +// ---- PAR: parenthesized branch-call members pass the grammar (unwrap) but +// the call-site instrumentation only wraps bare CallExpressions. +add({ name: 'PAR1', files: { 'chain.flow.ts': flowSrc('par1', ` + const a = async () => { await f.run('sleep 0.3; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + const c = async () => { await f.run('sleep 0.2; printf C'); await f.run('printf c >> effects'); }; + await Promise.all([(a()), (b()), (c())]);`) }, expect: r => perm('abcZ')(r.effects) }); +add({ name: 'PAR2', files: { 'chain.flow.ts': flowSrc('par2', ` + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + await Promise.all([((async () => { await f.run('sleep 0.3; printf A'); await f.run('printf a >> effects'); })()), b()]);`) }, + expect: r => perm('abZ')(r.effects) }); + +// ---- EQ: certified shapes whose runtime behaviour must match base. +add({ name: 'EQ1twice', files: { 'chain.flow.ts': flowSrc('eq1', ` + const a = async () => { await f.run('sleep 0.2; printf A'); await f.run('printf a >> effects'); }; + await Promise.all([a(), a()]); + await f.run('printf X >> effects');`) }, allowDupLetters: true, + expectedCounts: { 'sleep 0.2; printf A': 2, 'printf a >> effects': 2 }, expect: r => r.effects === 'aaXZ' }); +add({ name: 'EQ2ret', files: { 'chain.flow.ts': flowSrc('eq2', ` + const a = async () => { await f.run('sleep 0.3; printf A'); return await f.run('printf a'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); return await f.run('printf b'); }; + const r = await Promise.all([a(), b()]); + await f.run('printf ' + r[0] + r[1] + ' >> effects');`) }, expect: r => r.effects === 'abZ' }); +add({ name: 'EQ3midret', files: { 'chain.flow.ts': flowSrc('eq3', ` + const a = async () => { await f.run('sleep 0.2; printf A >> effects'); return await f.run('printf R >> effects'); await f.run('printf Q >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B >> effects'); }; + await Promise.all([a(), b()]); + await f.run('printf X >> effects');`) }, expect: r => perm('ABRXZ')(r.effects) && !r.effects.includes('Q') }); +add({ name: 'EQ4fail', files: { 'chain.flow.ts': flowSrc('eq4', ` + const a = async () => { await f.run('sleep 0.1; printf F >> effects; exit 1'); await f.run('printf G >> effects'); }; + const b = async () => { await f.run('sleep 0.4; printf B >> effects'); await f.run('printf C >> effects'); }; + await Promise.all([a(), b()]);`) }, okIf: r => r.code !== 0 && !r.effects.includes('G') && !r.effects.includes('C') && !r.effects.includes('Z') }); +add({ name: 'EQ5wide', files: { 'chain.flow.ts': flowSrc('eq5', ` + ${Array.from({ length: 12 }, (_, i) => `const b${i} = async () => { await f.run('sleep 0.${1 + (i * 7) % 3}; printf S${i}'); await f.run('printf ${'abcdefghijkl'[i]} >> effects'); };`).join('\n ')} + await Promise.all([${Array.from({ length: 12 }, (_, i) => `b${i}()`).join(', ')}]); + await f.run('printf X >> effects');`) }, expect: r => perm('abcdefghijklXZ')(r.effects) }); +add({ name: 'EQ5stall', files: { 'chain.flow.ts': flowSrc('eq5s', ` + ${Array.from({ length: 10 }, (_, i) => `const b${i} = async () => { await f.run('sleep 0.${1 + (i * 7) % 3}; printf S${i}'); await f.run('printf ${'abcdefghij'[i]} >> effects'); };`).join('\n ')} + const s = async () => { await f.run('sleep 0.15; printf s'); await f.run('test -f release || { touch stalled; sleep 120; }; printf Y >> effects', { timeout: '5m' }); await f.run('printf y >> effects'); }; + await Promise.all([${Array.from({ length: 10 }, (_, i) => `b${i}()`).join(', ')}, s()]); + await f.run('printf X >> effects');`) }, expect: r => perm('abcdefghijYyXZ')(r.effects) }); +add({ name: 'EQ6expr', files: { 'chain.flow.ts': flowSrc('eq6', ` + const a = async () => await f.run('sleep 0.2; printf A >> effects'); + const b = async () => await Promise.all([f.run('sleep 0.1; printf B >> effects'), f.run('sleep 0.3; printf C >> effects')]); + await Promise.all([a(), b()]); + await f.run('printf X >> effects');`) }, expect: r => perm('ABCXZ')(r.effects) }); +add({ name: 'EQ7record', files: { 'chain.flow.ts': flowSrc('eq7', ` + const a = async () => { const r = await f.run('sleep 0.2; exit 3', { onNonZero: 'record' }); await f.run('printf R' + r.exitCode + ' >> effects'); }; + const b = async () => { const v = await f.run('sleep 0.1; printf B'); await f.run('printf ' + v + ' >> effects'); }; + await Promise.all([a(), b()]); + await f.run('printf X >> effects');`) }, expect: r => r.effects.includes('R3') && perm('BR3XZ')(r.effects) }); +add({ name: 'EQ8throw', files: { 'chain.flow.ts': flowSrc('eq8', ` + const x = await f.run('printf W'); + const a = async () => { await f.run('printf ' + x.y.z + ' >> effects'); }; + const b = async () => { await f.run('sleep 0.2; printf B >> effects'); await f.run('printf C >> effects'); }; + await Promise.all([a(), b()]);`) }, okIf: r => r.code !== 0 && !r.effects.includes('Z') }); +// Branch whose first statement is a nested group, then a follow-up that joins +// the nested members; crash lands inside the other branch. +add({ name: 'EQ9nested', files: { 'chain.flow.ts': flowSrc('eq9', ` + await f.run('sleep 0.1; printf W'); + const a = async () => { await Promise.all([f.run('sleep 0.3; printf A1'), f.run('sleep 0.1; printf A2')]); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.2; printf B'); await f.run('test -f release || { touch stalled; sleep 120; }; printf Y >> effects', { timeout: '5m' }); await f.run('printf b >> effects'); }; + await Promise.all([a(), b()]); + await f.run('printf X >> effects');`) }, expect: r => perm('aYbXZ')(r.effects) }); + +// ---- PL: NODE_OPTIONS preloads. The entry is certified; the patch runs +// before the SDK snapshots the intrinsics, so the snapshot accepts it. +const R5PATCH = `const I = Function('return this')()['Pro' + 'mise']; +const resolve = I.resolve; +let gate; +I.resolve = function (x) { + if (this !== I || !(x instanceof I) || !/at (Promise|Function)\\.all /.test(new Error().stack)) return resolve.call(this, x); + if (gate === undefined) { + let open; const g = new I(r => { open = r; }); g.open = open; gate = g; + queueMicrotask(() => { gate = undefined; }); + } + const g = gate; + x.then(v => g.open(v), () => {}); + return g; +}; +`; +const NATW = flowSrc('pl', ` + await f.run('sleep 0.2; printf W'); +${NAT} await f.run('printf X >> effects');`); +const pl = (name, patch, extra = {}) => add({ name, env: { NODE_OPTIONS: `--import=/lib/pre.mjs` }, + files: { 'chain.flow.ts': NATW.replace("flow('pl'", `flow('${name.toLowerCase()}'`), 'lib/pre.mjs': patch }, expect: r => perm('abcXZ')(r.effects), ...extra }); +pl('PL1r5', R5PATCH); +pl('PL2then', `const t = Promise.prototype.then; +Promise.prototype.then = function then(a, b) { return t.call(this, typeof a === 'function' ? v => a(v) : a, typeof b === 'function' ? e => b(e) : b); }; +`); +pl('PL3sub', `const N = globalThis.Promise; +class P extends N {} +globalThis.Promise = P; +`); +pl('PL4ctor', `setTimeout(() => { + const N = globalThis.Promise; + class P extends N {} + Object.defineProperty(N.prototype, 'constructor', { value: P, writable: true, configurable: true }); +}, 120).unref(); +`); +pl('PL5species', `setTimeout(() => { + const N = globalThis.Promise; + class P extends N {} + Object.defineProperty(N, Symbol.species, { get() { return P; }, configurable: true }); +}, 120).unref(); +`); + +// ---- secrets in parallel branches (granted / ungranted / later) +const SEC = ` + const g = async () => { await f.run('sleep 0.1; printf G'); await f.run('printf "%s" "\${R7_TOK:-unset}" > /granted2; sleep 0.1', { secrets: ['R7_TOK'] }); }; + const u = async () => { await f.run('sleep 0.15; printf U'); await f.run('printf "%s" "\${R7_TOK:-unset}" > /ungranted2'); }; + await Promise.all([ + f.run('printf "%s" "\${R7_TOK:-unset}" > /granted; sleep 0.2', { secrets: ['R7_TOK'] }), + f.run('printf "%s" "\${R7_TOK:-unset}" > /ungranted; sleep 0.1'), + g(), u(), + ]); + await f.run('printf "%s" "\${R7_TOK:-unset}" > /later');`; +const secCheck = root => { + const fs = require('fs'); + const rd = n => { try { return fs.readFileSync(root + '/' + n, 'utf8'); } catch { return 'missing'; } }; + const cls = (n, want) => { const v = rd(n); return `${n}:${v === 'r7-secret-value' ? (want ? 'ok' : 'LEAK') : v}`; }; + return { sec: [cls('granted', true), cls('granted2', true), cls('ungranted', false), cls('ungranted2', false), cls('later', false)].join(' ') }; +}; +add({ name: 'SEC7', env: { R7_TOK: 'r7-secret-value' }, extraCheck: secCheck, noZ: false, files: { 'chain.flow.ts': flowSrc('sec7', SEC) }, + okIf: r => r.code === 0 && r.sec === 'granted:ok granted2:ok ungranted:unset ungranted2:unset later:unset' }); + +add({ name: 'PL7mid', env: { NODE_OPTIONS: `--import=/lib/pre.mjs` }, expect: r => perm('abcXZ')(r.effects), + files: { 'chain.flow.ts': flowSrc('pl7', ` + await f.run('touch /wstart; sleep 0.3; printf W'); +${NAT} await f.run('printf X >> effects');`), + 'lib/pre.mjs': `import fs from 'node:fs'; +const t = setInterval(() => { if (fs.existsSync('/wstart')) { clearInterval(t); +${R5PATCH}} }, 2); +t.unref(); +` } }); +add({ name: 'PL7neutral', env: { NODE_OPTIONS: `--import=/lib/pre.mjs` }, expect: r => perm('abcXZ')(r.effects), + files: { 'chain.flow.ts': flowSrc('pl7n', ` + await f.run('touch /wstart; sleep 0.3; printf W'); +${NAT} await f.run('printf X >> effects');`), + 'lib/pre.mjs': `import fs from 'node:fs'; +const t = setInterval(() => { if (fs.existsSync('/wstart')) { clearInterval(t); + const I = globalThis.Promise; const resolve = I.resolve; I.resolve = function resolve2(x) { return resolve.call(this, x); }; +} }, 2); +t.unref(); +` } }); +pl('PL6child', `if (process.argv.some(a => a.includes('authored-node-entry'))) setTimeout(() => {\n${R5PATCH}}, 150).unref();\n`); +pl('PL6late', `setTimeout(() => {\n${R5PATCH}}, 150).unref();\n`); +add({ name: 'SEC7m', env: { R7_TOK: 'r7-secret-value', RELAY_SECRET_ENV_NAMES: '["R7_TOK"]' }, extraCheck: secCheck, files: { 'chain.flow.ts': flowSrc('sec7m', SEC) }, + okIf: r => r.code === 0 && r.sec === 'granted:ok granted2:ok ungranted:unset ungranted2:unset later:unset' }); +add({ name: 'SEC7miss', env: { RELAY_SECRET_ENV_NAMES: '["R7_TOK"]' }, extraCheck: secCheck, files: { 'chain.flow.ts': flowSrc('sec7x', SEC) }, + okIf: r => r.code !== 0 && !/granted:/.test('') }); + +export default S; diff --git a/evidence/native-parallel-review9/s8.mjs b/evidence/native-parallel-review9/s8.mjs new file mode 100644 index 000000000..eb5fd2c2b --- /dev/null +++ b/evidence/native-parallel-review9/s8.mjs @@ -0,0 +1,160 @@ +// Review-8 new attack scenarios for flows#667 (head 3e008e9e). Run with h8.mjs. +import { SURF, flowSrc, NAT, W2, TAIL5 } from './s.mjs'; +const HS = [['head', 'head'], ['base', 'base']]; +const S = []; +const add = (s) => S.push({ sides: HS, ...s }); +const perm = (letters) => (e) => e.length === letters.length && [...letters].every(c => e.split(c).length - 1 === letters.split(c).length - 1); +const NATW = (name) => flowSrc(name, ` + await f.run('sleep 0.2; printf W'); +${NAT} await f.run('printf X >> effects');`); + +// ---- F3 bypasses. R5 patch made native-looking with a Proxy (passes the +// "[native code]" toString test), then hidden from the flag check. +const R5PROXY = `const I = Function('return this')()['Pro' + 'mise']; +const resolve = I.resolve; +let gate; +I.resolve = new Proxy(resolve, { apply(target, self, args) { + const x = args[0]; + if (self !== I || !(x instanceof I) || !/at (Promise|Function)\\.all /.test(new Error().stack)) return Reflect.apply(target, self, args); + if (gate === undefined) { + let open; const g = new I(r => { open = r; }); g.open = open; gate = g; + queueMicrotask(() => { gate = undefined; }); + } + const g = gate; + x.then(v => g.open(v), () => {}); + return g; +} }); +`; +const R5PLAIN = `const I = Function('return this')()['Pro' + 'mise']; +const resolve = I.resolve; +let gate; +I.resolve = function (x) { + if (this !== I || !(x instanceof I) || !/at (Promise|Function)\\.all /.test(new Error().stack)) return resolve.call(this, x); + if (gate === undefined) { + let open; const g = new I(r => { open = r; }); g.open = open; gate = g; + queueMicrotask(() => { gate = undefined; }); + } + const g = gate; + x.then(v => g.open(v), () => {}); + return g; +}; +`; +// Non-snapshotted intrinsic: Promise.all's own iteration of a 3-promise array +// sees only the middle member, so the aggregate resolves when b's branch does. +const ITER = `const AP = Array.prototype; const iter = AP[Symbol.iterator]; +const P = Function('return this')()['Pro' + 'mise']; +Object.defineProperty(AP, Symbol.iterator, { value: function values() { + if (this.length === 3 && this.every(x => x instanceof P)) { + const st = new Error().stack; + if (/at (Promise|Function)\\.all \\(\\)/.test(st) && !/collectMembers/.test(st)) return iter.call([this[1]]); + } + return iter.call(this); +}, writable: true, configurable: true }); +`; +const ok5 = r => perm('abcXZ')(r.effects); +add({ name: 'PL8r', nodeArgs: ['-r', '/lib/pre.cjs'], files: { 'chain.flow.ts': NATW('pl8r'), 'lib/pre.cjs': R5PROXY }, expect: ok5 }); +add({ name: 'PL8rplain', nodeArgs: ['-r', '/lib/pre.cjs'], files: { 'chain.flow.ts': NATW('pl8rplain'), 'lib/pre.cjs': R5PLAIN }, expect: ok5 }); +add({ name: 'PL8hide', env: { NODE_OPTIONS: '--import=/lib/pre.mjs' }, files: { 'chain.flow.ts': NATW('pl8hide'), 'lib/pre.mjs': `${R5PROXY}delete process.env.NODE_OPTIONS;\n` }, expect: ok5 }); +add({ name: 'PL8iter', nodeArgs: ['-r', '/lib/pre.cjs'], files: { 'chain.flow.ts': NATW('pl8iter'), 'lib/pre.cjs': ITER }, expect: ok5 }); +// Dependency patch at import time of the flow module (no preload at all): the +// installed @relayflows/surface is a shim that patches, then re-exports the real one. +const shim = (patch) => ({ + 'node_modules/@relayflows/surface/package.json': JSON.stringify({ name: '@relayflows/surface', version: '2.0.51', type: 'module', exports: { '.': './index.js', './runtime': './runtime.js' } }), + 'node_modules/@relayflows/surface/index.js': `import './patch.js';\nexport * from '/@relayflows/surface/dist/index.js';\n`, + 'node_modules/@relayflows/surface/runtime.js': `export * from '/@relayflows/surface/dist/runtime.js';\n`, + 'node_modules/@relayflows/surface/patch.js': patch, +}); +add({ name: 'PL9dep', realNodeModules: true, files: { 'chain.flow.ts': NATW('pl9dep'), ...shim(ITER) }, expect: ok5 }); +add({ name: 'PL9depsnap', realNodeModules: true, files: { 'chain.flow.ts': NATW('pl9depsnap'), ...shim(R5PROXY) }, expect: ok5 }); +add({ name: 'PL9depnone', realNodeModules: true, files: { 'chain.flow.ts': NATW('pl9depnone'), ...shim('') }, expect: ok5 }); + +// ---- Resume under a different NODE_OPTIONS than the fresh run (pinned parallel root). +for (const [n, opts] of [['RS1', '--dns-result-order=ipv4first'], ['RS2', '--unhandled-rejections=strict'], ['RS3', '--require=/lib/noop.cjs'], ['RS0', '--max-old-space-size=2048']]) { + add({ name: n, resumeEnv: { NODE_OPTIONS: opts }, files: { 'chain.flow.ts': NATW(n.toLowerCase()), 'lib/noop.cjs': 'module.exports = 1;\n' }, expect: ok5 }); + for (const side of ['head', 'base']) S.push({ name: `${n}b${side[0]}`, sides: [[side, side]], secondResume: side, resumeEnv: { NODE_OPTIONS: opts }, + files: { 'chain.flow.ts': NATW(`${n.toLowerCase()}b`), 'lib/noop.cjs': 'module.exports = 1;\n' }, expect: ok5 }); +} + +// ---- Certified natural shapes (probe8: certified=true) run end to end. +add({ name: 'DP1', files: { 'chain.flow.ts': flowSrc('dp1', ` + await f.run('sleep 0.1; printf W'); + const a = async () => { await f.run('sleep 0.3; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + await Promise.all([((a())), (((b())))]); + await f.run('printf X >> effects');`) }, expect: r => perm('abXZ')(r.effects) }); +add({ name: 'OPT1', files: { 'chain.flow.ts': flowSrc('opt1', ` + await f.run('sleep 0.1; printf W'); + const a = async () => { await f.run('sleep 0.3; printf A'); await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + await Promise.all([(a?.()), (b())]); + await f.run('printf X >> effects');`) }, expect: r => perm('abXZ')(r.effects) }); +add({ name: 'TV1', files: { 'chain.flow.ts': flowSrc('tv1', ` + const v = await f.run('sleep 0.1; printf vv'); + const a = async () => { await f.run(\`sleep 0.3; printf \${v}\`); await f.run(\`printf a\${v.length} >> effects\`); }; + const b = async () => { const r = await f.run('sleep 0.1; exit 4', { onNonZero: 'record' }); await f.run(\`printf b\${r.exitCode} >> effects\`); }; + await Promise.all([a(), b()]); + await f.run(\`printf X >> effects\`);`) }, expect: r => perm('a2b4XZ')(r.effects) && r.effects.includes('a2') && r.effects.includes('b4') }); +add({ name: 'EP1', files: { 'chain.flow.ts': flowSrc('ep1', ` + const v = await f.run('sleep 0.1; printf vv'); + const a = async () => { await f.run('sleep 0.3; printf A'); await f.run('printf a' + v['length'] + ' >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b' + (v[0] === 'v' ? 'y' : 'n') + ' >> effects'); }; + await Promise.all([a(), b()]); + await f.run('printf X >> effects');`) }, expect: r => r.effects.includes('a2') && r.effects.includes('by') && perm('a2byXZ')(r.effects) }); + +// ---- F4: thenable refusal and its neighbours (deep-forced), compared with base. +const DB = [['deep', 'deep'], ['base', 'base']]; +const deep = (name, body, extra = {}) => S.push({ name, sides: DB, files: { 'chain.flow.ts': flowSrc(name.toLowerCase(), body) }, ...extra }); +deep('FT1wrap', ` + await f.run('sleep 0.2; printf W'); + const sa = f.run('sleep 0.3; printf A'); + const th = Promise.resolve({ then: (r, j) => sa.then(r, j) }); + await Promise.all([th, f.run('sleep 0.1; printf B')]); + await f.run('printf X >> effects');`); +deep('FT2asyncStep', ` + await f.run('sleep 0.2; printf W'); + const a = async () => f.run('sleep 0.3; printf A'); + await Promise.all([a(), f.run('sleep 0.1; printf B')]); + await f.run('printf X >> effects');`); +deep('FT3retThen', ` + await f.run('sleep 0.2; printf W'); + const a = async () => { await f.run('sleep 0.3; printf A'); return { then(r) { setTimeout(() => r(1), 20); } }; }; + const b = async () => { await f.run('sleep 0.1; printf B'); }; + await Promise.all([a(), b()]); + await f.run('printf X >> effects');`); +deep('FT4awaitThen', ` + await f.run('sleep 0.2; printf W'); + const a = async () => { await f.run('sleep 0.3; printf A'); await { then(r) { setTimeout(() => r(1), 20); } }; await f.run('printf a >> effects'); }; + const b = async () => { await f.run('sleep 0.1; printf B'); await f.run('printf b >> effects'); }; + await Promise.all([a(), b()]); + await f.run('printf X >> effects');`); +deep('FT5wrapped', ` + await f.run('sleep 0.2; printf W'); + await Promise.all([{ s: f.run('sleep 0.3; printf A') }, f.run('sleep 0.1; printf B')]); + await f.run('printf X >> effects');`); + +// ---- F5: prompt failure; nothing admitted after the violation (deep-forced). +deep('F5x', ` + const a = async () => { await f.run('sleep 0.1; printf A >> effects'); await Promise.all([f.run('printf a1'), { then(r) { r(1); } }]); await f.run('printf Q >> effects'); }; + const b = async () => { await f.run('sleep 0.6; printf B >> effects'); await f.run('printf L >> effects'); }; + await Promise.all([a(), b()]);`, { okIf: r => r.code !== 0 && !/[QLZ]/.test(r.effects) }); +deep('F5w', ` + const a = async () => { await f.run('sleep 0.1; printf A >> effects'); await Promise.all([f.run('printf a1'), { then(r) { r(1); } }]); await f.run('printf Q >> effects'); }; + const b = async () => { await f.run('sleep 15; printf B >> effects'); await f.run('printf L >> effects'); }; + await Promise.all([a(), b()]);`, { okIf: r => r.code !== 0 && !/[QLZ]/.test(r.effects) && r.ms < 10000 }); + +// ---- Secrets: granted step admitted only on resume, inside a parallel branch. +const SEC8 = ` + const g = async () => { await f.run('sleep 0.1; printf G'); await f.run('test -f release || { touch stalled; sleep 120; }; printf Y >> effects', { timeout: '5m' }); await f.run('printf "%s" "\${R7_TOK:-unset}" > /granted2', { secrets: ['R7_TOK'] }); }; + const u = async () => { await f.run('sleep 0.15; printf U'); await f.run('sleep 0.3; printf "%s" "\${R7_TOK:-unset}" > /ungranted2'); }; + await Promise.all([g(), u()]); + await f.run('printf "%s" "\${R7_TOK:-unset}" > /later');`; +const sec8Check = root => { + const fs = require('fs'); + const rd = n => { try { return fs.readFileSync(root + '/' + n, 'utf8'); } catch { return 'missing'; } }; + const cls = (n, want) => { const v = rd(n); return `${n}:${v === 'r7-secret-value' ? (want ? 'ok' : 'LEAK') : v}`; }; + return { sec: [cls('granted2', true), cls('ungranted2', false), cls('later', false)].join(' ') }; +}; +add({ name: 'SEC8m', env: { R7_TOK: 'r7-secret-value', RELAY_SECRET_ENV_NAMES: '["R7_TOK"]' }, extraCheck: sec8Check, files: { 'chain.flow.ts': flowSrc('sec8m', SEC8) }, + okIf: r => r.code === 0 && r.sec === 'granted2:ok ungranted2:unset later:unset' && perm('YZ')(r.effects) }); + +export default S; diff --git a/evidence/native-parallel-review9/sdk-build.log b/evidence/native-parallel-review9/sdk-build.log new file mode 100644 index 000000000..1647e84a1 --- /dev/null +++ b/evidence/native-parallel-review9/sdk-build.log @@ -0,0 +1,3 @@ + +> @relayflows/sdk@2.0.51 build +> tsc && node scripts/make-cli-executable.mjs diff --git a/evidence/native-parallel-review9/sdk-dist-hashes.log b/evidence/native-parallel-review9/sdk-dist-hashes.log new file mode 100644 index 000000000..6c81e4919 --- /dev/null +++ b/evidence/native-parallel-review9/sdk-dist-hashes.log @@ -0,0 +1,6 @@ +6a63af0663243e8489ea27c72053fc5a68762663872e435933a6e303d389b49b packages/sdk/dist/authored-flow-lifecycle.js +ee81efe8867133f401689af2162b96867dccff344d9dde40d8933221945c0f41 packages/sdk/dist/authored-promise-graph.js +9abe15a2c28c5f5c43ed288c910c226486855f9e98b61e2aca433392ed78c211 packages/sdk/dist/authored-root.js +6a63af0663243e8489ea27c72053fc5a68762663872e435933a6e303d389b49b /w/sdk-head/dist/authored-flow-lifecycle.js +ee81efe8867133f401689af2162b96867dccff344d9dde40d8933221945c0f41 /w/sdk-head/dist/authored-promise-graph.js +9abe15a2c28c5f5c43ed288c910c226486855f9e98b61e2aca433392ed78c211 /w/sdk-head/dist/authored-root.js diff --git a/evidence/native-parallel-review9/sdk-focused-unit.log b/evidence/native-parallel-review9/sdk-focused-unit.log new file mode 100644 index 000000000..114a7ee90 --- /dev/null +++ b/evidence/native-parallel-review9/sdk-focused-unit.log @@ -0,0 +1,21 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/communication-feature-secret-scoping.test.ts (1 test) 14ms + ✓ tests/authored-parallel-body.test.ts (5 tests) 30ms + ✓ tests/authored-parallel-eligibility.test.ts (10 tests) 57ms + ✓ tests/authored-step-graph.test.ts (27 tests) 923ms + ✓ the authored step DAG > does not walk a long-running step's chain when a wrapper awaits it 361ms + ✓ tests/authored-step-secrets.test.ts (1 test) 25ms +(node:35386) [FLOWS_ROOT_LEASE_LOST] Warning: authored root run_id=root-run attempt=1: lease_conflict: attempt has no active worker lease. Waiting for the kernel to retry it. +(Use `node --trace-warnings ...` to show where the warning was created) + ✓ tests/worker-feature-secret-scoping.test.ts (2 tests) 851ms + ✓ agent worker uses the negotiated daemon capability for its real child 475ms + ✓ llm worker uses the negotiated daemon capability for its real child 376ms + ✓ tests/authored-root.test.ts (40 tests) 540ms + ✓ tests/authored-flow-lifecycle-executor.test.ts (47 tests) 662ms + + Test Files 8 passed (8) + Tests 133 passed (133) + Start at 01:46:27 + Duration 2.81s (transform 1.34s, setup 267ms, collect 8.48s, tests 3.10s, environment 1ms, prepare 453ms) diff --git a/evidence/native-parallel-review9/sdk-secrets-live.log b/evidence/native-parallel-review9/sdk-secrets-live.log new file mode 100644 index 000000000..d8ad6ac72 --- /dev/null +++ b/evidence/native-parallel-review9/sdk-secrets-live.log @@ -0,0 +1,11 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-step-secrets-live.test.ts (2 tests) 1787ms + ✓ an authored shell child sees a delivered token only when its own f.run grants it 1042ms + ✓ parallel authored shell children keep their own secret grants 744ms + + Test Files 1 passed (1) + Tests 2 passed (2) + Start at 01:46:27 + Duration 4.30s (transform 878ms, setup 73ms, collect 1.97s, tests 1.79s, environment 0ms, prepare 113ms) diff --git a/evidence/native-parallel-review9/sdk-typecheck-tests.log b/evidence/native-parallel-review9/sdk-typecheck-tests.log new file mode 100644 index 000000000..3b1c199e9 --- /dev/null +++ b/evidence/native-parallel-review9/sdk-typecheck-tests.log @@ -0,0 +1,3 @@ + +> @relayflows/sdk@2.0.51 typecheck:tests +> tsc -p tsconfig.tests.json diff --git a/evidence/native-parallel-review9/sdk-typecheck.log b/evidence/native-parallel-review9/sdk-typecheck.log new file mode 100644 index 000000000..b41e9a5e0 --- /dev/null +++ b/evidence/native-parallel-review9/sdk-typecheck.log @@ -0,0 +1,3 @@ + +> @relayflows/sdk@2.0.51 typecheck +> tsc --noEmit && tsc -p tsconfig.type-tests.json diff --git a/evidence/native-parallel-review9/timing7.mjs b/evidence/native-parallel-review9/timing7.mjs new file mode 100644 index 000000000..8c9dab856 --- /dev/null +++ b/evidence/native-parallel-review9/timing7.mjs @@ -0,0 +1,55 @@ +// Native shape timing: 3 x 300 ms routes, each followed by a 100 ms dependent, then a join. +// Alternates head and base, 1 warm-up each, then N measured pairs. Timestamps come from the +// shell children themselves (date +%s%3N), so overlap is measured on the effects, not the journal. +import fs from 'node:fs'; +import path from 'node:path'; +import { spawnSync } from 'node:child_process'; +const N = Number(process.argv[2] ?? 10); +const SIDES = { + head: { cli: '/w/head/packages/sdk/dist/cli.js', nm: '/w/head/packages/sdk/node_modules' }, + base: { cli: '/w/base/packages/sdk/dist/cli.js', nm: '/w/base/packages/sdk/node_modules' }, +}; +const step = (tag, secs) => `echo "${tag}0 $(date +%s%3N)" >> t; sleep ${secs}; echo "${tag}1 $(date +%s%3N)" >> t`; +const SRC = `import { flow } from '@relayflows/surface'; +export default flow('timing', async f => { + const a = async () => { await f.run('${step('RA', 0.3)}'); await f.run('${step('DA', 0.1)}'); }; + const b = async () => { await f.run('${step('RB', 0.3)}'); await f.run('${step('DB', 0.1)}'); }; + const c = async () => { await f.run('${step('RC', 0.3)}'); await f.run('${step('DC', 0.1)}'); }; + await Promise.all([a(), b(), c()]); + f.done('success'); +}); +`; +function once(side, i) { + const root = `/w/runs/timing/${side}-${i}`; + fs.rmSync(root, { recursive: true, force: true }); + fs.mkdirSync(root, { recursive: true }); + fs.writeFileSync(path.join(root, 'package.json'), '{"type":"module"}'); + fs.symlinkSync(SIDES[side].nm, path.join(root, 'node_modules')); + fs.writeFileSync(path.join(root, 'chain.flow.ts'), SRC); + const t0 = Date.now(); + const r = spawnSync(process.execPath, [SIDES[side].cli, 'run', '--no-observer-link', '--json', '--data-dir', path.join(root, 'data'), path.join(root, 'chain.flow.ts'), '--input', '{}'], + { cwd: root, env: { ...process.env, RELAYFLOWD_BIN: '/w/relayflowd-main' }, encoding: 'utf8' }); + const cli = Date.now() - t0; + const t = Object.fromEntries(fs.readFileSync(path.join(root, 't'), 'utf8').trim().split('\n').map(l => l.split(' ')).map(([k, v]) => [k, Number(v)])); + const routes = ['A', 'B', 'C'].map(x => [t[`R${x}0`], t[`R${x}1`]]); + const deps = ['A', 'B', 'C'].map(x => [t[`D${x}0`], t[`D${x}1`]]); + const overlap = (iv) => Math.max(...iv.map(v => v[0])) < Math.min(...iv.map(v => v[1])); + const first = Math.min(...routes.map(v => v[0])); + const last = Math.max(...deps.map(v => v[1])); + const mode = JSON.parse(spawnSync('python3', ['-c', `import sqlite3,json,glob +for f in sorted(glob.glob('${root}/data/runs/*.sqlite3')): + r=sqlite3.connect(f).execute("select payload from entries where entry_type='run.spawned' order by seq limit 1").fetchone() + s=json.loads(r[0]).get('spec',{}).get('steps',[{}])[0] + if s.get('id')=='authored-root': print(json.dumps(json.loads(s['instruction']).get('executionMode','absent'))); break`], { encoding: 'utf8' }).stdout || '"?"'); + fs.rmSync(root, { recursive: true, force: true }); + return { side, i, code: r.status, mode, cli, body: last - first, routeSpread: Math.max(...routes.map(v => v[0])) - first, + routesOverlap: overlap(routes), depsOverlap: overlap(deps) }; +} +const out = { head: [], base: [] }; +once('head', -1); once('base', -1); +for (let i = 0; i < N; i++) for (const side of i % 2 ? ['base', 'head'] : ['head', 'base']) { const r = once(side, i); out[side].push(r); console.log(JSON.stringify(r)); } +const q = (xs, p) => { const s = [...xs].sort((a, b) => a - b); return s[Math.min(s.length - 1, Math.floor(p * (s.length - 1) + 0.5))]; }; +for (const side of ['head', 'base']) { + const rs = out[side]; + console.log(`TIMING ${side} mode=${[...new Set(rs.map(r => r.mode))]} codes=${[...new Set(rs.map(r => r.code))]} body p50=${q(rs.map(r => r.body), 0.5)} max=${Math.max(...rs.map(r => r.body))} cli p50=${q(rs.map(r => r.cli), 0.5)} max=${Math.max(...rs.map(r => r.cli))} spread p50=${q(rs.map(r => r.routeSpread), 0.5)} routesOverlap=${rs.filter(r => r.routesOverlap).length}/${rs.length} depsOverlap=${rs.filter(r => r.depsOverlap).length}/${rs.length}`); +} diff --git a/packages/sdk/src/authored-flow-lifecycle.ts b/packages/sdk/src/authored-flow-lifecycle.ts index 72e712fc0..ffbb6f241 100644 --- a/packages/sdk/src/authored-flow-lifecycle.ts +++ b/packages/sdk/src/authored-flow-lifecycle.ts @@ -1,7 +1,7 @@ import { AsyncLocalStorage, executionAsyncId } from 'node:async_hooks'; import { AuthoredFlowExecutionError } from './authored-flow-error.js'; import { AuthoredPromiseGraph } from './authored-promise-graph.js'; -import { AuthoredStepGraph } from './authored-step-graph.js'; +import { AuthoredStepGraph, promiseOutcome } from './authored-step-graph.js'; import type { AuthoredStepEdges } from './authored-step-index.js'; type OperationToken = object; @@ -10,6 +10,12 @@ interface PromiseAllGroup { aggregate: number; members: ReadonlySet; } +interface AllSettlementGuard { + readonly aggregate: Promise; + readonly aggregateId: number; + readonly combinator: 'all' | 'allSettled'; + readonly members: readonly number[]; +} export interface AuthoredOperationInvocation { readonly asyncId: number; bound: boolean; @@ -27,6 +33,11 @@ const nativePromisePrototypeConstructor = Promise.prototype.constructor; const nativePromiseSpeciesDescriptor = Object.getOwnPropertyDescriptor(Promise, Symbol.species); const nativePromiseSpeciesGetter = nativePromiseSpeciesDescriptor?.get; const nativeFunctionToString = Function.prototype.toString; +const nativeArrayIteratorDescriptor = Object.getOwnPropertyDescriptor(Array.prototype, Symbol.iterator); +const nativeArrayIterator = Array.prototype[Symbol.iterator]; +const nativeArrayIteratorPrototype = Object.getPrototypeOf(nativeArrayIterator.call([])) as Iterator; +const nativeArrayIteratorNextDescriptor = Object.getOwnPropertyDescriptor(nativeArrayIteratorPrototype, 'next'); +const nativeArrayIteratorNext = nativeArrayIteratorPrototype.next; const activeLifecycle = new AsyncLocalStorage(); const stepOwners = new WeakMap typeof value === 'function const nativeAtModuleLoad = [ nativePromiseConstructor, nativePromiseThen, nativePromiseCatch, nativePromiseFinally, nativePromiseResolve, nativePromiseReject, nativePromisePrototypeConstructor, - nativePromiseSpeciesGetter, nativeFunctionToString, ...Object.values(nativeCombinators), + nativePromiseSpeciesGetter, nativeFunctionToString, nativeArrayIterator, + nativeArrayIteratorNext, ...Object.values(nativeCombinators), ].every(originallyNative); function sameDescriptor(actual: PropertyDescriptor | undefined, original: PropertyDescriptor | undefined): boolean { @@ -87,9 +99,31 @@ function sameDescriptor(actual: PropertyDescriptor | undefined, original: Proper /** Preloaded code can replace an intrinsic before this module takes its snapshot. */ function authoredProcessHasPreload(): boolean { - const preload = /--(?:import|require|loader|experimental-loader)(?:=|\s|$)|-r(?:=|\s|\S)/u; - return process.execArgv.some(arg => preload.test(arg)) - || preload.test(process.env['NODE_OPTIONS'] ?? ''); + const preload = (arg: string): boolean => arg === '-r' || arg.startsWith('-r') + || ['--import', '--require', '--loader', '--experimental-loader'] + .some(flag => arg === flag || arg.startsWith(`${flag}=`)); + return process.execArgv.some(preload) + || nodeOptionTokens(process.env['NODE_OPTIONS'] ?? '').some(preload); +} + +/** NODE_OPTIONS is a command-line string, while execArgv is already tokenized. */ +function nodeOptionTokens(options: string): string[] { + const tokens: string[] = []; + let token = ''; + let quote: '"' | "'" | undefined; + let escaped = false; + for (const char of options) { + if (escaped) { token += char; escaped = false; continue; } + if (char === '\\' && quote !== "'") { escaped = true; continue; } + if (char === quote) { quote = undefined; continue; } + if ((char === '"' || char === "'") && quote === undefined) { quote = char; continue; } + if (/\s/u.test(char) && quote === undefined) { + if (token.length > 0) tokens.push(token); + token = ''; + } else token += char; + } + if (token.length > 0) tokens.push(token); + return tokens; } const observedCombinators: Record = Object.fromEntries( @@ -99,11 +133,16 @@ const observedCombinators: Record = Object.fromEntri this: PromiseConstructor, values: Iterable, ): Promise { - const members = collectMembers(values); - if (members === undefined) return native.call(this, values); const lifecycle = activeLifecycle.getStore(); + const declared = lifecycle?.captureParallelArrayMembers(values); + const members = collectMembers(values); + if (members === undefined) { + if (declared !== undefined) lifecycle?.refuseUnsafeCombinator( + `parallel Promise.${name} could not inspect its array members`); + return native.call(this, values); + } if (lifecycle === undefined) return native.call(this, members); - return lifecycle.observeCombinator(native, this, members, name); + return lifecycle.observeCombinator(native, this, members, name, declared); }; Object.defineProperty(observed, 'name', { value: name, configurable: true }); Object.defineProperty(observed, 'length', { value: 1, configurable: true }); @@ -117,6 +156,12 @@ let combinatorObservers = 0; export function parallelPromiseIntrinsicsIntact(): boolean { if (!nativeAtModuleLoad || authoredProcessHasPreload() || Function.prototype.toString !== nativeFunctionToString + || !sameDescriptor(Object.getOwnPropertyDescriptor(Array.prototype, Symbol.iterator), + nativeArrayIteratorDescriptor) + || Array.prototype[Symbol.iterator] !== nativeArrayIterator + || !sameDescriptor(Object.getOwnPropertyDescriptor(nativeArrayIteratorPrototype, 'next'), + nativeArrayIteratorNextDescriptor) + || nativeArrayIteratorPrototype.next !== nativeArrayIteratorNext || Promise !== nativePromiseConstructor || Promise.prototype !== nativePromisePrototype || !sameDescriptor(Object.getOwnPropertyDescriptor(Promise.prototype, 'constructor'), nativePromisePrototypeConstructorDescriptor) @@ -177,6 +222,8 @@ export class AuthoredFlowLifecycle { private readonly invocations = new Map(); private readonly promiseAllAggregates = new Map>(); private readonly promiseAllGroups: PromiseAllGroup[] = []; + private readonly allSettlementGuards: AllSettlementGuard[] = []; + private invalidAllSettlement = false; private readonly callbackFailures = new Map(); private completionAsyncId: number | undefined; private closed = false; @@ -210,6 +257,19 @@ export class AuthoredFlowLifecycle { return activeLifecycle.run(this, body); } + /** Compare the literal array's indexed members with its iterable view. */ + captureParallelArrayMembers(values: Iterable): readonly unknown[] | undefined { + if (this.refuseUnknownThenable === undefined || !Array.isArray(values)) return undefined; + const members = new Array(values.length); + for (let i = 0; i < values.length; i++) members[i] = values[i]; + return members; + } + + refuseUnsafeCombinator(message: string): never { + this.refuseUnknownThenable?.(message); + throw new AuthoredFlowExecutionError('step_failed', message); + } + registerStep(step: object, operation: OperationToken): void { stepOwners.set(step, { lifecycle: this, operation }); } @@ -244,6 +304,10 @@ export class AuthoredFlowLifecycle { operationAggregates.add(aggregateId); } this.promiseAllGroups.push({ aggregate: aggregateId, members: memberIds }); + if (this.refuseUnknownThenable !== undefined + && (combinator === 'all' || combinator === 'allSettled')) { + this.allSettlementGuards.push({ aggregate, aggregateId, combinator, members: awaitedMembers }); + } this.registrations++; this.stepGraph.registerAggregate(aggregateId, aggregate, combinator, awaitedMembers, created); } @@ -253,7 +317,16 @@ export class AuthoredFlowLifecycle { constructor: PromiseConstructor, values: readonly unknown[], name: CombinatorName, + declared?: readonly unknown[], ): Promise { + if (declared !== undefined) { + if (declared.length !== values.length) this.refuseUnsafeCombinator( + `parallel Promise.${name} iterated a different set of array members`); + for (let i = 0; i < declared.length; i++) { + if (declared[i] !== values[i]) this.refuseUnsafeCombinator( + `parallel Promise.${name} iterated a different set of array members`); + } + } // Check before the native combinator reads any unknown `then` getter. A // member with no tracked promise id or owned step has no causal identity // to expand on a later follow-up. This also covers proxy thenables whose @@ -263,8 +336,7 @@ export class AuthoredFlowLifecycle { if ((typeof value !== 'object' && typeof value !== 'function') || value === null) continue; if (stepOwners.get(value)?.lifecycle === this || this.graph.idOf(value) !== undefined) continue; const message = `parallel Promise.${name} contains a member with no tracked provenance`; - this.refuseUnknownThenable(message); - throw new AuthoredFlowExecutionError('step_failed', message); + this.refuseUnsafeCombinator(message); } } const { value, created } = this.graph.captureCombinator(() => native.call(constructor, values)); @@ -313,7 +385,30 @@ export class AuthoredFlowLifecycle { readonly truncated: boolean; readonly unregisteredAggregate: boolean; } { - return this.stepGraph.predecessorsAt(executionAsyncId()); + const frontier = this.stepGraph.predecessorsAt(executionAsyncId()); + return this.hasInvalidAllSettlement() + ? { ...frontier, unregisteredAggregate: true } + : frontier; + } + + /** A fulfilled all (or settled allSettled) must have waited for every member. */ + private hasInvalidAllSettlement(): boolean { + if (this.invalidAllSettlement) return true; + let retained = 0; + for (const guard of this.allSettlementGuards) { + if (this.graph.isPending(guard.aggregateId)) { + this.allSettlementGuards[retained++] = guard; + continue; + } + if ((guard.combinator === 'allSettled' || promiseOutcome(guard.aggregate) === 'fulfilled') + && guard.members.some(id => this.graph.isPending(id))) { + this.invalidAllSettlement = true; + return true; + } + // Once an honest aggregate has settled, its invariant cannot change. + } + this.allSettlementGuards.length = retained; + return false; } /** The observation contract must still be installed when a child is admitted. */ @@ -456,6 +551,7 @@ export class AuthoredFlowLifecycle { this.invocations.clear(); this.promiseAllAggregates.clear(); this.promiseAllGroups.length = 0; + this.allSettlementGuards.length = 0; this.groupsByInvocation = undefined; this.callbackFailures.clear(); this.activeResolverProbes.length = 0; diff --git a/packages/sdk/src/authored-promise-graph.ts b/packages/sdk/src/authored-promise-graph.ts index 6d65c337e..7ea84273e 100644 --- a/packages/sdk/src/authored-promise-graph.ts +++ b/packages/sdk/src/authored-promise-graph.ts @@ -105,6 +105,10 @@ export class AuthoredPromiseGraph { return this.promiseIds.get(value); } + isPending(asyncId: number): boolean { + return this.pending.has(asyncId); + } + /** The intrinsic creates per-member reaction promises as well as its aggregate. */ captureCombinator(call: () => T): { readonly value: T; readonly created: ReadonlySet } { const created = new Set(); diff --git a/packages/sdk/src/authored-root.ts b/packages/sdk/src/authored-root.ts index 432d2261a..f10c3f65c 100644 --- a/packages/sdk/src/authored-root.ts +++ b/packages/sdk/src/authored-root.ts @@ -165,7 +165,11 @@ export async function resumeDurableAuthoredFlow( const metadata = await readAuthoredRootMetadata(journal, rootRunId); if (metadata === undefined) return undefined; assertAuthoredRuntimeAvailable(); + assertParallelResumeRuntime(metadata, rootRunId); const loaded = await loadPinnedAuthoredSource(metadata); + // Source loading itself can alter a process-wide intrinsic. Refuse before + // run.resume dispatches a pinned parallel root in that environment. + assertParallelResumeRuntime(metadata, rootRunId); if (metadata.localAgentStream !== options.localAgentStream) { throw new Error('authored root local agent surface mismatch'); } @@ -201,6 +205,15 @@ export async function resumeDurableAuthoredFlow( } } +function assertParallelResumeRuntime(metadata: AuthoredRootMetadata, rootRunId: string): void { + if (metadata.identityVersion !== 2 || metadata.executionMode !== 'parallel' + || parallelPromiseIntrinsicsIntact()) return; + const error = new AuthoredFlowExecutionError('unsupported_promise_lifecycle', + `pinned parallel root ${rootRunId} cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.`); + error.rootRunId = rootRunId; + throw error; +} + /** * A root parked on an unanswered `f.human` will not be dispatched: the * kernel holds it in `needs_human` until `event.emit` closes the wait. Report diff --git a/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts b/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts index 99d911940..960a0c627 100644 --- a/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts +++ b/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts @@ -86,9 +86,83 @@ describe('authored flow lifecycle through the journal executor', () => { process.execArgv.push('--require', '/tmp/preload.cjs'); try { expect(parallelPromiseIntrinsicsIntact(), 'execArgv preload').toBe(false); } finally { process.execArgv.splice(-2); } + for (const flag of [ + '--dns-result-order=ipv4first', '--unhandled-rejections=strict', + '--report-uncaught-exception', '--redirect-warnings=/tmp/warnings', + '--experimental-require-module', '--max-old-space-size=512', + ]) { + process.execArgv.push(flag); + try { expect(parallelPromiseIntrinsicsIntact(), `execArgv ${flag}`).toBe(true); } + finally { process.execArgv.pop(); } + try { + process.env['NODE_OPTIONS'] = flag; + expect(parallelPromiseIntrinsicsIntact(), `NODE_OPTIONS ${flag}`).toBe(true); + } finally { + if (nodeOptions === undefined) delete process.env['NODE_OPTIONS']; + else process.env['NODE_OPTIONS'] = nodeOptions; + } + } + for (const flag of ['-r', '-r/tmp/preload.cjs', '--require', '--require=/tmp/preload.cjs', + '--import=/tmp/preload.mjs', '--loader=/tmp/loader.mjs', '--experimental-loader=/tmp/loader.mjs']) { + process.execArgv.push(flag); + try { expect(parallelPromiseIntrinsicsIntact(), `execArgv ${flag}`).toBe(false); } + finally { process.execArgv.pop(); } + try { + process.env['NODE_OPTIONS'] = flag; + expect(parallelPromiseIntrinsicsIntact(), `NODE_OPTIONS ${flag}`).toBe(false); + } finally { + if (nodeOptions === undefined) delete process.env['NODE_OPTIONS']; + else process.env['NODE_OPTIONS'] = nodeOptions; + } + } + const iterator = Object.getOwnPropertyDescriptor(Array.prototype, Symbol.iterator)!; + const arrayIteratorPrototype = Object.getPrototypeOf([][Symbol.iterator]()) as Iterator; + const next = Object.getOwnPropertyDescriptor(arrayIteratorPrototype, 'next')!; + let iteratorDetected: boolean; + try { + Object.defineProperty(Array.prototype, Symbol.iterator, { ...iterator, value: function* () {} }); + iteratorDetected = parallelPromiseIntrinsicsIntact(); + } finally { Object.defineProperty(Array.prototype, Symbol.iterator, iterator); } + expect(iteratorDetected!, 'Array iterator').toBe(false); + let nextDetected: boolean; + try { + Object.defineProperty(arrayIteratorPrototype, 'next', { ...next, value: () => ({ done: true }) }); + nextDetected = parallelPromiseIntrinsicsIntact(); + } finally { Object.defineProperty(arrayIteratorPrototype, 'next', next); } + expect(nextDetected!, 'Array iterator next').toBe(false); expect(parallelPromiseIntrinsicsIntact()).toBe(true); }); + it('refuses a settled all with an in-flight member before the next child admission', () => { + for (const combinator of ['all', 'allSettled'] as const) { + const lifecycle = new AuthoredFlowLifecycle(() => {}); + try { + lifecycle.runBody(() => { + const pending = new Promise(() => {}); + const aggregate = Promise.resolve('already settled'); + lifecycle.registerCombinator([pending], aggregate, combinator, new Set()); + expect(lifecycle.invocationPredecessors().unregisteredAggregate).toBe(true); + }); + } finally { lifecycle.close(); } + } + }); + + it('refuses an iterable view that omits a literal array member', () => { + const nativeAll = Promise.all as Parameters[0]; + const violations: string[] = []; + const lifecycle = new AuthoredFlowLifecycle(message => violations.push(message)); + try { + lifecycle.runBody(() => { + const a = Promise.resolve('A'); + const b = Promise.resolve('B'); + const declared = lifecycle.captureParallelArrayMembers([a, b]); + expect(() => lifecycle.observeCombinator(nativeAll, Promise, [b], 'all', declared)) + .toThrow(/different set of array members/u); + }); + expect(violations).toEqual(['parallel Promise.all iterated a different set of array members']); + } finally { lifecycle.close(); } + }); + it('refuses untracked thenables before invoking their user-supplied then', () => { const violations: string[] = []; const lifecycle = new AuthoredFlowLifecycle(message => violations.push(message)); diff --git a/packages/sdk/tests/authored-root.test.ts b/packages/sdk/tests/authored-root.test.ts index 7258b62ce..09fb3ee97 100644 --- a/packages/sdk/tests/authored-root.test.ts +++ b/packages/sdk/tests/authored-root.test.ts @@ -634,6 +634,30 @@ describe('durable authored root', () => { expect(journal.peer.completions).toEqual([{ attempt: 2, reason: 'success' }]); }); + it('refuses an unsafe pinned parallel resume before dispatch without failing its root', async () => { + const loaded = await fixture(); + const journal = new RootJournal(); + const spawned = spawnedEntry(loaded); + const step = (spawned as { payload: { spec: { steps: Array<{ instruction: string }> } } }) + .payload.spec.steps[0]!; + step.instruction = JSON.stringify({ ...JSON.parse(step.instruction) as object, + kind: 'relayflows.authored-root.parallel.v2', identityVersion: 2, executionMode: 'parallel' }); + journal.entries = [spawned]; + const previous = process.env['NODE_OPTIONS']; + try { + process.env['NODE_OPTIONS'] = '--require=/tmp/preload.cjs'; + await expect(resumeDurableAuthoredFlow(journal.runId, journal as unknown as JournalClient, + { dataDir: '/unused' })).rejects.toMatchObject({ + code: 'unsupported_promise_lifecycle', rootRunId: journal.runId, + }); + } finally { + if (previous === undefined) delete process.env['NODE_OPTIONS']; + else process.env['NODE_OPTIONS'] = previous; + } + expect(journal.resumeCalls).toBe(0); + expect(journal.peer.completions).toEqual([]); + }); + it('parks the root attempt on an unanswered f.human instead of completing it', async () => { const loaded = await fixture(false, 0, async f => { await f.human('Ship it?', { to: 'khaliq' }); f.done('success'); }); const journal = new RootJournal(); From 8f72bb36a6664eb6b113f1786b963115d46fb80b Mon Sep 17 00:00:00 2001 From: Miya Date: Sat, 17 Oct 2026 02:17:29 +0200 Subject: [PATCH 13/18] Report completed parallel resumes before runtime refusal --- docs/SURFACE.md | 7 +-- packages/sdk/src/authored-flow-error.ts | 2 + packages/sdk/src/authored-root-readback.ts | 3 +- packages/sdk/src/authored-root.ts | 33 ++++++++++---- packages/sdk/src/cli/run.ts | 6 ++- packages/sdk/src/failure-kinds.ts | 2 + .../authored-flow-lifecycle-executor.test.ts | 26 +++++++++++ .../tests/authored-parallel-run-live.test.ts | 44 +++++++++++++++++++ packages/sdk/tests/authored-root.test.ts | 38 +++++++++++++++- 9 files changed, 144 insertions(+), 17 deletions(-) diff --git a/docs/SURFACE.md b/docs/SURFACE.md index ba37c1fa8..c143e224b 100644 --- a/docs/SURFACE.md +++ b/docs/SURFACE.md @@ -1037,9 +1037,10 @@ admission keys, including follow-ups after a `Promise.all` join. New parallel roots carry a distinct root kind. A 2.0.50 or 2.0.51 CLI refuses one on rollback, leaving it resumable by this or a newer CLI rather than replaying parallel follow-ups with old `run-N` identities. New serial roots retain the -original root kind and serial IDs. A pinned parallel root resumed in a process -with a Node preload or altered Promise or Array iterator intrinsic is refused -before dispatch and remains resumable in a clean process. +original root kind and serial IDs. An active pinned parallel root resumed in a +process with a Node preload or altered Promise or Array iterator intrinsic is +refused before dispatch and remains resumable in a clean process. A completed +root reports its journaled result without dispatching new work. What runs concurrently today: diff --git a/packages/sdk/src/authored-flow-error.ts b/packages/sdk/src/authored-flow-error.ts index 27e151b15..5eb7d6941 100644 --- a/packages/sdk/src/authored-flow-error.ts +++ b/packages/sdk/src/authored-flow-error.ts @@ -58,6 +58,8 @@ export type AuthoredFlowExecutionErrorCode = | 'unsupported_header' | 'unsettled_derived_work' | 'unsupported_promise_lifecycle' + /** A pinned parallel root cannot dispatch safely in this process environment. */ + | 'unsafe_parallel_runtime' | 'unsupported_workspace_permission' | 'unbounded_subscription' | 'activity_closed' diff --git a/packages/sdk/src/authored-root-readback.ts b/packages/sdk/src/authored-root-readback.ts index e80d25ee8..2bb5fd649 100644 --- a/packages/sdk/src/authored-root-readback.ts +++ b/packages/sdk/src/authored-root-readback.ts @@ -3,7 +3,6 @@ import type { AuthoredFlowExecutionResult } from './authored-flow-executor.js'; import { AuthoredFlowExecutionError } from './authored-flow-error.js'; import { isSurfaceCompletionReason } from './authored-step-output.js'; import { JournalFrameError, JournalProtocolError, type JournalClient } from './journal-client.js'; -import type { RunOutcome } from './protocol.js'; /* * Reading an authored root back from its journal, and what a failed read @@ -44,7 +43,7 @@ export async function rootStepIfPresent(journal: JournalClient, runId: string): * it back is interrupted, the outcome is still known: say so, rather than * recasting a finished run as resumable. */ -export function completedResult(journal: JournalClient, outcome: RunOutcome, rootRunId: string): Promise { +export function completedResult(journal: JournalClient, rootRunId: string): Promise { return completedRootResult(journal, rootRunId).catch(error => { // A bad frame or a journal with no stored result is a definite fact; any // other failure — interrupted, canceled, or a daemon-side read error such diff --git a/packages/sdk/src/authored-root.ts b/packages/sdk/src/authored-root.ts index f10c3f65c..c0e364464 100644 --- a/packages/sdk/src/authored-root.ts +++ b/packages/sdk/src/authored-root.ts @@ -133,7 +133,7 @@ export async function executeDurableAuthoredFlow( options.lifecycle?.onRunReceipt?.({ runId: outcome.run_id, flow: definition.name }); if (outcome.status === 'completed') { dispatchWait.cancel(); - return await completedResult(journal, outcome, outcome.run_id); + return await completedResult(journal, outcome.run_id); } assertRootCanDispatch(outcome); await releaseHelperReceiptWaits(journal, outcome.run_id); @@ -164,14 +164,22 @@ export async function resumeDurableAuthoredFlow( ): Promise { const metadata = await readAuthoredRootMetadata(journal, rootRunId); if (metadata === undefined) return undefined; + if (metadata.localAgentStream !== options.localAgentStream) { + throw new Error('authored root local agent surface mismatch'); + } + const completed = await completedParallelRootOrAssertRuntime(metadata, rootRunId, journal); + if (completed !== undefined) { + options.lifecycle?.onRunReceipt?.({ runId: rootRunId, flow: metadata.flowName }); + return completed; + } assertAuthoredRuntimeAvailable(); - assertParallelResumeRuntime(metadata, rootRunId); const loaded = await loadPinnedAuthoredSource(metadata); // Source loading itself can alter a process-wide intrinsic. Refuse before // run.resume dispatches a pinned parallel root in that environment. - assertParallelResumeRuntime(metadata, rootRunId); - if (metadata.localAgentStream !== options.localAgentStream) { - throw new Error('authored root local agent surface mismatch'); + const completedAfterLoad = await completedParallelRootOrAssertRuntime(metadata, rootRunId, journal); + if (completedAfterLoad !== undefined) { + options.lifecycle?.onRunReceipt?.({ runId: rootRunId, flow: metadata.flowName }); + return completedAfterLoad; } const stream = rootStreamFromMetadata(await rootKernelStep(journal, rootRunId)); const peer = journal.createPeer(); @@ -189,7 +197,7 @@ export async function resumeDurableAuthoredFlow( options.lifecycle?.onRunReceipt?.({ runId: rootRunId, flow: metadata.flowName }); if (outcome.status === 'completed') { dispatchWait.cancel(); - return await completedResult(journal, outcome, rootRunId); + return await completedResult(journal, rootRunId); } assertRootCanDispatch(outcome); await assertNoOpenHumanWait(journal, outcome); @@ -205,10 +213,17 @@ export async function resumeDurableAuthoredFlow( } } -function assertParallelResumeRuntime(metadata: AuthoredRootMetadata, rootRunId: string): void { +async function completedParallelRootOrAssertRuntime( + metadata: AuthoredRootMetadata, rootRunId: string, journal: JournalClient, +): Promise { if (metadata.identityVersion !== 2 || metadata.executionMode !== 'parallel' - || parallelPromiseIntrinsicsIntact()) return; - const error = new AuthoredFlowExecutionError('unsupported_promise_lifecycle', + || parallelPromiseIntrinsicsIntact()) return undefined; + // A completed root has nothing left to dispatch. A read-only snapshot avoids + // refusing it under a preload while preserving the pre-dispatch guard for + // an active root. Readback still uses the journaled authored verdict. + const snapshot = await journal.runGet(rootRunId); + if (snapshot.status === 'completed') return completedResult(journal, rootRunId); + const error = new AuthoredFlowExecutionError('unsafe_parallel_runtime', `pinned parallel root ${rootRunId} cannot resume while a Promise or Array intrinsic is replaced or a Node preload is active. The run remains resumable in a clean process.`); error.rootRunId = rootRunId; throw error; diff --git a/packages/sdk/src/cli/run.ts b/packages/sdk/src/cli/run.ts index baf0855bd..ebd85fc8d 100644 --- a/packages/sdk/src/cli/run.ts +++ b/packages/sdk/src/cli/run.ts @@ -415,9 +415,11 @@ export async function resumeFlow( return { exitCode: 2, report: { ...base, runId, socketPath, diagnostics: [{ severity: 'refusal', kind: 'human_influenced_run', message: error.message.replace(/^human_influenced_run: /, '') }] } }; } - if (error instanceof AuthoredFlowExecutionError && error.code === 'unsupported_promise_lifecycle') { + if (error instanceof AuthoredFlowExecutionError + && (error.code === 'unsafe_parallel_runtime' || error.code === 'unsupported_promise_lifecycle')) { return { exitCode: 2, report: { ...base, runId, socketPath, - diagnostics: [{ severity: 'refusal', kind: 'invalid_spec', message: error.message }] } }; + diagnostics: [{ severity: 'refusal', + kind: error.code === 'unsafe_parallel_runtime' ? error.code : 'invalid_spec', message: error.message }] } }; } if (error instanceof AuthoredFlowExecutionError && (error.code === 'helper_slack.credential_missing' || error.code === 'helper_slack.mount_required' diff --git a/packages/sdk/src/failure-kinds.ts b/packages/sdk/src/failure-kinds.ts index 617867535..df7457c5a 100644 --- a/packages/sdk/src/failure-kinds.ts +++ b/packages/sdk/src/failure-kinds.ts @@ -134,6 +134,8 @@ export const RUN_FAILURE_KINDS = [ 'run_parked', 'run_declined', 'run_unavailable', + /** A pinned parallel root is still active, but this process cannot safely dispatch it. */ + 'unsafe_parallel_runtime', /** A predicate `.gate(fn)` judged false; the verdict is journaled as `.gate`. */ 'gate_failed', /** `flows answer` named a wait the run is not asking: unknown, or already answered. */ diff --git a/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts b/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts index 960a0c627..71524c503 100644 --- a/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts +++ b/packages/sdk/tests/authored-flow-lifecycle-executor.test.ts @@ -26,6 +26,32 @@ const handmadeAll = (values: readonly PromiseLike[]): Promise => }); describe('authored flow lifecycle through the journal executor', () => { + it('parses whole NODE_OPTIONS flags, including quoted values and preloads', () => { + const previous = process.env['NODE_OPTIONS']; + try { + for (const options of [ + '--dns-result-order=ipv4first', '--unhandled-rejections=strict', + '--max-old-space-size=2048', '--enable-source-maps', '--trace-warnings', + '--title="workflow -r --require=only-text"', + ]) { + process.env['NODE_OPTIONS'] = options; + expect(parallelPromiseIntrinsicsIntact(), options).toBe(true); + } + for (const options of [ + '-r ./lib/noop.cjs', '--require=./lib/noop.cjs', + '--require="./lib/noop.cjs"', '--import=data:text/javascript,void%200', + '--loader ./lib/noop.mjs', '--experimental-loader=./lib/noop.mjs', + '--title="harmless" --require=./lib/noop.cjs', + ]) { + process.env['NODE_OPTIONS'] = options; + expect(parallelPromiseIntrinsicsIntact(), options).toBe(false); + } + } finally { + if (previous === undefined) delete process.env['NODE_OPTIONS']; + else process.env['NODE_OPTIONS'] = previous; + } + }); + it('detects replacement of every Promise primitive used by parallel joins', () => { expect(parallelPromiseIntrinsicsIntact()).toBe(true); const nativePromise = globalThis.Promise; diff --git a/packages/sdk/tests/authored-parallel-run-live.test.ts b/packages/sdk/tests/authored-parallel-run-live.test.ts index 8736b128c..ffce8a524 100644 --- a/packages/sdk/tests/authored-parallel-run-live.test.ts +++ b/packages/sdk/tests/authored-parallel-run-live.test.ts @@ -1,5 +1,6 @@ import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs'; import { spawn, spawnSync } from 'node:child_process'; +import { resolve } from 'node:path'; import { afterEach, describe, expect, it } from 'vitest'; import { AUTHORED_STEP_STREAM } from '../src/authored-step-index.js'; import { JournalClient } from '../src/journal-client.js'; @@ -34,6 +35,49 @@ function killDaemon(data: string): void { } describe('parallel authored deterministic steps', () => { + it('reports an active parallel resume as an environment refusal and a completed one as done', async () => { + const fixture = chainFixture(); + closes.push(() => fixture.close()); + writeFileSync(`${fixture.root}/noop.cjs`, 'module.exports = 1;\n'); + writeFileSync(fixture.flowPath, `import { flow } from '@relayflows/surface'; +export default flow('completed-parallel-resume', async f => { + await Promise.all([f.run('printf A >> effects'), f.run('printf B >> effects')]); + await f.run('test -f release || { touch stalled; sleep 120; }; printf X >> effects', { timeout: '5m' }); + await f.run('printf Z >> effects'); + f.done('success'); +}); +`); + const cli = fixture.invokeAsync('run', '--no-observer-link', '--json', '--data-dir', fixture.data, + fixture.flowPath, '--input', '{}'); + const cliExited = new Promise(done => cli.once('exit', () => done())); + await until(() => existsSync(`${fixture.root}/stalled`) ? true : undefined, 'parallel resume stall'); + const rootRunId = runIds(fixture.data)[0]!; + cli.kill('SIGKILL'); + await cliExited; + killDaemon(fixture.data); + writeFileSync(`${fixture.root}/release`, ''); + + const preloadResume = () => spawnSync(process.execPath, + [resolve('dist/cli.js'), 'resume', '--no-observer-link', '--json', '--data-dir', fixture.data, rootRunId], + { cwd: fixture.root, encoding: 'utf8', timeout: 60_000, + env: { ...process.env, RELAYFLOWD_BIN: fixture.binary, + NODE_OPTIONS: `--require=${fixture.root}/noop.cjs` } }); + const refused = preloadResume(); + expect(refused.status, refused.stderr + refused.stdout).toBe(2); + expect(JSON.parse(refused.stdout)).toMatchObject({ + diagnostics: [expect.objectContaining({ severity: 'refusal', kind: 'unsafe_parallel_runtime' })], + }); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual(['A', 'B']); + + const resumed = fixture.invoke('resume', '--no-observer-link', '--json', '--data-dir', fixture.data, rootRunId); + expect(resumed.status, resumed.stderr + resumed.stdout).toBe(0); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual(['A', 'B', 'X', 'Z']); + + const completed = preloadResume(); + expect(completed.status, completed.stderr + completed.stdout).toBe(0); + expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual(['A', 'B', 'X', 'Z']); + }, 150_000); + it.each(['after a first step', 'with the group first'])( 'keeps a re-exported body serial %s and reuses completed effects on resume', async (shape) => { const fixture = chainFixture(); diff --git a/packages/sdk/tests/authored-root.test.ts b/packages/sdk/tests/authored-root.test.ts index 09fb3ee97..65f584c1b 100644 --- a/packages/sdk/tests/authored-root.test.ts +++ b/packages/sdk/tests/authored-root.test.ts @@ -89,6 +89,7 @@ class RootJournal { dispatchOnStart = true; dispatchLeaseMs = 30; resumeCalls = 0; + getCalls = 0; entries: Array> = []; readonly childEntries = new Map>>(); readonly streamed = new Map(); @@ -118,6 +119,11 @@ class RootJournal { } return this.resumeStatus; } + async runGet(runId: string) { + this.getCalls += 1; + return { run_id: runId, status: this.resumeStatus.status, steps: {}, + budget: { tokens_in: 0, tokens_out: 0, dollars: '0' } }; + } async journalRead(runId: string, fromSeq = 1): Promise<{ entries: Array> }> { // Numbered like the kernel's `journal.read`, so paginating readers // (`readOpenHumanWaits`) terminate against the fake too. @@ -648,13 +654,43 @@ describe('durable authored root', () => { process.env['NODE_OPTIONS'] = '--require=/tmp/preload.cjs'; await expect(resumeDurableAuthoredFlow(journal.runId, journal as unknown as JournalClient, { dataDir: '/unused' })).rejects.toMatchObject({ - code: 'unsupported_promise_lifecycle', rootRunId: journal.runId, + code: 'unsafe_parallel_runtime', rootRunId: journal.runId, + }); + } finally { + if (previous === undefined) delete process.env['NODE_OPTIONS']; + else process.env['NODE_OPTIONS'] = previous; + } + expect(journal.resumeCalls).toBe(0); + expect(journal.getCalls).toBe(1); + expect(journal.peer.completions).toEqual([]); + }); + + it('reads a completed parallel root under a preload without dispatching it', async () => { + const loaded = await fixture(); + const journal = new RootJournal(); + const spawned = spawnedEntry(loaded); + const step = (spawned as { payload: { spec: { steps: Array<{ instruction: string }> } } }) + .payload.spec.steps[0]!; + step.instruction = JSON.stringify({ ...JSON.parse(step.instruction) as object, + kind: 'relayflows.authored-root.parallel.v2', identityVersion: 2, executionMode: 'parallel' }); + journal.entries = [spawned, completedEntry()]; + journal.resumeStatus = outcome(journal.runId, 'completed', 'success'); + const onRunReceipt = vi.fn(); + const previous = process.env['NODE_OPTIONS']; + try { + process.env['NODE_OPTIONS'] = '--require=/tmp/preload.cjs'; + await expect(resumeDurableAuthoredFlow(journal.runId, journal as unknown as JournalClient, + { dataDir: '/unused', lifecycle: { onRunReceipt } })).resolves.toMatchObject({ + rootRunId: journal.runId, completionReason: 'success', }); } finally { if (previous === undefined) delete process.env['NODE_OPTIONS']; else process.env['NODE_OPTIONS'] = previous; } + expect(journal.getCalls).toBe(1); expect(journal.resumeCalls).toBe(0); + expect(onRunReceipt).toHaveBeenCalledTimes(1); + expect(onRunReceipt).toHaveBeenCalledWith({ runId: journal.runId, flow: 'flagship' }); expect(journal.peer.completions).toEqual([]); }); From 63c9994d3a0a45cfff80f762317ea324af3d917d Mon Sep 17 00:00:00 2001 From: Miya Date: Sat, 17 Oct 2026 17:03:46 +0200 Subject: [PATCH 14/18] Document review 9 follow-up verification --- .../README.md | 31 +++++++++++++++++++ .../build.log | 3 ++ .../focused-unit.log | 12 +++++++ .../rt2-live.log | 10 ++++++ .../typecheck-tests.log | 3 ++ .../typecheck.log | 3 ++ 6 files changed, 62 insertions(+) create mode 100644 evidence/native-parallel-review9-followup/README.md create mode 100644 evidence/native-parallel-review9-followup/build.log create mode 100644 evidence/native-parallel-review9-followup/focused-unit.log create mode 100644 evidence/native-parallel-review9-followup/rt2-live.log create mode 100644 evidence/native-parallel-review9-followup/typecheck-tests.log create mode 100644 evidence/native-parallel-review9-followup/typecheck.log diff --git a/evidence/native-parallel-review9-followup/README.md b/evidence/native-parallel-review9-followup/README.md new file mode 100644 index 000000000..706ce63ac --- /dev/null +++ b/evidence/native-parallel-review9-followup/README.md @@ -0,0 +1,31 @@ +# Review 9 follow-up for #667 + +Source commit `8f72bb36` fixes the review-9 completed-root resume report. An +active pinned parallel root in an unsafe Node process refuses with diagnostic +kind `unsafe_parallel_runtime`. A completed root returns its journaled result +without dispatching work, even under a preload. The Surface contract now +states this distinction. The unit coverage checks whole-token parsing of the +six harmless flag forms and seven preload forms. + +The live RT2-style test starts a certified parallel flow, kills its first CLI +at a stalled child, and resumes under a no-op preload. That active resume +refuses with the new kind and leaves the two completed effects untouched. A +clean resume completes the flow; a later preload resume returns success with +the same effects, showing that the completed root admitted no new work. + +Checks ran on macOS against the local `relayflowd` binary; they did not use +Docker. Commands ran from the worktree root: + +```sh +npm run typecheck --prefix packages/sdk +npm run typecheck:tests --prefix packages/sdk +npm run build --prefix packages/sdk +(cd packages/sdk && npx vitest run tests/authored-root.test.ts tests/authored-flow-lifecycle-executor.test.ts) +(cd packages/sdk && RELAYFLOWD_BIN="$HOME/.relayflows-toolchain/target/ms-step-secrets/debug/relayflowd" npx vitest run tests/authored-parallel-run-live.test.ts -t 'reports an active parallel resume as an environment refusal and a completed one as done') +``` + +Typechecks and build passed. The focused unit suite passed 89/89 tests; the +live test passed once. Command output is in the adjacent `.log` files. The +earlier [review-8 evidence](../native-parallel-review9/README.md) remains +pinned to `2116fe8e` and contains the crash/resume, mutation, and timing +matrices; those matrices were not rerun for this follow-up. diff --git a/evidence/native-parallel-review9-followup/build.log b/evidence/native-parallel-review9-followup/build.log new file mode 100644 index 000000000..1647e84a1 --- /dev/null +++ b/evidence/native-parallel-review9-followup/build.log @@ -0,0 +1,3 @@ + +> @relayflows/sdk@2.0.51 build +> tsc && node scripts/make-cli-executable.mjs diff --git a/evidence/native-parallel-review9-followup/focused-unit.log b/evidence/native-parallel-review9-followup/focused-unit.log new file mode 100644 index 000000000..22898f71a --- /dev/null +++ b/evidence/native-parallel-review9-followup/focused-unit.log @@ -0,0 +1,12 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + +(node:78931) [FLOWS_ROOT_LEASE_LOST] Warning: authored root run_id=root-run attempt=1: lease_conflict: attempt has no active worker lease. Waiting for the kernel to retry it. +(Use `node --trace-warnings ...` to show where the warning was created) + ✓ tests/authored-root.test.ts (41 tests) 534ms + ✓ tests/authored-flow-lifecycle-executor.test.ts (48 tests) 635ms + + Test Files 2 passed (2) + Tests 89 passed (89) + Start at 17:03:13 + Duration 2.61s (transform 499ms, setup 20ms, collect 3.34s, tests 1.17s, environment 0ms, prepare 171ms) diff --git a/evidence/native-parallel-review9-followup/rt2-live.log b/evidence/native-parallel-review9-followup/rt2-live.log new file mode 100644 index 000000000..53efd424e --- /dev/null +++ b/evidence/native-parallel-review9-followup/rt2-live.log @@ -0,0 +1,10 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ✓ tests/authored-parallel-run-live.test.ts (42 tests | 41 skipped) 3748ms + ✓ parallel authored deterministic steps > reports an active parallel resume as an environment refusal and a completed one as done 3747ms + + Test Files 1 passed (1) + Tests 1 passed | 41 skipped (42) + Start at 17:03:16 + Duration 5.92s (transform 878ms, setup 20ms, collect 1.80s, tests 3.75s, environment 0ms, prepare 56ms) diff --git a/evidence/native-parallel-review9-followup/typecheck-tests.log b/evidence/native-parallel-review9-followup/typecheck-tests.log new file mode 100644 index 000000000..3b1c199e9 --- /dev/null +++ b/evidence/native-parallel-review9-followup/typecheck-tests.log @@ -0,0 +1,3 @@ + +> @relayflows/sdk@2.0.51 typecheck:tests +> tsc -p tsconfig.tests.json diff --git a/evidence/native-parallel-review9-followup/typecheck.log b/evidence/native-parallel-review9-followup/typecheck.log new file mode 100644 index 000000000..b41e9a5e0 --- /dev/null +++ b/evidence/native-parallel-review9-followup/typecheck.log @@ -0,0 +1,3 @@ + +> @relayflows/sdk@2.0.51 typecheck +> tsc --noEmit && tsc -p tsconfig.type-tests.json From d1891390afeec5d3ba38ed7509c62b7dd0605cf5 Mon Sep 17 00:00:00 2001 From: Miya Date: Sun, 18 Oct 2026 02:46:48 +0200 Subject: [PATCH 15/18] Keep serial alias replay check compatible with #674 --- .../native-parallel-ci-2026-10-18/README.md | 50 ++++++++++++++ .../arguments-alias-macos.log | 19 ++++++ .../branch-watch.log | 65 +++++++++++++++++++ .../main-watch.log | 25 +++++++ .../tests/authored-parallel-run-live.test.ts | 25 +++++-- 5 files changed, 179 insertions(+), 5 deletions(-) create mode 100644 evidence/native-parallel-ci-2026-10-18/README.md create mode 100644 evidence/native-parallel-ci-2026-10-18/arguments-alias-macos.log create mode 100644 evidence/native-parallel-ci-2026-10-18/branch-watch.log create mode 100644 evidence/native-parallel-ci-2026-10-18/main-watch.log diff --git a/evidence/native-parallel-ci-2026-10-18/README.md b/evidence/native-parallel-ci-2026-10-18/README.md new file mode 100644 index 000000000..72c28091a --- /dev/null +++ b/evidence/native-parallel-ci-2026-10-18/README.md @@ -0,0 +1,50 @@ +# #667 Linux artifact CI follow-up + +The `linux-x64-artifact` job at `63c9994d` failed one serial-only live test +with `run_admission_conflict` and four `flows check --watch` tests with their +5-second test timeouts. The full job log is in GitHub Actions run +`39043415569`, job `117427280321`. + +## Serial arguments-alias test + +The arguments-alias LLM fixture is certified **serial** before it is killed. +Its old assertion required every resumed run to exit zero, even though the +serial scheduler can report the existing #674 `run_admission_conflict` when +concurrent branches resume in a different order; this also occurs on +2.0.50/2.0.51. The revised test still requires serial mode, one L and one R +effect, at most one Z effect, and exactly two LLM requests. A nonzero resume +may only be exit 1 with `run_admission_conflict`. No parallel-mode expectation +changed. Its child CLI timeout is now 90 seconds so a slow macOS host does +not produce a null exit status after the fixture's former 30-second limit. + +`npm run typecheck:tests` passed. A focused six-repetition macOS run reached +the test's 240-second limit; it did not provide a result for the revised +assertions. The new Linux CI run is the required rerun of that live fixture. + +## Watch timeout comparison + +The watch test and its direct implementation files are byte-identical at +`origin/main` (`5de41849`, Flows 2.0.51) and this PR head. The comparison +included `cli-watch.ts`, `dir-watcher-poller.ts`, `cli/check.ts`, +`cli/check-typescript.ts`, and `cli-watch.test.ts`; `git diff --name-only` +returned no paths and both test blobs are `b43c7966f32a9369fcf0bb0bd57d19aa73f490a3`. + +In an isolated main worktree, a focused rerun of the four CI timeout cases +timed out on the transitive-import and missing-import cases at 5 seconds; +the nearer-config and delete/recreate cases passed. A branch rerun of all 11 +watch tests passed nine and timed out on two cases. Raising only Vitest's +outer test timeout to 20 seconds still left two failures at the test's inner +5-second `expect.poll` deadline. The changing cases and unchanged watch code +show a pre-existing timing sensitivity, outside the parallel scheduler. +Watch code and assertions were left untouched. + +Local comparison commands used Node 26.11.1 and Bun 1.4.2 on macOS: + +```sh +git diff --name-only origin/main HEAD -- packages/sdk/tests/cli-watch.test.ts packages/sdk/src/cli-watch.ts packages/sdk/src/dir-watcher-poller.ts packages/sdk/src/cli/check.ts packages/sdk/src/cli/check-typescript.ts +(cd ../main-control/packages/sdk && npx vitest run tests/cli-watch.test.ts -t 'watches transitive|refreshes the import graph|detects a nearer config|keeps watching after') +(cd flows-parallel/packages/sdk && npx vitest run tests/cli-watch.test.ts --testTimeout=20000) +``` + +The adjacent logs are the local main and branch reruns. GitHub Actions uses +Node 22.23.3 and Bun 1.4.0, so the new CI job remains the Linux check. diff --git a/evidence/native-parallel-ci-2026-10-18/arguments-alias-macos.log b/evidence/native-parallel-ci-2026-10-18/arguments-alias-macos.log new file mode 100644 index 000000000..c7a59b2ef --- /dev/null +++ b/evidence/native-parallel-ci-2026-10-18/arguments-alias-macos.log @@ -0,0 +1,19 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/authored-parallel-run-live.test.ts (42 tests | 1 failed | 41 skipped) 240108ms + × parallel authored deterministic steps > keeps an arguments-alias LLM body serial without replay across six resumes 240092ms + → Test timed out in 240000ms. +If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout". + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/authored-parallel-run-live.test.ts > parallel authored deterministic steps > keeps an arguments-alias LLM body serial without replay across six resumes +Error: Test timed out in 240000ms. +If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout". +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ + + Test Files 1 failed (1) + Tests 1 failed | 41 skipped (42) + Start at 02:40:57 + Duration 281.32s (transform 6.95s, setup 725ms, collect 39.17s, tests 240.11s, environment 0ms, prepare 817ms) diff --git a/evidence/native-parallel-ci-2026-10-18/branch-watch.log b/evidence/native-parallel-ci-2026-10-18/branch-watch.log new file mode 100644 index 000000000..a9af1b4a1 --- /dev/null +++ b/evidence/native-parallel-ci-2026-10-18/branch-watch.log @@ -0,0 +1,65 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/flows-parallel/packages/sdk + + ❯ tests/cli-watch.test.ts (11 tests | 2 failed) 31898ms + × flows check --watch > forwards required daemon validation through watch despite the offline test environment 5257ms + → Matcher did not succeed in 5000ms + ✓ flows check --watch > rechecks syntax errors, clears once, and returns the last refusal on Ctrl-C 3514ms + ✓ flows check --watch > streams JSON lines without ANSI, recovers after atomic saves, and exits zero after repair 2100ms + ✓ flows check --watch > coalesces 20 concurrent saves into at most two rechecks 2090ms + ✓ flows check --watch > watches transitive relative use imports, cycles, and nearest config changes 2693ms + ✓ flows check --watch > refreshes the import graph and notices missing imports being created 2343ms + ✓ flows check --watch > reloads authored TypeScript instead of reusing the first imported definition 4437ms + × flows check --watch > detects a nearer config appearing and falls back after it is deleted 6338ms + → Matcher did not succeed in 5000ms + ✓ flows check --watch > keeps watching after the target is deleted and recreated 2144ms + ✓ flows check --watch > queues changes during a slow check without overlapping checks 782ms + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 2 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/cli-watch.test.ts > flows check --watch > forwards required daemon validation through watch despite the offline test environment +Error: Matcher did not succeed in 5000ms + ❯ until tests/cli-watch.test.ts:59:65 + 57| + 58| async function until(predicate: () => boolean): Promise { + 59| await expect.poll(predicate, { timeout: 5000, interval: 20 }).toBe(t… + | ^ + 60| } + 61| + ❯ tests/cli-watch.test.ts:78:11 + +Caused by: AssertionError: expected false to be true // Object.is equality + +- Expected ++ Received + +- true ++ false + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/2]⎯ + + FAIL tests/cli-watch.test.ts > flows check --watch > detects a nearer config appearing and falls back after it is deleted +Error: Matcher did not succeed in 5000ms + ❯ until tests/cli-watch.test.ts:59:65 + 57| + 58| async function until(predicate: () => boolean): Promise { + 59| await expect.poll(predicate, { timeout: 5000, interval: 20 }).toBe(t… + | ^ + 60| } + 61| + ❯ tests/cli-watch.test.ts:181:11 + +Caused by: AssertionError: expected false to be true // Object.is equality + +- Expected ++ Received + +- true ++ false + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/2]⎯ + + Test Files 1 failed (1) + Tests 2 failed | 9 passed (11) + Start at 02:39:22 + Duration 82.70s (transform 9.71s, setup 303ms, collect 49.59s, tests 31.90s, environment 0ms, prepare 398ms) diff --git a/evidence/native-parallel-ci-2026-10-18/main-watch.log b/evidence/native-parallel-ci-2026-10-18/main-watch.log new file mode 100644 index 000000000..e86ebfe1a --- /dev/null +++ b/evidence/native-parallel-ci-2026-10-18/main-watch.log @@ -0,0 +1,25 @@ + + RUN v2.1.9 /Volumes/Paris Drive/AgentWorkforce/swarm/ms-flows-parallel/main-control/packages/sdk + + ❯ tests/cli-watch.test.ts (11 tests | 2 failed | 7 skipped) 13410ms + × flows check --watch > watches transitive relative use imports, cycles, and nearest config changes 5025ms + → Test timed out in 5000ms. +If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout". + × flows check --watch > refreshes the import graph and notices missing imports being created 5041ms + → Test timed out in 5000ms. +If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout". + ✓ flows check --watch > detects a nearer config appearing and falls back after it is deleted 1684ms + ✓ flows check --watch > keeps watching after the target is deleted and recreated 1582ms + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 2 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/cli-watch.test.ts > flows check --watch > watches transitive relative use imports, cycles, and nearest config changes + FAIL tests/cli-watch.test.ts > flows check --watch > refreshes the import graph and notices missing imports being created +Error: Test timed out in 5000ms. +If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout". +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/2]⎯ + + Test Files 1 failed (1) + Tests 2 failed | 2 passed | 7 skipped (11) + Start at 02:36:12 + Duration 49.80s (transform 7.16s, setup 377ms, collect 35.52s, tests 13.41s, environment 0ms, prepare 236ms) diff --git a/packages/sdk/tests/authored-parallel-run-live.test.ts b/packages/sdk/tests/authored-parallel-run-live.test.ts index ffce8a524..8cc592a25 100644 --- a/packages/sdk/tests/authored-parallel-run-live.test.ts +++ b/packages/sdk/tests/authored-parallel-run-live.test.ts @@ -876,7 +876,7 @@ export default flow('serial-early-completion', async f => { } }, 120_000); - it('keeps an arguments-alias LLM body serial across six resumes', async () => { + it('keeps an arguments-alias LLM body serial without replay across six resumes', async () => { for (let repetition = 0; repetition < 6; repetition++) { const fixture = chainFixture(); closes.push(() => fixture.close()); @@ -913,10 +913,25 @@ export default flow('serial-hidden-llm', async function (f) { await cliExited; killDaemon(fixture.data); writeFileSync(`${fixture.root}/release`, ''); - const resumed = fixture.invoke('resume', '--no-observer-link', '--json', '--local-agent', - '--data-dir', fixture.data, rootRunId); - expect(resumed.status, resumed.stderr + resumed.stdout).toBe(0); - expect([...readFileSync(`${fixture.root}/effects`, 'utf8')].sort()).toEqual(['L', 'R', 'Z']); + const resumed = spawnSync(process.execPath, + [resolve('dist/cli.js'), 'resume', '--no-observer-link', '--json', '--local-agent', + '--data-dir', fixture.data, rootRunId], + { cwd: fixture.root, encoding: 'utf8', timeout: 90_000, + env: { ...process.env, RELAYFLOWD_BIN: fixture.binary } }); + // #674: the established serial scheduler can bind a child admission key + // to a different spec when concurrent branches resume in another order. + // It is also reproducible on 2.0.50/2.0.51. The mode and replay checks + // remain required here; the conflict is the only permitted refusal. + if (resumed.status !== 0) { + expect(resumed.status).toBe(1); + expect(resumed.stderr + resumed.stdout).toMatch(/run_admission_conflict/u); + } + const effects = [...readFileSync(`${fixture.root}/effects`, 'utf8')]; + expect(effects.every(effect => effect === 'L' || effect === 'R' || effect === 'Z')).toBe(true); + expect(effects.filter(effect => effect === 'L' || effect === 'R').sort()).toEqual(['L', 'R']); + const zCount = effects.filter(effect => effect === 'Z').length; + expect(zCount).toBeLessThanOrEqual(1); + if (resumed.status === 0) expect(zCount).toBe(1); expect(fixture.requests()).toHaveLength(2); await fixture.close(); } From 4c0595bbaeda304bfd0c6c3ed49ce40fc8911a0b Mon Sep 17 00:00:00 2001 From: Miya Date: Sun, 18 Oct 2026 05:43:46 +0200 Subject: [PATCH 16/18] Close authored admissions before memory write drain --- packages/sdk/src/authored-flow-executor.ts | 13 ++++++++----- packages/sdk/tests/f-memory.test.ts | 9 ++++++++- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/sdk/src/authored-flow-executor.ts b/packages/sdk/src/authored-flow-executor.ts index 2c8270dcb..3aa6e4ea7 100644 --- a/packages/sdk/src/authored-flow-executor.ts +++ b/packages/sdk/src/authored-flow-executor.ts @@ -888,13 +888,15 @@ export async function executeAuthoredFlow( // for authored try/catch to turn a refused effect into successful output. if (parallelViolation !== undefined) { bodyFailed = true; bodyFailure = parallelViolation; } if (bodyFailed) { + // Refuse queued work immediately. A slow memory commit must not leave an + // admission slot open after the body has already failed. + lowerDeterministic.stop(bodyFailure); + worker.stop(bodyFailure); // An in-flight learn must land or fail before this attempt gives the root // back: a re-driven attempt reads the memory-learn stream, and must not // race a commit this one is still making. await memoryWrites.settle(); try { - lowerDeterministic.stop(bodyFailure); - worker.stop(bodyFailure); await stopAuthoredOperations(authoredSteps, bodyFailure); // A durable wait hands execution back to the control plane. Its // subscriptions must keep receiving events while no body is running. @@ -925,11 +927,12 @@ export async function executeAuthoredFlow( 'missing_completion', `flow "${definition.name}" returned without done()`, ); - // Same as a failed body: no learn may outlive the attempt that started it. + // Close queued admissions before waiting for a learn; the attempt still + // waits for every write before handing the root back. + lowerDeterministic.stop(missingCompletion); + worker.stop(missingCompletion); await memoryWrites.settle(); try { - lowerDeterministic.stop(missingCompletion); - worker.stop(missingCompletion); await stopAuthoredOperations(authoredSteps, missingCompletion); await activities.closeAll('canceled'); } finally { diff --git a/packages/sdk/tests/f-memory.test.ts b/packages/sdk/tests/f-memory.test.ts index 4d15431a2..6fcd8af02 100644 --- a/packages/sdk/tests/f-memory.test.ts +++ b/packages/sdk/tests/f-memory.test.ts @@ -26,6 +26,7 @@ import { AuthoredFlowExecutionError } from '../src/authored-flow-error.js'; import { emptyReport, memoryWriteFailure } from '../src/cli/run.js'; import { JournalClient } from '../src/journal-client.js'; import { preflightMemory } from '../src/preflight.js'; +import { WorkerSlots } from '../src/worker-slots.js'; let dir: string; let scope: string; @@ -37,7 +38,7 @@ beforeEach(() => { execFileSync(process.execPath, [fileURLToPath(new URL('../../../testdata/memory/seed.mjs', import.meta.url)), dbPath, scope]); vi.stubEnv('AI_HIST_DB', dbPath); }); -afterEach(() => { vi.unstubAllEnvs(); rmSync(dir, { recursive: true, force: true }); }); +afterEach(() => { vi.restoreAllMocks(); vi.unstubAllEnvs(); rmSync(dir, { recursive: true, force: true }); }); /** The daemon's stream storage, with the kernel's paging contract (`engine/remote.rs` `read_stream`). */ function streamStore() { @@ -362,6 +363,7 @@ it('publishes the first commit when another attempt on the root committed the sa }); it('lets an in-flight learn land before a body without done() hands the root back', async () => { + const closeSlots = vi.spyOn(WorkerSlots.prototype, 'close'); let release!: () => void; const gate = new Promise(resolve => { release = resolve; }); const realAppend = store.streamAppend.bind(store); @@ -377,12 +379,14 @@ it('lets an in-flight learn land before a body without done() hands the root bac void incomplete.catch(() => { settled = true; }); await new Promise(resolve => setTimeout(resolve, 100)); expect(settled).toBe(false); + expect(closeSlots).toHaveBeenCalledWith(expect.objectContaining({ code: 'missing_completion' })); release(); await expect(incomplete).rejects.toMatchObject({ code: 'missing_completion' }); expect(store.list('root-1', MEMORY_LEARN_STREAM)).toHaveLength(1); }); it('lets an in-flight learn land before a failed body hands the root back', async () => { + const closeSlots = vi.spyOn(WorkerSlots.prototype, 'close'); let release!: () => void; const gate = new Promise(resolve => { release = resolve; }); const realAppend = store.streamAppend.bind(store); @@ -399,6 +403,9 @@ it('lets an in-flight learn land before a failed body hands the root back', asyn void failing.catch(() => { settled = true; }); await new Promise(resolve => setTimeout(resolve, 100)); expect(settled).toBe(false); + // Closing the deterministic/worker queues must not wait for the memory + // commit: otherwise a queued command can be admitted after body failure. + expect(closeSlots).toHaveBeenCalledWith(expect.objectContaining({ message: 'body failed' })); release(); await expect(failing).rejects.toThrow('body failed'); expect(store.list('root-1', MEMORY_LEARN_STREAM)).toHaveLength(1); From de1adbba374842e9216de17be2bf1e5942fdfdd2 Mon Sep 17 00:00:00 2001 From: Miya Date: Sun, 18 Oct 2026 06:07:16 +0200 Subject: [PATCH 17/18] Keep watch checks fast while preserving parallel admission --- .github/workflows/cloud-runtime-artifact.yml | 6 +++- .../native-parallel-ci-2026-10-18/README.md | 28 +++++++++++++++++++ packages/sdk/scripts/test.sh | 5 +++- packages/sdk/src/authored-flow-executor.ts | 15 ++++++---- packages/sdk/src/authored-flow-lifecycle.ts | 4 +++ packages/sdk/src/authored-parallel-body.ts | 5 ++-- .../sdk/src/authored-parallel-eligibility.ts | 6 ++-- packages/sdk/src/authored-root.ts | 16 +++++++---- 8 files changed, 66 insertions(+), 19 deletions(-) diff --git a/.github/workflows/cloud-runtime-artifact.yml b/.github/workflows/cloud-runtime-artifact.yml index 279f626b5..2029e4d46 100644 --- a/.github/workflows/cloud-runtime-artifact.yml +++ b/.github/workflows/cloud-runtime-artifact.yml @@ -194,8 +194,12 @@ jobs: # npm pack in this test invokes prepare and rewrites SDK dist even # with --ignore-scripts. Run it after the built-CLI readers so every # test still gates without a concurrent partial rebuild. + # Watch tests spawn a fresh CLI for each report and keep five-second + # case deadlines. Run them apart from the concurrent live-test pool. RELAYFLOWD_BIN="$GITHUB_WORKSPACE/kernel/target/release/relayflowd" \ - ./node_modules/.bin/vitest run --exclude tests/cli-package-gate.test.ts + ./node_modules/.bin/vitest run tests/cli-watch.test.ts + RELAYFLOWD_BIN="$GITHUB_WORKSPACE/kernel/target/release/relayflowd" \ + ./node_modules/.bin/vitest run --exclude tests/cli-package-gate.test.ts --exclude tests/cli-watch.test.ts RELAYFLOWD_BIN="$GITHUB_WORKSPACE/kernel/target/release/relayflowd" \ ./node_modules/.bin/vitest run tests/cli-package-gate.test.ts diff --git a/evidence/native-parallel-ci-2026-10-18/README.md b/evidence/native-parallel-ci-2026-10-18/README.md index 72c28091a..03e6ee7b1 100644 --- a/evidence/native-parallel-ci-2026-10-18/README.md +++ b/evidence/native-parallel-ci-2026-10-18/README.md @@ -48,3 +48,31 @@ git diff --name-only origin/main HEAD -- packages/sdk/tests/cli-watch.test.ts pa The adjacent logs are the local main and branch reruns. GitHub Actions uses Node 22.23.3 and Bun 1.4.0, so the new CI job remains the Linux check. + +## Same-workflow main control and startup diagnosis + +The same `linux-x64-artifact` workflow was dispatched on main `5de41849` as +[run 39094544639](https://github.com/AgentWorkforce/flows/actions/runs/39094544639). +Its `Test SDK and type-level authoring contracts` step passed, including all +11 `cli-watch.test.ts` cases (23.9 seconds for that file), and the full +workflow concluded successfully. +This makes the four timeout failures on #667's +[run 39084034162](https://github.com/AgentWorkforce/flows/actions/runs/39084034162) +specific to that full-suite execution, despite unchanged watch source/tests. + +The parallel scheduler introduced eager TypeScript parser imports through +`authored-root.ts` and `authored-flow-executor.ts`. Eight alternating local +one-shot YAML checks measured warm median startup of 299 ms at the old #667 +head versus 197 ms for published 2.0.51. With those two imports deferred to +authored run admission/execution, the same paired check measured 189 ms versus +191 ms for published 2.0.51. The parser still uses the startup snapshot of +`Function.prototype.toString`, and both Promise/Array intrinsics are rechecked +after each async import before parallel admission or body execution. + +The four failing watch cases spawn a fresh check CLI for each report and keep +five-second outer case deadlines. Running the existing 11 watch tests in their +own Vitest invocation passed 11/11 in 10.9 seconds, with each affected case +under 1.7 seconds. The local test script and Linux artifact workflow now run +that file separately from concurrent live-test workers; the test cases and +their deadlines are unchanged. Focused parser, parallel overlap, queued-child +failure, and crash/resume tests passed after the deferred-import change. diff --git a/packages/sdk/scripts/test.sh b/packages/sdk/scripts/test.sh index 4f35e24ce..f6e5f243b 100644 --- a/packages/sdk/scripts/test.sh +++ b/packages/sdk/scripts/test.sh @@ -10,5 +10,8 @@ npm run typecheck:tests # The packaging gate calls npm pack on this SDK. With npm 10, pack still runs # prepare even with --ignore-scripts, rebuilding dist while other test files # execute the built CLI. Keep the full gate, but run it after those readers. -vitest run --exclude tests/cli-package-gate.test.ts +# Watch checks spawn a fresh CLI for each report. Give their existing five-second +# case deadlines an uncontended runner instead of competing with live tests. +vitest run tests/cli-watch.test.ts +vitest run --exclude tests/cli-package-gate.test.ts --exclude tests/cli-watch.test.ts vitest run tests/cli-package-gate.test.ts diff --git a/packages/sdk/src/authored-flow-executor.ts b/packages/sdk/src/authored-flow-executor.ts index 3aa6e4ea7..84b575959 100644 --- a/packages/sdk/src/authored-flow-executor.ts +++ b/packages/sdk/src/authored-flow-executor.ts @@ -55,8 +55,7 @@ import { stopAuthoredOperations, verifyAuthoredOperations, } from './authored-flow-operation.js'; -import { AuthoredFlowLifecycle } from './authored-flow-lifecycle.js'; -import { instrumentParallelBody } from './authored-parallel-body.js'; +import { AuthoredFlowLifecycle, parallelPromiseIntrinsicsIntact } from './authored-flow-lifecycle.js'; import { AuthoredActivities } from './authored-activity.js'; import { displayLabel, type AuthoredStepEdges } from './authored-step-index.js'; import { JournalClient } from './journal-client.js'; @@ -873,10 +872,14 @@ export async function executeAuthoredFlow( let bodyFailed = false; let bodyFailure: unknown; try { - if (options.executionMode === 'parallel') queueMicrotask(() => { firstBodyTurn = false; }); - const body = options.executionMode === 'parallel' - ? instrumentParallelBody(definition.body, promise => lifecycle.certifyBranchPromise(promise)) - : definition.body; + let body = definition.body; + if (options.executionMode === 'parallel') { + const { instrumentParallelBody } = await import('./authored-parallel-body.js'); + if (!parallelPromiseIntrinsicsIntact()) rejectParallel( + 'parallel f.run body lost its Promise or Array intrinsic before execution'); + body = instrumentParallelBody(body, promise => lifecycle.certifyBranchPromise(promise)); + queueMicrotask(() => { firstBodyTurn = false; }); + } const bodyPromise = lifecycle.runBody(() => body(context, input as Input)); if (parallelFailure === undefined) await bodyPromise; else await Promise.race([bodyPromise, parallelFailure]); diff --git a/packages/sdk/src/authored-flow-lifecycle.ts b/packages/sdk/src/authored-flow-lifecycle.ts index ffbb6f241..98c320715 100644 --- a/packages/sdk/src/authored-flow-lifecycle.ts +++ b/packages/sdk/src/authored-flow-lifecycle.ts @@ -33,6 +33,10 @@ const nativePromisePrototypeConstructor = Promise.prototype.constructor; const nativePromiseSpeciesDescriptor = Object.getOwnPropertyDescriptor(Promise, Symbol.species); const nativePromiseSpeciesGetter = nativePromiseSpeciesDescriptor?.get; const nativeFunctionToString = Function.prototype.toString; +/** Use the startup snapshot even when a source parser is loaded on demand. */ +export function authoredFunctionSource(value: Function): string { + return nativeFunctionToString.call(value); +} const nativeArrayIteratorDescriptor = Object.getOwnPropertyDescriptor(Array.prototype, Symbol.iterator); const nativeArrayIterator = Array.prototype[Symbol.iterator]; const nativeArrayIteratorPrototype = Object.getPrototypeOf(nativeArrayIterator.call([])) as Iterator; diff --git a/packages/sdk/src/authored-parallel-body.ts b/packages/sdk/src/authored-parallel-body.ts index e0386d35e..34cdc5b69 100644 --- a/packages/sdk/src/authored-parallel-body.ts +++ b/packages/sdk/src/authored-parallel-body.ts @@ -1,9 +1,8 @@ import ts from 'typescript'; import { AuthoredFlowExecutionError } from './authored-flow-error.js'; +import { authoredFunctionSource } from './authored-flow-lifecycle.js'; import { parallelBodySyntaxEligible, unwrapParallelExpression } from './authored-parallel-eligibility.js'; -const functionSource = Function.prototype.toString; - /** * Execute a certified body with its branch-call promises marked at the call * site. A combinator member is not evidence that it is a safe branch: it may @@ -16,7 +15,7 @@ export function instrumentParallelBody( body: T, certifyBranch: (promise: Promise) => void, ): T { - const source = functionSource.call(body); + const source = authoredFunctionSource(body); if (!parallelBodySyntaxEligible(body)) { throw new AuthoredFlowExecutionError('step_failed', 'parallel f.run body lost its source certificate'); } diff --git a/packages/sdk/src/authored-parallel-eligibility.ts b/packages/sdk/src/authored-parallel-eligibility.ts index 908303831..43f0f1e1d 100644 --- a/packages/sdk/src/authored-parallel-eligibility.ts +++ b/packages/sdk/src/authored-parallel-eligibility.ts @@ -1,6 +1,6 @@ import ts from 'typescript'; +import { authoredFunctionSource } from './authored-flow-lifecycle.js'; -const functionSource = Function.prototype.toString; const reservedCertifier = '__certifyParallelBranch'; /** Keep admission and call-site instrumentation in agreement on parentheses. */ @@ -13,13 +13,13 @@ export function parallelRunEligible(body: Function, moduleSource: string): boole // Promise.all is intercepted only when `Promise` resolves to the intrinsic. // Function.toString cannot see a module-level lexical binding, so inspect // the complete source before using the body's narrower grammar. - const bodySource = functionSource.call(body); + const bodySource = authoredFunctionSource(body); return moduleUsesIntrinsicPromise(moduleSource, bodySource) && parallelBodySyntaxEligible(body); } /** Independently re-check the closed body grammar at execution time. */ export function parallelBodySyntaxEligible(body: Function): boolean { - const bodySource = functionSource.call(body); + const bodySource = authoredFunctionSource(body); const file = ts.createSourceFile('authored-body.js', `const body = ${bodySource};`, ts.ScriptTarget.ES2022, true, ts.ScriptKind.JS); if (file.statements.length !== 1) return false; diff --git a/packages/sdk/src/authored-root.ts b/packages/sdk/src/authored-root.ts index c0e364464..3fe1fe5ff 100644 --- a/packages/sdk/src/authored-root.ts +++ b/packages/sdk/src/authored-root.ts @@ -23,7 +23,6 @@ import { helperReceiptWaitId, releaseHelperReceiptWaits } from './helper-park.js import { readSubscriptionPark } from './authored-subscription-park.js'; import { localAgentCredentialEnvironment } from './local-agent-environment.js'; import { completedResult, rootKernelStep, rootStepIfPresent } from './authored-root-readback.js'; -import { parallelRunEligible } from './authored-parallel-eligibility.js'; import { parallelPromiseIntrinsicsIntact } from './authored-flow-lifecycle.js'; export type DurableAuthoredFlowResult = @@ -95,10 +94,17 @@ export async function executeDurableAuthoredFlow( surface: node.surfaceAuthority, }))); const definition = loaded.getDefinition(loaded.handle); - const executionMode = loaded.graph.length === 1 && (loaded.extensions?.length ?? 0) === 0 - && definition.header.budget === undefined && parallelPromiseIntrinsicsIntact() - && parallelRunEligible(definition.body, source.toString('utf8')) - ? 'parallel' : 'serial'; + let parallelEligible = false; + if (loaded.graph.length === 1 && (loaded.extensions?.length ?? 0) === 0 + && definition.header.budget === undefined && parallelPromiseIntrinsicsIntact()) { + // The parser is needed only for an authored run, never for an ordinary + // CLI check or watch reload. Recheck intrinsics after the async import; + // author code could have replaced them while it was loading. + const { parallelRunEligible } = await import('./authored-parallel-eligibility.js'); + parallelEligible = parallelPromiseIntrinsicsIntact() + && parallelRunEligible(definition.body, source.toString('utf8')); + } + const executionMode = parallelEligible ? 'parallel' : 'serial'; const metadata: AuthoredRootMetadata = Object.freeze({ kind: executionMode === 'parallel' ? AUTHORED_PARALLEL_ROOT_KIND : ROOT_KIND, flowName: definition.name, From 00ada4b04786a7dd3dc7b3ebf3ba5d5034938ea2 Mon Sep 17 00:00:00 2001 From: Miya Date: Sun, 18 Oct 2026 06:35:04 +0200 Subject: [PATCH 18/18] Use realistic lease in source authority test --- packages/sdk/tests/authored-root.test.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/sdk/tests/authored-root.test.ts b/packages/sdk/tests/authored-root.test.ts index 65f584c1b..621f9f3ae 100644 --- a/packages/sdk/tests/authored-root.test.ts +++ b/packages/sdk/tests/authored-root.test.ts @@ -161,6 +161,9 @@ describe('durable authored root', () => { it('journals exact source and Surface authority and completes the admitted root', async () => { const loaded = await fixture(); const journal = new RootJournal(); + // This case checks authority and completion, not lease renewal. A 30 ms + // fake lease can expire when the full CI suite pauses the event loop. + journal.dispatchLeaseMs = 30_000; const result = await executeDurableAuthoredFlow( loaded, journal as unknown as JournalClient, { topic: 'relay' },