/dev/null | wc -l")); if ((int)$git_status > 0) { shell_exec("git add -A 2>/dev/null"); $commit = trim(shell_exec("git commit -m 'auto-sync-" . date("Ymd-Hi") . "' -q 2>&1")); $results["git_commit"] = $commit ?: "committed"; } else { $results["git_commit"] = "clean"; } $push_origin = trim(shell_exec("git push origin main -q 2>&1")); $push_gitea = trim(shell_exec("git push gitea main -q 2>&1")); $results["git_push_origin"] = $push_origin ?: "ok"; $results["git_push_gitea"] = $push_gitea ?: "ok"; $results["git_hash"] = trim(shell_exec("git rev-parse --short HEAD 2>/dev/null")); if (strpos($push_origin, "error") !== false) $errors++; if (strpos($push_gitea, "error") !== false) $errors++; // 2) L99 state update $l99_out = trim(shell_exec("cd /opt/weval-l99 && python3 l99-state-updater.py 2>&1 | tail -3")); $results["l99_update"] = $l99_out ?: "done"; // Read L99 state $l99_state = json_decode(file_get_contents("/opt/weval-l99/l99-state.json") ?: "{}", true); $results["l99_score"] = ($l99_state["pass"] ?? "?") . "/" . ($l99_state["total"] ?? "?"); $results["l99_warn"] = $l99_state["warn"] ?? -1; // 3) Wiki count $wiki_count = (int)trim(shell_exec("find /opt/weval-l99/wiki -name '*.md' 2>/dev/null | wc -l")); $results["wiki_count"] = $wiki_count; // 4) Vault count $vault_count = (int)trim(shell_exec("ls /opt/wevads/vault/ 2>/dev/null | wc -l")); $results["vault_count"] = $vault_count; // 5) NonReg quick check $nr = json_decode(trim(shell_exec("curl -sk https://www.weval-consulting.com/api/nonreg-api.php?cat=all 2>/dev/null | head -c 500")), true); $results["nonreg"] = ($nr["pass"] ?? "?") . "/" . ($nr["total"] ?? "?"); // 6) Consistency check $dirty = (int)trim(shell_exec("cd /var/www/html && git status --porcelain 2>/dev/null | wc -l")); $results["consistency"] = [ "git_dirty" => $dirty, "l99_warn" => $results["l99_warn"], "wiki_ok" => $wiki_count > 0, "vault_ok" => $vault_count > 0 ]; $consistent = ($dirty == 0 && $results["l99_warn"] == 0 && $wiki_count > 0 && $vault_count > 0); $results["consistent"] = $consistent; // 7) Telegram alert if errors if ($errors > 0) { $fail_file = "/tmp/sync-fail-count"; $prev = (int)@file_get_contents($fail_file); $total = $prev + 1; file_put_contents($fail_file, $total); if ($total >= 3) { $msg = urlencode("SYNC-ALL: {$total} echecs consecutifs. Git={$results['git_hash']} L99={$results['l99_score']}"); @file_get_contents("https://api.telegram.org/bot8544624912:AAG_placeholder/sendMessage?chat_id=7605775322&text=$msg"); $results["telegram_alert"] = true; } } else { @file_put_contents("/tmp/sync-fail-count", "0"); } $results["errors"] = $errors; $results["ts"] = $ts; $results["version"] = "phase4-sync-exec-v1"; echo json_encode($results, JSON_PRETTY_PRINT);