From d1660270badfb7483ccdbee4f84da4ddb18e65a6 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Thu, 30 Apr 2026 04:19:29 +0100 Subject: [PATCH] Keep verification behind unavailable modeling --- state/evidence.jsonl | 1 + .../app-server/src/codex_message_processor.rs | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/state/evidence.jsonl b/state/evidence.jsonl index c4085f2a..386b2be6 100644 --- a/state/evidence.jsonl +++ b/state/evidence.jsonl @@ -36,3 +36,4 @@ {"ts": "2026-04-30T02:12:42+00:00", "type": "rejected_path", "status": "contaminated", "note": "Aetheria dogfood exposed a supervision-boundary failure: the supervising Codex session directly edited and committed target-repo slices instead of driving Epiphany GUI/coordinator/fixed lanes. Treat those commits as supervisor-seeded implementation, not clean Epiphany evidence; future dogfood must quarantine direct edits as explicit operator interventions or contamination."} {"ts": "2026-04-30T02:24:44+00:00", "type": "implementation", "status": "ok", "note": "Dogfood supervision now has a projection boundary: operator/status/coordinator/live-specialist/dogfood tools sanitize direct worker payloads by default, seal raw transcripts/stderr as forensic artifacts, and coordinator smoke asserts rawResult is sealed in operator-facing summaries. Durable instructions now forbid supervisor exposure to raw worker thoughts during normal dogfood."} {"ts": "2026-04-30T02:39:43+00:00", "type": "implementation", "status": "ok", "note": "Function/API telemetry now gives dogfood supervision a non-thought instrument panel: status, coordinator, GUI action, dogfood, and live-specialist tools emit agent-function-telemetry.json from sealed app-server transcripts with method counts, request shape, job/status/path metadata, and visible tool names while sealing text, raw results, turn items, and direct worker messages."} +{"ts": "2026-04-30T03:18:48+00:00", "type": "implementation", "status": "ok", "note": "Aetheria supervised dogfood exposed a coordinator policy bug: after the modeling/checkpoint worker was interrupted and roleResult became backendUnavailable, coordinator skipped to verification. Fixed map_epiphany_coordinator so backendUnavailable is treated as a relaunchable role status for modeling and verification; focused Rust test and live coordinator plan now keep verification behind modeling."} diff --git a/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs b/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs index 5ba568dd..8078a314 100644 --- a/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs +++ b/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs @@ -14034,6 +14034,7 @@ fn map_epiphany_coordinator( }) && matches!( signals.modeling_result_status, ThreadEpiphanyRoleResultStatus::MissingBinding + | ThreadEpiphanyRoleResultStatus::BackendUnavailable | ThreadEpiphanyRoleResultStatus::BackendMissing | ThreadEpiphanyRoleResultStatus::Cancelled | ThreadEpiphanyRoleResultStatus::Failed @@ -14070,6 +14071,7 @@ fn map_epiphany_coordinator( }) && matches!( signals.verification_result_status, ThreadEpiphanyRoleResultStatus::MissingBinding + | ThreadEpiphanyRoleResultStatus::BackendUnavailable | ThreadEpiphanyRoleResultStatus::BackendMissing | ThreadEpiphanyRoleResultStatus::Cancelled | ThreadEpiphanyRoleResultStatus::Failed @@ -19585,6 +19587,25 @@ mod tests { EpiphanyCoordinatorAutomationAction::None ); + let modeling_backend_unavailable = coordinator_signals( + ThreadEpiphanyCrrcAction::Continue, + ThreadEpiphanyReorientResultStatus::MissingBinding, + ThreadEpiphanyRoleResultStatus::BackendUnavailable, + ThreadEpiphanyRoleResultStatus::MissingBinding, + ); + let relaunch_modeling = map_epiphany_coordinator( + ThreadEpiphanyReorientStateStatus::Ready, + true, + &pressure, + &recommendation, + &roles, + &modeling_backend_unavailable, + ); + assert_eq!( + relaunch_modeling.action, + ThreadEpiphanyCoordinatorAction::LaunchModeling + ); + let modeling_done = coordinator_signals( ThreadEpiphanyCrrcAction::Continue, ThreadEpiphanyReorientResultStatus::MissingBinding,