diff --git a/doc/plans/2026-09-10-agent-chat.md b/doc/plans/2026-09-10-agent-chat.md index f4ee9d451f..bb8bf2b1f9 100644 --- a/doc/plans/2026-09-10-agent-chat.md +++ b/doc/plans/2026-09-10-agent-chat.md @@ -161,3 +161,125 @@ no-unsolicited-run checks. Stable inconsistent idle states fail promptly instead of waiting through a long timeout and hiding a product race behind a paid retry. Focused native Claude project reuse and multiple-repository handoffs, and legacy Claude multiple-repository handoff, passed on their first attempts with these fixes. + +The focused legacy Claude Stop/reset/resume regression also passed on its first +attempt. Latest repository-wide typecheck, build, and token gates passed. Final +runner fixture checks passed 151 tests; fresh chat/prompt/recovery checks passed +209 tests, and the native session executor file passed 207 tests. Broad local +verification is recorded as resumed groups rather than a clean monolithic run: +the original command encountered source edits during execution, generated-evidence +scanner input, and cold-import/process-startup timeouts under concurrent load. +The guidance scanner now excludes only generated runner evidence and has a +regression proving authored runner guidance remains scanned. Focused UI, database, +publication, and canonical-path CLI reruns passed without product changes. + +Broader adapter verification exposed OpenCode test fixtures reading the developer's +real configuration directory. Those fixtures now allocate and restore isolated +XDG configuration directories; all 44 source tests and package typecheck pass. +The remaining workspace projects were run even after earlier groups stopped at a +failure, and the original failure logs remain available alongside focused reruns. + +Campaign `34642700703` passed 19/24 cells. Its remaining failures were traced to +one clarification-oracle phrasing, revision-write guidance, runner teardown after +a successful restart, and native mutation content passing through diagnostic +redaction. The clarification fixture now also recognizes substantive requests +for a brief or details. Revision instructions and HTTP conflict errors explicitly +map the GET `latestRevisionId` to PUT `baseRevisionId`; a live Codex +plan/revise/accept/handoff run passed on its first attempt with that fix. + +Playwright now gives the restart supervisor a bounded SIGTERM shutdown so it can +reap children and close log streams. A real zero-provider Playwright regression +verifies restart, child process exit, and port closure; cleanup failure still +fails the campaign. Native schema-declared task/project/document prose retains +its complete contents while credentials and diagnostic data remain scrubbed. +Regression coverage includes long plans beyond the diagnostic preview limit. +The macOS fake Anthropic service now clears inherited nonblocking socket mode +before its bounded request read; all 271 Rust library tests passed afterward. + +All 144 serialized server suites have passing coverage across the resumed shards +and focused reruns. Three route fixtures moved cold module imports into bounded +setup hooks, preserving their HTTP assertion timeouts; the final affected files +passed 119 tests. The completed workspace groups likewise have passing focused +reruns for every observed failure. These results are recorded alongside, rather +than replacing, the earlier failed monolithic invocation. + +The ACPX sidecar decoder was an additional execution boundary: it applied generic +diagnostic redaction before the native semantic-input stage. It now uses the same +schema-declared prose policy at decode. The regression feeds a real +`runtime.tool_called` event through decoding, pending-call state, and semantic +projection, checking complete long-plan contents, protected credentials, unknown +operation handling, and matching content digests. The decoder/state checks passed +22 tests and durable-state checks passed 30 tests before the next paid campaign. + +The final local native Claude repository handoff preserved the exact previously +corrupted task description, plan, and execution output. Its product assertions +passed on the first attempt; post-run secret scanning then exposed PostgreSQL +removing `instances//db/postmaster.pid` after directory enumeration. Only +ENOENT for that exact transient path is now tolerated. Existing PID contents, +other scan errors, mandatory evidence, and process/lease cleanup remain enforced. +All 157 runner fixture tests and final repository typecheck/build passed. +Campaign `34645293835` tests the complete set of fixes. + +Campaign `34645293835` passed 20/24 cells. Two failures exposed narrow lifecycle +races: a successful native chat turn could be mistaken for productive unfinished +work before response publication, and an agent comment deferred behind an active +execution could wake its assignee after that execution completed. Recovery now +leaves the first case to the conversation finalizer; queue promotion cancels the +stale terminal-task continuation while retaining human reopening and notifications +to other agents. The recovery regression fails with the guard removed and passes +with it restored; all 20 comment-wake batching tests and server typecheck pass. + +The other failures distinguish requested approval from ordinary draft planning, +and a persisted Paperclip document from a workspace file. The chat directive now +explains how to create a revision-bound approval card when explicitly requested, +including after a revision. Paid fixtures name the requested Paperclip document +explicitly while retaining strict checks of approvals, transferred plans, and +persisted execution output. + +Native reconciliation also preserves assessment lineage within its owning run +when the task's previous status decision belongs to a different run. Decision +lineage still spans runs; the database ownership constraint remains unchanged. +The regression reproduces the original foreign-key failure without the fix and +passes for absent, same-run, and different-run predecessors with it. The next +24-cell campaign is `34646672139`, pinned to `3556fa25f`. + +Campaign `34646672139` passed 23/24 cells: all native cases and all legacy Claude +cases passed. The remaining legacy Codex plan-revision failure exposed an adapter +prompt omission. Its resume delta discarded the server's task-context Markdown, +including both the chat directive and document-concurrency guidance. Codex now +selects the same full/compact task-context Markdown as Claude on initial and +resumed sessions. Both adapters suppress generic task-completion and child-task +planning directives in chat, leaving the central chat policy authoritative. +The approval and output assertions remain unchanged. + +Fresh chat prompts use a small conversation-safe default template that retains +connection guidance, permissions, budgets, cancellation, and mutation honesty. +Explicit custom agent templates remain intact. Native execution and continuation +prompts also carry the conversation flag so shared wake rendering cannot reinsert +ordinary completion/subtask instructions. The integration regression inspects +both fake-CLI stdin and the recorded adapter invocation with the production chat +directive; removing the task-context section reproduces the failure. Shared prompt +checks (102), actual Codex prompt cases (3), native resume checks (11), affected +package typechecks, and server typecheck pass. Campaign `34648511170` tests all +24 cells on `abacbdfd2`. + +The complete Codex/Claude execution regression files passed 46 tests. Final +repository-wide typecheck and build also passed on `abacbdfd2`, after all prompt +changes. + +Final paid verification: campaign `34648511170` passed **24/24** chat cases on +`abacbdfd2`: legacy Codex 6/6, legacy Claude 6/6, native Codex 6/6, and native +ACPX Claude 6/6. All cells completed by 21:34 UTC on September 11, within the +requested three-hour repair window. No acceptance assertions were disabled. + +- [Exact campaign results](https://d1p6rlowie26tp.cloudfront.net/runner-e2e/campaigns/gha-34648511170-1/summary.md) +- [GitHub run and retained evidence](https://github.com/paperclipai/paperclip/actions/runs/34648511170) + +Use the Markdown results for this branch-only suite: the trusted default-branch +HTML dashboard still uses its older catalog, while the normalized results and +Markdown report include all 24 chat cells. + +The published summary and normalized results were verified after publication: +exactly 24 unique expected cells, all passed on attempt 1, all cleanup checks +passed, all evidence valid with no evidence errors, and every result bound to +`abacbdfd2f660709ec37312cdb758284c8399d04`. The public report returned HTTP 200.