diff --git a/doc/plans/2026-10-10-boat-validation.md b/doc/plans/2026-10-10-boat-validation.md index 3c261282d85..13e193ce77d 100644 --- a/doc/plans/2026-10-10-boat-validation.md +++ b/doc/plans/2026-10-10-boat-validation.md @@ -2,18 +2,18 @@ **Experimental and unmerged. Local journeys and partial staging qualification passed on the sources below; final-source staging acceptance remains incomplete.** A successful build, probe, or earlier-source journey does not establish the remaining product conditions. -## Current source boundary (2026-10-11 09:34 UTC) +## Current source boundary (2026-10-11 09:55 UTC) | Surface | Source and evidence | | --- | --- | -| Combined implementation | `17b0910b804ad356cf884f4c7bb1509c6808d5ec`, adding the reviewed dependency-loader correction; new-head CI is pending. At 09:27 UTC, combined PR head 35de9f0bae had 53 successful checks, no pending or failed checks, fresh review 5/5 and zero unresolved threads. The preceding code head `06906ab358c752dd263abfd56f102c00745cd23d` had green CI: at 08:54 UTC all 54 checks passed on the active PR workflow; fresh review scored 5/5 with zero unresolved threads. Ten cancelled entries belong to a superseded duplicate workflow and remain in the receipt. | +| Combined implementation | `4809c1b724944db3ee427e0909cb178885ba63bf`, adding the reviewed dependency-loader correction and disconnect warning after panel closure; new-head CI is pending. At 09:27 UTC, combined PR head 35de9f0bae had 53 successful checks, no pending or failed checks, fresh review 5/5 and zero unresolved threads. The preceding code head `06906ab358c752dd263abfd56f102c00745cd23d` had green CI: at 08:54 UTC all 54 checks passed on the active PR workflow; fresh review scored 5/5 with zero unresolved threads. Ten cancelled entries belong to a superseded duplicate workflow and remain in the receipt. | | Core branch | `8e8999d681b42a19bfee2540c4345193f29f31ca`, adding the reviewed dependency-loader correction; new-head CI is pending. For preceding head `1ab3cb94e0` at 09:27 UTC, 54 checks passed and four were skipped, with no pending or failed checks, fresh review 5/5 and zero unresolved threads. The preceding head `e3b12138c6c15460d2e372b0dce1d1cbba491fa9` had green CI: at 08:54 UTC, 54 checks passed and four were skipped; fresh review scored 5/5 with zero unresolved threads. Includes optional closed upload-phase diagnostics and two test-fixture corrections. | -| Verified staging source | Deployment25 verified `ca07557247533531b85045a1dc20c231dc9cd1de` at 08:36:19.883 UTC through the official workflow. Includes shared upload scheduling, warm-owner orphan-sweep correction and the public-module import fix. Native Claude cold and warm turns passed. Actual Codex child cancellation and continued survival of its exact Claude sibling were observed; the sibling subsequently completed successfully. Native post-idle return failed after same-run recovery. | -| Local retry | Local48 uses compatible controller `9808eae33768f4a8beb31f3955737713a5f737ae` and unchanged qualified immutable diagnostics pack `sha256:4ef25756f766016da224f37f68c138c0c4a9ef9d128e6c2fc415f5c57ce38573`. Full upload, cold and warm Claude turns, warm retention and natural archive passed. The same-session post-idle attempt failed its first `turn.start` at provider initialization; the primary attempt failed at 08:53:45.338, then same-run recovery ended at 08:55:27.617 with `runner_state_identity_mismatch: authority_indeterminate`. Local49 is now qualifying the corrected package through a new ordinary task. | +| Verified staging source | Deployment26 verified d5bce13cca01732105df15487000a260ae3c973c at 09:41:21.624 UTC. Both simultaneous legacy runs succeeded and released their leases. Deployment27 is building candidate2605a03f00 with the dependency-loader correction and disconnect-warning fix; it is not yet serving. Earlier deployment25 verified `ca07557247533531b85045a1dc20c231dc9cd1de` at 08:36:19.883 UTC through the official workflow. Includes shared upload scheduling, warm-owner orphan-sweep correction and the public-module import fix. Native Claude cold and warm turns passed. Actual Codex child cancellation and continued survival of its exact Claude sibling were observed; the sibling subsequently completed successfully. Native post-idle return failed after same-run recovery. | +| Local retry | Local48 uses compatible controller `9808eae33768f4a8beb31f3955737713a5f737ae` and unchanged qualified immutable diagnostics pack `sha256:4ef25756f766016da224f37f68c138c0c4a9ef9d128e6c2fc415f5c57ce38573`. Full upload, cold and warm Claude turns, warm retention and natural archive passed. The same-session post-idle attempt failed its first `turn.start` at provider initialization; the primary attempt failed at 08:53:45.338, then same-run recovery ended at 08:55:27.617 with `runner_state_identity_mismatch: authority_indeterminate`. Local49 cold and warm passed on immutable pack640c; its post-idle run exposed agent_startup_unverified_module and ended failed after same-run recovery at09:51:04.712. Local50 will qualify the dependency-loader correction using a new ordinary task; old saved authority remains intact. | -Final-source live acceptance remains incomplete. Open conditions include reliable Claude post-idle continuation, simultaneous admission from archived state, embedded human input, and completion of the staging lifecycle. The full local suite remains **34,914 passed, 24 failed, 338 skipped**; no full-suite green result is claimed. Earlier-source computer-use and HMR passes remain recorded below. +Final-source live acceptance remains incomplete. Open conditions include reliable Claude post-idle continuation and completion of the latest-package staging lifecycle. Simultaneous archived admission passed on deployment26. Embedded human mouse and keyboard input subsequently passed in Chrome on deployment25. The full local suite remains **34,914 passed, 24 failed, 338 skipped**; no full-suite green result is claimed. Earlier-source computer-use and HMR passes remain recorded below. -Current [CI and review receipt](assets/2026-10-10-boat/evidence/ci-1ab3cb-35de9-passed.json), [verified deployment](assets/2026-10-10-boat/evidence/staging25-deployment.json). The [consolidated earlier retry receipt](assets/2026-10-10-boat/evidence/retry-qualification-summary.json) preserves earlier sources, failures and receipt hashes. A deployment proves serving source, not product acceptance. No provider stop was forced or cancelled, no quarantine was cleared, and no database history was reset or rewritten. +Latest [CI and review snapshot](assets/2026-10-10-boat/evidence/ci-8e8999-9eb142-0949.json), [preceding green heads](assets/2026-10-10-boat/evidence/ci-1ab3cb-35de9-passed.json), [verified deployment26](assets/2026-10-10-boat/evidence/staging26-deployment.json). The [consolidated earlier retry receipt](assets/2026-10-10-boat/evidence/retry-qualification-summary.json) preserves earlier sources, failures and receipt hashes. A deployment proves serving source, not product acceptance. No provider stop was forced or cancelled, no quarantine was cleared, and no database history was reset or rewritten. ## Local48 and deployment25 follow-up (2026-10-11 08:57 UTC) @@ -59,6 +59,25 @@ Core 8e8999d681 / combined 17b0910b80 corrects an offline-reproduced dependency- This proves the offline defect, not the cause of historical live initialization failures. Local49 remains frozen on its preceding immutable package for its current lifecycle. Staging cherry-pick 683696352d is prepared but not deployed; the ongoing deployment26 still targets d5bce13cca. +## Embedded human control passed in Chrome (2026-10-11 09:37 UTC) + +A normal Computer Connect in Chrome rendered one embedded stream. A native click on the observed remote dock icon visibly launched Chromium. Actual key events selected the address bar contents, entered example.net and pressed Return; the final screenshot shows that exact address and Example Domain content inside Paperclip's Computer panel. **Embedded mouse and keyboard control passed.** Text insertion through the automation typeText method had no effect and is not counted as keyboard proof. The in-app-browser attempt remains inconclusive. No direct viewer, second stream, guest input injection or product permission change was used. The viewer closed normally before 09:37:10 UTC. [Action receipt](assets/2026-10-10-boat/evidence/staging25-chrome-embedded-control.json), [visible successful result](assets/2026-10-10-boat/staging25-chrome-embedded-control.png). + + +## Local49 warm pass and deployment26 admission (2026-10-11 09:45 UTC) + +Local49 cold run 6fcda24f succeeded at 09:39:01.367 after all 301 artifact chunks transferred without a recorded timeout/error. The 1166MiB provider package transfer was slow; this is a successful first-use transfer, not an acceptable-latency claim. Ordinary warm follow-up 6a07f42f succeeded at 09:41:00.398 with the same native session, logical runner, provider thread and physical owner/boot/launch identity. Both original file hashes matched. The configured warm deadline is 09:46:00.347; natural archive and post-idle continuation are still pending. [Lifecycle receipt](assets/2026-10-10-boat/evidence/local49-lifecycle.json), [cold result](assets/2026-10-10-boat/local49-claude-cold.png), [warm command result](assets/2026-10-10-boat/local49-claude-warm.png). + +Deployment26 verified d5bce13cca01732105df15487000a260ae3c973c serving at 09:41:21.624. A read-only provider check at 09:42:25.595 confirmed archived/healthy state and completed stop, without guest reads. Legacy Codex run 73bc6d17 and Claude run e3daa441 started 65ms apart at 09:43:05. Both acquired active leases and entered active ownership, with no admission error at 09:44:53.764. Actual task completion remains pending. [Deployment](assets/2026-10-10-boat/evidence/staging26-deployment.json), [archived baseline](assets/2026-10-10-boat/evidence/staging26-archived-baseline.json), [initial concurrent admission](assets/2026-10-10-boat/evidence/staging26-legacy-admission-initial.json), [both active leases](assets/2026-10-10-boat/evidence/staging26-legacy-admission-active.json). + + +## Concurrent archived admission passed (2026-10-11 09:48 UTC) + +Both deployment26 legacy runs **succeeded**: Codex 73bc6d17 at 09:45:16.749 and Claude e3daa441 at 09:45:21.193. Each released its lease with successful cleanup and retired its owner; the scoped query found no replacement runs. Starting 65ms apart from completed archive no longer produced the observed HTTP409 admission failure. [Final run/lease receipt](assets/2026-10-10-boat/evidence/staging26-legacy-admission-final.json). + +Claude reported its unchanged original proof hash and personal home. Codex corrected helper argument/heredoc mistakes within its run and reached Done, but its final four fields were empty; its last activity was shown as interrupted before provider completion. Therefore this pair proves concurrent admission, successful run disposition and cleanup; it is **not** a fresh independent Codex proof-hash verification. Earlier successful proof reads remain source-specific evidence. [Claude result](assets/2026-10-10-boat/staging26-legacy-claude-result.png), [Codex reporting defect](assets/2026-10-10-boat/staging26-legacy-codex-result.png). + + ## Product outcomes Historical product observations in this table are UTC on 2026-10-10; the retry table gives its later dates. “Passed” applies only to the named observation; gaps remain explicit. @@ -79,6 +98,18 @@ Historical product observations in this table are UTC on 2026-10-10; the retry t Receipts: [staging corrected legacy runs](assets/2026-10-10-boat/evidence/staging-11-legacy-regression.json), [local corrected legacy runs](assets/2026-10-10-boat/evidence/local-32-legacy-acceptance.json), [Claude lifecycle](assets/2026-10-10-boat/evidence/claude-cold-warm.json), [Codex second idle](assets/2026-10-10-boat/evidence/codex-second-idle.json), [local HMR](assets/2026-10-10-boat/evidence/vite-warm-hmr.json), [partial staging](assets/2026-10-10-boat/evidence/staging-73b2-acceptance.json), and [editor save](assets/2026-10-10-boat/evidence/local-30-persistent-save-proof.json). +## Local49 final post-idle result (2026-10-11 09:53 UTC) + +Run `825e1f90` retained the original native session, logical runner, Claude thread and immutable pack640c after natural archive. Attach and snapshots passed, but `turn.start` rejected `agent_startup_unverified_module` at09:49:35.623. The corrected fatal-import settlement exposed a specific guarded dependency failure instead of another opaque initialize timeout. It does **not** identify the rejected module or prove that ctime drift caused this live rejection. Same-run recovery finally failed `runner_state_identity_mismatch: authority_indeterminate` at09:51:04.712. No active or queued runs or owners remained at09:52:03; Boat was archived and healthy, with normal stop completed at09:51:12.415. **Post-idle acceptance still fails on pack640c.** [Complete lifecycle receipt](assets/2026-10-10-boat/evidence/local49-lifecycle.json), [visible failed task](assets/2026-10-10-boat/local49-post-idle-failed.png). + +The next ordinary task will select qualified immutable pack `sha256:f6fbd13c71cdaf93060a7c240cbce1c8dfce2aefe5669db27d254b3b95dfb0a0`, which adds core8e8999's bounded dependency read continuity correction. No previous package, saved task authority, quarantine or checkpoint is being rewritten. + +## Reviewed viewer warning and staging27 candidate (2026-10-11 09:55 UTC) + +Combined `4809c1b724` surfaces a failed exact-owner disconnect after the Computer panel closes through the existing global warning toast. It survives panel unmount for the normal eight-second toast lifetime; a mounted panel displays the fixed safe message inline. Raw errors and credentials are excluded, and cleanup/retry behavior is unchanged. All52 affected UI tests, UI TypeScript, token gates and independent review passed. [Verification receipt](assets/2026-10-10-boat/evidence/computer-disconnect-warning.json). + +After the concurrent staging26 tasks and leases fully settled, deployment27 was dispatched through the official pipeline for compatible candidate `2605a03f00bc3d7decc8b8d5549ee06f8d77ae85`. This includes the reviewed loader and viewer-warning fixes. It remains pending; no serving-source or product-acceptance pass is inferred from dispatch. + ## Latest retries These outcomes do not erase earlier source-specific passes. The [retry receipt](assets/2026-10-10-boat/evidence/retry-qualification-summary.json) preserves the failures and the narrower boundary checks. diff --git a/doc/plans/assets/2026-10-10-boat/evidence/ci-8e8999-9eb142-0949.json b/doc/plans/assets/2026-10-10-boat/evidence/ci-8e8999-9eb142-0949.json new file mode 100644 index 00000000000..a89326cbe48 --- /dev/null +++ b/doc/plans/assets/2026-10-10-boat/evidence/ci-8e8999-9eb142-0949.json @@ -0,0 +1,135 @@ +{ + "checkedAt": "2026-10-11T09:49:44.638945+00:00", + "prs": [ + { + "pr": 15813, + "head": "8e8999d681b42a19bfee2540c4345193f29f31ca", + "reviewHead": "8e8999d681b42a19bfee2540c4345193f29f31ca", + "mergeable": "MERGEABLE", + "counts": { + "SKIPPED": 4, + "SUCCESS": 53, + "IN_PROGRESS": 1 + }, + "failures": [], + "focusChecks": [ + { + "__typename": "CheckRun", + "completedAt": "2026-10-11T09:36:46Z", + "conclusion": "SUCCESS", + "detailsUrl": "https://github.com/paperclipai/paperclip/actions/runs/38128707028/job/114441222975", + "name": "ci / e2e shard (8/8)", + "startedAt": "2026-10-11T09:32:40Z", + "status": "COMPLETED", + "workflowName": "PR" + }, + { + "__typename": "CheckRun", + "completedAt": "2026-10-11T09:39:27Z", + "conclusion": "SUCCESS", + "detailsUrl": "https://app.greptile.com/paperclip-org-3/github/paperclipai/paperclip/-/pull/15813", + "name": "Greptile Review", + "startedAt": "2026-10-11T09:32:05Z", + "status": "COMPLETED", + "workflowName": "" + } + ], + "pending": [ + "ci / Verify serialized server suites (7/9)" + ], + "unresolved": [], + "moreThreads": false, + "greptileSummary": [ + { + "url": "https://github.com/paperclipai/paperclip/pull/15813#issuecomment-6099291617", + "updatedAt": "2026-10-11T09:39:34Z", + "reviewedCommits": [ + "8e8999d681b42a19bfee2540c4345193f29f31ca" + ], + "score": [ + "5" + ] + } + ] + }, + { + "pr": 15804, + "head": "9eb1424f4ecee14c528b33a2a0ed3f1628b05c79", + "reviewHead": "9eb1424f4ecee14c528b33a2a0ed3f1628b05c79", + "mergeable": "MERGEABLE", + "counts": { + "SUCCESS": 52, + "FAILURE": 1 + }, + "failures": [ + { + "__typename": "CheckRun", + "completedAt": "2026-10-11T09:40:07Z", + "conclusion": "FAILURE", + "detailsUrl": "https://app.greptile.com/paperclip-org-3/github/paperclipai/paperclip/-/pull/15804", + "name": "Greptile Review", + "startedAt": "2026-10-11T09:34:21Z", + "status": "COMPLETED", + "workflowName": "" + } + ], + "focusChecks": [ + { + "__typename": "CheckRun", + "completedAt": "2026-10-11T09:39:21Z", + "conclusion": "SUCCESS", + "detailsUrl": "https://github.com/paperclipai/paperclip/actions/runs/38128842350/job/114438792716", + "name": "ci / e2e shard (8/8)", + "startedAt": "2026-10-11T09:34:52Z", + "status": "COMPLETED", + "workflowName": "PR" + }, + { + "__typename": "CheckRun", + "completedAt": "2026-10-11T09:40:07Z", + "conclusion": "FAILURE", + "detailsUrl": "https://app.greptile.com/paperclip-org-3/github/paperclipai/paperclip/-/pull/15804", + "name": "Greptile Review", + "startedAt": "2026-10-11T09:34:21Z", + "status": "COMPLETED", + "workflowName": "" + } + ], + "pending": [], + "unresolved": [ + { + "id": "PRRT_kwDORclPyM6rMVUV", + "isResolved": false, + "isOutdated": false, + "comments": { + "nodes": [ + { + "url": "https://github.com/paperclipai/paperclip/pull/15804#discussion_r4241086370", + "body": "\"P2\" **Failed cleanup stays hidden**\n\n`release` silently drops every failed `disconnect` request. Closing the Computer tab can leave its viewer hold running until expiry without telling the user. This violates the UI directive: \u201cSurface failures clearly; do not silently ignore API errors.\u201d\n\nShow a cleanup warning through a toast or another surface that survives closing the panel. This repository requirement must be satisfied before merging.\n\n**Context Used:** AGENTS.md ([source](https://github.com/paperclipai/paperclip/blob/master/AGENTS.md))\n\n
Prompt To Fix With AI\n\n`````markdown\nThis is a comment left during a code review.\nPath: ui/src/components/task-side-panel/TaskComputerPanel.tsx\nLine: 47-49\n\nComment:\n**Failed cleanup stays hidden**\n\n`release` silently drops every failed `disconnect` request. Closing the Computer tab can leave its viewer hold running until expiry without telling the user. This violates the UI directive: \u201cSurface failures clearly; do not silently ignore API errors.\u201d\n\nShow a cleanup warning through a toast or another surface that survives closing the panel. This repository requirement must be satisfied before merging.\n\n**Context Used:** AGENTS.md ([source](https://github.com/paperclipai/paperclip/blob/master/AGENTS.md))\n\n---\n\nFor each issue above, determine whether it is valid and should be fixed. If so, fix it directly.\n`````\n
", + "commit": { + "oid": "9eb1424f4ecee14c528b33a2a0ed3f1628b05c79" + }, + "author": { + "login": "greptile-apps" + } + } + ] + } + } + ], + "moreThreads": false, + "greptileSummary": [ + { + "url": "https://github.com/paperclipai/paperclip/pull/15804#issuecomment-6098591173", + "updatedAt": "2026-10-11T09:40:13Z", + "reviewedCommits": [ + "9eb1424f4ecee14c528b33a2a0ed3f1628b05c79" + ], + "score": [ + "4" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/doc/plans/assets/2026-10-10-boat/evidence/computer-disconnect-warning.json b/doc/plans/assets/2026-10-10-boat/evidence/computer-disconnect-warning.json new file mode 100644 index 00000000000..4bf7766a501 --- /dev/null +++ b/doc/plans/assets/2026-10-10-boat/evidence/computer-disconnect-warning.json @@ -0,0 +1,24 @@ +{ + "checkedAt": "2026-10-11T09:50:22.442194+00:00", + "scope": "TaskComputerPanel disconnect error reporting only", + "tests": { + "files": 2, + "passed": 52, + "skipped": 0, + "log": "computer-disconnect-toast-tests.log" + }, + "uiTypecheck": "passed", + "tokenGates": "passed", + "diffCheck": "passed", + "proofs": [ + "Failed exact-owner disconnect after panel removal remains visible in global toast", + "Mounted panel reports fixed copy inline with no duplicate toast", + "Raw error URL/token canary absent" + ], + "limits": [ + "No backend cleanup or retry behavior changes", + "No live forced disconnect failure injected", + "Unmount notice uses existing eight-second warning toast; not indefinite persistence" + ], + "review": "Approved by independent live_state_probe reviewer; no findings" +} diff --git a/doc/plans/assets/2026-10-10-boat/evidence/local49-lifecycle.json b/doc/plans/assets/2026-10-10-boat/evidence/local49-lifecycle.json new file mode 100644 index 00000000000..217e11428d0 --- /dev/null +++ b/doc/plans/assets/2026-10-10-boat/evidence/local49-lifecycle.json @@ -0,0 +1,125 @@ +{ + "schema": "boat-local-lifecycle-proof/v1", + "capturedAt": "2026-10-11T09:52:23.813224+00:00", + "fixture": "local49 / BOA-23", + "controllerSource": "97f9ace67e7e199c2712522ab84095a2ceafa4c2", + "providerPack": { + "source": "1ab3cb94e036f5de43e4bad9fd4d345054e8763c", + "digest": "sha256:640c6c5405003f7d07603694413be14dc6c9601bc71f40b285f6cb247b5d412b", + "hasFatalImportSettlementFix": true, + "hasDependencyCtimeRereadFix": false + }, + "runnerArtifact": { + "source": "86c1aa2b0c53b1b41888cea6b8e04e42e28dd05c", + "sha256": "b47ed0f4f29e4c945d12fa4f351c01ee5f03685974bf03591689969bb3b85b73", + "proof": "Selected immutable artifact; no guest executable hash probe in this lifecycle." + }, + "upload": { + "diagnosticsEnabled": true, + "chunksCompleted": 301, + "chunkFailures": 0, + "chunkTimeouts": 0, + "maxQueuedAndActiveMs": 136239, + "packMiB": 1166, + "startedAt": "2026-10-11T09:18:10.306Z", + "completedAt": "2026-10-11T09:37:21.704Z" + }, + "cold": { + "id": "6fcda24f-6063-4966-9730-ad2d68ddd7e2", + "status": "succeeded", + "started_at": "2026-10-11T09:14:32.008Z", + "finished_at": "2026-10-11T09:39:01.367Z", + "native_session_id": "5c37ce0f-ff2d-443c-a88c-8efaf8291e9a", + "runner_instance_id": "ee29038f-82ad-4928-b223-5056179925d8", + "session_id_before": null, + "session_id_after": "fd2407a7-42d7-4164-b279-2a19fa91948a", + "error_code": null + }, + "warm": { + "id": "6a07f42f-6e30-4b3d-8924-a15bc9de24f9", + "status": "succeeded", + "started_at": "2026-10-11T09:39:47.251Z", + "finished_at": "2026-10-11T09:41:00.398Z", + "native_session_id": "5c37ce0f-ff2d-443c-a88c-8efaf8291e9a", + "runner_instance_id": "ee29038f-82ad-4928-b223-5056179925d8", + "session_id_before": "fd2407a7-42d7-4164-b279-2a19fa91948a", + "session_id_after": "fd2407a7-42d7-4164-b279-2a19fa91948a", + "error_code": null + }, + "nativeSessionId": "5c37ce0f-ff2d-443c-a88c-8efaf8291e9a", + "logicalRunnerId": "ee29038f-82ad-4928-b223-5056179925d8", + "providerSessionId": "fd2407a7-42d7-4164-b279-2a19fa91948a", + "warmOwner": { + "id": "6e208d55-cc8c-4afd-9cfb-49843a936c02", + "kind": "runner", + "phase": "warm", + "runId": "6a07f42f-6e30-4b3d-8924-a15bc9de24f9", + "deadline": "2026-10-11T09:46:00.347Z", + "generation": 2, + "process": { + "nonce": "37f768f4-5719-40c1-87c9-8b3f790c9714", + "bootId": "37936b19-7dba-4ec1-a094-1d71cc5f299e", + "unitName": "paperclip-6e208d55-cc8c-4afd-9cfb-49843a936c02.service", + "launchGeneration": 1 + } + }, + "proofFiles": [ + { + "name": "boat-final-claude.txt", + "sha256": "14fa23911a1a95ede22a93f43fc027934b20a1ba497f8e6120abc8769498e124" + }, + { + "name": "boat-claude-framing-proof.txt", + "sha256": "afaf525f4bf0c38614c5df0cf97140e7d1bf9cad96faa293e2317dc82116af4a" + } + ], + "proofEvidence": "Parent observed both hashes in actual browser tool output for cold and warm; warm host UTC09:40:48.", + "naturalArchive": { + "status": "completed", + "warmDeadline": "2026-10-11T09:46:00.347Z", + "noLiveOwnersObservedAt": "2026-10-11T09:46:21.342Z", + "providerObservedAt": "2026-10-11T09:46:29.675Z", + "providerState": "archived", + "providerHealth": "ok", + "stopId": "stop_9dc90636776cb256", + "stopCompletedAt": "2026-10-11T09:46:27.243Z", + "guestReads": false + }, + "postIdle": { + "id": "825e1f90-556e-4e06-9557-b17d4a3d7e99", + "status": "failed", + "started_at": "2026-10-11T09:46:49.578Z", + "finished_at": "2026-10-11T09:51:04.712Z", + "native_session_id": "5c37ce0f-ff2d-443c-a88c-8efaf8291e9a", + "runner_instance_id": "ee29038f-82ad-4928-b223-5056179925d8", + "session_id_before": "fd2407a7-42d7-4164-b279-2a19fa91948a", + "session_id_after": "fd2407a7-42d7-4164-b279-2a19fa91948a", + "error_code": "adapter_failed", + "error": "runner_state_identity_mismatch: authority_indeterminate", + "primaryFailure": { + "observedAt": "2026-10-11T09:49:35.623Z", + "command": "turn.start", + "classification": "agent_startup_unverified_module", + "lastSafeStage": "turn_ownership_verified", + "admissionElapsedMs": 2482, + "runAttachCompleted": true, + "committedSessionEvents": 4, + "drainCompleted": true, + "suspendCompleted": true + }, + "sameRunAutomaticRecovery": "Failed with authority_indeterminate; no separate successor or manual reset.", + "packDigest": "sha256:640c6c5405003f7d07603694413be14dc6c9601bc71f40b285f6cb247b5d412b", + "classificationLimit": "Proves guarded provider startup rejected an unverified module. The exact rejected check/module is not exposed; ctime-only dependency drift remains a tested candidate, not a proven live cause." + }, + "observerPolicy": "Controller logs, local database and provider status only. No guest reads, manual wake, or executable prewarming during this lifecycle.", + "manualReset": false, + "oldImmutablePacksChanged": false, + "finalCleanup": { + "noActiveOrQueuedRunsOrOwnersAt": "2026-10-11T09:52:03.054Z", + "providerState": "archived", + "providerHealth": "ok", + "stopId": "stop_6a069a997e1066c2", + "completedAt": "2026-10-11T09:51:12.415Z", + "observedAt": "2026-10-11T09:52:04.360Z" + } +} diff --git a/doc/plans/assets/2026-10-10-boat/evidence/staging25-chrome-embedded-control.json b/doc/plans/assets/2026-10-10-boat/evidence/staging25-chrome-embedded-control.json new file mode 100644 index 00000000000..6b027c90b20 --- /dev/null +++ b/doc/plans/assets/2026-10-10-boat/evidence/staging25-chrome-embedded-control.json @@ -0,0 +1,24 @@ +{ + "observedBeforeUtc": "2026-10-11T09:37:10Z", + "source": "ca07557247533531b85045a1dc20c231dc9cd1de", + "browser": "Chrome", + "surface": "Paperclip task Computer panel embedded Moonlight iframe", + "issue": "BOA-2", + "result": "passed", + "steps": [ + "Normal Computer Connect from archived Boat", + "Native coordinate click on visible remote Chrome dock icon visibly launched Chromium", + "typeText had no visible effect; not counted as keyboard proof", + "Actual key e appeared in remote omnibox", + "Ctrl+A, individual native keys example.net, then Return", + "Final screenshot visibly shows example.net and Example Domain content within Paperclip Computer panel", + "Normal Close Computer" + ], + "singleViewer": true, + "directViewerUsed": false, + "guestInputInjection": false, + "limitations": [ + "In-app-browser input remains inconclusive", + "Source-specific pass on staging25; later loader-only changes are separate" + ] +} diff --git a/doc/plans/assets/2026-10-10-boat/evidence/staging26-archived-baseline.json b/doc/plans/assets/2026-10-10-boat/evidence/staging26-archived-baseline.json new file mode 100644 index 00000000000..daf53e9f705 --- /dev/null +++ b/doc/plans/assets/2026-10-10-boat/evidence/staging26-archived-baseline.json @@ -0,0 +1,15 @@ +{ + "observedAt": "2026-10-11T09:42:25.595Z", + "providerId": "bx_b8sawfyp", + "guestRead": false, + "state": "archived", + "health": "ok", + "stop": { + "id": "stop_798d173a0d5eb5ae", + "status": "completed", + "timestamps": { + "endedAt": "2026-10-11T09:37:19.030Z" + }, + "errorPresent": false + } +} diff --git a/doc/plans/assets/2026-10-10-boat/evidence/staging26-deployment.json b/doc/plans/assets/2026-10-10-boat/evidence/staging26-deployment.json new file mode 100644 index 00000000000..7b24e694567 --- /dev/null +++ b/doc/plans/assets/2026-10-10-boat/evidence/staging26-deployment.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "requestId": "14f4fbec-0bf7-4e7c-b287-f565d83c69a7", + "sha": "d5bce13cca01732105df15487000a260ae3c973c", + "stage": "deploy", + "hostname": "boat.staging.paperclip.app", + "environment": "staging", + "status": "succeeded", + "verification": "verified", + "appVersion": "sha-d5bce13cca01732105df15487000a260ae3c973c-cloud", + "targetStackId": "stack-pool-474c42a4b545", + "campaignUrl": "https://admin-staging.paperclip.app/admin/fleet/campaigns/fleet-campaign-1791706429498", + "checkedAt": "2026-10-11T09:41:21.624Z" +} diff --git a/doc/plans/assets/2026-10-10-boat/evidence/staging26-legacy-admission-active.json b/doc/plans/assets/2026-10-10-boat/evidence/staging26-legacy-admission-active.json new file mode 100644 index 00000000000..5d7f25467d3 --- /dev/null +++ b/doc/plans/assets/2026-10-10-boat/evidence/staging26-legacy-admission-active.json @@ -0,0 +1,89 @@ +{ + "observedAt": "2026-10-11T09:44:53.764Z", + "source": "staging26_simultaneous_legacy_read_only", + "companyId": "76e38a59-75e7-5ff8-a4bf-ebb78a7b8ebe", + "runs": [ + { + "runId": "73bc6d17-4d37-4a59-a72d-d82b4b420191", + "agentId": "d227579b-7543-4c8c-94aa-9dfea261fa16", + "taskId": "612d0551-2947-435e-9b7d-d64dc584a41a", + "runtime": "legacy_codex", + "status": "running", + "startedAt": "2026-10-11T09:43:05.427Z", + "finishedAt": null, + "errorCode": null, + "categories": [], + "nativeSessionId": null, + "runnerInstanceId": null + }, + { + "runId": "e3daa441-de0c-4de6-946a-e6d024d8893d", + "agentId": "644df48a-6c38-4bfb-8f8e-1dec3253ee55", + "taskId": "8a437e8b-3a17-4ec6-8bda-9aab1c067c29", + "runtime": "legacy_claude", + "status": "running", + "startedAt": "2026-10-11T09:43:05.362Z", + "finishedAt": null, + "errorCode": null, + "categories": [], + "nativeSessionId": null, + "runnerInstanceId": null + } + ], + "leases": [ + { + "id": "1b463e96-a333-430e-932e-412432886039", + "runId": "73bc6d17-4d37-4a59-a72d-d82b4b420191", + "status": "active", + "cleanupStatus": null, + "acquiredAt": "2026-10-11T09:43:29.192Z", + "releasedAt": null, + "expiresAt": null, + "computerId": "6d53efb3-5b96-4694-a1c1-9746dc8278f0", + "ownerId": "59b07669-f13b-4b28-a215-a9bc71c9e66b", + "generation": 1 + }, + { + "id": "93f7f9a3-8bee-403f-b37c-bafa423b019d", + "runId": "e3daa441-de0c-4de6-946a-e6d024d8893d", + "status": "active", + "cleanupStatus": null, + "acquiredAt": "2026-10-11T09:43:28.522Z", + "releasedAt": null, + "expiresAt": null, + "computerId": "6d53efb3-5b96-4694-a1c1-9746dc8278f0", + "ownerId": "5595da57-5265-4a14-ae50-2d01eccfba66", + "generation": 1 + } + ], + "owners": [ + { + "computerId": "6d53efb3-5b96-4694-a1c1-9746dc8278f0", + "ledgerStatus": "attached", + "actionPresent": false, + "ownerId": "5595da57-5265-4a14-ae50-2d01eccfba66", + "runId": "e3daa441-de0c-4de6-946a-e6d024d8893d", + "agentId": "644df48a-6c38-4bfb-8f8e-1dec3253ee55", + "generation": 1, + "phase": "active", + "admittedAt": "2026-10-11T09:43:09.824Z", + "deadline": null, + "retirementDeadline": null, + "processBindingPresent": false + }, + { + "computerId": "6d53efb3-5b96-4694-a1c1-9746dc8278f0", + "ledgerStatus": "attached", + "actionPresent": false, + "ownerId": "59b07669-f13b-4b28-a215-a9bc71c9e66b", + "runId": "73bc6d17-4d37-4a59-a72d-d82b4b420191", + "agentId": "d227579b-7543-4c8c-94aa-9dfea261fa16", + "generation": 1, + "phase": "active", + "admittedAt": "2026-10-11T09:43:09.866Z", + "deadline": null, + "retirementDeadline": null, + "processBindingPresent": false + } + ] +} \ No newline at end of file diff --git a/doc/plans/assets/2026-10-10-boat/evidence/staging26-legacy-admission-final.json b/doc/plans/assets/2026-10-10-boat/evidence/staging26-legacy-admission-final.json new file mode 100644 index 00000000000..d13415d1c79 --- /dev/null +++ b/doc/plans/assets/2026-10-10-boat/evidence/staging26-legacy-admission-final.json @@ -0,0 +1,89 @@ +{ + "observedAt": "2026-10-11T09:47:09.818Z", + "source": "staging26_simultaneous_legacy_read_only", + "companyId": "76e38a59-75e7-5ff8-a4bf-ebb78a7b8ebe", + "runs": [ + { + "runId": "73bc6d17-4d37-4a59-a72d-d82b4b420191", + "agentId": "d227579b-7543-4c8c-94aa-9dfea261fa16", + "taskId": "612d0551-2947-435e-9b7d-d64dc584a41a", + "runtime": "legacy_codex", + "status": "succeeded", + "startedAt": "2026-10-11T09:43:05.427Z", + "finishedAt": "2026-10-11T09:45:16.749Z", + "errorCode": null, + "categories": [], + "nativeSessionId": null, + "runnerInstanceId": null + }, + { + "runId": "e3daa441-de0c-4de6-946a-e6d024d8893d", + "agentId": "644df48a-6c38-4bfb-8f8e-1dec3253ee55", + "taskId": "8a437e8b-3a17-4ec6-8bda-9aab1c067c29", + "runtime": "legacy_claude", + "status": "succeeded", + "startedAt": "2026-10-11T09:43:05.362Z", + "finishedAt": "2026-10-11T09:45:21.193Z", + "errorCode": null, + "categories": [], + "nativeSessionId": null, + "runnerInstanceId": null + } + ], + "leases": [ + { + "id": "1b463e96-a333-430e-932e-412432886039", + "runId": "73bc6d17-4d37-4a59-a72d-d82b4b420191", + "status": "released", + "cleanupStatus": "success", + "acquiredAt": "2026-10-11T09:43:29.192Z", + "releasedAt": "2026-10-11T09:45:22.633Z", + "expiresAt": null, + "computerId": "6d53efb3-5b96-4694-a1c1-9746dc8278f0", + "ownerId": "59b07669-f13b-4b28-a215-a9bc71c9e66b", + "generation": 1 + }, + { + "id": "93f7f9a3-8bee-403f-b37c-bafa423b019d", + "runId": "e3daa441-de0c-4de6-946a-e6d024d8893d", + "status": "released", + "cleanupStatus": "success", + "acquiredAt": "2026-10-11T09:43:28.522Z", + "releasedAt": "2026-10-11T09:45:26.731Z", + "expiresAt": null, + "computerId": "6d53efb3-5b96-4694-a1c1-9746dc8278f0", + "ownerId": "5595da57-5265-4a14-ae50-2d01eccfba66", + "generation": 1 + } + ], + "owners": [ + { + "computerId": "6d53efb3-5b96-4694-a1c1-9746dc8278f0", + "ledgerStatus": "attached", + "actionPresent": false, + "ownerId": "5595da57-5265-4a14-ae50-2d01eccfba66", + "runId": "e3daa441-de0c-4de6-946a-e6d024d8893d", + "agentId": "644df48a-6c38-4bfb-8f8e-1dec3253ee55", + "generation": 1, + "phase": "retired", + "admittedAt": "2026-10-11T09:43:09.824Z", + "deadline": null, + "retirementDeadline": null, + "processBindingPresent": false + }, + { + "computerId": "6d53efb3-5b96-4694-a1c1-9746dc8278f0", + "ledgerStatus": "attached", + "actionPresent": false, + "ownerId": "59b07669-f13b-4b28-a215-a9bc71c9e66b", + "runId": "73bc6d17-4d37-4a59-a72d-d82b4b420191", + "agentId": "d227579b-7543-4c8c-94aa-9dfea261fa16", + "generation": 1, + "phase": "retired", + "admittedAt": "2026-10-11T09:43:09.866Z", + "deadline": null, + "retirementDeadline": null, + "processBindingPresent": false + } + ] +} \ No newline at end of file diff --git a/doc/plans/assets/2026-10-10-boat/evidence/staging26-legacy-admission-initial.json b/doc/plans/assets/2026-10-10-boat/evidence/staging26-legacy-admission-initial.json new file mode 100644 index 00000000000..57c6bcaf920 --- /dev/null +++ b/doc/plans/assets/2026-10-10-boat/evidence/staging26-legacy-admission-initial.json @@ -0,0 +1,64 @@ +{ + "observedAt": "2026-10-11T09:43:24.761Z", + "source": "staging26_simultaneous_legacy_read_only", + "companyId": "76e38a59-75e7-5ff8-a4bf-ebb78a7b8ebe", + "runs": [ + { + "runId": "73bc6d17-4d37-4a59-a72d-d82b4b420191", + "agentId": "d227579b-7543-4c8c-94aa-9dfea261fa16", + "taskId": "612d0551-2947-435e-9b7d-d64dc584a41a", + "runtime": "legacy_codex", + "status": "running", + "startedAt": "2026-10-11T09:43:05.427Z", + "finishedAt": null, + "errorCode": null, + "categories": [], + "nativeSessionId": null, + "runnerInstanceId": null + }, + { + "runId": "e3daa441-de0c-4de6-946a-e6d024d8893d", + "agentId": "644df48a-6c38-4bfb-8f8e-1dec3253ee55", + "taskId": "8a437e8b-3a17-4ec6-8bda-9aab1c067c29", + "runtime": "legacy_claude", + "status": "running", + "startedAt": "2026-10-11T09:43:05.362Z", + "finishedAt": null, + "errorCode": null, + "categories": [], + "nativeSessionId": null, + "runnerInstanceId": null + } + ], + "leases": [], + "owners": [ + { + "computerId": "6d53efb3-5b96-4694-a1c1-9746dc8278f0", + "ledgerStatus": "attached", + "actionPresent": false, + "ownerId": "5595da57-5265-4a14-ae50-2d01eccfba66", + "runId": "e3daa441-de0c-4de6-946a-e6d024d8893d", + "agentId": "644df48a-6c38-4bfb-8f8e-1dec3253ee55", + "generation": 1, + "phase": "starting", + "admittedAt": "2026-10-11T09:43:09.824Z", + "deadline": "2026-10-11T09:45:09.824Z", + "retirementDeadline": null, + "processBindingPresent": false + }, + { + "computerId": "6d53efb3-5b96-4694-a1c1-9746dc8278f0", + "ledgerStatus": "attached", + "actionPresent": false, + "ownerId": "59b07669-f13b-4b28-a215-a9bc71c9e66b", + "runId": "73bc6d17-4d37-4a59-a72d-d82b4b420191", + "agentId": "d227579b-7543-4c8c-94aa-9dfea261fa16", + "generation": 1, + "phase": "starting", + "admittedAt": "2026-10-11T09:43:09.866Z", + "deadline": "2026-10-11T09:45:09.866Z", + "retirementDeadline": null, + "processBindingPresent": false + } + ] +} \ No newline at end of file diff --git a/doc/plans/assets/2026-10-10-boat/local49-claude-cold.png b/doc/plans/assets/2026-10-10-boat/local49-claude-cold.png new file mode 100644 index 00000000000..78aff39561d Binary files /dev/null and b/doc/plans/assets/2026-10-10-boat/local49-claude-cold.png differ diff --git a/doc/plans/assets/2026-10-10-boat/local49-claude-warm.png b/doc/plans/assets/2026-10-10-boat/local49-claude-warm.png new file mode 100644 index 00000000000..0caa273926b Binary files /dev/null and b/doc/plans/assets/2026-10-10-boat/local49-claude-warm.png differ diff --git a/doc/plans/assets/2026-10-10-boat/local49-post-idle-failed.png b/doc/plans/assets/2026-10-10-boat/local49-post-idle-failed.png new file mode 100644 index 00000000000..efe236832c1 Binary files /dev/null and b/doc/plans/assets/2026-10-10-boat/local49-post-idle-failed.png differ diff --git a/doc/plans/assets/2026-10-10-boat/staging25-chrome-embedded-control.png b/doc/plans/assets/2026-10-10-boat/staging25-chrome-embedded-control.png new file mode 100644 index 00000000000..f0866befd0c Binary files /dev/null and b/doc/plans/assets/2026-10-10-boat/staging25-chrome-embedded-control.png differ diff --git a/doc/plans/assets/2026-10-10-boat/staging26-legacy-claude-result.png b/doc/plans/assets/2026-10-10-boat/staging26-legacy-claude-result.png new file mode 100644 index 00000000000..8100fdc75c3 Binary files /dev/null and b/doc/plans/assets/2026-10-10-boat/staging26-legacy-claude-result.png differ diff --git a/doc/plans/assets/2026-10-10-boat/staging26-legacy-codex-result.png b/doc/plans/assets/2026-10-10-boat/staging26-legacy-codex-result.png new file mode 100644 index 00000000000..a302b9291ac Binary files /dev/null and b/doc/plans/assets/2026-10-10-boat/staging26-legacy-codex-result.png differ