0 ? round($total_p / $total_w, 2) : 0; } // Gate status (pending from our plan) $gates = [ 'gate_1_strix' => 'QUEUED', 'gate_2_mempalace' => 'BLOCKED_BY_GATE_1', 'gate_3_design' => 'BLOCKED_BY_GATE_2' ]; // Last GOLD $last_gold = ''; $gold_files = glob('/opt/wevads/vault/*.gold*'); if ($gold_files) { usort($gold_files, function($a, $b) { return filemtime($b) - filemtime($a); }); $last_gold = basename($gold_files[0]) . ' ' . date('c', filemtime($gold_files[0])); } // Output echo json_encode([ 'plan_version' => '1.0', 'status' => 'ARMED', 'scelled_at' => '2026-04-19', 'current_phase' => 0, 'current_step' => 'GATE_0_pre_phase_1', 'gates_validated' => [], 'gates_pending' => [1, 2, 3], 'gates_status' => $gates, 'nonreg_status' => $nr_status, 'autonomy_composite_pct' => $composite_pct, 'deliverables' => [ 'plan_directeur_vault' => count_files($vault_plan) . ' files', 'runbooks_vault' => count_files($vault_runbooks) . ' runbooks', ], 'last_gold_backup' => $last_gold, 'incidents_open' => [], 'opus_supervision' => 'STANDBY', 'next_action' => 'Yacine launches Phase 1 Strix intent into WEVIA Master chat', 'next_intent_file' => '/opt/wevads/vault/PLAN-DIRECTEUR/intent-phase1-strix.txt', 'ts' => date('c'), 'doctrines_active' => ['#1','#2','#3','#4','#5','#6','#7','#12','#13','#14','#16','#60'], ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);