From e6971eb4b25402ba470409f308dbf2507a7590de Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Wed, 22 Jul 2026 17:11:40 +0000 Subject: [PATCH] runtime: publish BACKUP-CAPACITY-RETENTION-MAP-228 --- .../BACKUP-CAPACITY-RETENTION-MAP-228.json | 30 +++++++ .../BACKUP-CAPACITY-RETENTION-MAP-228.txt | 81 ++++++++++++++++++ runtime/latest.json | 14 +-- runtime/latest.txt | 85 +++++++++++++------ 4 files changed, 178 insertions(+), 32 deletions(-) create mode 100644 runtime/history/BACKUP-CAPACITY-RETENTION-MAP-228.json create mode 100644 runtime/history/BACKUP-CAPACITY-RETENTION-MAP-228.txt diff --git a/runtime/history/BACKUP-CAPACITY-RETENTION-MAP-228.json b/runtime/history/BACKUP-CAPACITY-RETENTION-MAP-228.json new file mode 100644 index 0000000..a4c6558 --- /dev/null +++ b/runtime/history/BACKUP-CAPACITY-RETENTION-MAP-228.json @@ -0,0 +1,30 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "BACKUP-CAPACITY-RETENTION-MAP-228", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "cluster-audit", + "started_at_utc": "2026-07-22T17:11:39Z", + "finished_at_utc": "2026-07-22T17:11:39Z", + "reference_register_checked": true, + "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", + "error_register_checked": true, + "error_register_sha256": "08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752", + "command_sha256": "b5a05a18df011bdc06f8f5c2c36cd637a4a53375d2c3110197989e01989b0a08", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "changes_made": false, + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "3f2c4bf3f338a8422315f4ebec54c66708c0f6723af7c45df03ec30039a1cac4", + "sanitized_output_sha256": "3f2c4bf3f338a8422315f4ebec54c66708c0f6723af7c45df03ec30039a1cac4", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "PREVIOUS_COMMAND_ID=GITEA-RESULT-RESOLVER-SOURCE-225\n=== SCRIPT_RETENTION_LOGIC ===\n8:PARENT=/mnt/staging/vzdump\n9:PREFIX=vm160-pve02-\n26:DIR=\"$PARENT/${PREFIX}${TS}\"\n35: ssh \"${SSH[@]}\" \"$TARGET\" \"rm -rf -- '$DIR'\" >/dev/null 2>&1 || true\n39: mv \"$tmp\" \"$HEALTH\"\n41: rm -f \"$LOG\"\n45:REMOTE_FREE=\"$(ssh \"${SSH[@]}\" \"$TARGET\" \"df -B1 --output=avail '$PARENT' | awk 'NR==2{print \\$1}'\")\"\n46:LATEST_SIZE=\"$(ssh \"${SSH[@]}\" \"$TARGET\" \"find '$PARENT' -mindepth 2 -maxdepth 2 -type f -path '$PARENT/${PREFIX}*/vzdump-qemu-${VMID}-*.vma.zst' -printf '%s\\n' | sort -nr | head -n1\")\"\n47:LATEST_SIZE=\"${LATEST_SIZE:-0}\"\n48:if test \"$LATEST_SIZE\" -gt 0; then\n49: REQUIRED=\"$((LATEST_SIZE + LATEST_SIZE / 4 + 10737418240))\"\n56:target_worker finalize \"$PARENT\" \"$PREFIX\" \"$PART\" \"$FINAL\" \"$DIR\" \"$NAME\"\n60:target_worker promote \"$PARENT\" \"$PREFIX\" \"$DIR\" \"$TS\"\n62:printf 'STATUS=OK\\nSERVICE=homelab-vm160-remote-backup\\nTIMESTAMP_UTC=%s\\nVMID=%s\\nSOURCE_NODE=pve02\\nTARGET_NODE=pve03\\nTARGET_DIR=%s\\nARCHIVE=%s\\nSIZE_BYTES=%s\\nSHA256=%s\\nREMOTE_RETENTION_GENERATIONS=1\\n' \"$TS\" \"$VMID\" \"$DIR\" \"$FINAL\" \"$SIZE\" \"$SHA\" > \"$tmp\"\n64:mv \"$tmp\" \"$HEALTH\"\n66:rm -f \"$LOG\"\n=== REMOTE_CAPACITY_AND_ARTIFACTS ===\nFilesystem 1B-blocks Used Available Use% Mounted on\n/dev/mapper/pve-homelab--staging 210241560576 106855092224 92632272896 54% /mnt/staging\n1783817309.3122540920 auto-pve03-20260712T004427Z\n1784286547.3484750280 edge-vm-vzdump\n1784328679.0591299580 vm160-pve02-20260717T223819Z\n1784422327.0155434400 auto-pve03-20260719T004800Z\n84995222689\t/mnt/staging/vzdump/vm160-pve02-20260717T223819Z\n11043732678\t/mnt/staging/vzdump/auto-pve03-20260719T004800Z\n10813922479\t/mnt/staging/vzdump/auto-pve03-20260712T004427Z\n28\t/mnt/staging/vzdump/vm160-pve02-latest\n0\t/mnt/staging/vzdump/edge-vm-vzdump\n1783817309.2643368520 6327 /mnt/staging/vzdump/auto-pve03-20260712T004427Z/vzdump-qemu-130-2026_07_12-03_44_28.log\n1784328313.2842244630 84995216465 /mnt/staging/vzdump/vm160-pve02-20260717T223819Z/vzdump-qemu-160-20260717T223819Z.vma.zst\n1784328679.0601299610 6117 /mnt/staging/vzdump/vm160-pve02-20260717T223819Z/vzdump.log\n1784422326.9751430340 6332 /mnt/staging/vzdump/auto-pve03-20260719T004800Z/vzdump-qemu-130-2026_07_19-03_48_01.log\n=== CONFIG_REFERENCES ===\n/usr/local/sbin/homelab-vm160-remote-backup:8:PARENT=/mnt/staging/vzdump\n/usr/local/sbin/homelab-backup-edge-vm-vzdump:7:BASE_DIR=\"/mnt/staging/vzdump/edge-vm-vzdump\"\n/etc/homelab-backup-matrix/matrix.json:1102: \"/var/lib/homelab-backup-matrix/evidence/vm160_remote_backup/0-vm160-remote-backup.txt\"\n/etc/homelab-backup-matrix/matrix.json:1104: \"generated_health_output\": \"/var/lib/homelab-backup-matrix/rendered/vm160-remote-backup.txt\",\n/etc/homelab-backup-matrix/matrix.json:1105: \"id\": \"vm160_remote_backup\",\n/etc/homelab-backup-matrix/matrix.json:1107: \"/var/lib/homelab-health/vm160-remote-backup.txt\"\n/etc/homelab-backup-matrix/matrix.json:1111: \"name\": \"vm160-remote-backup\",\n/etc/homelab-backup-matrix/matrix.json:1112: \"service\": \"homelab-vm160-remote-backup.service\",\n/etc/homelab-backup-matrix/matrix.json:1114: \"timer\": \"homelab-vm160-remote-backup.timer\",\n/etc/homelab-backup-matrix/matrix.json:1116: \"/var/lib/homelab-health/vm160-remote-backup.txt\"\n/etc/systemd/system/homelab-vm160-remote-backup.timer:7:Unit=homelab-vm160-remote-backup.service\n/etc/systemd/system/homelab-vm160-remote-backup.service:9:ExecStart=/usr/local/sbin/homelab-vm160-remote-backup\n/usr/local/sbin/homelab-vm160-remote-backup:9:PREFIX=vm160-pve02-\n/usr/local/sbin/homelab-vm160-remote-backup:10:HEALTH=/var/lib/homelab-health/vm160-remote-backup.txt\n/usr/local/sbin/homelab-vm160-remote-backup:11:LOCK=/run/lock/homelab-vm160-remote-backup.lock\n/usr/local/sbin/homelab-vm160-remote-backup:13:TARGET_WORKER=/usr/local/libexec/homelab-vm160-target-worker\n/usr/local/sbin/homelab-vm160-remote-backup:30:LOG=\"$(mktemp /tmp/vm160-remote-backup.XXXXXX.log)\"\n/usr/local/sbin/homelab-vm160-remote-backup:37: printf 'STATUS=FAIL\\nSERVICE=homelab-vm160-remote-backup\\nTIMESTAMP_UTC=%s\\nVMID=%s\\nTARGET_DIR=%s\\nRC=%s\\n' \"$TS\" \"$VMID\" \"$DIR\" \"$rc\" > \"$tmp\"\n/usr/local/sbin/homelab-vm160-remote-backup:62:printf 'STATUS=OK\\nSERVICE=homelab-vm160-remote-backup\\nTIMESTAMP_UTC=%s\\nVMID=%s\\nSOURCE_NODE=pve02\\nTARGET_NODE=pve03\\nTARGET_DIR=%s\\nARCHIVE=%s\\nSIZE_BYTES=%s\\nSHA256=%s\\nREMOTE_RETENTION_GENERATIONS=1\\n' \"$TS\" \"$VMID\" \"$DIR\" \"$FINAL\" \"$SIZE\" \"$SHA\" > \"$tmp\"\n/usr/local/sbin/homelab-safe-exec:205: \"homelab-vm160-remote-backup.service\",\n/usr/local/sbin/homelab-safe-exec:211: \"homelab-vm160-remote-backup.timer\",\nCHANGES_MADE=NO\n" +} diff --git a/runtime/history/BACKUP-CAPACITY-RETENTION-MAP-228.txt b/runtime/history/BACKUP-CAPACITY-RETENTION-MAP-228.txt new file mode 100644 index 0000000..208f57c --- /dev/null +++ b/runtime/history/BACKUP-CAPACITY-RETENTION-MAP-228.txt @@ -0,0 +1,81 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=BACKUP-CAPACITY-RETENTION-MAP-228 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=cluster-audit +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752 +COMMAND_SHA256=b5a05a18df011bdc06f8f5c2c36cd637a4a53375d2c3110197989e01989b0a08 +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGES_MADE=false +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=3f2c4bf3f338a8422315f4ebec54c66708c0f6723af7c45df03ec30039a1cac4 +SANITIZED_OUTPUT_SHA256=3f2c4bf3f338a8422315f4ebec54c66708c0f6723af7c45df03ec30039a1cac4 +OUTPUT_BEGIN +PREVIOUS_COMMAND_ID=GITEA-RESULT-RESOLVER-SOURCE-225 +=== SCRIPT_RETENTION_LOGIC === +8:PARENT=/mnt/staging/vzdump +9:PREFIX=vm160-pve02- +26:DIR="$PARENT/${PREFIX}${TS}" +35: ssh "${SSH[@]}" "$TARGET" "rm -rf -- '$DIR'" >/dev/null 2>&1 || true +39: mv "$tmp" "$HEALTH" +41: rm -f "$LOG" +45:REMOTE_FREE="$(ssh "${SSH[@]}" "$TARGET" "df -B1 --output=avail '$PARENT' | awk 'NR==2{print \$1}'")" +46:LATEST_SIZE="$(ssh "${SSH[@]}" "$TARGET" "find '$PARENT' -mindepth 2 -maxdepth 2 -type f -path '$PARENT/${PREFIX}*/vzdump-qemu-${VMID}-*.vma.zst' -printf '%s\n' | sort -nr | head -n1")" +47:LATEST_SIZE="${LATEST_SIZE:-0}" +48:if test "$LATEST_SIZE" -gt 0; then +49: REQUIRED="$((LATEST_SIZE + LATEST_SIZE / 4 + 10737418240))" +56:target_worker finalize "$PARENT" "$PREFIX" "$PART" "$FINAL" "$DIR" "$NAME" +60:target_worker promote "$PARENT" "$PREFIX" "$DIR" "$TS" +62:printf 'STATUS=OK\nSERVICE=homelab-vm160-remote-backup\nTIMESTAMP_UTC=%s\nVMID=%s\nSOURCE_NODE=pve02\nTARGET_NODE=pve03\nTARGET_DIR=%s\nARCHIVE=%s\nSIZE_BYTES=%s\nSHA256=%s\nREMOTE_RETENTION_GENERATIONS=1\n' "$TS" "$VMID" "$DIR" "$FINAL" "$SIZE" "$SHA" > "$tmp" +64:mv "$tmp" "$HEALTH" +66:rm -f "$LOG" +=== REMOTE_CAPACITY_AND_ARTIFACTS === +Filesystem 1B-blocks Used Available Use% Mounted on +/dev/mapper/pve-homelab--staging 210241560576 106855092224 92632272896 54% /mnt/staging +1783817309.3122540920 auto-pve03-20260712T004427Z +1784286547.3484750280 edge-vm-vzdump +1784328679.0591299580 vm160-pve02-20260717T223819Z +1784422327.0155434400 auto-pve03-20260719T004800Z +84995222689 /mnt/staging/vzdump/vm160-pve02-20260717T223819Z +11043732678 /mnt/staging/vzdump/auto-pve03-20260719T004800Z +10813922479 /mnt/staging/vzdump/auto-pve03-20260712T004427Z +28 /mnt/staging/vzdump/vm160-pve02-latest +0 /mnt/staging/vzdump/edge-vm-vzdump +1783817309.2643368520 6327 /mnt/staging/vzdump/auto-pve03-20260712T004427Z/vzdump-qemu-130-2026_07_12-03_44_28.log +1784328313.2842244630 84995216465 /mnt/staging/vzdump/vm160-pve02-20260717T223819Z/vzdump-qemu-160-20260717T223819Z.vma.zst +1784328679.0601299610 6117 /mnt/staging/vzdump/vm160-pve02-20260717T223819Z/vzdump.log +1784422326.9751430340 6332 /mnt/staging/vzdump/auto-pve03-20260719T004800Z/vzdump-qemu-130-2026_07_19-03_48_01.log +=== CONFIG_REFERENCES === +/usr/local/sbin/homelab-vm160-remote-backup:8:PARENT=/mnt/staging/vzdump +/usr/local/sbin/homelab-backup-edge-vm-vzdump:7:BASE_DIR="/mnt/staging/vzdump/edge-vm-vzdump" +/etc/homelab-backup-matrix/matrix.json:1102: "/var/lib/homelab-backup-matrix/evidence/vm160_remote_backup/0-vm160-remote-backup.txt" +/etc/homelab-backup-matrix/matrix.json:1104: "generated_health_output": "/var/lib/homelab-backup-matrix/rendered/vm160-remote-backup.txt", +/etc/homelab-backup-matrix/matrix.json:1105: "id": "vm160_remote_backup", +/etc/homelab-backup-matrix/matrix.json:1107: "/var/lib/homelab-health/vm160-remote-backup.txt" +/etc/homelab-backup-matrix/matrix.json:1111: "name": "vm160-remote-backup", +/etc/homelab-backup-matrix/matrix.json:1112: "service": "homelab-vm160-remote-backup.service", +/etc/homelab-backup-matrix/matrix.json:1114: "timer": "homelab-vm160-remote-backup.timer", +/etc/homelab-backup-matrix/matrix.json:1116: "/var/lib/homelab-health/vm160-remote-backup.txt" +/etc/systemd/system/homelab-vm160-remote-backup.timer:7:Unit=homelab-vm160-remote-backup.service +/etc/systemd/system/homelab-vm160-remote-backup.service:9:ExecStart=/usr/local/sbin/homelab-vm160-remote-backup +/usr/local/sbin/homelab-vm160-remote-backup:9:PREFIX=vm160-pve02- +/usr/local/sbin/homelab-vm160-remote-backup:10:HEALTH=/var/lib/homelab-health/vm160-remote-backup.txt +/usr/local/sbin/homelab-vm160-remote-backup:11:LOCK=/run/lock/homelab-vm160-remote-backup.lock +/usr/local/sbin/homelab-vm160-remote-backup:13:TARGET_WORKER=/usr/local/libexec/homelab-vm160-target-worker +/usr/local/sbin/homelab-vm160-remote-backup:30:LOG="$(mktemp /tmp/vm160-remote-backup.XXXXXX.log)" +/usr/local/sbin/homelab-vm160-remote-backup:37: printf 'STATUS=FAIL\nSERVICE=homelab-vm160-remote-backup\nTIMESTAMP_UTC=%s\nVMID=%s\nTARGET_DIR=%s\nRC=%s\n' "$TS" "$VMID" "$DIR" "$rc" > "$tmp" +/usr/local/sbin/homelab-vm160-remote-backup:62:printf 'STATUS=OK\nSERVICE=homelab-vm160-remote-backup\nTIMESTAMP_UTC=%s\nVMID=%s\nSOURCE_NODE=pve02\nTARGET_NODE=pve03\nTARGET_DIR=%s\nARCHIVE=%s\nSIZE_BYTES=%s\nSHA256=%s\nREMOTE_RETENTION_GENERATIONS=1\n' "$TS" "$VMID" "$DIR" "$FINAL" "$SIZE" "$SHA" > "$tmp" +/usr/local/sbin/homelab-safe-exec:205: "homelab-vm160-remote-backup.service", +/usr/local/sbin/homelab-safe-exec:211: "homelab-vm160-remote-backup.timer", +CHANGES_MADE=NO + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 5bce44c..a4c6558 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "NEW-CHAT-PROTOCOL-V3-227", + "command_id": "BACKUP-CAPACITY-RETENTION-MAP-228", "status": "OK", "rc": 0, "host": "pve01", "mode": "read-only", "component": "cluster-audit", - "started_at_utc": "2026-07-22T17:03:51Z", - "finished_at_utc": "2026-07-22T17:03:51Z", + "started_at_utc": "2026-07-22T17:11:39Z", + "finished_at_utc": "2026-07-22T17:11:39Z", "reference_register_checked": true, "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", "error_register_checked": true, "error_register_sha256": "08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752", - "command_sha256": "3143d97dde09ed28be3296e125cbc82235fb30eba9d74d874f4ed2d8856c2f9d", + "command_sha256": "b5a05a18df011bdc06f8f5c2c36cd637a4a53375d2c3110197989e01989b0a08", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, @@ -22,9 +22,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "4b884e95ea78c74c8c9962e6080e95feebd2cdaca3919d884a51bbcfa5cdd367", - "sanitized_output_sha256": "4b884e95ea78c74c8c9962e6080e95feebd2cdaca3919d884a51bbcfa5cdd367", + "raw_evidence_sha256": "3f2c4bf3f338a8422315f4ebec54c66708c0f6723af7c45df03ec30039a1cac4", + "sanitized_output_sha256": "3f2c4bf3f338a8422315f4ebec54c66708c0f6723af7c45df03ec30039a1cac4", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "PROTOCOL_VERSION=3\nSTATUS=ACTIVE\nSUPERSEDES=NEW-CHAT-PROTOCOL-PUBLISH-20260722,NEW-CHAT-PROTOCOL-V2-226\nBOOTSTRAP_URL=https://git.gram1.ru/.well-known/homelab-bootstrap.json\nRESULT_API_TEMPLATE=https://git.gram1.ru/api/v1/repos/homelab-admin/homelab-public-context/contents/runtime/history/.txt?ref=assistant-runtime\n\n1. Перед любой командой прочитай bootstrap и все указанные в нем entrypoints: полный контекст, справочник кластера, реестр ошибок, workflow contract и правило двойной проверки.\n2. Единственный источник истины — точный immutable-файл runtime/history/.txt. latest.json и latest.txt запрещены как подтверждение результата.\n3. Для команды различай состояния ISSUED, CONFIRMED_BY_USER и READ_IN_GITEA. Точка, запятая или обратная косая черта от пользователя означают, что последняя выданная команда уже выполнена и находится в состоянии CONFIRMED_BY_USER. Не отменяй, не повторяй и не объявляй ее невыполненной.\n4. После каждого спойлера обязательно печатай точный RESULT_API_URL с фактическим COMMAND_ID. После подтверждения пользователя открывай именно этот URL из предыдущего ответа.\n5. Из Gitea Contents API прочитай path, last_commit_sha, encoding, content, download_url и html_url. При encoding=base64 декодируй content. Обязательно проверь COMMAND_ID, STATUS, RC, HOST, MODE, COMPONENT, REFERENCE_REGISTER_CHECK, ERROR_REGISTER_CHECK, EXECUTION_STARTED, CHANGES_MADE и весь блок OUTPUT_BEGIN-OUTPUT_END.\n6. HTML-каталог, HTML-history, Branches, старый кэш, Internal Error, raw-ошибка и URL is not safe to open не доказывают отсутствие результата. Не создавай relay-команды и не диагностируй сбой runner или publisher только из-за ошибки собственного веб-инструмента.\n7. Если точный API URL временно не прочитан, повторно проверь этот же COMMAND_ID через API или поиск Gitea. Не выдавай новую инфраструктурную команду и не выдумывай результат.\n8. Footer runner с COMMAND_ID, COMMIT_SHA и GITEA_PUBLICATION=OK подтверждает выполнение и публикацию. Не противоречь ему по данным устаревшей HTML-страницы. Содержимое результата всё равно читай из immutable-файла.\n9. Перед следующей командой зарегистрируй фактические ошибки, сверь их со справочником и реестром, дважды проверь узел, пользователя, sudo, пути, интерпретатор, режим, риск и откат.\n10. Выдавай ровно одну команду только внутри HTML details-спойлера. Не добавляй sudo автоматически. Запрещены heredoc, base64-команды, слепые перезапуски, неподтверждённые удаления, секреты и повтор уже выполненной либо провалившейся команды.\n11. Перед командой пиши: Сверка с файлом ошибок и справочником кластера: CHECK пройден. Перед спойлером пиши: Что делаем. Сразу после спойлера печатай RESULT_API_URL. Следующей строкой пиши: Всего команд осталось: N, включая эту.\n12. После подтверждения пользователя сам прочитай точный результат, проанализируй его и сразу продолжи следующей проверенной командой. Не проси пользователя копировать терминальный вывод.\n\nCOMMANDS_ALREADY_EXECUTED=BACKUP-CAPACITY-CANDIDATES-224,GITEA-RESULT-RESOLVER-SOURCE-225\nMALFORMED_NOT_EXECUTED=NEW-CHAT-PROTOCOL-V2-226\nCHANGES_MADE=NO\n" + "output": "PREVIOUS_COMMAND_ID=GITEA-RESULT-RESOLVER-SOURCE-225\n=== SCRIPT_RETENTION_LOGIC ===\n8:PARENT=/mnt/staging/vzdump\n9:PREFIX=vm160-pve02-\n26:DIR=\"$PARENT/${PREFIX}${TS}\"\n35: ssh \"${SSH[@]}\" \"$TARGET\" \"rm -rf -- '$DIR'\" >/dev/null 2>&1 || true\n39: mv \"$tmp\" \"$HEALTH\"\n41: rm -f \"$LOG\"\n45:REMOTE_FREE=\"$(ssh \"${SSH[@]}\" \"$TARGET\" \"df -B1 --output=avail '$PARENT' | awk 'NR==2{print \\$1}'\")\"\n46:LATEST_SIZE=\"$(ssh \"${SSH[@]}\" \"$TARGET\" \"find '$PARENT' -mindepth 2 -maxdepth 2 -type f -path '$PARENT/${PREFIX}*/vzdump-qemu-${VMID}-*.vma.zst' -printf '%s\\n' | sort -nr | head -n1\")\"\n47:LATEST_SIZE=\"${LATEST_SIZE:-0}\"\n48:if test \"$LATEST_SIZE\" -gt 0; then\n49: REQUIRED=\"$((LATEST_SIZE + LATEST_SIZE / 4 + 10737418240))\"\n56:target_worker finalize \"$PARENT\" \"$PREFIX\" \"$PART\" \"$FINAL\" \"$DIR\" \"$NAME\"\n60:target_worker promote \"$PARENT\" \"$PREFIX\" \"$DIR\" \"$TS\"\n62:printf 'STATUS=OK\\nSERVICE=homelab-vm160-remote-backup\\nTIMESTAMP_UTC=%s\\nVMID=%s\\nSOURCE_NODE=pve02\\nTARGET_NODE=pve03\\nTARGET_DIR=%s\\nARCHIVE=%s\\nSIZE_BYTES=%s\\nSHA256=%s\\nREMOTE_RETENTION_GENERATIONS=1\\n' \"$TS\" \"$VMID\" \"$DIR\" \"$FINAL\" \"$SIZE\" \"$SHA\" > \"$tmp\"\n64:mv \"$tmp\" \"$HEALTH\"\n66:rm -f \"$LOG\"\n=== REMOTE_CAPACITY_AND_ARTIFACTS ===\nFilesystem 1B-blocks Used Available Use% Mounted on\n/dev/mapper/pve-homelab--staging 210241560576 106855092224 92632272896 54% /mnt/staging\n1783817309.3122540920 auto-pve03-20260712T004427Z\n1784286547.3484750280 edge-vm-vzdump\n1784328679.0591299580 vm160-pve02-20260717T223819Z\n1784422327.0155434400 auto-pve03-20260719T004800Z\n84995222689\t/mnt/staging/vzdump/vm160-pve02-20260717T223819Z\n11043732678\t/mnt/staging/vzdump/auto-pve03-20260719T004800Z\n10813922479\t/mnt/staging/vzdump/auto-pve03-20260712T004427Z\n28\t/mnt/staging/vzdump/vm160-pve02-latest\n0\t/mnt/staging/vzdump/edge-vm-vzdump\n1783817309.2643368520 6327 /mnt/staging/vzdump/auto-pve03-20260712T004427Z/vzdump-qemu-130-2026_07_12-03_44_28.log\n1784328313.2842244630 84995216465 /mnt/staging/vzdump/vm160-pve02-20260717T223819Z/vzdump-qemu-160-20260717T223819Z.vma.zst\n1784328679.0601299610 6117 /mnt/staging/vzdump/vm160-pve02-20260717T223819Z/vzdump.log\n1784422326.9751430340 6332 /mnt/staging/vzdump/auto-pve03-20260719T004800Z/vzdump-qemu-130-2026_07_19-03_48_01.log\n=== CONFIG_REFERENCES ===\n/usr/local/sbin/homelab-vm160-remote-backup:8:PARENT=/mnt/staging/vzdump\n/usr/local/sbin/homelab-backup-edge-vm-vzdump:7:BASE_DIR=\"/mnt/staging/vzdump/edge-vm-vzdump\"\n/etc/homelab-backup-matrix/matrix.json:1102: \"/var/lib/homelab-backup-matrix/evidence/vm160_remote_backup/0-vm160-remote-backup.txt\"\n/etc/homelab-backup-matrix/matrix.json:1104: \"generated_health_output\": \"/var/lib/homelab-backup-matrix/rendered/vm160-remote-backup.txt\",\n/etc/homelab-backup-matrix/matrix.json:1105: \"id\": \"vm160_remote_backup\",\n/etc/homelab-backup-matrix/matrix.json:1107: \"/var/lib/homelab-health/vm160-remote-backup.txt\"\n/etc/homelab-backup-matrix/matrix.json:1111: \"name\": \"vm160-remote-backup\",\n/etc/homelab-backup-matrix/matrix.json:1112: \"service\": \"homelab-vm160-remote-backup.service\",\n/etc/homelab-backup-matrix/matrix.json:1114: \"timer\": \"homelab-vm160-remote-backup.timer\",\n/etc/homelab-backup-matrix/matrix.json:1116: \"/var/lib/homelab-health/vm160-remote-backup.txt\"\n/etc/systemd/system/homelab-vm160-remote-backup.timer:7:Unit=homelab-vm160-remote-backup.service\n/etc/systemd/system/homelab-vm160-remote-backup.service:9:ExecStart=/usr/local/sbin/homelab-vm160-remote-backup\n/usr/local/sbin/homelab-vm160-remote-backup:9:PREFIX=vm160-pve02-\n/usr/local/sbin/homelab-vm160-remote-backup:10:HEALTH=/var/lib/homelab-health/vm160-remote-backup.txt\n/usr/local/sbin/homelab-vm160-remote-backup:11:LOCK=/run/lock/homelab-vm160-remote-backup.lock\n/usr/local/sbin/homelab-vm160-remote-backup:13:TARGET_WORKER=/usr/local/libexec/homelab-vm160-target-worker\n/usr/local/sbin/homelab-vm160-remote-backup:30:LOG=\"$(mktemp /tmp/vm160-remote-backup.XXXXXX.log)\"\n/usr/local/sbin/homelab-vm160-remote-backup:37: printf 'STATUS=FAIL\\nSERVICE=homelab-vm160-remote-backup\\nTIMESTAMP_UTC=%s\\nVMID=%s\\nTARGET_DIR=%s\\nRC=%s\\n' \"$TS\" \"$VMID\" \"$DIR\" \"$rc\" > \"$tmp\"\n/usr/local/sbin/homelab-vm160-remote-backup:62:printf 'STATUS=OK\\nSERVICE=homelab-vm160-remote-backup\\nTIMESTAMP_UTC=%s\\nVMID=%s\\nSOURCE_NODE=pve02\\nTARGET_NODE=pve03\\nTARGET_DIR=%s\\nARCHIVE=%s\\nSIZE_BYTES=%s\\nSHA256=%s\\nREMOTE_RETENTION_GENERATIONS=1\\n' \"$TS\" \"$VMID\" \"$DIR\" \"$FINAL\" \"$SIZE\" \"$SHA\" > \"$tmp\"\n/usr/local/sbin/homelab-safe-exec:205: \"homelab-vm160-remote-backup.service\",\n/usr/local/sbin/homelab-safe-exec:211: \"homelab-vm160-remote-backup.timer\",\nCHANGES_MADE=NO\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index b46cf94..208f57c 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,5 +1,5 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=NEW-CHAT-PROTOCOL-V3-227 +COMMAND_ID=BACKUP-CAPACITY-RETENTION-MAP-228 STATUS=OK RC=0 HOST=pve01 @@ -9,37 +9,72 @@ REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752 -COMMAND_SHA256=3143d97dde09ed28be3296e125cbc82235fb30eba9d74d874f4ed2d8856c2f9d +COMMAND_SHA256=b5a05a18df011bdc06f8f5c2c36cd637a4a53375d2c3110197989e01989b0a08 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGES_MADE=false SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=4b884e95ea78c74c8c9962e6080e95feebd2cdaca3919d884a51bbcfa5cdd367 -SANITIZED_OUTPUT_SHA256=4b884e95ea78c74c8c9962e6080e95feebd2cdaca3919d884a51bbcfa5cdd367 +RAW_EVIDENCE_SHA256=3f2c4bf3f338a8422315f4ebec54c66708c0f6723af7c45df03ec30039a1cac4 +SANITIZED_OUTPUT_SHA256=3f2c4bf3f338a8422315f4ebec54c66708c0f6723af7c45df03ec30039a1cac4 OUTPUT_BEGIN -PROTOCOL_VERSION=3 -STATUS=ACTIVE -SUPERSEDES=NEW-CHAT-PROTOCOL-PUBLISH-20260722,NEW-CHAT-PROTOCOL-V2-226 -BOOTSTRAP_URL=https://git.gram1.ru/.well-known/homelab-bootstrap.json -RESULT_API_TEMPLATE=https://git.gram1.ru/api/v1/repos/homelab-admin/homelab-public-context/contents/runtime/history/.txt?ref=assistant-runtime - -1. Перед любой командой прочитай bootstrap и все указанные в нем entrypoints: полный контекст, справочник кластера, реестр ошибок, workflow contract и правило двойной проверки. -2. Единственный источник истины — точный immutable-файл runtime/history/.txt. latest.json и latest.txt запрещены как подтверждение результата. -3. Для команды различай состояния ISSUED, CONFIRMED_BY_USER и READ_IN_GITEA. Точка, запятая или обратная косая черта от пользователя означают, что последняя выданная команда уже выполнена и находится в состоянии CONFIRMED_BY_USER. Не отменяй, не повторяй и не объявляй ее невыполненной. -4. После каждого спойлера обязательно печатай точный RESULT_API_URL с фактическим COMMAND_ID. После подтверждения пользователя открывай именно этот URL из предыдущего ответа. -5. Из Gitea Contents API прочитай path, last_commit_sha, encoding, content, download_url и html_url. При encoding=base64 декодируй content. Обязательно проверь COMMAND_ID, STATUS, RC, HOST, MODE, COMPONENT, REFERENCE_REGISTER_CHECK, ERROR_REGISTER_CHECK, EXECUTION_STARTED, CHANGES_MADE и весь блок OUTPUT_BEGIN-OUTPUT_END. -6. HTML-каталог, HTML-history, Branches, старый кэш, Internal Error, raw-ошибка и URL is not safe to open не доказывают отсутствие результата. Не создавай relay-команды и не диагностируй сбой runner или publisher только из-за ошибки собственного веб-инструмента. -7. Если точный API URL временно не прочитан, повторно проверь этот же COMMAND_ID через API или поиск Gitea. Не выдавай новую инфраструктурную команду и не выдумывай результат. -8. Footer runner с COMMAND_ID, COMMIT_SHA и GITEA_PUBLICATION=OK подтверждает выполнение и публикацию. Не противоречь ему по данным устаревшей HTML-страницы. Содержимое результата всё равно читай из immutable-файла. -9. Перед следующей командой зарегистрируй фактические ошибки, сверь их со справочником и реестром, дважды проверь узел, пользователя, sudo, пути, интерпретатор, режим, риск и откат. -10. Выдавай ровно одну команду только внутри HTML details-спойлера. Не добавляй sudo автоматически. Запрещены heredoc, base64-команды, слепые перезапуски, неподтверждённые удаления, секреты и повтор уже выполненной либо провалившейся команды. -11. Перед командой пиши: Сверка с файлом ошибок и справочником кластера: CHECK пройден. Перед спойлером пиши: Что делаем. Сразу после спойлера печатай RESULT_API_URL. Следующей строкой пиши: Всего команд осталось: N, включая эту. -12. После подтверждения пользователя сам прочитай точный результат, проанализируй его и сразу продолжи следующей проверенной командой. Не проси пользователя копировать терминальный вывод. - -COMMANDS_ALREADY_EXECUTED=BACKUP-CAPACITY-CANDIDATES-224,GITEA-RESULT-RESOLVER-SOURCE-225 -MALFORMED_NOT_EXECUTED=NEW-CHAT-PROTOCOL-V2-226 +PREVIOUS_COMMAND_ID=GITEA-RESULT-RESOLVER-SOURCE-225 +=== SCRIPT_RETENTION_LOGIC === +8:PARENT=/mnt/staging/vzdump +9:PREFIX=vm160-pve02- +26:DIR="$PARENT/${PREFIX}${TS}" +35: ssh "${SSH[@]}" "$TARGET" "rm -rf -- '$DIR'" >/dev/null 2>&1 || true +39: mv "$tmp" "$HEALTH" +41: rm -f "$LOG" +45:REMOTE_FREE="$(ssh "${SSH[@]}" "$TARGET" "df -B1 --output=avail '$PARENT' | awk 'NR==2{print \$1}'")" +46:LATEST_SIZE="$(ssh "${SSH[@]}" "$TARGET" "find '$PARENT' -mindepth 2 -maxdepth 2 -type f -path '$PARENT/${PREFIX}*/vzdump-qemu-${VMID}-*.vma.zst' -printf '%s\n' | sort -nr | head -n1")" +47:LATEST_SIZE="${LATEST_SIZE:-0}" +48:if test "$LATEST_SIZE" -gt 0; then +49: REQUIRED="$((LATEST_SIZE + LATEST_SIZE / 4 + 10737418240))" +56:target_worker finalize "$PARENT" "$PREFIX" "$PART" "$FINAL" "$DIR" "$NAME" +60:target_worker promote "$PARENT" "$PREFIX" "$DIR" "$TS" +62:printf 'STATUS=OK\nSERVICE=homelab-vm160-remote-backup\nTIMESTAMP_UTC=%s\nVMID=%s\nSOURCE_NODE=pve02\nTARGET_NODE=pve03\nTARGET_DIR=%s\nARCHIVE=%s\nSIZE_BYTES=%s\nSHA256=%s\nREMOTE_RETENTION_GENERATIONS=1\n' "$TS" "$VMID" "$DIR" "$FINAL" "$SIZE" "$SHA" > "$tmp" +64:mv "$tmp" "$HEALTH" +66:rm -f "$LOG" +=== REMOTE_CAPACITY_AND_ARTIFACTS === +Filesystem 1B-blocks Used Available Use% Mounted on +/dev/mapper/pve-homelab--staging 210241560576 106855092224 92632272896 54% /mnt/staging +1783817309.3122540920 auto-pve03-20260712T004427Z +1784286547.3484750280 edge-vm-vzdump +1784328679.0591299580 vm160-pve02-20260717T223819Z +1784422327.0155434400 auto-pve03-20260719T004800Z +84995222689 /mnt/staging/vzdump/vm160-pve02-20260717T223819Z +11043732678 /mnt/staging/vzdump/auto-pve03-20260719T004800Z +10813922479 /mnt/staging/vzdump/auto-pve03-20260712T004427Z +28 /mnt/staging/vzdump/vm160-pve02-latest +0 /mnt/staging/vzdump/edge-vm-vzdump +1783817309.2643368520 6327 /mnt/staging/vzdump/auto-pve03-20260712T004427Z/vzdump-qemu-130-2026_07_12-03_44_28.log +1784328313.2842244630 84995216465 /mnt/staging/vzdump/vm160-pve02-20260717T223819Z/vzdump-qemu-160-20260717T223819Z.vma.zst +1784328679.0601299610 6117 /mnt/staging/vzdump/vm160-pve02-20260717T223819Z/vzdump.log +1784422326.9751430340 6332 /mnt/staging/vzdump/auto-pve03-20260719T004800Z/vzdump-qemu-130-2026_07_19-03_48_01.log +=== CONFIG_REFERENCES === +/usr/local/sbin/homelab-vm160-remote-backup:8:PARENT=/mnt/staging/vzdump +/usr/local/sbin/homelab-backup-edge-vm-vzdump:7:BASE_DIR="/mnt/staging/vzdump/edge-vm-vzdump" +/etc/homelab-backup-matrix/matrix.json:1102: "/var/lib/homelab-backup-matrix/evidence/vm160_remote_backup/0-vm160-remote-backup.txt" +/etc/homelab-backup-matrix/matrix.json:1104: "generated_health_output": "/var/lib/homelab-backup-matrix/rendered/vm160-remote-backup.txt", +/etc/homelab-backup-matrix/matrix.json:1105: "id": "vm160_remote_backup", +/etc/homelab-backup-matrix/matrix.json:1107: "/var/lib/homelab-health/vm160-remote-backup.txt" +/etc/homelab-backup-matrix/matrix.json:1111: "name": "vm160-remote-backup", +/etc/homelab-backup-matrix/matrix.json:1112: "service": "homelab-vm160-remote-backup.service", +/etc/homelab-backup-matrix/matrix.json:1114: "timer": "homelab-vm160-remote-backup.timer", +/etc/homelab-backup-matrix/matrix.json:1116: "/var/lib/homelab-health/vm160-remote-backup.txt" +/etc/systemd/system/homelab-vm160-remote-backup.timer:7:Unit=homelab-vm160-remote-backup.service +/etc/systemd/system/homelab-vm160-remote-backup.service:9:ExecStart=/usr/local/sbin/homelab-vm160-remote-backup +/usr/local/sbin/homelab-vm160-remote-backup:9:PREFIX=vm160-pve02- +/usr/local/sbin/homelab-vm160-remote-backup:10:HEALTH=/var/lib/homelab-health/vm160-remote-backup.txt +/usr/local/sbin/homelab-vm160-remote-backup:11:LOCK=/run/lock/homelab-vm160-remote-backup.lock +/usr/local/sbin/homelab-vm160-remote-backup:13:TARGET_WORKER=/usr/local/libexec/homelab-vm160-target-worker +/usr/local/sbin/homelab-vm160-remote-backup:30:LOG="$(mktemp /tmp/vm160-remote-backup.XXXXXX.log)" +/usr/local/sbin/homelab-vm160-remote-backup:37: printf 'STATUS=FAIL\nSERVICE=homelab-vm160-remote-backup\nTIMESTAMP_UTC=%s\nVMID=%s\nTARGET_DIR=%s\nRC=%s\n' "$TS" "$VMID" "$DIR" "$rc" > "$tmp" +/usr/local/sbin/homelab-vm160-remote-backup:62:printf 'STATUS=OK\nSERVICE=homelab-vm160-remote-backup\nTIMESTAMP_UTC=%s\nVMID=%s\nSOURCE_NODE=pve02\nTARGET_NODE=pve03\nTARGET_DIR=%s\nARCHIVE=%s\nSIZE_BYTES=%s\nSHA256=%s\nREMOTE_RETENTION_GENERATIONS=1\n' "$TS" "$VMID" "$DIR" "$FINAL" "$SIZE" "$SHA" > "$tmp" +/usr/local/sbin/homelab-safe-exec:205: "homelab-vm160-remote-backup.service", +/usr/local/sbin/homelab-safe-exec:211: "homelab-vm160-remote-backup.timer", CHANGES_MADE=NO OUTPUT_END