diff --git a/doc/plans/2026-10-12-claude-runner-default.md b/doc/plans/2026-10-12-claude-runner-default.md index be1e0587f07..9b3efcbf442 100644 --- a/doc/plans/2026-10-12-claude-runner-default.md +++ b/doc/plans/2026-10-12-claude-runner-default.md @@ -1291,3 +1291,26 @@ The prior reconciliation report was uploaded to its original completed QA task and independently byte-checked: attachment aabe2e7e-a8a0-4408-bc7e-a013e0f7485b, 5916 bytes, SHA256 3bd9bcfa64db6a3a7968952122b1a5c2ae27e24f0e4ff336fd47ae374bae8ff1. Paid acceptance and budget/hold changes remain stopped pending human approval. + + +### Frozen runtime and comment-only review cleanup — 2026-10-14 + +Protocol dd82936c1d has current 5/5 review and green CI 38609018629. +Platform 2646b94533 has current 5/5 review and green CI 38609191818. +Behavior 05a98b6cbf received one style finding for added code comments. +Removing its seven specified comment lines across three files produces identical +comment-free esbuild output for each file; the SHA256 comparison is retained in +/private/tmp/claude-comment-cleanup-equivalence-20261014.json. No executable +behavior changes, so package campaign 38610086180 and qualification-image +campaign 38610152781 retain their literal 2646b94533 runtime source identity. +They do not become proof of a later source revision by relabeling. + +The full Product E2E support checks pass 2733 Vitest and 128 node:test controls. +The behavior static lane observed a transient atomic .tmp record in an unchanged +build-stamp concurrency fixture; its exact local control passes. The original +failed attempt and one requested failed-job rerun remain recorded. +A read-only QA budget audit now succeeds on 3115: six confirmed policies have +zero live runs; four remain paused with pending accounting, and an older policy +is unavailable. Historical reservations remain conservative. No hold, limit or +paid run was changed. The two previously colliding foreign port listeners remain +present and untouched; retrying that exact old session is not execution proof. diff --git a/server/src/services/agent-runner-selection.ts b/server/src/services/agent-runner-selection.ts index 3ee9ad04d07..31aed26442d 100644 --- a/server/src/services/agent-runner-selection.ts +++ b/server/src/services/agent-runner-selection.ts @@ -76,14 +76,12 @@ function resolveClaudeRunnerConfig(config: Record): Record } { const adapterType = input.adapterType ?? "process"; let config = { ...input.adapterConfig }; const harness = agentHarnessType(adapterType, config); const native = adapterType === "paperclip_runner"; if (["codex_local", "claude_local"].includes(adapterType) && getDisabledAdapterTypes().includes(adapterType)) throw unprocessable(`${adapterType === "claude_local" ? "Claude" : "Codex"} is disabled on this instance. Enable its adapter or choose another harness.`, { code: "agent_runner_unavailable" }); - // Explicit saved native profiles (including historical provider omission) retain execution. if (native && (input.runner === undefined || input.runner === "paperclip" || (harness !== "codex_local" && input.runner !== "legacy"))) return { adapterType, adapterConfig: normalizeLegacyRunnerProvider(config) }; const availability = agentRunnerAvailability(harness, input.target); const choice = input.runner ?? "auto"; diff --git a/server/src/services/company-portability.ts b/server/src/services/company-portability.ts index 9f4d2506da1..fd04fe17a9a 100644 --- a/server/src/services/company-portability.ts +++ b/server/src/services/company-portability.ts @@ -5644,8 +5644,6 @@ export function companyPortabilityService(db: Db, storage?: StorageService) { runner = agentRunner(existingImportAgent.adapterType); } } - // The picker sends harness identity for config edits. Keep a saved - // native profile, including on a source-built unqualified platform. const retainedNative = runner === "paperclip" && ["codex_local", "claude_local"].includes(selectedHarness) ? [manifestAgent, existingImportAgent].find((agent) => agent?.adapterType === "paperclip_runner" && agentHarnessType(agent.adapterType, agent.adapterConfig) === selectedHarness) diff --git a/ui/src/pages/CompanyImport.tsx b/ui/src/pages/CompanyImport.tsx index b8011cc1b2d..99c4c3b0e09 100644 --- a/ui/src/pages/CompanyImport.tsx +++ b/ui/src/pages/CompanyImport.tsx @@ -1753,9 +1753,6 @@ export function CompanyImport() { if (agent.adapterType === "paperclip_runner" && selectedType === agent.adapterChoice && ["codex_local", "claude_local"].includes(selectedType) && configVals.adapterType === selectedType && agentHarnessType("paperclip_runner", configVals.adapterSchemaValues) === selectedType) { - // Project only real form changes onto the saved native configuration. - // Form defaults must not replace bindings or runtime fields; explicit - // clears must not be filled back in from the source either. const original = importAdapterValues(selectedType, agent.adapterConfig, agent.adapterType, configVals.runner); const baseline = build(original); const retained = { ...agent.adapterConfig };