1
0

runtime: publish BACKUP-CAPACITY-RETENTION-MAP-228

This commit is contained in:
homelab-runtime-publisher
2026-07-22 17:11:40 +00:00
parent 6a45679dd1
commit e6971eb4b2
4 changed files with 178 additions and 32 deletions
@@ -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"
}
@@ -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
+7 -7
View File
@@ -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/<COMMAND_ID>.txt?ref=assistant-runtime\n\n1. Перед любой командой прочитай bootstrap и все указанные в нем entrypoints: полный контекст, справочник кластера, реестр ошибок, workflow contract и правило двойной проверки.\n2. Единственный источник истины — точный immutable-файл runtime/history/<COMMAND_ID>.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"
}
+60 -25
View File
@@ -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/<COMMAND_ID>.txt?ref=assistant-runtime
1. Перед любой командой прочитай bootstrap и все указанные в нем entrypoints: полный контекст, справочник кластера, реестр ошибок, workflow contract и правило двойной проверки.
2. Единственный источник истины — точный immutable-файл runtime/history/<COMMAND_ID>.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