From 59e57017b151ed3986b5ee9b1185976723583d4e Mon Sep 17 00:00:00 2001 From: Dotta Date: Tue, 11 Aug 2026 12:56:59 +0000 Subject: [PATCH] refactor(runner): organize package by responsibility Co-Authored-By: Paperclip --- package.json | 4 +- packages/paperclip-runner/.gitignore | 6 +- packages/paperclip-runner/README.md | 180 +- .../devtools/browser/live-console.spec.ts | 15 +- .../devtools/browser/playwright.config.ts | 4 +- .../devtools/browser/src/App.tsx | 126 +- .../devtools/browser/src/live/Inspector.tsx | 2 +- .../devtools/browser/src/live/LiveConsole.tsx | 4 +- .../devtools/browser/src/live/client.ts | 4 +- .../devtools/browser/src/live/protocol.ts | 2 +- .../browser/src/live/transcript-model.test.ts | 16 +- .../browser/src/live/transcript-model.ts | 2 +- .../browser/src/live/use-live-console.ts | 6 +- .../devtools/browser/src/styles.css | 5 +- .../devtools/browser/static-replay.spec.ts | 52 +- .../issue-thread/issue-thread.spec.ts | 48 +- .../issue-thread/playwright.config.ts | 2 +- .../devtools/issue-thread/src/App.tsx | 87 +- .../devtools/issue-thread/src/Composer.tsx | 6 +- .../issue-thread/src/EvidencePanel.test.ts | 12 +- .../issue-thread/src/EvidencePanel.tsx | 54 +- .../issue-thread/src/InteractionCard.tsx | 20 +- .../devtools/issue-thread/src/IssueHeader.tsx | 4 +- .../devtools/issue-thread/src/SurfaceNav.tsx | 10 +- .../devtools/issue-thread/src/ThreadItems.tsx | 22 +- .../devtools/issue-thread/src/fake-store.ts | 26 +- .../devtools/issue-thread/src/fonts/NOTICE.md | 4 +- .../issue-thread/src/issue-thread.css | 2 +- .../devtools/issue-thread/src/live-client.ts | 84 +- .../devtools/issue-thread/src/main.tsx | 2 +- .../devtools/issue-thread/src/primitives.tsx | 8 +- .../devtools/issue-thread/src/route.test.ts | 18 +- .../devtools/issue-thread/src/route.ts | 30 +- .../issue-thread/stream-fixture-transport.mjs | 16 +- .../paperclip-runner/docs/architecture.md | 78 +- ... capability-authorization-and-exposure.md} | 18 +- ...-chat.md => capability-clean-room-chat.md} | 46 +- ...ity-contract.md => capability-contract.md} | 8 +- ...sposition.md => capability-disposition.md} | 26 +- ...ance.md => capability-eval-conformance.md} | 32 +- ...modes.md => capability-execution-modes.md} | 14 +- ... => capability-future-binding-boundary.md} | 32 +- ...ad-ui.md => capability-issue-thread-ui.md} | 48 +- ...ex.md => capability-live-runnerd-codex.md} | 22 +- ... => capability-mock-control-plane-port.md} | 24 +- ...rer.md => capability-scenario-explorer.md} | 33 +- ...alog.md => capability-semantic-catalog.md} | 18 +- ...-tools.md => capability-semantic-tools.md} | 24 +- .../docs/capability-verification-commands.md | 52 + ...llless-codex-driver.md => codex-driver.md} | 14 +- ...=> capability-issue-thread-ux-contract.md} | 18 +- ....md => capability-scenario-explorer-ux.md} | 65 +- ...md => live-console-component-decisions.md} | 30 +- ...map.md => live-console-interaction-map.md} | 12 +- ...phase-4b-live-console-desktop-1440x900.png | Bin 156321 -> 0 bytes .../phase-4b-live-console-mobile-390x844.png | Bin 59237 -> 0 bytes .../design/mockups/phase-4b-live-console.html | 374 - .../mockups/phase-7-scenario-explorer.html | 329 - .../design/mockups/phase-7i-mobile-chat.html | 424 -- .../docs/design/phase-5-component-plan.md | 297 - ...-mobile-chat-ux.md => scenario-chat-ux.md} | 41 +- ...ecisions.md => sdk-component-decisions.md} | 14 +- ...d => standalone-thin-paperclip-adapter.md} | 92 +- ...rable-transport.md => durable-recovery.md} | 10 +- packages/paperclip-runner/docs/index.md | 93 +- packages/paperclip-runner/docs/journal.md | 81 - ...ver.md => live-console-protocol-server.md} | 37 +- ...se-04b-live-console.md => live-console.md} | 27 +- ...e-02-local-protocol.md => local-runner.md} | 20 +- .../docs/phase-07-verification-commands.md | 54 - .../docs/protocol-compatibility.md | 18 +- .../2026-08-07-ui-library-compatibility.md | 6 +- ...-07i-scenario-chat.md => scenario-chat.md} | 26 +- .../docs/{phase-05-sdk.md => sdk.md} | 16 +- ...d => standalone-thin-paperclip-adapter.md} | 21 +- ...-chat.md => capability-clean-room-chat.md} | 18 +- ...e-thread.md => capability-issue-thread.md} | 49 +- ...rer.md => capability-scenario-explorer.md} | 69 +- .../{phase-04-skillless-codex.md => codex.md} | 47 +- ...er.md => conformance-standalone-tracer.md} | 21 +- ...-break-recovery.md => durable-recovery.md} | 38 +- .../docs/tutorials/end-to-end.md | 81 +- ...ver.md => live-console-protocol-server.md} | 33 +- ...se-04b-live-console.md => live-console.md} | 20 +- ...ase-02-local-runner.md => local-runner.md} | 39 +- .../{phase-01-static-replay.md => replay.md} | 16 +- ...-07i-scenario-chat.md => scenario-chat.md} | 26 +- ...phase-05-sdk-console.md => sdk-console.md} | 14 +- ...d => standalone-thin-paperclip-adapter.md} | 18 +- .../examples/mini-consumer/src/main.tsx | 2 +- .../examples/phase6-standalone/index.html | 9 - .../examples/phase7-explorer/index.html | 9 - .../examples/phase7-explorer/src/env.d.ts | 18 - .../examples/playwright.config.ts | 8 +- .../examples/playwright.real.config.ts | 8 +- ...nfig.ts => playwright.scenarios.config.ts} | 6 +- ...se7-chat.spec.ts => scenario-chat.spec.ts} | 6 +- ...orer.spec.ts => scenario-explorer.spec.ts} | 6 +- .../examples/scenario-explorer/index.html | 9 + .../src/app.tsx | 96 +- .../src/chat.test.tsx | 40 +- .../src/components/chat-activity-stream.tsx | 44 +- .../src/components/chat-conversation.tsx | 20 +- .../src/components/chat-session-header.tsx | 20 +- .../src/components/chat-surface.tsx | 54 +- .../src/components/chat-turn-strip.tsx | 6 +- .../src/components/inspector-panels.tsx | 32 +- .../src/components/primitives.tsx | 12 +- .../src/components/run-header.tsx | 6 +- .../src/components/scenario-picker.tsx | 50 +- .../src/components/scenario-transcript.tsx | 8 +- .../examples/scenario-explorer/src/env.d.ts | 18 + .../src/explorer.css | 4 +- .../src/explorer.test.tsx | 30 +- .../src/labels.ts | 26 +- .../src/main.tsx | 18 +- .../src/remote-chat-session.ts | 40 +- .../src/route.test.ts | 24 +- .../src/route.ts | 54 +- .../{phase5-real.spec.ts => sdk-real.spec.ts} | 4 +- .../examples/{phase5.spec.ts => sdk.spec.ts} | 20 +- .../examples/standalone-demo/index.html | 9 + .../src/main.tsx | 12 +- .../src/styles.css | 0 .../capabilities.yaml | 0 .../capability-contract.md | 4 +- .../downstream-handoff.md | 6 +- .../eval-traceability.yaml | 0 .../mcp-tool-map.yaml | 0 .../semantic-tool-contracts.json | 0 ...7-phase-00-rust-correction-verification.md | 66 - .../2026-08-07-phase-00-verification.md | 93 - .../2026-08-07-phase-01-verification.md | 138 - .../2026-08-07-phase-02-verification.md | 170 - .../2026-08-07-phase-03-verification.md | 78 - .../2026-08-08-phase-04-verification.md | 118 - ...-08-phase-04b-live-console-verification.md | 126 - ...-phase-04b-protocol-server-verification.md | 100 - .../2026-08-08-phase-04b-qa-verification.md | 87 - .../2026-08-08-phase-05-verification.md | 220 - .../2026-08-09-phase-06-verification.md | 371 - .../2026-08-09-phase-07-verification.md | 104 - ...6-08-09-phase-07f-explorer-verification.md | 104 - .../2026-08-09-phase-07i-chat-verification.md | 117 - ...-phase-07g-issue-thread-ui-verification.md | 130 - .../2026-08-10-phase-07i-final-evidence.md | 174 - ...08-10-phase-07m-clean-room-verification.md | 130 - ...0-phase-07q-turn-streaming-verification.md | 125 - ...-disclosure-and-capability-verification.md | 190 - ...e-04-codex-trace.json => codex-trace.json} | 6184 ++++++++--------- ...son => durable-recovery-fault-matrix.json} | 2 +- .../drain.json | 172 +- .../duplicate-command.json | 274 +- .../harness-restart.json | 352 +- .../lease-expiry.json | 302 +- .../lost-ack.json | 274 +- .../malformed-input.json | 274 +- .../none.json | 274 +- .../revoke.json | 246 +- .../runner-restart.json | 302 +- .../socket-drop.json | 274 +- .../storage-pressure.json | 194 +- ...trace.json => durable-recovery-trace.json} | 274 +- .../knowledge/evidence/index.md | 33 +- ...on => live-console-real-codex-server.json} | 2052 +++--- .../evidence/phase-01-static-replay.png | Bin 172531 -> 0 bytes .../evidence/phase-02-live-complete.png | Bin 171991 -> 0 bytes .../evidence/phase-02-live-interrupted.png | Bin 153135 -> 0 bytes .../evidence/phase-02-live-permission.png | Bin 122859 -> 0 bytes .../phase-03-recovery-diagnostics.png | Bin 69766 -> 0 bytes .../phase-04b/desktop-01-idle-empty.png | Bin 204614 -> 0 bytes .../phase-04b/desktop-02-streaming-turn.png | Bin 219135 -> 0 bytes .../phase-04b/desktop-03-turn-completed.png | Bin 224688 -> 0 bytes .../desktop-04-steering-acknowledged.png | Bin 227775 -> 0 bytes .../desktop-05-interrupt-before-start.png | Bin 214745 -> 0 bytes ...desktop-06-interrupt-during-generation.png | Bin 222220 -> 0 bytes .../desktop-07-interrupt-during-tool.png | Bin 217726 -> 0 bytes .../phase-04b/desktop-08-request-pending.png | Bin 230148 -> 0 bytes .../phase-04b/desktop-09-request-resolved.png | Bin 230133 -> 0 bytes .../phase-04b/desktop-10-request-expired.png | Bin 233268 -> 0 bytes .../phase-04b/desktop-11-goal-supported.png | Bin 226614 -> 0 bytes .../phase-04b/desktop-12-goal-unsupported.png | Bin 254190 -> 0 bytes .../phase-04b/desktop-13-lineage-child.png | Bin 240969 -> 0 bytes .../phase-04b/desktop-14-failed-turn.png | Bin 221836 -> 0 bytes .../phase-04b/desktop-15-reconnect-banner.png | Bin 229524 -> 0 bytes .../phase-04b/desktop-16-refresh-replay.png | Bin 225115 -> 0 bytes .../phase-04b/desktop-17-replay-mode.png | Bin 218651 -> 0 bytes .../phase-04b/desktop-18-inspector-events.png | Bin 242296 -> 0 bytes .../desktop-19-inspector-session.png | Bin 254565 -> 0 bytes .../phase-04b/mobile-01-idle-empty.png | Bin 45361 -> 0 bytes .../phase-04b/mobile-02-session-segment.png | Bin 158510 -> 0 bytes .../phase-04b/mobile-03-request-pending.png | Bin 63294 -> 0 bytes .../phase-04b/mobile-04-inspector.png | Bin 57095 -> 0 bytes .../phase-04b/qa-2026-08-08/01-idle-empty.png | Bin 86316 -> 0 bytes .../qa-2026-08-08/03-completion-done.png | Bin 98572 -> 0 bytes .../qa-2026-08-08/04b-steer-acknowledged.png | Bin 104374 -> 0 bytes .../05a2-interrupt-before-start.png | Bin 91383 -> 0 bytes .../qa-2026-08-08/06b-approval-resolved.png | Bin 103721 -> 0 bytes .../qa-2026-08-08/07e-expired-clean.png | Bin 105349 -> 0 bytes .../qa-2026-08-08/08a-goal-supported.png | Bin 68495 -> 0 bytes .../phase-04b/qa-2026-08-08/09-inspector.png | Bin 124983 -> 0 bytes .../qa-2026-08-08/09b-inspector-session.png | Bin 57914 -> 0 bytes .../qa-2026-08-08/10-codex-real-turn.png | Bin 100407 -> 0 bytes .../evidence/phase-05/mini-idle-1440x900.png | Bin 44514 -> 0 bytes .../evidence/phase-05/mini-idle-390x844.png | Bin 36351 -> 0 bytes .../phase-05/mini-live-codex-1440x900.png | Bin 47676 -> 0 bytes .../phase-05/mini-reconnect-1440x900.png | Bin 55595 -> 0 bytes .../phase-05/mini-reconnect-390x844.png | Bin 40764 -> 0 bytes .../phase-05/mini-replay-1440x900.png | Bin 51213 -> 0 bytes .../evidence/phase-05/mini-replay-390x844.png | Bin 37959 -> 0 bytes .../mini-request-pending-1440x900.png | Bin 60439 -> 0 bytes .../phase-05/mini-request-pending-390x844.png | Bin 40372 -> 0 bytes ...reaming-custom-renderer-token-1440x900.png | Bin 69294 -> 0 bytes ...treaming-custom-renderer-token-390x844.png | Bin 47173 -> 0 bytes .../phase-05/phase5-real-codex-trace.json | 5390 -------------- .../reference-direct-chat-codex-1440x900.png | Bin 162676 -> 0 bytes .../reference-failed-turn-1440x900.png | Bin 61229 -> 0 bytes .../reference-failed-turn-390x844.png | Bin 37280 -> 0 bytes .../phase-05/reference-goal-set-1440x900.png | Bin 53806 -> 0 bytes .../phase-05/reference-goal-set-390x844.png | Bin 48717 -> 0 bytes .../reference-idle-empty-1440x900.png | Bin 81156 -> 0 bytes .../phase-05/reference-idle-empty-390x844.png | Bin 22585 -> 0 bytes .../phase-05/reference-interrupt-1440x900.png | Bin 126709 -> 0 bytes .../phase-05/reference-interrupt-390x844.png | Bin 74933 -> 0 bytes .../reference-live-codex-1440x900.png | Bin 334135 -> 0 bytes .../reference-live-preview-1440x900.png | Bin 219712 -> 0 bytes .../reference-reconnect-banner-1440x900.png | Bin 49927 -> 0 bytes .../reference-reconnect-banner-390x844.png | Bin 50921 -> 0 bytes .../reference-replay-mode-1440x900.png | Bin 81368 -> 0 bytes .../reference-replay-mode-390x844.png | Bin 29286 -> 0 bytes .../reference-request-pending-1440x900.png | Bin 66088 -> 0 bytes .../reference-request-pending-390x844.png | Bin 41063 -> 0 bytes .../reference-request-resolved-1440x900.png | Bin 100007 -> 0 bytes .../reference-request-resolved-390x844.png | Bin 41659 -> 0 bytes ...reference-review-v0.1.2-mobile-390x844.png | Bin 22677 -> 0 bytes ...ference-steering-acknowledged-1440x900.png | Bin 88163 -> 0 bytes ...eference-steering-acknowledged-390x844.png | Bin 30865 -> 0 bytes .../reference-streaming-turn-1440x900.png | Bin 113639 -> 0 bytes .../reference-streaming-turn-390x844.png | Bin 39922 -> 0 bytes .../reference-terminal-debug-1440x900.png | Bin 104252 -> 0 bytes .../reference-terminal-debug-390x844.png | Bin 52061 -> 0 bytes .../phase-07/ap-approval-denied-1440x900.png | Bin 409650 -> 0 bytes .../phase-07/ap-approval-denied-390x844.png | Bin 68732 -> 0 bytes .../phase-07/ar-artifacts-1440x900.png | Bin 485693 -> 0 bytes .../phase-07/ar-artifacts-390x844.png | Bin 198454 -> 0 bytes .../phase-07/bl-blockers-diff-1440x900.png | Bin 589938 -> 0 bytes .../phase-07/bl-blockers-diff-390x844.png | Bin 224996 -> 0 bytes .../clean-room/clean-room-blank--desktop.png | Bin 54784 -> 0 bytes .../clean-room/clean-room-blank--mobile.png | Bin 48470 -> 0 bytes .../clean-room/clean-room-entry--desktop.png | Bin 65111 -> 0 bytes .../clean-room-evidence--desktop.png | Bin 85552 -> 0 bytes .../clean-room-live-turn--desktop.png | Bin 63119 -> 0 bytes .../clean-room-live-turn--mobile.png | Bin 46456 -> 0 bytes .../clean-room-new-chat--desktop.png | Bin 54719 -> 0 bytes .../evidence/phase-07/clean-room/index.md | 18 - .../phase-07/explorer-home-1440x900.png | Bin 142641 -> 0 bytes .../phase-07/explorer-home-390x844.png | Bin 89078 -> 0 bytes .../phase-07/hb-heartbeat-1440x900.png | Bin 425564 -> 0 bytes .../phase-07/hb-heartbeat-390x844.png | Bin 155651 -> 0 bytes .../knowledge/evidence/phase-07/index.md | 50 - .../phase-07/ix-interaction-1440x900.png | Bin 453389 -> 0 bytes .../phase-07/ix-interaction-390x844.png | Bin 167407 -> 0 bytes .../phase-07/mh-multihop-1440x900.png | Bin 458530 -> 0 bytes .../evidence/phase-07/mh-multihop-390x844.png | Bin 54802 -> 0 bytes .../mockup-explorer-ap-mcp-gate-1440x900.png | Bin 210812 -> 0 bytes .../mockup-explorer-ap-mcp-gate-390x844.png | Bin 70077 -> 0 bytes .../phase-7i-activity-mobile-390x844.png | Bin 63344 -> 0 bytes .../phase-7i-chat-activity-diff-1440x900.png | Bin 946365 -> 0 bytes .../phase-7i-chat-activity-diff-390x844.png | Bin 387980 -> 0 bytes .../phase-7i-chat-denied-1440x900.png | Bin 826086 -> 0 bytes .../phase-07/phase-7i-chat-denied-390x844.png | Bin 357291 -> 0 bytes .../phase-7i-chat-desktop-1440x900.png | Bin 189770 -> 0 bytes .../phase-07/phase-7i-chat-home-1440x900.png | Bin 133673 -> 0 bytes .../phase-07/phase-7i-chat-home-390x844.png | Bin 92025 -> 0 bytes .../phase-07/phase-7i-chat-mobile-390x844.png | Bin 61433 -> 0 bytes .../phase-7i-chat-session-1440x900.png | Bin 944698 -> 0 bytes .../phase-7i-chat-session-390x844.png | Bin 329518 -> 0 bytes .../phase-7i-chat-streaming-1440x900.png | Bin 564745 -> 0 bytes .../phase-7i-chat-streaming-390x844.png | Bin 222075 -> 0 bytes ...ase-7i-chat-streaming-desktop-1440x900.png | Bin 186713 -> 0 bytes ...phase-7i-chat-streaming-mobile-390x844.png | Bin 55174 -> 0 bytes .../phase-7i-screenshot-manifest.json | 47 - .../phase-07/picker-filtered-1440x900.png | Bin 154454 -> 0 bytes .../phase-07/picker-filtered-390x844.png | Bin 98388 -> 0 bytes .../evidence/phase-07/rf-manager-1440x900.png | Bin 538780 -> 0 bytes .../evidence/phase-07/rf-manager-390x844.png | Bin 136274 -> 0 bytes .../phase-07/rs-restraint-1440x900.png | Bin 365524 -> 0 bytes .../phase-07/rs-restraint-390x844.png | Bin 59772 -> 0 bytes .../phase-07/rs-secret-redaction-1440x900.png | Bin 498282 -> 0 bytes .../phase-07/rs-secret-redaction-390x844.png | Bin 215167 -> 0 bytes .../phase-07/screenshot-manifest.json | 84 - .../evidence/phase-07/ui-live/index.md | 11 - .../ui-live/live-codex-evidence--desktop.png | Bin 89739 -> 0 bytes .../ui-live/live-codex-turn--desktop.png | Bin 63665 -> 0 bytes .../ui-live/live-codex-turn--mobile.png | Bin 48524 -> 0 bytes .../phase-07/ui/debug-panel-open--desktop.png | Bin 98823 -> 0 bytes .../phase-07/ui/debug-panel-open--mobile.png | Bin 39524 -> 0 bytes .../ui/deliverable-registered--desktop.png | Bin 68915 -> 0 bytes .../ui/deliverable-registered--mobile.png | Bin 46251 -> 0 bytes .../ui/denial-optional-tool--desktop.png | Bin 67111 -> 0 bytes .../ui/denial-optional-tool--mobile.png | Bin 44874 -> 0 bytes .../ui/disposition-terminal--desktop.png | Bin 66788 -> 0 bytes .../ui/disposition-terminal--mobile.png | Bin 44425 -> 0 bytes .../ui/document-revision--desktop.png | Bin 67039 -> 0 bytes .../phase-07/ui/document-revision--mobile.png | Bin 43671 -> 0 bytes .../knowledge/evidence/phase-07/ui/index.md | 41 - ...eraction-confirmation-pending--desktop.png | Bin 61202 -> 0 bytes ...teraction-confirmation-pending--mobile.png | Bin 38430 -> 0 bytes .../interaction-question-pending--desktop.png | Bin 58078 -> 0 bytes .../interaction-question-pending--mobile.png | Bin 36119 -> 0 bytes .../interaction-resolved-mixed--desktop.png | Bin 59472 -> 0 bytes .../ui/interaction-resolved-mixed--mobile.png | Bin 36289 -> 0 bytes .../phase-07/ui/reconnect-banner--desktop.png | Bin 65506 -> 0 bytes .../phase-07/ui/reconnect-banner--mobile.png | Bin 42628 -> 0 bytes .../phase-07/ui/replay-mode--desktop.png | Bin 66783 -> 0 bytes .../phase-07/ui/replay-mode--mobile.png | Bin 43607 -> 0 bytes .../phase-07/ui/thread-baseline--desktop.png | Bin 66133 -> 0 bytes .../phase-07/ui/thread-baseline--mobile.png | Bin 44912 -> 0 bytes .../phase-07/ui/turn-streaming--desktop.png | Bin 69498 -> 0 bytes .../phase-07/ui/turn-streaming--mobile.png | Bin 46354 -> 0 bytes .../phase-07/wk-planning-1440x900.png | Bin 587125 -> 0 bytes .../evidence/phase-07/wk-planning-390x844.png | Bin 269224 -> 0 bytes packages/paperclip-runner/knowledge/index.md | 2 - ...08-07-phase-00-rust-boundary-correction.md | 74 - .../knowledge/journal/2026-08-07-phase-00.md | 78 - .../knowledge/journal/2026-08-07-phase-01.md | 94 - .../knowledge/journal/2026-08-07-phase-02.md | 81 - .../knowledge/journal/2026-08-07-phase-03.md | 69 - .../knowledge/journal/2026-08-08-phase-04.md | 97 - .../2026-08-08-phase-04b-live-console.md | 96 - .../2026-08-08-phase-04b-protocol-server.md | 72 - .../journal/2026-08-08-phase-04b-ux.md | 66 - .../journal/2026-08-08-phase-05-sdk.md | 85 - .../journal/2026-08-08-phase-05-ux-plan.md | 56 - .../journal/2026-08-09-phase-06-design.md | 128 - .../2026-08-09-phase-06-implementation.md | 185 - .../knowledge/journal/2026-08-09-phase-07.md | 101 - .../2026-08-10-phase-07g-issue-thread-ui.md | 107 - ...10-phase-07i-documentation-and-evidence.md | 79 - .../knowledge/journal/index.md | 21 - packages/paperclip-runner/knowledge/log.md | 32 +- .../knowledge/templates/index.md | 5 - .../knowledge/templates/journal-entry.md | 54 - packages/paperclip-runner/package.json | 109 +- .../driver-conformance.json | 8 +- .../fixtures/conformance-expected-output.json | 1 + .../fixtures/conformance-minimal-run.json | 29 + .../scripts/duplicate-terminal.json | 2 +- .../scripts/error.json | 6 +- .../scripts/happy-path.json | 22 +- .../scripts/interrupted.json | 8 +- .../scripts/linger.json | 2 +- .../scripts/oversized-line.json | 0 .../scripts/permission-input.json | 14 +- .../fixtures/phase-00-expected-output.json | 1 - .../fixtures/phase-00-minimal-run.json | 29 - .../{phase-01 => replay}/duplicate-event.json | 24 +- .../{phase-01 => replay}/failed-run.json | 46 +- .../golden/duplicate-event.snapshot.json | 22 +- .../golden/duplicate-event.summary.json | 2 +- .../golden/failed-run.snapshot.json | 20 +- .../golden/failed-run.summary.json | 2 +- .../golden/happy-path.snapshot.json | 32 +- .../golden/happy-path.summary.json | 2 +- .../golden/interrupted-run.snapshot.json | 20 +- .../golden/interrupted-run.summary.json | 2 +- .../golden/source-gap.snapshot.json | 20 +- .../golden/source-gap.summary.json | 4 +- .../unknown-optional-fields.snapshot.json | 18 +- .../unknown-optional-fields.summary.json | 2 +- .../{phase-01 => replay}/happy-path.json | 98 +- .../{phase-01 => replay}/interrupted-run.json | 40 +- .../{phase-01 => replay}/source-gap.json | 16 +- .../unknown-optional-fields.json | 14 +- .../unsupported-required-version.json | 8 +- .../runner/crates/runner-core/Cargo.toml | 4 +- .../runner-core/src/bin/conformance-tracer.rs | 11 + .../runner-core/src/bin/fake-harness.rs | 15 +- .../runner-core/src/bin/paperclip-runnerd.rs | 63 +- .../runner-core/src/bin/phase0-tracer.rs | 11 - .../crates/runner-core/src/durable/mod.rs | 5 + .../crates/runner-core/src/durable/runner.rs | 1130 +++ .../crates/runner-core/src/durable/state.rs | 1407 ++++ .../runner-core/src/durable/transport.rs | 785 +++ .../crates/runner-core/src/fake_harness.rs | 292 + .../runner/crates/runner-core/src/lib.rs | 139 +- .../src/{phase2.rs => local_runner.rs} | 775 +-- .../runner/crates/runner-core/src/phase3.rs | 3325 --------- .../runner-core/src/process_supervisor.rs | 391 ++ .../runner-core/src/{phase1.rs => replay.rs} | 98 +- ...e2_supervisor.rs => process_supervisor.rs} | 7 +- ...ke.mjs => capability-clean-room-smoke.mjs} | 36 +- ...okie-jar.mjs => capability-cookie-jar.mjs} | 4 +- ...s.mjs => capability-explorer-fixtures.mjs} | 24 +- ...mjs => capability-issue-thread-server.mjs} | 56 +- ....mjs => capability-issue-thread-smoke.mjs} | 30 +- ...le.mjs => check-capability-csp-bundle.mjs} | 8 +- ...ory.mjs => check-capability-inventory.mjs} | 14 +- ...js => check-capability-inventory.test.mjs} | 14 +- .../scripts/check-numbered-milestones.mjs | 16 + .../check-numbered-milestones.test.mjs | 30 + ...t.mjs => generate-capability-contract.mjs} | 14 +- ....mjs => generate-capability-inventory.mjs} | 22 +- ...oldens.mjs => generate-replay-goldens.mjs} | 12 +- .../scripts/generate-semantic-contracts.mjs | 6 +- ...inventory.mjs => capability-inventory.mjs} | 14 +- ...phase4-evidence.mjs => codex-evidence.mjs} | 18 +- .../scripts/lib/forbidden-imports.mjs | 2 +- .../scripts/lib/numbered-milestones.mjs | 87 + ...er.mjs => live-console-browser-server.mjs} | 38 +- ...s => live-console-browser-server.test.mjs} | 18 +- ...erver.mjs => live-console-demo-server.mjs} | 10 +- ...er.mjs => local-runner-browser-server.mjs} | 94 +- ...s => local-runner-browser-server.test.mjs} | 24 +- ...record-capability-clean-room-evidence.mjs} | 10 +- ...nce.mjs => record-capability-evidence.mjs} | 24 +- ....mjs => record-capability-ui-evidence.mjs} | 24 +- ...=> record-capability-ui-live-evidence.mjs} | 10 +- ...evidence.mjs => record-codex-evidence.mjs} | 46 +- ...est.mjs => record-codex-evidence.test.mjs} | 20 +- ...s => record-durable-recovery-evidence.mjs} | 16 +- ...e.mjs => record-live-console-evidence.mjs} | 46 +- ....mjs => record-scenario-chat-evidence.mjs} | 30 +- .../scripts/run-capability-eval-suite.mjs | 8 + ...js => run-capability-live-eval-matrix.mjs} | 12 +- .../scripts/run-phase7-eval-suite.mjs | 8 - ...se7i-demo.sh => run-scenario-chat-demo.sh} | 42 +- .../scripts/shot-phase7-mockup.mjs | 16 - .../capabilities.yaml | 2 +- .../contract-schema.json | 4 +- .../eval-traceability.yaml | 2 +- .../inventory.schema.json | 2 +- .../mcp-tool-map.yaml | 2 +- .../source-contract.json | 0 ...-phase5.json => status-authority-sdk.json} | 0 ...pike-spec.md => native-runner-contract.md} | 168 +- ...rclip-native-runner-implementation-plan.md | 1288 ---- .../paperclip-runner-status-attention-ux.md | 10 +- .../src/backends/codex-native-backend.ts | 4 +- .../backends/harness-driver-backend.test.ts | 2 +- .../src/backends/harness-driver-backend.ts | 2 +- .../src/browser/client.test.ts | 4 +- .../paperclip-runner/src/browser/client.ts | 4 +- .../paperclip-runner/src/browser/index.ts | 2 +- .../paperclip-runner/src/browser/protocol.ts | 2 +- .../src/browser/transcript-model.test.ts | 16 +- .../src/browser/transcript-model.ts | 2 +- .../src/cli/{phase4-codex.ts => codex.ts} | 18 +- ...phase3-recovery.ts => durable-recovery.ts} | 28 +- .../cli/{phase7-live.ts => live-runner.ts} | 22 +- .../{phase2-mock-core.ts => local-runner.ts} | 22 +- ...ase6-paperclip.ts => paperclip-adapter.ts} | 6 +- .../src/cli/{phase1-replay.ts => replay.ts} | 8 +- ....test.ts => capability-eval-suite.test.ts} | 6 +- ...eval-suite.ts => capability-eval-suite.ts} | 116 +- .../src/conformance/control-plane-port.ts | 30 +- .../src/contracts/{phase4.ts => codex.ts} | 70 +- .../src/contracts/control-plane-port.ts | 2 +- .../{phase3.ts => durable-recovery.ts} | 42 +- .../src/contracts/harness-driver.ts | 2 +- .../contracts/{phase2.ts => local-runner.ts} | 24 +- .../src/contracts/native-execution.ts | 2 +- .../src/contracts/native-session-backend.ts | 2 +- .../codex/app-server-transport.test.ts | 3 +- .../codex/codex-app-server-driver.test.ts | 86 +- .../drivers/codex/codex-app-server-driver.ts | 70 +- ...ity-contract.ts => capability-contract.ts} | 16 +- packages/paperclip-runner/src/index.ts | 62 +- .../src/issue-thread/fixtures.ts | 70 +- .../src/issue-thread/issue-thread.test.ts | 106 +- .../src/issue-thread/live-projection.ts | 166 +- .../src/issue-thread/public-view.test.ts | 66 +- .../src/issue-thread/public-view.ts | 118 +- .../src/issue-thread/types.ts | 196 +- .../clean-room-server.test.ts | 200 +- .../src/{phase7 => live}/clean-room.test.ts | 60 +- .../src/{phase7 => live}/clean-room.ts | 86 +- .../{phase7 => live}/evidence-redaction.ts | 80 +- .../src/{phase7 => live}/index.ts | 2 +- .../src/{phase7 => live}/live-session.test.ts | 36 +- .../src/{phase7 => live}/live-session.ts | 302 +- .../runnerd-codex-transport.ts | 24 +- .../scenario-chat-demo-server.test.ts} | 120 +- .../scenario-chat-demo-server.ts} | 102 +- .../scenario-chat-loopback-proxy.ts} | 10 +- .../live/scenario-chat-proxy-config.test.ts | 65 + .../scenario-chat-proxy-config.ts} | 20 +- .../{phase7 => live}/tailnet-gateway.test.ts | 12 +- .../src/{phase7 => live}/tailnet-gateway.ts | 68 +- .../src/{phase7 => live}/turn-stream.test.ts | 114 +- .../src/{phase7 => live}/turn-stream.ts | 116 +- ...s.ts => capability-control-plane-types.ts} | 276 +- ...bility-mock-control-plane-adapter.test.ts} | 28 +- ... capability-mock-control-plane-adapter.ts} | 310 +- ...phase4-codex-runner.ts => codex-runner.ts} | 108 +- ...overy.test.ts => durable-recovery.test.ts} | 110 +- ...phase3-recovery.ts => durable-recovery.ts} | 144 +- ...ests.ts => live-console-demo-manifests.ts} | 40 +- ...st.ts => live-console-demo-server.test.ts} | 116 +- ...-server.ts => live-console-demo-server.ts} | 116 +- ...s => live-console-scripted-driver.test.ts} | 36 +- ...ver.ts => live-console-scripted-driver.ts} | 48 +- ...al-runner.test.ts => local-runner.test.ts} | 56 +- ...phase2-local-runner.ts => local-runner.ts} | 154 +- .../mock-control-plane-adapter.test.ts | 10 +- .../mock-core/mock-control-plane-adapter.ts | 8 +- .../src/native-session-runtime.test.ts | 2 +- .../src/native-session-runtime.ts | 2 +- .../src/phase7/browser-index.ts | 49 - .../src/phase7/fixture-run-capabilities.ts | 17 - .../src/phase7/phase7i-proxy-config.test.ts | 65 - .../src/protocol/conformance-fixture.test.ts | 53 + ...ase0-fixture.ts => conformance-fixture.ts} | 28 +- ...e4b-fixture.ts => live-console-fixture.ts} | 42 +- .../src/protocol/phase0-fixture.test.ts | 53 - ...ntract.test.ts => replay-contract.test.ts} | 4 +- ...{phase1-contract.ts => replay-contract.ts} | 0 .../{phase1-loader.ts => replay-loader.ts} | 8 +- .../paperclip-runner/src/react/inspector.tsx | 2 +- .../src/react/use-runner-console.ts | 2 +- .../src/reducer/session-reducer.test.ts | 6 +- .../src/reducer/session-reducer.ts | 6 +- .../src/{phase7 => scenarios}/chat-script.ts | 52 +- .../chat-session.test.ts | 56 +- .../src/{phase7 => scenarios}/chat-session.ts | 186 +- .../src/scenarios/fixture-run-capabilities.ts | 17 + .../paperclip-runner/src/scenarios/index.ts | 49 + .../scenario-execution.ts | 162 +- .../scenario-explorer-types.ts | 204 +- .../scenario-explorer.test.ts | 84 +- .../scenario-fixtures.ts | 46 +- .../{phase7 => scenarios}/scenario-index.ts | 92 +- .../{phase7 => scenarios}/scenario-parity.ts | 94 +- .../{phase7 => scenarios}/scenario-plan.ts | 84 +- .../{phase7 => scenarios}/scenario-runner.ts | 94 +- .../src/{phase7 => scenarios}/state-diff.ts | 46 +- .../src/semantic-tools/catalog.ts | 46 +- .../src/semantic-tools/dispatcher.ts | 148 +- .../src/semantic-tools/policy.ts | 52 +- .../src/semantic-tools/provider-neutral.ts | 32 +- .../src/semantic-tools/redaction.ts | 12 +- .../src/semantic-tools/semantic-tools.test.ts | 42 +- .../src/semantic-tools/types.ts | 110 +- .../paperclip-runner/src/standalone/index.ts | 2 +- ...6-demo.test.ts => standalone-demo.test.ts} | 36 +- .../{phase6-demo.ts => standalone-demo.ts} | 56 +- ...ts => capability-semantic-tool-catalog.ts} | 62 +- ...ts => capability-semantic-tool-runtime.ts} | 174 +- .../tools/capability-semantic-tool-types.ts | 210 + ...t.ts => capability-semantic-tools.test.ts} | 84 +- ...on.ts => capability-tool-authorization.ts} | 78 +- ...indings.ts => capability-tool-bindings.ts} | 36 +- packages/paperclip-runner/src/tools/index.ts | 10 +- .../src/tools/phase7-semantic-tool-types.ts | 210 - ...ner.test.ts => conformance-runner.test.ts} | 8 +- ...phase0-runner.ts => conformance-runner.ts} | 30 +- .../src/tracer/conformance.ts | 4 + .../{phase2-live.ts => local-runner-live.ts} | 24 +- .../paperclip-runner/src/tracer/phase0.ts | 4 - .../{phase1-replay.test.ts => replay.test.ts} | 10 +- .../tracer/{phase1-replay.ts => replay.ts} | 8 +- .../test/capability-contract.test.mjs | 6 +- .../paperclip-runner/tsconfig.browser.json | 4 +- packages/paperclip-runner/vite.config.ts | 6 +- .../vite.issue-thread-stream.config.ts | 8 +- .../vite.issue-thread.config.ts | 4 +- ...se7.config.ts => vite.scenarios.config.ts} | 14 +- ...te.phase5.config.ts => vite.sdk.config.ts} | 6 +- ...e6.config.ts => vite.standalone.config.ts} | 4 +- packages/paperclip-runner/vitest.config.ts | 10 +- ...mjs => check-runner-operator-contract.mjs} | 26 +- ....mjs => check-runner-status-authority.mjs} | 16 +- .../native-status-arbiter-corpus.test.ts | 2 +- .../paperclip-control-plane-port.test.ts | 9 +- 574 files changed, 16232 insertions(+), 28863 deletions(-) rename packages/paperclip-runner/docs/{phase-07-authorization-and-exposure.md => capability-authorization-and-exposure.md} (88%) rename packages/paperclip-runner/docs/{phase-07-clean-room-chat.md => capability-clean-room-chat.md} (77%) rename packages/paperclip-runner/docs/{phase-07-capability-contract.md => capability-contract.md} (98%) rename packages/paperclip-runner/docs/{phase-07-capability-disposition.md => capability-disposition.md} (77%) rename packages/paperclip-runner/docs/{phase-07-eval-conformance.md => capability-eval-conformance.md} (77%) rename packages/paperclip-runner/docs/{phase-07-execution-modes.md => capability-execution-modes.md} (89%) rename packages/paperclip-runner/docs/{phase-07-future-binding-boundary.md => capability-future-binding-boundary.md} (55%) rename packages/paperclip-runner/docs/{phase-07-issue-thread-ui.md => capability-issue-thread-ui.md} (84%) rename packages/paperclip-runner/docs/{phase-07-live-runnerd-codex.md => capability-live-runnerd-codex.md} (78%) rename packages/paperclip-runner/docs/{phase-07-mock-control-plane-port.md => capability-mock-control-plane-port.md} (82%) rename packages/paperclip-runner/docs/{phase-07-scenario-explorer.md => capability-scenario-explorer.md} (71%) rename packages/paperclip-runner/docs/{phase-07-semantic-catalog.md => capability-semantic-catalog.md} (81%) rename packages/paperclip-runner/docs/{phase-07-semantic-tools.md => capability-semantic-tools.md} (78%) create mode 100644 packages/paperclip-runner/docs/capability-verification-commands.md rename packages/paperclip-runner/docs/{phase-04-skillless-codex-driver.md => codex-driver.md} (96%) rename packages/paperclip-runner/docs/design/{phase-7-issue-thread-ux-contract.md => capability-issue-thread-ux-contract.md} (97%) rename packages/paperclip-runner/docs/design/{phase-7-scenario-explorer-ux.md => capability-scenario-explorer-ux.md} (93%) rename packages/paperclip-runner/docs/design/{phase-4b-component-decisions.md => live-console-component-decisions.md} (87%) rename packages/paperclip-runner/docs/design/{phase-4b-interaction-map.md => live-console-interaction-map.md} (98%) delete mode 100644 packages/paperclip-runner/docs/design/mockups/phase-4b-live-console-desktop-1440x900.png delete mode 100644 packages/paperclip-runner/docs/design/mockups/phase-4b-live-console-mobile-390x844.png delete mode 100644 packages/paperclip-runner/docs/design/mockups/phase-4b-live-console.html delete mode 100644 packages/paperclip-runner/docs/design/mockups/phase-7-scenario-explorer.html delete mode 100644 packages/paperclip-runner/docs/design/mockups/phase-7i-mobile-chat.html delete mode 100644 packages/paperclip-runner/docs/design/phase-5-component-plan.md rename packages/paperclip-runner/docs/design/{phase-7i-mobile-chat-ux.md => scenario-chat-ux.md} (95%) rename packages/paperclip-runner/docs/design/{phase-5-component-decisions.md => sdk-component-decisions.md} (90%) rename packages/paperclip-runner/docs/design/{phase-6-thin-paperclip-adapter.md => standalone-thin-paperclip-adapter.md} (95%) rename packages/paperclip-runner/docs/{phase-03-durable-transport.md => durable-recovery.md} (96%) delete mode 100644 packages/paperclip-runner/docs/journal.md rename packages/paperclip-runner/docs/{phase-04b-protocol-server.md => live-console-protocol-server.md} (84%) rename packages/paperclip-runner/docs/{phase-04b-live-console.md => live-console.md} (85%) rename packages/paperclip-runner/docs/{phase-02-local-protocol.md => local-runner.md} (88%) delete mode 100644 packages/paperclip-runner/docs/phase-07-verification-commands.md rename packages/paperclip-runner/docs/{phase-07i-scenario-chat.md => scenario-chat.md} (82%) rename packages/paperclip-runner/docs/{phase-05-sdk.md => sdk.md} (93%) rename packages/paperclip-runner/docs/{phase-06-thin-paperclip-adapter.md => standalone-thin-paperclip-adapter.md} (64%) rename packages/paperclip-runner/docs/tutorials/{phase-07-clean-room-chat.md => capability-clean-room-chat.md} (88%) rename packages/paperclip-runner/docs/tutorials/{phase-07-issue-thread.md => capability-issue-thread.md} (82%) rename packages/paperclip-runner/docs/tutorials/{phase-07-scenario-explorer.md => capability-scenario-explorer.md} (70%) rename packages/paperclip-runner/docs/tutorials/{phase-04-skillless-codex.md => codex.md} (82%) rename packages/paperclip-runner/docs/tutorials/{phase-00-standalone-tracer.md => conformance-standalone-tracer.md} (73%) rename packages/paperclip-runner/docs/tutorials/{phase-03-break-recovery.md => durable-recovery.md} (78%) rename packages/paperclip-runner/docs/tutorials/{phase-04b-protocol-server.md => live-console-protocol-server.md} (72%) rename packages/paperclip-runner/docs/tutorials/{phase-04b-live-console.md => live-console.md} (92%) rename packages/paperclip-runner/docs/tutorials/{phase-02-local-runner.md => local-runner.md} (70%) rename packages/paperclip-runner/docs/tutorials/{phase-01-static-replay.md => replay.md} (82%) rename packages/paperclip-runner/docs/tutorials/{phase-07i-scenario-chat.md => scenario-chat.md} (82%) rename packages/paperclip-runner/docs/tutorials/{phase-05-sdk-console.md => sdk-console.md} (92%) rename packages/paperclip-runner/docs/tutorials/{phase-06-thin-paperclip-adapter.md => standalone-thin-paperclip-adapter.md} (76%) delete mode 100644 packages/paperclip-runner/examples/phase6-standalone/index.html delete mode 100644 packages/paperclip-runner/examples/phase7-explorer/index.html delete mode 100644 packages/paperclip-runner/examples/phase7-explorer/src/env.d.ts rename packages/paperclip-runner/examples/{playwright.phase7.config.ts => playwright.scenarios.config.ts} (63%) rename packages/paperclip-runner/examples/{phase7-chat.spec.ts => scenario-chat.spec.ts} (98%) rename packages/paperclip-runner/examples/{phase7-explorer.spec.ts => scenario-explorer.spec.ts} (99%) create mode 100644 packages/paperclip-runner/examples/scenario-explorer/index.html rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/app.tsx (89%) rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/chat.test.tsx (92%) rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/components/chat-activity-stream.tsx (93%) rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/components/chat-conversation.tsx (88%) rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/components/chat-session-header.tsx (93%) rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/components/chat-surface.tsx (88%) rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/components/chat-turn-strip.tsx (93%) rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/components/inspector-panels.tsx (94%) rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/components/primitives.tsx (91%) rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/components/run-header.tsx (95%) rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/components/scenario-picker.tsx (89%) rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/components/scenario-transcript.tsx (97%) create mode 100644 packages/paperclip-runner/examples/scenario-explorer/src/env.d.ts rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/explorer.css (99%) rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/explorer.test.tsx (95%) rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/labels.ts (74%) rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/main.tsx (52%) rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/remote-chat-session.ts (67%) rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/route.test.ts (67%) rename packages/paperclip-runner/examples/{phase7-explorer => scenario-explorer}/src/route.ts (74%) rename packages/paperclip-runner/examples/{phase5-real.spec.ts => sdk-real.spec.ts} (96%) rename packages/paperclip-runner/examples/{phase5.spec.ts => sdk.spec.ts} (94%) create mode 100644 packages/paperclip-runner/examples/standalone-demo/index.html rename packages/paperclip-runner/examples/{phase6-standalone => standalone-demo}/src/main.tsx (88%) rename packages/paperclip-runner/examples/{phase6-standalone => standalone-demo}/src/styles.css (100%) rename packages/paperclip-runner/generated/{phase-07 => capability}/capabilities.yaml (100%) rename packages/paperclip-runner/generated/{phase-07 => capability}/capability-contract.md (72%) rename packages/paperclip-runner/generated/{phase-07 => capability}/downstream-handoff.md (84%) rename packages/paperclip-runner/generated/{phase-07 => capability}/eval-traceability.yaml (100%) rename packages/paperclip-runner/generated/{phase-07 => capability}/mcp-tool-map.yaml (100%) rename packages/paperclip-runner/generated/{phase-07 => capability}/semantic-tool-contracts.json (100%) delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-07-phase-00-rust-correction-verification.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-07-phase-00-verification.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-07-phase-01-verification.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-07-phase-02-verification.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-07-phase-03-verification.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-08-phase-04-verification.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-08-phase-04b-live-console-verification.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-08-phase-04b-protocol-server-verification.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-08-phase-04b-qa-verification.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-08-phase-05-verification.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-09-phase-06-verification.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-09-phase-07-verification.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-09-phase-07f-explorer-verification.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-09-phase-07i-chat-verification.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-10-phase-07g-issue-thread-ui-verification.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-10-phase-07i-final-evidence.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-10-phase-07m-clean-room-verification.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-10-phase-07q-turn-streaming-verification.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/2026-08-10-phase-07u-disclosure-and-capability-verification.md rename packages/paperclip-runner/knowledge/evidence/{phase-04-codex-trace.json => codex-trace.json} (74%) rename packages/paperclip-runner/knowledge/evidence/{phase-03-fault-matrix.json => durable-recovery-fault-matrix.json} (99%) rename packages/paperclip-runner/knowledge/evidence/{phase-03-faults => durable-recovery-faults}/drain.json (63%) rename packages/paperclip-runner/knowledge/evidence/{phase-03-faults => durable-recovery-faults}/duplicate-command.json (59%) rename packages/paperclip-runner/knowledge/evidence/{phase-03-faults => durable-recovery-faults}/harness-restart.json (59%) rename packages/paperclip-runner/knowledge/evidence/{phase-03-faults => durable-recovery-faults}/lease-expiry.json (59%) rename packages/paperclip-runner/knowledge/evidence/{phase-03-faults => durable-recovery-faults}/lost-ack.json (59%) rename packages/paperclip-runner/knowledge/evidence/{phase-03-faults => durable-recovery-faults}/malformed-input.json (59%) rename packages/paperclip-runner/knowledge/evidence/{phase-03-faults => durable-recovery-faults}/none.json (59%) rename packages/paperclip-runner/knowledge/evidence/{phase-03-faults => durable-recovery-faults}/revoke.json (61%) rename packages/paperclip-runner/knowledge/evidence/{phase-03-faults => durable-recovery-faults}/runner-restart.json (58%) rename packages/paperclip-runner/knowledge/evidence/{phase-03-faults => durable-recovery-faults}/socket-drop.json (59%) rename packages/paperclip-runner/knowledge/evidence/{phase-03-faults => durable-recovery-faults}/storage-pressure.json (63%) rename packages/paperclip-runner/knowledge/evidence/{phase-03-recovery-trace.json => durable-recovery-trace.json} (59%) rename packages/paperclip-runner/knowledge/evidence/{phase-04b-real-codex-server.json => live-console-real-codex-server.json} (68%) delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-01-static-replay.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-02-live-complete.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-02-live-interrupted.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-02-live-permission.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-03-recovery-diagnostics.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-01-idle-empty.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-02-streaming-turn.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-03-turn-completed.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-04-steering-acknowledged.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-05-interrupt-before-start.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-06-interrupt-during-generation.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-07-interrupt-during-tool.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-08-request-pending.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-09-request-resolved.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-10-request-expired.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-11-goal-supported.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-12-goal-unsupported.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-13-lineage-child.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-14-failed-turn.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-15-reconnect-banner.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-16-refresh-replay.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-17-replay-mode.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-18-inspector-events.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/desktop-19-inspector-session.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/mobile-01-idle-empty.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/mobile-02-session-segment.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/mobile-03-request-pending.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/mobile-04-inspector.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/qa-2026-08-08/01-idle-empty.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/qa-2026-08-08/03-completion-done.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/qa-2026-08-08/04b-steer-acknowledged.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/qa-2026-08-08/05a2-interrupt-before-start.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/qa-2026-08-08/06b-approval-resolved.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/qa-2026-08-08/07e-expired-clean.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/qa-2026-08-08/08a-goal-supported.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/qa-2026-08-08/09-inspector.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/qa-2026-08-08/09b-inspector-session.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-04b/qa-2026-08-08/10-codex-real-turn.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/mini-idle-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/mini-idle-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/mini-live-codex-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/mini-reconnect-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/mini-reconnect-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/mini-replay-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/mini-replay-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/mini-request-pending-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/mini-request-pending-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/mini-streaming-custom-renderer-token-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/mini-streaming-custom-renderer-token-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/phase5-real-codex-trace.json delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-direct-chat-codex-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-failed-turn-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-failed-turn-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-goal-set-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-goal-set-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-idle-empty-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-idle-empty-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-interrupt-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-interrupt-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-live-codex-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-live-preview-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-reconnect-banner-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-reconnect-banner-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-replay-mode-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-replay-mode-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-request-pending-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-request-pending-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-request-resolved-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-request-resolved-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-review-v0.1.2-mobile-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-steering-acknowledged-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-steering-acknowledged-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-streaming-turn-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-streaming-turn-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-terminal-debug-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-05/reference-terminal-debug-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ap-approval-denied-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ap-approval-denied-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ar-artifacts-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ar-artifacts-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/bl-blockers-diff-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/bl-blockers-diff-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/clean-room/clean-room-blank--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/clean-room/clean-room-blank--mobile.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/clean-room/clean-room-entry--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/clean-room/clean-room-evidence--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/clean-room/clean-room-live-turn--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/clean-room/clean-room-live-turn--mobile.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/clean-room/clean-room-new-chat--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/clean-room/index.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/explorer-home-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/explorer-home-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/hb-heartbeat-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/hb-heartbeat-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/index.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ix-interaction-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ix-interaction-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/mh-multihop-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/mh-multihop-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/mockup-explorer-ap-mcp-gate-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/mockup-explorer-ap-mcp-gate-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/phase-7i-activity-mobile-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/phase-7i-chat-activity-diff-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/phase-7i-chat-activity-diff-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/phase-7i-chat-denied-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/phase-7i-chat-denied-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/phase-7i-chat-desktop-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/phase-7i-chat-home-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/phase-7i-chat-home-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/phase-7i-chat-mobile-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/phase-7i-chat-session-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/phase-7i-chat-session-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/phase-7i-chat-streaming-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/phase-7i-chat-streaming-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/phase-7i-chat-streaming-desktop-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/phase-7i-chat-streaming-mobile-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/phase-7i-screenshot-manifest.json delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/picker-filtered-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/picker-filtered-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/rf-manager-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/rf-manager-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/rs-restraint-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/rs-restraint-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/rs-secret-redaction-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/rs-secret-redaction-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/screenshot-manifest.json delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui-live/index.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui-live/live-codex-evidence--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui-live/live-codex-turn--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui-live/live-codex-turn--mobile.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/debug-panel-open--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/debug-panel-open--mobile.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/deliverable-registered--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/deliverable-registered--mobile.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/denial-optional-tool--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/denial-optional-tool--mobile.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/disposition-terminal--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/disposition-terminal--mobile.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/document-revision--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/document-revision--mobile.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/index.md delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/interaction-confirmation-pending--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/interaction-confirmation-pending--mobile.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/interaction-question-pending--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/interaction-question-pending--mobile.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/interaction-resolved-mixed--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/interaction-resolved-mixed--mobile.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/reconnect-banner--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/reconnect-banner--mobile.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/replay-mode--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/replay-mode--mobile.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/thread-baseline--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/thread-baseline--mobile.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/turn-streaming--desktop.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/ui/turn-streaming--mobile.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/wk-planning-1440x900.png delete mode 100644 packages/paperclip-runner/knowledge/evidence/phase-07/wk-planning-390x844.png delete mode 100644 packages/paperclip-runner/knowledge/journal/2026-08-07-phase-00-rust-boundary-correction.md delete mode 100644 packages/paperclip-runner/knowledge/journal/2026-08-07-phase-00.md delete mode 100644 packages/paperclip-runner/knowledge/journal/2026-08-07-phase-01.md delete mode 100644 packages/paperclip-runner/knowledge/journal/2026-08-07-phase-02.md delete mode 100644 packages/paperclip-runner/knowledge/journal/2026-08-07-phase-03.md delete mode 100644 packages/paperclip-runner/knowledge/journal/2026-08-08-phase-04.md delete mode 100644 packages/paperclip-runner/knowledge/journal/2026-08-08-phase-04b-live-console.md delete mode 100644 packages/paperclip-runner/knowledge/journal/2026-08-08-phase-04b-protocol-server.md delete mode 100644 packages/paperclip-runner/knowledge/journal/2026-08-08-phase-04b-ux.md delete mode 100644 packages/paperclip-runner/knowledge/journal/2026-08-08-phase-05-sdk.md delete mode 100644 packages/paperclip-runner/knowledge/journal/2026-08-08-phase-05-ux-plan.md delete mode 100644 packages/paperclip-runner/knowledge/journal/2026-08-09-phase-06-design.md delete mode 100644 packages/paperclip-runner/knowledge/journal/2026-08-09-phase-06-implementation.md delete mode 100644 packages/paperclip-runner/knowledge/journal/2026-08-09-phase-07.md delete mode 100644 packages/paperclip-runner/knowledge/journal/2026-08-10-phase-07g-issue-thread-ui.md delete mode 100644 packages/paperclip-runner/knowledge/journal/2026-08-10-phase-07i-documentation-and-evidence.md delete mode 100644 packages/paperclip-runner/knowledge/journal/index.md delete mode 100644 packages/paperclip-runner/knowledge/templates/index.md delete mode 100644 packages/paperclip-runner/knowledge/templates/journal-entry.md rename packages/paperclip-runner/protocol/fixtures/{phase-04b => codex-driver}/driver-conformance.json (92%) create mode 100644 packages/paperclip-runner/protocol/fixtures/conformance-expected-output.json create mode 100644 packages/paperclip-runner/protocol/fixtures/conformance-minimal-run.json rename packages/paperclip-runner/protocol/fixtures/{phase-02 => local-runner}/scripts/duplicate-terminal.json (95%) rename packages/paperclip-runner/protocol/fixtures/{phase-02 => local-runner}/scripts/error.json (90%) rename packages/paperclip-runner/protocol/fixtures/{phase-02 => local-runner}/scripts/happy-path.json (76%) rename packages/paperclip-runner/protocol/fixtures/{phase-02 => local-runner}/scripts/interrupted.json (87%) rename packages/paperclip-runner/protocol/fixtures/{phase-02 => local-runner}/scripts/linger.json (88%) rename packages/paperclip-runner/protocol/fixtures/{phase-02 => local-runner}/scripts/oversized-line.json (100%) rename packages/paperclip-runner/protocol/fixtures/{phase-02 => local-runner}/scripts/permission-input.json (83%) delete mode 100644 packages/paperclip-runner/protocol/fixtures/phase-00-expected-output.json delete mode 100644 packages/paperclip-runner/protocol/fixtures/phase-00-minimal-run.json rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/duplicate-event.json (58%) rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/failed-run.json (69%) rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/golden/duplicate-event.snapshot.json (86%) rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/golden/duplicate-event.summary.json (84%) rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/golden/failed-run.snapshot.json (88%) rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/golden/failed-run.summary.json (83%) rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/golden/happy-path.snapshot.json (84%) rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/golden/happy-path.summary.json (84%) rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/golden/interrupted-run.snapshot.json (88%) rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/golden/interrupted-run.summary.json (81%) rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/golden/source-gap.snapshot.json (87%) rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/golden/source-gap.summary.json (78%) rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/golden/unknown-optional-fields.snapshot.json (87%) rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/golden/unknown-optional-fields.summary.json (83%) rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/happy-path.json (71%) rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/interrupted-run.json (72%) rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/source-gap.json (63%) rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/unknown-optional-fields.json (69%) rename packages/paperclip-runner/protocol/fixtures/{phase-01 => replay}/unsupported-required-version.json (70%) create mode 100644 packages/paperclip-runner/runner/crates/runner-core/src/bin/conformance-tracer.rs delete mode 100644 packages/paperclip-runner/runner/crates/runner-core/src/bin/phase0-tracer.rs create mode 100644 packages/paperclip-runner/runner/crates/runner-core/src/durable/mod.rs create mode 100644 packages/paperclip-runner/runner/crates/runner-core/src/durable/runner.rs create mode 100644 packages/paperclip-runner/runner/crates/runner-core/src/durable/state.rs create mode 100644 packages/paperclip-runner/runner/crates/runner-core/src/durable/transport.rs create mode 100644 packages/paperclip-runner/runner/crates/runner-core/src/fake_harness.rs rename packages/paperclip-runner/runner/crates/runner-core/src/{phase2.rs => local_runner.rs} (54%) delete mode 100644 packages/paperclip-runner/runner/crates/runner-core/src/phase3.rs create mode 100644 packages/paperclip-runner/runner/crates/runner-core/src/process_supervisor.rs rename packages/paperclip-runner/runner/crates/runner-core/src/{phase1.rs => replay.rs} (76%) rename packages/paperclip-runner/runner/crates/runner-core/tests/{phase2_supervisor.rs => process_supervisor.rs} (94%) rename packages/paperclip-runner/scripts/{phase7-clean-room-smoke.mjs => capability-clean-room-smoke.mjs} (84%) rename packages/paperclip-runner/scripts/{phase7-cookie-jar.mjs => capability-cookie-jar.mjs} (92%) rename packages/paperclip-runner/scripts/{phase7-explorer-fixtures.mjs => capability-explorer-fixtures.mjs} (52%) rename packages/paperclip-runner/scripts/{phase7-issue-thread-server.mjs => capability-issue-thread-server.mjs} (93%) rename packages/paperclip-runner/scripts/{phase7-issue-thread-smoke.mjs => capability-issue-thread-smoke.mjs} (80%) rename packages/paperclip-runner/scripts/{check-phase7-csp-bundle.mjs => check-capability-csp-bundle.mjs} (74%) rename packages/paperclip-runner/scripts/{check-phase7-inventory.mjs => check-capability-inventory.mjs} (78%) rename packages/paperclip-runner/scripts/{check-phase7-inventory.test.mjs => check-capability-inventory.test.mjs} (83%) create mode 100644 packages/paperclip-runner/scripts/check-numbered-milestones.mjs create mode 100644 packages/paperclip-runner/scripts/check-numbered-milestones.test.mjs rename packages/paperclip-runner/scripts/{generate-phase-07-contract.mjs => generate-capability-contract.mjs} (94%) rename packages/paperclip-runner/scripts/{generate-phase7-inventory.mjs => generate-capability-inventory.mjs} (68%) rename packages/paperclip-runner/scripts/{generate-phase1-goldens.mjs => generate-replay-goldens.mjs} (82%) rename packages/paperclip-runner/scripts/lib/{phase7-inventory.mjs => capability-inventory.mjs} (83%) rename packages/paperclip-runner/scripts/lib/{phase4-evidence.mjs => codex-evidence.mjs} (76%) create mode 100644 packages/paperclip-runner/scripts/lib/numbered-milestones.mjs rename packages/paperclip-runner/scripts/{phase4b-browser-server.mjs => live-console-browser-server.mjs} (73%) rename packages/paperclip-runner/scripts/{phase4b-browser-server.test.mjs => live-console-browser-server.test.mjs} (70%) rename packages/paperclip-runner/scripts/{phase4b-demo-server.mjs => live-console-demo-server.mjs} (85%) rename packages/paperclip-runner/scripts/{phase2-browser-server.mjs => local-runner-browser-server.mjs} (75%) rename packages/paperclip-runner/scripts/{phase2-browser-server.test.mjs => local-runner-browser-server.test.mjs} (91%) rename packages/paperclip-runner/scripts/{record-phase7-clean-room-evidence.mjs => record-capability-clean-room-evidence.mjs} (95%) rename packages/paperclip-runner/scripts/{record-phase7-evidence.mjs => record-capability-evidence.mjs} (88%) rename packages/paperclip-runner/scripts/{record-phase7-ui-evidence.mjs => record-capability-ui-evidence.mjs} (92%) rename packages/paperclip-runner/scripts/{record-phase7-ui-live-evidence.mjs => record-capability-ui-live-evidence.mjs} (93%) rename packages/paperclip-runner/scripts/{record-phase4-evidence.mjs => record-codex-evidence.mjs} (78%) rename packages/paperclip-runner/scripts/{record-phase4-evidence.test.mjs => record-codex-evidence.test.mjs} (79%) rename packages/paperclip-runner/scripts/{record-phase3-evidence.mjs => record-durable-recovery-evidence.mjs} (66%) rename packages/paperclip-runner/scripts/{record-phase4b-evidence.mjs => record-live-console-evidence.mjs} (78%) rename packages/paperclip-runner/scripts/{record-phase7i-evidence.mjs => record-scenario-chat-evidence.mjs} (85%) create mode 100644 packages/paperclip-runner/scripts/run-capability-eval-suite.mjs rename packages/paperclip-runner/scripts/{run-phase7-live-eval-matrix.mjs => run-capability-live-eval-matrix.mjs} (67%) delete mode 100644 packages/paperclip-runner/scripts/run-phase7-eval-suite.mjs rename packages/paperclip-runner/scripts/{run-phase7i-demo.sh => run-scenario-chat-demo.sh} (55%) delete mode 100644 packages/paperclip-runner/scripts/shot-phase7-mockup.mjs rename packages/paperclip-runner/spec/{phase-07 => capability}/capabilities.yaml (99%) rename packages/paperclip-runner/spec/{phase-07 => capability}/contract-schema.json (82%) rename packages/paperclip-runner/spec/{phase-07 => capability}/eval-traceability.yaml (99%) rename packages/paperclip-runner/spec/{phase-07 => capability}/inventory.schema.json (97%) rename packages/paperclip-runner/spec/{phase-07 => capability}/mcp-tool-map.yaml (99%) rename packages/paperclip-runner/spec/{phase-07 => capability}/source-contract.json (100%) rename packages/paperclip-runner/spec/fixtures/{status-authority-phase5.json => status-authority-sdk.json} (100%) rename packages/paperclip-runner/spec/{paperclip-native-runner-spike-spec.md => native-runner-contract.md} (97%) delete mode 100644 packages/paperclip-runner/spec/paperclip-native-runner-implementation-plan.md rename packages/paperclip-runner/src/cli/{phase4-codex.ts => codex.ts} (91%) rename packages/paperclip-runner/src/cli/{phase3-recovery.ts => durable-recovery.ts} (84%) rename packages/paperclip-runner/src/cli/{phase7-live.ts => live-runner.ts} (86%) rename packages/paperclip-runner/src/cli/{phase2-mock-core.ts => local-runner.ts} (66%) rename packages/paperclip-runner/src/cli/{phase6-paperclip.ts => paperclip-adapter.ts} (60%) rename packages/paperclip-runner/src/cli/{phase1-replay.ts => replay.ts} (57%) rename packages/paperclip-runner/src/conformance/{phase7-eval-suite.test.ts => capability-eval-suite.test.ts} (82%) rename packages/paperclip-runner/src/conformance/{phase7-eval-suite.ts => capability-eval-suite.ts} (77%) rename packages/paperclip-runner/src/contracts/{phase4.ts => codex.ts} (82%) rename packages/paperclip-runner/src/contracts/{phase3.ts => durable-recovery.ts} (74%) rename packages/paperclip-runner/src/contracts/{phase2.ts => local-runner.ts} (53%) rename packages/paperclip-runner/src/generated/{phase7-capability-contract.ts => capability-contract.ts} (57%) rename packages/paperclip-runner/src/{phase7 => live}/clean-room-server.test.ts (82%) rename packages/paperclip-runner/src/{phase7 => live}/clean-room.test.ts (64%) rename packages/paperclip-runner/src/{phase7 => live}/clean-room.ts (67%) rename packages/paperclip-runner/src/{phase7 => live}/evidence-redaction.ts (84%) rename packages/paperclip-runner/src/{phase7 => live}/index.ts (79%) rename packages/paperclip-runner/src/{phase7 => live}/live-session.test.ts (91%) rename packages/paperclip-runner/src/{phase7 => live}/live-session.ts (78%) rename packages/paperclip-runner/src/{phase7 => live}/runnerd-codex-transport.ts (79%) rename packages/paperclip-runner/src/{phase7/phase7i-demo-server.test.ts => live/scenario-chat-demo-server.test.ts} (81%) rename packages/paperclip-runner/src/{phase7/phase7i-demo-server.ts => live/scenario-chat-demo-server.ts} (87%) rename packages/paperclip-runner/src/{phase7/phase7i-loopback-proxy.ts => live/scenario-chat-loopback-proxy.ts} (85%) create mode 100644 packages/paperclip-runner/src/live/scenario-chat-proxy-config.test.ts rename packages/paperclip-runner/src/{phase7/phase7i-proxy-config.ts => live/scenario-chat-proxy-config.ts} (71%) rename packages/paperclip-runner/src/{phase7 => live}/tailnet-gateway.test.ts (84%) rename packages/paperclip-runner/src/{phase7 => live}/tailnet-gateway.ts (83%) rename packages/paperclip-runner/src/{phase7 => live}/turn-stream.test.ts (77%) rename packages/paperclip-runner/src/{phase7 => live}/turn-stream.ts (62%) rename packages/paperclip-runner/src/mock-core/{phase7-control-plane-types.ts => capability-control-plane-types.ts} (59%) rename packages/paperclip-runner/src/mock-core/{phase7-mock-control-plane-adapter.test.ts => capability-mock-control-plane-adapter.test.ts} (96%) rename packages/paperclip-runner/src/mock-core/{phase7-mock-control-plane-adapter.ts => capability-mock-control-plane-adapter.ts} (84%) rename packages/paperclip-runner/src/mock-core/{phase4-codex-runner.ts => codex-runner.ts} (85%) rename packages/paperclip-runner/src/mock-core/{phase3-recovery.test.ts => durable-recovery.test.ts} (88%) rename packages/paperclip-runner/src/mock-core/{phase3-recovery.ts => durable-recovery.ts} (92%) rename packages/paperclip-runner/src/mock-core/{phase4b-demo-manifests.ts => live-console-demo-manifests.ts} (92%) rename packages/paperclip-runner/src/mock-core/{phase4b-demo-server.test.ts => live-console-demo-server.test.ts} (87%) rename packages/paperclip-runner/src/mock-core/{phase4b-demo-server.ts => live-console-demo-server.ts} (89%) rename packages/paperclip-runner/src/mock-core/{phase4b-scripted-driver.test.ts => live-console-scripted-driver.test.ts} (93%) rename packages/paperclip-runner/src/mock-core/{phase4b-scripted-driver.ts => live-console-scripted-driver.ts} (95%) rename packages/paperclip-runner/src/mock-core/{phase2-local-runner.test.ts => local-runner.test.ts} (79%) rename packages/paperclip-runner/src/mock-core/{phase2-local-runner.ts => local-runner.ts} (77%) delete mode 100644 packages/paperclip-runner/src/phase7/browser-index.ts delete mode 100644 packages/paperclip-runner/src/phase7/fixture-run-capabilities.ts delete mode 100644 packages/paperclip-runner/src/phase7/phase7i-proxy-config.test.ts create mode 100644 packages/paperclip-runner/src/protocol/conformance-fixture.test.ts rename packages/paperclip-runner/src/protocol/{phase0-fixture.ts => conformance-fixture.ts} (80%) rename packages/paperclip-runner/src/protocol/{phase4b-fixture.ts => live-console-fixture.ts} (66%) delete mode 100644 packages/paperclip-runner/src/protocol/phase0-fixture.test.ts rename packages/paperclip-runner/src/protocol/{phase1-contract.test.ts => replay-contract.test.ts} (97%) rename packages/paperclip-runner/src/protocol/{phase1-contract.ts => replay-contract.ts} (100%) rename packages/paperclip-runner/src/protocol/{phase1-loader.ts => replay-loader.ts} (80%) rename packages/paperclip-runner/src/{phase7 => scenarios}/chat-script.ts (82%) rename packages/paperclip-runner/src/{phase7 => scenarios}/chat-session.test.ts (80%) rename packages/paperclip-runner/src/{phase7 => scenarios}/chat-session.ts (66%) create mode 100644 packages/paperclip-runner/src/scenarios/fixture-run-capabilities.ts create mode 100644 packages/paperclip-runner/src/scenarios/index.ts rename packages/paperclip-runner/src/{phase7 => scenarios}/scenario-execution.ts (78%) rename packages/paperclip-runner/src/{phase7 => scenarios}/scenario-explorer-types.ts (56%) rename packages/paperclip-runner/src/{phase7 => scenarios}/scenario-explorer.test.ts (77%) rename packages/paperclip-runner/src/{phase7 => scenarios}/scenario-fixtures.ts (87%) rename packages/paperclip-runner/src/{phase7 => scenarios}/scenario-index.ts (81%) rename packages/paperclip-runner/src/{phase7 => scenarios}/scenario-parity.ts (81%) rename packages/paperclip-runner/src/{phase7 => scenarios}/scenario-plan.ts (92%) rename packages/paperclip-runner/src/{phase7 => scenarios}/scenario-runner.ts (58%) rename packages/paperclip-runner/src/{phase7 => scenarios}/state-diff.ts (80%) rename packages/paperclip-runner/src/standalone/{phase6-demo.test.ts => standalone-demo.test.ts} (75%) rename packages/paperclip-runner/src/standalone/{phase6-demo.ts => standalone-demo.ts} (74%) rename packages/paperclip-runner/src/tools/{phase7-semantic-tool-catalog.ts => capability-semantic-tool-catalog.ts} (88%) rename packages/paperclip-runner/src/tools/{phase7-semantic-tool-runtime.ts => capability-semantic-tool-runtime.ts} (79%) create mode 100644 packages/paperclip-runner/src/tools/capability-semantic-tool-types.ts rename packages/paperclip-runner/src/tools/{phase7-semantic-tools.test.ts => capability-semantic-tools.test.ts} (85%) rename packages/paperclip-runner/src/tools/{phase7-tool-authorization.ts => capability-tool-authorization.ts} (75%) rename packages/paperclip-runner/src/tools/{phase7-tool-bindings.ts => capability-tool-bindings.ts} (54%) delete mode 100644 packages/paperclip-runner/src/tools/phase7-semantic-tool-types.ts rename packages/paperclip-runner/src/tracer/{phase0-runner.test.ts => conformance-runner.test.ts} (68%) rename packages/paperclip-runner/src/tracer/{phase0-runner.ts => conformance-runner.ts} (56%) create mode 100644 packages/paperclip-runner/src/tracer/conformance.ts rename packages/paperclip-runner/src/tracer/{phase2-live.ts => local-runner-live.ts} (72%) delete mode 100644 packages/paperclip-runner/src/tracer/phase0.ts rename packages/paperclip-runner/src/tracer/{phase1-replay.test.ts => replay.test.ts} (55%) rename packages/paperclip-runner/src/tracer/{phase1-replay.ts => replay.ts} (74%) rename packages/paperclip-runner/{vite.phase7.config.ts => vite.scenarios.config.ts} (71%) rename packages/paperclip-runner/{vite.phase5.config.ts => vite.sdk.config.ts} (83%) rename packages/paperclip-runner/{vite.phase6.config.ts => vite.standalone.config.ts} (83%) rename scripts/{check-runner-phase4-spec.mjs => check-runner-operator-contract.mjs} (92%) rename scripts/{check-runner-phase5-spec.mjs => check-runner-status-authority.mjs} (96%) diff --git a/package.json b/package.json index 132e55dbc0e..162450b4262 100644 --- a/package.json +++ b/package.json @@ -41,8 +41,8 @@ "check:tokens": "node scripts/check-forbidden-tokens.mjs", "check:token-gates": "node scripts/check-token-gates.mjs", "check:no-git-push": "node scripts/check-no-git-push.mjs", - "check:runner-phase4-spec": "node scripts/check-runner-phase4-spec.mjs", - "check:runner-phase5-spec": "node scripts/check-runner-phase5-spec.mjs", + "check:runner-operator-contract": "node scripts/check-runner-operator-contract.mjs", + "check:runner-status-authority": "node scripts/check-runner-status-authority.mjs", "test:check-no-git-push": "node --test scripts/check-no-git-push.test.mjs", "test:install-sh-docker": "./scripts/test-install-sh-docker.sh", "test:hermes-gateway-smoke": "node --test scripts/smoke/hermes-gateway-smoke.test.mjs", diff --git a/packages/paperclip-runner/.gitignore b/packages/paperclip-runner/.gitignore index dacf8c153b3..62876f7f760 100644 --- a/packages/paperclip-runner/.gitignore +++ b/packages/paperclip-runner/.gitignore @@ -1,9 +1,9 @@ /dist-browser/ -/dist-phase5/ +/dist-sdk/ /playwright-report/ /test-results/ -/dist-phase6/ -/dist-phase7/ +/dist-standalone/ +/dist-scenarios/ /dist-issue-thread/ # The repository root ignores scratch `check-*.mjs` files and only re-includes diff --git a/packages/paperclip-runner/README.md b/packages/paperclip-runner/README.md index 9edef4afc32..359d8486f9b 100644 --- a/packages/paperclip-runner/README.md +++ b/packages/paperclip-runner/README.md @@ -1,38 +1,19 @@ # Paperclip Native Runner -This workspace is the standalone development boundary for Paperclip's native -runner protocol, harness drivers, and normalized session backends. The -production runner direction is Rust; `runner/` is its Cargo workspace. The -TypeScript surface remains a control-plane/client reference implementation. -Phase 0 runs both implementations against one language-neutral fixture. Phase 1 -adds executable PRP schemas, a cross-language conformance corpus, deterministic -static replay, and a standalone browser reference page. Phase 2 adds the Rust -runner process, process-group supervision, a scripted fake harness over stdio -JSONL, a TypeScript mock core, and validated live browser replay. Phase 3 adds -the Rust outbound WebSocket client, private durable state, replay and restart -recovery, and safe CLI/browser diagnostics. Phase 4 adds a direct, skillless -Codex app-server driver, semantic completion tools, canonical event tracing, -and a real-model example against the mock core. These phases do not import or -start Paperclip's server, UI, CLI, or production database. The Phase 4b lower -layer adds browser-resolved provider requests, goal capability detection, -subagent lineage, control-race semantics, and a package-local demo server that -keeps Codex authentication server-side. The Phase 4b live console adds the -browser tracer over that boundary: a live transcript and composer, same-turn -steering, three distinct interrupt races, inline request cards, -capability-gated goal controls, parent/child lineage, reconnect, refresh, -replay, and a redacted protocol inspector. Phase 5 extracts that accepted -transport, reducer projection, hook, components, styles, and reference console -into versioned public subpaths, then proves the surface with a second minimal -consumer. -Phase 6 currently adds a package-local standalone adapter demo at the public -control-plane/session boundary. It proves PRP replay, reducer projection, -result finalization, a default legacy path, a feature-flagged native demo path, -and a kill switch without contacting or modifying a Paperclip instance. -Consumers import this demo contract through the declared -`@paperclipai/paperclip-runner/standalone` subpath instead of package source -files. +This package is the standalone development boundary for Paperclip's native +runner protocol, process supervision, durable transport, provider drivers, and +normalized session backends. Rust owns the production runner under `runner/`; +TypeScript provides the control-plane reference, browser SDK, scenario tools, +and conformance oracle. -## Phase 0–5 quick start +The package includes one coherent set of capabilities: PRP v1 validation and +replay, a supervised local runner with a scripted fake harness, durable +WebSocket delivery and recovery, a skillless Codex app-server driver, live +session and issue-thread surfaces, a public browser/React SDK, a standalone +adapter demo, and a deterministic mock control plane. None of these surfaces +imports or starts Paperclip's server, UI, CLI, or production database. + +## Quick start From the repository root: @@ -55,41 +36,41 @@ pnpm --filter @paperclipai/paperclip-runner verify:rootless The tracer's final line is stable: ```json -{"schemaVersion":"paperclip.runner.phase0.output.v1","runIdentity":{"runId":"run_phase0_0001","sessionId":"session_phase0_0001"},"result":{"status":"succeeded","summary":"Standalone Phase 0 fixture accepted."}} +{"schemaVersion":"paperclip.runner.conformance.output.v1","runIdentity":{"runId":"run_conformance_0001","sessionId":"session_conformance_0001"},"result":{"status":"succeeded","summary":"Standalone Conformance fixture accepted."}} ``` Run only the tracer with: ```sh -pnpm --filter @paperclipai/paperclip-runner trace:phase0 +pnpm --filter @paperclipai/paperclip-runner trace:conformance ``` -Replay the Phase 1 happy path, run a Phase 2 local session, or open the browser +Replay the Replay happy path, run a Local session, or open the browser devtool: ```sh -pnpm --filter @paperclipai/paperclip-runner replay:phase1 -pnpm --filter @paperclipai/paperclip-runner trace:phase2 -- --scenario happy-path -pnpm --filter @paperclipai/paperclip-runner trace:phase3 -- --fault lost-ack -pnpm --filter @paperclipai/paperclip-runner trace:phase4 -pnpm --filter @paperclipai/paperclip-runner demo:phase4b -- --host 127.0.0.1 --port 4174 +pnpm --filter @paperclipai/paperclip-runner replay:fixture +pnpm --filter @paperclipai/paperclip-runner trace:local-runner -- --scenario happy-path +pnpm --filter @paperclipai/paperclip-runner trace:durable-recovery -- --fault lost-ack +pnpm --filter @paperclipai/paperclip-runner trace:codex +pnpm --filter @paperclipai/paperclip-runner demo:live-console -- --host 127.0.0.1 --port 4174 -# Phase 4b: chat with a live session in the browser. -pnpm --filter @paperclipai/paperclip-runner console:phase4b +# Live console: chat with a live session in the browser. +pnpm --filter @paperclipai/paperclip-runner console:live-console pnpm --filter @paperclipai/paperclip-runner browser:dev --host 127.0.0.1 --port 4179 -# Phase 5: open the public-SDK reference console and mini consumer. -pnpm --filter @paperclipai/paperclip-runner console:phase5 +# SDK: open the public-SDK reference console and mini consumer. +pnpm --filter @paperclipai/paperclip-runner console:sdk -# Phase 6: run the standalone legacy/native/kill-switch tracer and page. -pnpm --filter @paperclipai/paperclip-runner trace:phase6 -pnpm --filter @paperclipai/paperclip-runner trace:phase6 -- --feature-flag enabled -pnpm --filter @paperclipai/paperclip-runner trace:phase6 -- --feature-flag enabled --kill-switch enabled -pnpm --filter @paperclipai/paperclip-runner demo:phase6 +# Standalone: run the standalone legacy/native/kill-switch tracer and page. +pnpm --filter @paperclipai/paperclip-runner trace:standalone +pnpm --filter @paperclipai/paperclip-runner trace:standalone -- --feature-flag enabled +pnpm --filter @paperclipai/paperclip-runner trace:standalone -- --feature-flag enabled --kill-switch enabled +pnpm --filter @paperclipai/paperclip-runner demo:standalone ``` -Phase 4b provider-backed routes are loopback-only and reject wildcard/LAN +Live console provider-backed routes are loopback-only and reject wildcard/LAN binds. Browser mutations require same-origin Fetch Metadata, matching Origin, and JSON content; see the protocol-server tutorial for direct `curl` examples. @@ -102,74 +83,73 @@ and JSON content; see the protocol-server tutorial for direct `curl` examples. | `test` | Run Rust/TypeScript fixture, supervisor, fake-driver, live/replay, and boundary tests. | | `check:forbidden-imports` | Reject TypeScript imports and Cargo path dependencies that cross into Paperclip core. | | `check:tracked-imports` | Reject tracked imports and `package.json` entry points that only resolve against untracked files, so a clean checkout of any commit builds. | -| `check:phase0-parity` | Require byte-for-byte equivalent Rust and TypeScript tracer output. | -| `check:phase1-goldens` | Require all reducer snapshots and cross-language summaries to match checked goldens. | -| `check:phase1-parity` | Run TypeScript and Rust against the same Phase 1 fixture summaries. | +| `check:numbered-milestones` | Reject numbered construction-milestone names in tracked package paths and source. | +| `check:conformance-parity` | Require byte-for-byte equivalent Rust and TypeScript tracer output. | +| `check:replay-goldens` | Require all reducer snapshots and cross-language summaries to match checked goldens. | +| `check:replay-parity` | Run TypeScript and Rust against the same Replay fixture summaries. | | `check:browser-tokens` | Reject component-local visual literals and require the standalone token layer. | | `docs:validate` | Validate local documentation links and the OKF v0.2 bundle. | -| `trace:phase0` | Run the Rust mock-core tracer, print the stable result, and exit. | -| `trace:phase0:typescript` | Run the TypeScript reference tracer directly. | -| `replay:phase1` | Validate and reduce a fixture to a final snapshot. | -| `trace:phase2` | Run one native local session through the Rust runner and fake harness. | -| `record:phase2` | Capture a validated happy-path live trace as a replay fixture. | -| `trace:phase3` | Run the Rust runner against the mock core with a selected recovery fault. | -| `record:phase3` | Regenerate the complete Phase 3 fault matrix and exact per-fault traces. | -| `trace:phase4` | Run the mock core with a real, local skillless Codex app-server session. | -| `record:phase4` | Run the safe Codex task and record its validated, normalized trace. | -| `demo:phase4b` | Start the package-local HTTP/SSE server with server-only Codex authentication. | -| `console:phase4b` | Start the standalone browser devtool with the Phase 4b live console on `127.0.0.1:4180`. | -| `record:phase4b` | Run a safe real Codex task through the demo server and record reconnect/replay evidence. | -| `console:phase5` | Start the public-SDK reference console and mini consumer on `127.0.0.1:4181`. | -| `test:phase5` | Run targeted browser-client, reducer-projection, and React component contract tests. | -| `test:browser:phase5` | Exercise both consumers with the fake driver, keyboard/a11y checks, reconnect/replay, measurements, and screenshots. | -| `record:phase5:codex` | Run both public consumers against a safe real Codex session and capture live screenshots. | -| `check:phase-07-contract` | Verify the generated capability, legacy MCP, and eval traceability contract. | +| `trace:conformance` | Run the Rust mock-core tracer, print the stable result, and exit. | +| `trace:conformance:typescript` | Run the TypeScript reference tracer directly. | +| `replay:fixture` | Validate and reduce a fixture to a final snapshot. | +| `trace:local-runner` | Run one native local session through the Rust runner and fake harness. | +| `record:local-runner` | Capture a validated happy-path live trace as a replay fixture. | +| `trace:durable-recovery` | Run the Rust runner against the mock core with a selected recovery fault. | +| `record:durable-recovery` | Regenerate the complete Durable recovery fault matrix and exact per-fault traces. | +| `trace:codex` | Run the mock core with a real, local skillless Codex app-server session. | +| `record:codex` | Run the safe Codex task and record its validated, normalized trace. | +| `demo:live-console` | Start the package-local HTTP/SSE server with server-only Codex authentication. | +| `console:live-console` | Start the standalone browser devtool with the Live console on `127.0.0.1:4180`. | +| `record:live-console` | Run a safe real Codex task through the demo server and record reconnect/replay evidence. | +| `console:sdk` | Start the public-SDK reference console and mini consumer on `127.0.0.1:4181`. | +| `test:sdk` | Run targeted browser-client, reducer-projection, and React component contract tests. | +| `test:browser:sdk` | Exercise both consumers with the fake driver, keyboard/a11y checks, reconnect/replay, measurements, and screenshots. | +| `record:sdk:codex` | Run both public consumers against a safe real Codex session and capture live screenshots. | +| `check:capability-contract` | Verify the generated capability, legacy MCP, and eval traceability contract. | | `check:semantic-contracts` | Verify the provider-neutral semantic tool contract is current. | -| `trace:phase7` | Run the real runnerd/Codex semantic loop against the mock control plane. | -| `demo:phase7` | Start the Phase 7 scenario explorer over the mock control plane on `127.0.0.1:4183`. | +| `trace:live-runner` | Run the real runnerd/Codex semantic loop against the mock control plane. | +| `demo:scenarios` | Start the Capability scenario explorer over the mock control plane on `127.0.0.1:4183`. | | `console:issue-thread` | Start the Paperclip-style issue thread on `127.0.0.1:4184`. | -| `test:phase7` | Run the scenario index, run-artifact, parity, explorer component, and route tests. | -| `test:browser:phase7` | Exercise both the scenario explorer and issue-thread browser contracts. | -| `record:phase7` | Record the twelve-route screenshot acceptance set at both viewports. | +| `test:scenarios` | Run the scenario index, run-artifact, parity, explorer component, and route tests. | +| `test:browser:scenarios` | Exercise both the scenario explorer and issue-thread browser contracts. | +| `record:capability` | Record the twelve-route screenshot acceptance set at both viewports. | | `browser:dev` | Start the standalone live/replay/recovery browser devtool. | | `test:browser` | Exercise static replay and live scenarios, then capture temporary screenshots under ignored test output. | -| `verify` | Run the complete deterministic Phase 0 through Phase 5 acceptance sequence. | +| `verify` | Run the complete deterministic Conformance through SDK acceptance sequence. | | `verify:rootless` | Extract Debian/Ubuntu browser libraries without root, then run `verify`. | ## Navigate - [Architecture and dependency boundary](docs/architecture.md) - [Tutorial index](docs/index.md) -- [Phase 0 hand-run tutorial](docs/tutorials/phase-00-standalone-tracer.md) -- [Phase 1 hand-run tutorial](docs/tutorials/phase-01-static-replay.md) -- [Phase 2 hand-run tutorial](docs/tutorials/phase-02-local-runner.md) -- [Phase 2 local protocol reference](docs/phase-02-local-protocol.md) -- [Phase 3 break-it-on-purpose tutorial](docs/tutorials/phase-03-break-recovery.md) -- [Phase 3 durable transport reference](docs/phase-03-durable-transport.md) -- [Phase 4 skillless Codex tutorial](docs/tutorials/phase-04-skillless-codex.md) -- [Phase 4 skillless Codex driver reference](docs/phase-04-skillless-codex-driver.md) -- [Phase 4b protocol/server tutorial](docs/tutorials/phase-04b-protocol-server.md) -- [Phase 4b protocol/server reference](docs/phase-04b-protocol-server.md) -- [Phase 4b live console tutorial](docs/tutorials/phase-04b-live-console.md) -- [Phase 4b live console reference](docs/phase-04b-live-console.md) -- [Phase 5 SDK console tutorial](docs/tutorials/phase-05-sdk-console.md) -- [Phase 5 browser SDK reference](docs/phase-05-sdk.md) -- [Phase 5 component decision record](docs/design/phase-5-component-decisions.md) -- [Phase 7 semantic catalog and authorization](docs/phase-07-semantic-catalog.md) -- [Phase 7 live runnerd/Codex loop](docs/phase-07-live-runnerd-codex.md) -- [Phase 7 issue-thread UI](docs/phase-07-issue-thread-ui.md) +- [Conformance hand-run tutorial](docs/tutorials/conformance-standalone-tracer.md) +- [Replay hand-run tutorial](docs/tutorials/replay.md) +- [Local runner hand-run tutorial](docs/tutorials/local-runner.md) +- [Local protocol reference](docs/local-runner.md) +- [Durable recovery break-it-on-purpose tutorial](docs/tutorials/durable-recovery.md) +- [Durable transport reference](docs/durable-recovery.md) +- [Codex skillless Codex tutorial](docs/tutorials/codex.md) +- [Codex skillless Codex driver reference](docs/codex-driver.md) +- [Live console protocol/server tutorial](docs/tutorials/live-console-protocol-server.md) +- [Live console protocol/server reference](docs/live-console-protocol-server.md) +- [Live console tutorial](docs/tutorials/live-console.md) +- [Live console reference](docs/live-console.md) +- [SDK console tutorial](docs/tutorials/sdk-console.md) +- [SDK browser SDK reference](docs/sdk.md) +- [SDK component decision record](docs/design/sdk-component-decisions.md) +- [Capability semantic catalog and authorization](docs/capability-semantic-catalog.md) +- [Capability live runnerd/Codex loop](docs/capability-live-runnerd-codex.md) +- [Capability issue-thread UI](docs/capability-issue-thread-ui.md) - [PRP compatibility/versioning policy](docs/protocol-compatibility.md) - [Cumulative end-to-end tutorial](docs/tutorials/end-to-end.md) -- [Journal guide](docs/journal.md) - [OKF knowledge bundle](knowledge/) -- [Implementation plan](spec/paperclip-native-runner-implementation-plan.md) -- [Normative spike specification](spec/paperclip-native-runner-spike-spec.md) +- [Normative native-runner contract](spec/native-runner-contract.md) -Phase 4 adds the package-local real-model reference driver, Phase 4b adds the -package-local browser console, and Phase 5 extracts a reusable public SDK plus +Codex adds the package-local real-model reference driver, Live console adds the +package-local browser console, and SDK extracts a reusable public SDK plus two standalone consumers. Production Paperclip integration remains deferred. -The Phase 5 reference console opens in direct chat mode. Enter a normal prompt, +The SDK reference console opens in direct chat mode. Enter a normal prompt, then open the protocol inspector to review events and reducer state. Expand a Terminal row and its nested **Debug details** disclosure to inspect every canonical event retained for that command. The header marker `🖇️ v0.1.2` diff --git a/packages/paperclip-runner/devtools/browser/live-console.spec.ts b/packages/paperclip-runner/devtools/browser/live-console.spec.ts index aa9b36e5aa0..23ff80c386a 100644 --- a/packages/paperclip-runner/devtools/browser/live-console.spec.ts +++ b/packages/paperclip-runner/devtools/browser/live-console.spec.ts @@ -1,17 +1,10 @@ -import { resolve } from "node:path"; -import { fileURLToPath } from "node:url"; - import { expect, test, type Page } from "@playwright/test"; -const evidenceRoot = resolve( - fileURLToPath(new URL("../../knowledge/evidence/phase-04b", import.meta.url)), -); - const DESKTOP = { width: 1440, height: 900 }; const MOBILE = { width: 390, height: 844 }; function shot(page: Page, name: string) { - return page.screenshot({ path: resolve(evidenceRoot, `${name}.png`), fullPage: true }); + return page.screenshot({ path: test.info().outputPath(`${name}.png`), fullPage: true }); } async function openConsole(page: Page) { @@ -27,7 +20,7 @@ async function runManifest(page: Page, id: string) { await expect(page.getByTestId("connection-status")).toHaveText("connected", { timeout: 15_000 }); } -test.describe("Phase 4b live console", () => { +test.describe("Live console", () => { test.beforeEach(async ({ page }) => { await page.setViewportSize(DESKTOP); }); @@ -46,7 +39,7 @@ test.describe("Phase 4b live console", () => { await expect(page.getByTestId("turn-completed")).toBeVisible({ timeout: 20_000 }); await expect(page.getByTestId("live-transcript")).toContainText("finished the task"); await expect(page.getByTestId("live-transcript")).toContainText( - "Summarize what the Phase 4b demo server proves.", + "Summarize what the Live console demo server proves.", ); await expect(page.getByTestId("tool-item")).toHaveAttribute("data-status", "completed"); await shot(page, "desktop-03-turn-completed"); @@ -364,7 +357,7 @@ test.describe("Phase 4b live console", () => { }); }); -test.describe("Phase 4b live console on a small screen", () => { +test.describe("Live console on a small screen", () => { test("keeps the transcript and composer usable at 390 by 844", async ({ page }) => { await page.setViewportSize(MOBILE); await openConsole(page); diff --git a/packages/paperclip-runner/devtools/browser/playwright.config.ts b/packages/paperclip-runner/devtools/browser/playwright.config.ts index 57a0bc28338..bcd43122dc0 100644 --- a/packages/paperclip-runner/devtools/browser/playwright.config.ts +++ b/packages/paperclip-runner/devtools/browser/playwright.config.ts @@ -16,11 +16,11 @@ export default defineConfig({ env: { // Keep streamed chunks slow enough that interrupt races are reachable // from a test, and fast enough that the suite stays quick. - PAPERCLIP_PHASE4B_CHUNK_DELAY_MS: "60", + PAPERCLIP_LIVE_CONSOLE_CHUNK_DELAY_MS: "60", // One server serves the whole suite, and every test leaves its session // behind when its page closes, so the interactive default of 16 is // exhausted partway through. - PAPERCLIP_PHASE4B_MAX_SESSIONS: "64", + PAPERCLIP_LIVE_CONSOLE_MAX_SESSIONS: "64", }, url: "http://127.0.0.1:4179", reuseExistingServer: false, diff --git a/packages/paperclip-runner/devtools/browser/src/App.tsx b/packages/paperclip-runner/devtools/browser/src/App.tsx index 695d93b022c..201bda968c2 100644 --- a/packages/paperclip-runner/devtools/browser/src/App.tsx +++ b/packages/paperclip-runner/devtools/browser/src/App.tsx @@ -1,24 +1,24 @@ import { useMemo, useRef, useState } from "react"; -import type { PrpEvent, PrpRequest } from "../../../src/protocol/phase1-contract"; +import type { PrpEvent, PrpRequest } from "../../../src/protocol/replay-contract"; import type { SessionSnapshot } from "../../../src/reducer/session-reducer"; import type { - Phase2RunMetadata, - Phase2RunTrace, - Phase2Scenario, -} from "../../../src/contracts/phase2"; + LocalRunnerRunMetadata, + LocalRunnerRunTrace, + LocalRunnerScenario, +} from "../../../src/contracts/local-runner"; import { - PHASE3_FAULTS, - type Phase3Fault, - type Phase3RunTrace, -} from "../../../src/contracts/phase3"; + DURABLE_RECOVERY_FAULTS, + type DurableRecoveryFault, + type DurableRecoveryRunTrace, +} from "../../../src/contracts/durable-recovery"; import { - applyPhase2LiveEvent, - createPhase2LiveSnapshot, - phase2SnapshotsMatch, - replayPhase2Events, -} from "../../../src/tracer/phase2-live"; -import { replayPhase1FixtureText } from "../../../src/tracer/phase1-replay"; + applyLocalRunnerLiveEvent, + createLocalRunnerLiveSnapshot, + localRunnerSnapshotsMatch, + replayLocalRunnerEvents, +} from "../../../src/tracer/local-runner-live"; +import { replayReplayFixtureText } from "../../../src/tracer/replay"; import { Badge } from "./components/ui/badge"; import { Button } from "./components/ui/button"; import { @@ -32,7 +32,7 @@ import { Textarea } from "./components/ui/textarea"; import { LiveConsole } from "./live/LiveConsole"; const fixtureFiles = import.meta.glob( - "../../../protocol/fixtures/phase-01/*.json", + "../../../protocol/fixtures/replay/*.json", { eager: true, query: "?raw", import: "default" }, ) as Record; @@ -46,7 +46,7 @@ const fixtureOrder = [ "unsupported-required-version", ]; -const liveScenarios: Array<{ key: Phase2Scenario; label: string }> = [ +const liveScenarios: Array<{ key: LocalRunnerScenario; label: string }> = [ { key: "happy-path", label: "Happy path" }, { key: "permission-input", label: "Permission and input" }, { key: "interrupted", label: "Interruption" }, @@ -57,7 +57,7 @@ const liveScenarios: Array<{ key: Phase2Scenario; label: string }> = [ type BrowserMode = "console" | "recovery" | "live" | "replay"; type LiveStatus = "idle" | "starting" | "running" | "terminal" | "error"; -const phase3FaultLabels: Record = { +const durableRecoveryFaultLabels: Record = { none: "Normal connection", "socket-drop": "Socket drop", "lost-ack": "Lost ACK", @@ -76,25 +76,25 @@ const modeCopy: Record< { eyebrow: string; title: string; description: string } > = { console: { - eyebrow: "Paperclip Runner Protocol · Phase 4b", + eyebrow: "Paperclip Runner Protocol · Live console", title: "Live Codex protocol console", description: "Chat with a live session, steer it, stop it, answer its requests, and inspect the canonical protocol behind every surface.", }, recovery: { - eyebrow: "Paperclip Runner Protocol · Phase 3", + eyebrow: "Paperclip Runner Protocol · Durable recovery", title: "Durable recovery diagnostics", description: "Break the outbound transport, recover the same session, and inspect durable state.", }, live: { - eyebrow: "Paperclip Runner Protocol · Phase 2", + eyebrow: "Paperclip Runner Protocol · Local runner", title: "Live runner diagnostics", description: "Run the local harness, stream validated events, and compare the live and replayed state.", }, replay: { - eyebrow: "Paperclip Runner Protocol · Phase 1", + eyebrow: "Paperclip Runner Protocol · Replay", title: "Static protocol replay", description: "Validate a protocol fixture, replay its events, and inspect the resulting session state.", @@ -107,10 +107,10 @@ interface BrowserFixture { source: string; } -type Phase2StreamRecord = +type LocalRunnerStreamRecord = | { kind: "event"; event: unknown } | { kind: "diagnostic"; message: string } - | { kind: "trace"; trace: Phase2RunTrace } + | { kind: "trace"; trace: LocalRunnerRunTrace } | { kind: "error"; message: string }; const browserFixtures = Object.entries(fixtureFiles) @@ -139,7 +139,7 @@ function humanizeProtocolLabel(value: string): string { return words.length === 0 ? words : `${words[0]?.toUpperCase()}${words.slice(1)}`; } -function recoveryOutcomeTone(outcome: Phase3RunTrace["diagnostics"]["recovery"]["outcome"]) { +function recoveryOutcomeTone(outcome: DurableRecoveryRunTrace["diagnostics"]["recovery"]["outcome"]) { if (outcome === "recovered") { return "success" as const; } @@ -150,8 +150,8 @@ function recoveryOutcomeTone(outcome: Phase3RunTrace["diagnostics"]["recovery"][ } function RecoveryDiagnostics() { - const [fault, setFault] = useState("lost-ack"); - const [trace, setTrace] = useState(null); + const [fault, setFault] = useState("lost-ack"); + const [trace, setTrace] = useState(null); const [status, setStatus] = useState<"idle" | "running" | "complete" | "error">("idle"); const [error, setError] = useState(null); @@ -159,12 +159,12 @@ function RecoveryDiagnostics() { setStatus("running"); setError(null); try { - const response = await fetch("/api/phase3/recovery", { + const response = await fetch("/api/durableRecovery/recovery", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ fault }), }); - const result = (await response.json()) as Phase3RunTrace & { error?: string }; + const result = (await response.json()) as DurableRecoveryRunTrace & { error?: string }; if (!response.ok) throw new Error(result.error ?? "The recovery trace failed."); setTrace(result); setStatus("complete"); @@ -189,16 +189,16 @@ function RecoveryDiagnostics() { id="recovery-fault" value={fault} disabled={status === "running"} - onChange={(event) => setFault(event.target.value as Phase3Fault)} + onChange={(event) => setFault(event.target.value as DurableRecoveryFault)} > - {PHASE3_FAULTS.map((candidate) => ( + {DURABLE_RECOVERY_FAULTS.map((candidate) => ( ))}
Recovery status @@ -223,22 +223,22 @@ function RecoveryDiagnostics() {

Run the trace to collect recovery diagnostics.

) : ( <> -
+
Connection
-
+
{humanizeProtocolLabel(trace.diagnostics.connection.state)}
Connections
-
+
{trace.diagnostics.connection.connectionCount}
Reconnects
-
+
{trace.diagnostics.connection.reconnectCount}
@@ -260,7 +260,7 @@ function RecoveryDiagnostics() {
Runner restarts
-
+
{trace.diagnostics.recovery.runnerRestarts}
@@ -270,7 +270,7 @@ function RecoveryDiagnostics() {
Fresh bootstraps
-
+
{trace.diagnostics.recovery.freshBootstraps}
@@ -280,7 +280,7 @@ function RecoveryDiagnostics() {
Storage
-
+
{trace.diagnostics.outbox.bytes} bytes of {trace.diagnostics.outbox.maxBytes}{" "} max @@ -299,7 +299,7 @@ function RecoveryDiagnostics() {
{humanizeProtocolLabel(trace.diagnostics.recovery.outcome)} @@ -481,15 +481,15 @@ function pendingRuntimeRequest(events: readonly PrpEvent[]): PrpRequest | null { } function LiveRunner() { - const [scenario, setScenario] = useState("happy-path"); + const [scenario, setScenario] = useState("happy-path"); const [status, setStatus] = useState("idle"); const [runId, setRunId] = useState(null); const [snapshot, setSnapshot] = useState(null); const [events, setEvents] = useState([]); const [error, setError] = useState(null); const [diagnostic, setDiagnostic] = useState(null); - const [input, setInput] = useState("phase-02-live-trace"); - const [trace, setTrace] = useState(null); + const [input, setInput] = useState("local-runner-live-trace"); + const [trace, setTrace] = useState(null); const [parity, setParity] = useState(null); const snapshotRef = useRef(null); const eventsRef = useRef([]); @@ -509,26 +509,26 @@ function LiveRunner() { snapshotRef.current = null; try { - const startResponse = await fetch("/api/phase2/runs", { + const startResponse = await fetch("/api/localRunner/runs", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ scenario }), }); const started = (await startResponse.json()) as { id?: string; - metadata?: Phase2RunMetadata; + metadata?: LocalRunnerRunMetadata; error?: string; }; if (!startResponse.ok || started.id === undefined || started.metadata === undefined) { throw new Error(started.error ?? "The local runner did not start."); } setRunId(started.id); - const initial = createPhase2LiveSnapshot(started.metadata); + const initial = createLocalRunnerLiveSnapshot(started.metadata); setSnapshot(initial); snapshotRef.current = initial; setStatus("running"); - const streamResponse = await fetch(`/api/phase2/runs/${started.id}/events`); + const streamResponse = await fetch(`/api/localRunner/runs/${started.id}/events`); if (!streamResponse.ok || streamResponse.body === null) { throw new Error("The live event stream did not open."); } @@ -542,12 +542,12 @@ function LiveRunner() { buffered = lines.pop() ?? ""; for (const line of lines) { if (line.trim().length > 0) { - handleRecord(JSON.parse(line) as Phase2StreamRecord, started.metadata); + handleRecord(JSON.parse(line) as LocalRunnerStreamRecord, started.metadata); } } if (part.done) { if (buffered.trim().length > 0) { - handleRecord(JSON.parse(buffered) as Phase2StreamRecord, started.metadata); + handleRecord(JSON.parse(buffered) as LocalRunnerStreamRecord, started.metadata); } break; } @@ -558,13 +558,13 @@ function LiveRunner() { } } - function handleRecord(record: Phase2StreamRecord, metadata: Phase2RunMetadata) { + function handleRecord(record: LocalRunnerStreamRecord, metadata: LocalRunnerRunMetadata) { if (record.kind === "event") { const current = snapshotRef.current; if (current === null) { return; } - const applied = applyPhase2LiveEvent(current, record.event); + const applied = applyLocalRunnerLiveEvent(current, record.event); if (!applied.ok) { setStatus("error"); setError(applied.issues.join("; ")); @@ -586,11 +586,11 @@ function LiveRunner() { return; } setTrace(record.trace); - const replay = replayPhase2Events(metadata, record.trace.events); + const replay = replayLocalRunnerEvents(metadata, record.trace.events); setParity( snapshotRef.current === null ? false - : phase2SnapshotsMatch(snapshotRef.current, replay), + : localRunnerSnapshotsMatch(snapshotRef.current, replay), ); setStatus("terminal"); } @@ -599,7 +599,7 @@ function LiveRunner() { if (runId === null) { return; } - const response = await fetch(`/api/phase2/runs/${runId}/${action}`, { + const response = await fetch(`/api/localRunner/runs/${runId}/${action}`, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(body ?? {}), @@ -626,7 +626,7 @@ function LiveRunner() { id="live-scenario" value={scenario} disabled={status === "starting" || status === "running"} - onChange={(event) => setScenario(event.target.value as Phase2Scenario)} + onChange={(event) => setScenario(event.target.value as LocalRunnerScenario)} > {liveScenarios.map((candidate) => (