Capture formatting note: trailing spaces on blank diff context lines removed.
cwd: /tmp/flows-pr-followup/pr441/packages/sdk
$ git diff -- src/authored-root.ts tests/authored-activity.test.ts tests/fixtures/event-await-cli-probe.mjs
diff --git i/packages/sdk/src/authored-root.ts w/packages/sdk/src/authored-root.ts
index 4f374dad..975f6c12 100644
--- i/packages/sdk/src/authored-root.ts
+++ w/packages/sdk/src/authored-root.ts
@@ -18,7 +18,6 @@ import { withWorkerLease } from './worker-lease.js';
 import { AuthoredFlowExecutionError, AuthoredHumanParked } from './authored-flow-error.js';
 import { readOpenHumanWaits } from './authored-human.js';
 import { isSurfaceCompletionReason } from './authored-step-output.js';
-import { AuthoredFlowExecutionError } from './authored-flow-error.js';
 import { readSubscriptionPark } from './authored-subscription-park.js';

 export type DurableAuthoredFlowResult =
diff --git i/packages/sdk/tests/authored-activity.test.ts w/packages/sdk/tests/authored-activity.test.ts
index 6b5e3fba..36cd75c0 100644
--- i/packages/sdk/tests/authored-activity.test.ts
+++ w/packages/sdk/tests/authored-activity.test.ts
@@ -17,6 +17,7 @@ describe('authored event activities', () => {
     path = sockPath();
     server = startLoopback(path, {
       hello: (ctx) => sendOk(ctx),
+      'stream.append': (ctx) => sendResult(ctx, { offset: 0 }),
       'subscription.open': (ctx, params) => {
         calls.push({ verb: 'subscription.open', params });
         if (params.run_id === 'root-prepared') {
diff --git i/packages/sdk/tests/fixtures/event-await-cli-probe.mjs w/packages/sdk/tests/fixtures/event-await-cli-probe.mjs
index a38785d8..98c6bb09 100644
--- i/packages/sdk/tests/fixtures/event-await-cli-probe.mjs
+++ w/packages/sdk/tests/fixtures/event-await-cli-probe.mjs
@@ -27,8 +27,11 @@ export default flow('event-await-cli', async f => {
 });`);

 function invoke(...args) {
+  return invokeWithin(30_000, args);
+}
+function invokeWithin(timeout, args) {
   const result = spawnSync(process.execPath, [join(repo, 'packages/sdk/dist/cli.js'), ...args,
-    '--data-dir', data, '--json', '--no-observer-link'], { cwd: root, encoding: 'utf8', timeout: 30_000 });
+    '--data-dir', data, '--json', '--no-observer-link'], { cwd: root, encoding: 'utf8', timeout });
   console.log(JSON.stringify({ args, status: result.status, stdout: result.stdout, stderr: result.stderr }));
   if (result.error) throw result.error;
   return { status: result.status, report: JSON.parse(result.stdout) };
@@ -114,11 +117,20 @@ export default flow('${name}-subscription-report', async f => {
     await client.subscriptionDeliver({run_id:rootId,subscription_id:'activity-1',
       router_binding:{generation:name, transport:'local-test-router'},delivery_id:name,
       frame:{type:'metadata_event',payload:{}}});
-    const boundary = invoke('resume', rootId);
+    // Two subscription parks shift raw attempts to 3..10. Seven semantic
+    // retries sleep at most 60,960ms including 20% jitter. Keep ordinary
+    // invocations at 30s; this new failure case needs its full retry budget.
+    const boundary = name === 'failed'
+      ? invokeWithin(75_000, ['resume', rootId]) : invoke('resume', rootId);
     assert.equal(boundary.status, expectedStatus);
     assert.equal(boundary.report.rootRunId, rootId);
     assert.equal(boundary.report.subscriptions.length, 1);
     assert.equal(boundary.report.subscriptions[0].state, name === 'failed' ? 'closed' : 'active');
+    if (name === 'failed') {
+      const { entries: failureEntries } = await client.journalRead(rootId, 1, 500);
+      assert.equal(failureEntries.filter(entry => entry.entry_type === 'step.completed'
+        && entry.payload.completionReason === 'worker_error').length, 8);
+    }
   }
   console.log('E2E_PASS: repeated park, SIGKILL/restart, two wakes replayed in order, deduped delivery, exactly-once child effects, zero crash retries');
 } finally {

exit status: 0
