diff --git a/doc/plans/2026-10-10-boat-validation.md b/doc/plans/2026-10-10-boat-validation.md index 9fa812ae8dc..43ffaba9120 100644 --- a/doc/plans/2026-10-10-boat-validation.md +++ b/doc/plans/2026-10-10-boat-validation.md @@ -72,6 +72,12 @@ Automatic recovery ended failed at 11:47:52.806 with `runner_state_identity_mism Both deployed diagnostic components are present: the sidecar feature check passed, and the controller's packaged Rust binary SHA-256 `0b53f9aa1b478f0d7aadc9c9326f96820c574ba90efc21aea9acf714c446ef06` contains the new module-fence markers with no remote-binary override. The lowercase-correct receipt parser still found no narrow reason. Offline reproduction identified a separate reporting defect: ACPX summarizes stderr by collapsing whitespace, while the new parser expects a newline after the reason. The same error retains its reason before summarization and loses it afterward. A bounded marker correction is being prepared; this explains missing diagnostics, **not the underlying live module rejection**. Staging acceptance remains incomplete. +## Diagnostic summary correction prepared (2026-10-11 11:58 UTC) + +Core `1f66cac0f83484e01bdd4d4e9dc3375c3e7665c6` makes the closed import marker explicitly terminated, preserving the reason through ACPX whitespace normalization. All17 classifier cases and two actual guarded-child cases failed before the correction. Afterward157 tests passed with six existing platform skips; typecheck, build and independent review passed. The actual installed ACPX0.13.1 summarizer also preserved ANCESTRY and REPEATED_CTIME without exposing private canary text. No integrity condition, authority, deadline, Rust protocol or existing package changed. [Verification](assets/2026-10-10-boat/evidence/loader-marker-verification.json), [installed dependency proof](assets/2026-10-10-boat/evidence/loader-marker-installed-acpx-proof.json). + +The correction is included in staging candidate `05f3725af838b5a074707df1d6ed1e193bdfe49e`. This candidate has not yet been deployed or qualified. Staging28's underlying module rejection remains unresolved; no successful live result is inferred from the diagnostic correction. + ## Local48 and deployment25 follow-up (2026-10-11 08:57 UTC) - **Local cold and warm Claude passed.** Cold run `2651f86d` succeeded at 08:40:21.872 after uploading and verifying the full 1166MiB pack. Warm run `1983527f` succeeded at 08:42:28.390 with the same native session, logical runner, Claude thread and physical owner/boot/launch identity. Both original proof hashes were unchanged. The owner remained warm beyond 130 seconds after the turn, retired after its configured 08:47:28 deadline, and Boat finished archive at 08:47:49.418. [Cold response](assets/2026-10-10-boat/local48-claude-cold.png), [warm response](assets/2026-10-10-boat/local48-claude-warm.png). diff --git a/doc/plans/assets/2026-10-10-boat/evidence/loader-marker-installed-acpx-proof.json b/doc/plans/assets/2026-10-10-boat/evidence/loader-marker-installed-acpx-proof.json new file mode 100644 index 00000000000..d5674e81935 --- /dev/null +++ b/doc/plans/assets/2026-10-10-boat/evidence/loader-marker-installed-acpx-proof.json @@ -0,0 +1,17 @@ +{ + "observedAt": "2026-10-11T11:56:25.958Z", + "dependency": "acpx@0.13.1", + "usedInstalledDependencySummarizer": true, + "cases": [ + { + "reason": "ANCESTRY", + "classification": "AGENT_STARTUP_FAILED.UNVERIFIED_MODULE.ANCESTRY", + "privateCanaryNotExposed": true + }, + { + "reason": "REPEATED_CTIME", + "classification": "AGENT_STARTUP_FAILED.UNVERIFIED_MODULE.REPEATED_CTIME", + "privateCanaryNotExposed": true + } + ] +} diff --git a/doc/plans/assets/2026-10-10-boat/evidence/loader-marker-verification.json b/doc/plans/assets/2026-10-10-boat/evidence/loader-marker-verification.json new file mode 100644 index 00000000000..c996fa77443 --- /dev/null +++ b/doc/plans/assets/2026-10-10-boat/evidence/loader-marker-verification.json @@ -0,0 +1,33 @@ +{ + "schema": "boat-diagnostic-verification/v1", + "capturedAt": "2026-10-11T11:57:05.581017+00:00", + "source": "1f66cac0f83484e01bdd4d4e9dc3375c3e7665c6", + "change": "Self-delimiting import failure marker survives ACPX stderr whitespace normalization.", + "rootCause": "Installed ACPX 0.13.1 collapses newlines in startup stderr; the former newline-delimited marker parser then falls back to the broad unverified-module classification.", + "scope": { + "files": 4, + "guardBehaviorChanged": false, + "authorityChanged": false, + "deadlinesChanged": false, + "rustChanged": false, + "oldPacksChanged": false, + "liveStateChanged": false + }, + "verification": { + "red": { + "classifierFailed": 17, + "realGuardedChildFailed": 2 + }, + "green": { + "passed": 157, + "existingPlatformSkipped": 6 + }, + "typecheck": "passed", + "build": "passed", + "diffCheck": "passed", + "actualInstalledAcpxSummarizer": "ANCESTRY and REPEATED_CTIME exact closed classifications passed", + "independentReview": "live_state_probe approved; no findings", + "actualDependencyReceipt": "loader-marker-installed-acpx-proof.json" + }, + "limitation": "Corrects diagnostic loss only. The exact staging28 integrity fence remains unproven; preserved controller state contained no recoverable marker." +}