1
0
Files
homelab-public-context/runtime/history/HOMELAB-DUPLICATE-FINGERPRINT-AUDIT-426.json
T
2026-07-24 09:36:36 +00:00

31 lines
18 KiB
JSON

{
"schema_version": 1,
"channel": "homelab-runtime",
"command_id": "HOMELAB-DUPLICATE-FINGERPRINT-AUDIT-426",
"status": "OK",
"rc": 0,
"host": "pve01",
"mode": "read-only",
"component": "cluster-audit",
"started_at_utc": "2026-07-24T09:36:35Z",
"finished_at_utc": "2026-07-24T09:36:35Z",
"reference_register_checked": true,
"reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e",
"error_register_checked": true,
"error_register_sha256": "08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752",
"command_sha256": "d95e5a9d8480b33605c127ce6ebdc688d05087f3c0afbdda7c3af1a5129a3d3c",
"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": "db73d9a0e67a6c8cdbb9fcb6ae3ee47c92879dc079fe115a8412abd39ef39ca4",
"sanitized_output_sha256": "b1ad62957baf7f8680f85ae10f1db94077a48c98e438dda3987b551f7a15cb13",
"output_truncated_in_json": false,
"full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt",
"output": "DETAIL=FILE=/usr/local/sbin/homelab-chat-run-linked\nDETAIL=SHA256=5e8725e129fd2055b36fe2fae13fc95fc4b3271074a0e0d4bb7347e7b2f270a1\nDETAIL=FILE=/usr/local/sbin/homelab-chat-run\nDETAIL=SHA256=2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9\nDETAIL=SOURCE=51- read-only|verify|change|transport-test)\nDETAIL=SOURCE=52- ;;\nDETAIL=SOURCE=53- *)\nDETAIL=SOURCE=54- echo 'RESULT=FAIL'\nDETAIL=SOURCE=55- echo 'REASON=INVALID_MODE'\nDETAIL=SOURCE=56- exit 67\nDETAIL=SOURCE=57- ;;\nDETAIL=SOURCE=58-esac\nDETAIL=SOURCE=59-\nDETAIL=SOURCE=60-for TOOL in \\\nDETAIL=SOURCE=61- awk \\\nDETAIL=SOURCE=62- curl \\\nDETAIL=SOURCE=63- flock \\\nDETAIL=SOURCE=64- python3 \\\nDETAIL=SOURCE=65- scp \\\nDETAIL=SOURCE=66: sha256sum \\\nDETAIL=SOURCE=67- ssh\nDETAIL=SOURCE=68-do\nDETAIL=SOURCE=69- command -v \"$TOOL\" >/dev/null 2>&1 || {\nDETAIL=SOURCE=70- echo 'RESULT=FAIL'\nDETAIL=SOURCE=71- echo \"REASON=REQUIRED_TOOL_MISSING:$TOOL\"\nDETAIL=SOURCE=72- exit 68\nDETAIL=SOURCE=73- }\nDETAIL=SOURCE=74-done\nDETAIL=SOURCE=75-\nDETAIL=SOURCE=76-REFERENCE=/etc/pve/31_HOMELAB_REFERENCE.md\nDETAIL=SOURCE=77-ERROR_REGISTER=/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\nDETAIL=SOURCE=78-\nDETAIL=SOURCE=79-[ -r \"$REFERENCE\" ] || {\nDETAIL=SOURCE=80- echo 'RESULT=FAIL'\nDETAIL=SOURCE=81- echo 'REASON=REFERENCE_NOT_READABLE'\nDETAIL=SOURCE=82- exit 69\nDETAIL=SOURCE=83-}\nDETAIL=SOURCE=84-\nDETAIL=SOURCE=85-[ -r \"$ERROR_REGISTER\" ] || {\nDETAIL=SOURCE=86- echo 'RESULT=FAIL'\nDETAIL=SOURCE=87- echo 'REASON=ERROR_REGISTER_NOT_READABLE'\nDETAIL=SOURCE=88- exit 70\nDETAIL=SOURCE=89-}\nDETAIL=SOURCE=90-\nDETAIL=SOURCE=91-STATE_DIR=/var/lib/homelab-chat-run\nDETAIL=SOURCE=92-RAW_DIR=\"$STATE_DIR/raw\"\nDETAIL=SOURCE=93-PUBLIC_DIR=\"$STATE_DIR/public\"\nDETAIL=SOURCE=94-LEDGER=\"$STATE_DIR/state/command-ledger.tsv\"\nDETAIL=SOURCE=95-LOCK=\"$STATE_DIR/state/runner.lock\"\nDETAIL=SOURCE=96-\nDETAIL=SOURCE=--\nDETAIL=SOURCE=104-flock -w 60 9 || {\nDETAIL=SOURCE=105- echo 'RESULT=FAIL'\nDETAIL=SOURCE=106- echo 'REASON=RUNNER_LOCK_TIMEOUT'\nDETAIL=SOURCE=107- exit 71\nDETAIL=SOURCE=108-}\nDETAIL=SOURCE=109-\nDETAIL=SOURCE=110-STARTED_AT=\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"\nDETAIL=SOURCE=111-STAMP=\"$(date -u +%Y%m%dT%H%M%SZ)\"\nDETAIL=SOURCE=112-HOST_SHORT=\"$(hostname -s 2>/dev/null || hostname)\"\nDETAIL=SOURCE=113-\nDETAIL=SOURCE=114-RAW_FILE=\"$RAW_DIR/${COMMAND_ID}-${STAMP}.log\"\nDETAIL=SOURCE=115-SANITIZED_FILE=\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}.txt\"\nDETAIL=SOURCE=116-JSON_FILE=\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}.json\"\nDETAIL=SOURCE=117-TXT_FILE=\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}-latest.txt\"\nDETAIL=SOURCE=118-\nDETAIL=SOURCE=119:REFERENCE_SHA256=\"$(sha256sum \"$REFERENCE\" | awk '{print $1}')\"\nDETAIL=SOURCE=120:ERROR_REGISTER_SHA256=\"$(sha256sum \"$ERROR_REGISTER\" | awk '{print $1}')\"\nDETAIL=SOURCE=121-\nDETAIL=SOURCE=122:COMMAND_SHA256=\"$(\nDETAIL=SOURCE=123- {\nDETAIL=SOURCE=124- printf '%s\\0' \"$MODE\"\nDETAIL=SOURCE=125- printf '%s\\0' \"$COMPONENT\"\nDETAIL=SOURCE=126- printf '%s\\0' \"$@\"\nDETAIL=SOURCE=127- } |\nDETAIL=SOURCE=128: sha256sum |\nDETAIL=SOURCE=129- awk '{print $1}'\nDETAIL=SOURCE=130-)\"\nDETAIL=SOURCE=131-\nDETAIL=SOURCE=132-PREVIOUS_FAILED_RC=\"$(\nDETAIL=SOURCE=133: awk -F '\\t' -v hash=\"$COMMAND_SHA256\" '\nDETAIL=SOURCE=134- $3 == hash && $4 != \"0\" {\nDETAIL=SOURCE=135- value=$4\nDETAIL=SOURCE=136- }\nDETAIL=SOURCE=137-\nDETAIL=SOURCE=138- END {\nDETAIL=SOURCE=139- print value\nDETAIL=SOURCE=140- }\nDETAIL=SOURCE=141- ' \"$LEDGER\"\nDETAIL=SOURCE=142-)\"\nDETAIL=SOURCE=143-\nDETAIL=SOURCE=144-RUN_STARTED=true\nDETAIL=SOURCE=145-REPEAT_BLOCKED=false\nDETAIL=SOURCE=146-BLOCK_REASON=''\nDETAIL=SOURCE=147-CHANGES_MADE=false\nDETAIL=SOURCE=148-\nDETAIL=SOURCE=149-case \"$MODE\" in\nDETAIL=SOURCE=150- change)\nDETAIL=SOURCE=151- CHANGES_MADE=true\nDETAIL=SOURCE=152- ;;\nDETAIL=SOURCE=153-esac\nDETAIL=SOURCE=154-\nDETAIL=SOURCE=155-if [ -n \"$PREVIOUS_FAILED_RC\" ] &&\nDETAIL=SOURCE=156- [ \"${HOMELAB_ALLOW_REPEAT:-0}\" != 1 ]; then\nDETAIL=SOURCE=157-\nDETAIL=SOURCE=158- RUN_STARTED=false\nDETAIL=SOURCE=159- REPEAT_BLOCKED=true\nDETAIL=SOURCE=160: BLOCK_REASON='EXACT_FAILED_COMMAND_REPEAT'\nDETAIL=SOURCE=161- RC=73\nDETAIL=SOURCE=162- STATUS='BLOCKED'\nDETAIL=SOURCE=163-\nDETAIL=SOURCE=164- {\nDETAIL=SOURCE=165- echo 'COMMAND_EXECUTION_BLOCKED=yes'\nDETAIL=SOURCE=166: echo 'REASON=EXACT_FAILED_COMMAND_REPEAT'\nDETAIL=SOURCE=167- echo \"PREVIOUS_RC=$PREVIOUS_FAILED_RC\"\nDETAIL=SOURCE=168: echo \"COMMAND_SHA256=$COMMAND_SHA256\"\nDETAIL=SOURCE=169- echo\nDETAIL=SOURCE=170- echo 'Set HOMELAB_ALLOW_REPEAT=1 only after reviewing the previous failure.'\nDETAIL=SOURCE=171- } >\"$RAW_FILE\"\nDETAIL=SOURCE=172-else\nDETAIL=SOURCE=173- set +e\nDETAIL=SOURCE=174-\nDETAIL=SOURCE=175- if [ -n \"${HOMELAB_TIMEOUT:-}\" ]; then\nDETAIL=SOURCE=176- case \"$HOMELAB_TIMEOUT\" in\nDETAIL=SOURCE=177- *[!0-9]*|'')\nDETAIL=SOURCE=178- echo 'RESULT=FAIL'\nDETAIL=SOURCE=179- echo 'REASON=INVALID_HOMELAB_TIMEOUT'\nDETAIL=SOURCE=180- exit 74\nDETAIL=SOURCE=181- ;;\nDETAIL=SOURCE=182- esac\nDETAIL=SOURCE=183-\nDETAIL=SOURCE=184- timeout \\\nDETAIL=SOURCE=185- --foreground \\\nDETAIL=SOURCE=186- --preserve-status \\\nDETAIL=SOURCE=187- \"$HOMELAB_TIMEOUT\" \\\nDETAIL=SOURCE=188- \"$@\" >\"$RAW_FILE\" 2>&1\nDETAIL=SOURCE=189- RC=$?\nDETAIL=SOURCE=190- else\nDETAIL=SOURCE=191- \"$@\" >\"$RAW_FILE\" 2>&1\nDETAIL=SOURCE=192- RC=$?\nDETAIL=SOURCE=193- fi\nDETAIL=SOURCE=194-\nDETAIL=SOURCE=195- set -e\nDETAIL=SOURCE=196-\nDETAIL=SOURCE=197- if [ \"$RC\" -eq 0 ]; then\nDETAIL=SOURCE=198- STATUS='OK'\nDETAIL=SOURCE=199- else\nDETAIL=SOURCE=200- STATUS='FAIL'\nDETAIL=SOURCE=201- fi\nDETAIL=SOURCE=202-fi\nDETAIL=SOURCE=203-\nDETAIL=SOURCE=204-FINISHED_AT=\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"\nDETAIL=SOURCE=205:RAW_SHA256=\"$(sha256sum \"$RAW_FILE\" | awk '{print $1}')\"\nDETAIL=SOURCE=206-\nDETAIL=SOURCE=207-python3 - \"$RAW_FILE\" \"$SANITIZED_FILE\" <<'PY'\nDETAIL=SOURCE=208-import re\nDETAIL=SOURCE=209-import sys\nDETAIL=SOURCE=210-from pathlib import Path\nDETAIL=SOURCE=211-\nDETAIL=SOURCE=212:source = Path(sys.argv[1])\nDETAIL=SOURCE=213:target = Path(sys.argv[2])\nDETAIL=SOURCE=214-\nDETAIL=SOURCE=215-text = source.read_bytes().decode(\"utf-8\", errors=\"replace\")\nDETAIL=SOURCE=216-\nDETAIL=SOURCE=217-patterns = [\nDETAIL=SOURCE=218- (\nDETAIL=SOURCE=219- re.compile(\nDETAIL=SOURCE=220- r\"-----BEGIN (?:RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----\"\nDETAIL=SOURCE=221- r\".*?\"\nDETAIL=SOURCE=222- r\"-----END (?:RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----\",\nDETAIL=SOURCE=223- re.IGNORECASE | re.DOTALL,\nDETAIL=SOURCE=224- ),\nDETAIL=SOURCE=225- \"[PRIVATE_KEY_REDACTED]\",\nDETAIL=SOURCE=226- ),\nDETAIL=SOURCE=227- (\nDETAIL=SOURCE=228- re.compile(\nDETAIL=SOURCE=229- r\"(?im)^(\\s*(?:password|passwd|passphrase|authorization|\"\nDETAIL=SOURCE=230- r\"api[_-]?key|access[_-]?token|refresh[_-]?token|\"\nDETAIL=SOURCE=231- r\"private[_-]?key|secret)\\s*[:=]\\s*).*$\"\nDETAIL=SOURCE=232- ),\nDETAIL=SOURCE=233- r\"\\1[REDACTED]\",\nDETAIL=SOURCE=234- ),\nDETAIL=SOURCE=235- (\nDETAIL=SOURCE=236- re.compile(r\"(?i)(Bearer\\s+)[A-Za-z0-9._~+/=-]+\"),\nDETAIL=SOURCE=237- r\"\\1[REDACTED]\",\nDETAIL=SOURCE=238- ),\nDETAIL=SOURCE=239- (\nDETAIL=SOURCE=240- re.compile(r\"\\b10(?:\\.\\d{1,3}){3}\\b\"),\nDETAIL=SOURCE=241- \"[PRIVATE_IP]\",\nDETAIL=SOURCE=242- ),\nDETAIL=SOURCE=243- (\nDETAIL=SOURCE=--\nDETAIL=SOURCE=294-if len(encoded) > maximum:\nDETAIL=SOURCE=295- first = encoded[:440_000].decode(\"utf-8\", errors=\"ignore\")\nDETAIL=SOURCE=296- last = encoded[-440_000:].decode(\"utf-8\", errors=\"ignore\")\nDETAIL=SOURCE=297-\nDETAIL=SOURCE=298- text = (\nDETAIL=SOURCE=299- first\nDETAIL=SOURCE=300- + \"\\n\\n\"\nDETAIL=SOURCE=301- + \"===== PUBLIC OUTPUT TRUNCATED; FULL RAW LOG RETAINED LOCALLY =====\"\nDETAIL=SOURCE=302- + \"\\n\\n\"\nDETAIL=SOURCE=303- + last\nDETAIL=SOURCE=304- )\nDETAIL=SOURCE=305-\nDETAIL=SOURCE=306-target.write_text(text, encoding=\"utf-8\")\nDETAIL=SOURCE=307-PY\nDETAIL=SOURCE=308-\nDETAIL=SOURCE=309:SANITIZED_SHA256=\"$(\nDETAIL=SOURCE=310: sha256sum \"$SANITIZED_FILE\" |\nDETAIL=SOURCE=311- awk '{print $1}'\nDETAIL=SOURCE=312-)\"\nDETAIL=SOURCE=313-\nDETAIL=SOURCE=314-python3 - \\\nDETAIL=SOURCE=315- \"$JSON_FILE\" \\\nDETAIL=SOURCE=316- \"$SANITIZED_FILE\" \\\nDETAIL=SOURCE=317- \"$COMMAND_ID\" \\\nDETAIL=SOURCE=318- \"$STATUS\" \\\nDETAIL=SOURCE=319- \"$RC\" \\\nDETAIL=SOURCE=320- \"$HOST_SHORT\" \\\nDETAIL=SOURCE=321- \"$MODE\" \\\nDETAIL=SOURCE=322- \"$COMPONENT\" \\\nDETAIL=SOURCE=323- \"$STARTED_AT\" \\\nDETAIL=SOURCE=324- \"$FINISHED_AT\" \\\nDETAIL=SOURCE=325: \"$REFERENCE_SHA256\" \\\nDETAIL=SOURCE=326: \"$ERROR_REGISTER_SHA256\" \\\nDETAIL=SOURCE=327: \"$COMMAND_SHA256\" \\\nDETAIL=SOURCE=328: \"$RAW_SHA256\" \\\nDETAIL=SOURCE=329: \"$SANITIZED_SHA256\" \\\nDETAIL=SOURCE=330- \"$RUN_STARTED\" \\\nDETAIL=SOURCE=331- \"$REPEAT_BLOCKED\" \\\nDETAIL=SOURCE=332- \"$BLOCK_REASON\" \\\nDETAIL=SOURCE=333- \"$CHANGES_MADE\" <<'PY'\nDETAIL=SOURCE=334-import json\nDETAIL=SOURCE=335-import sys\nDETAIL=SOURCE=336-from pathlib import Path\nDETAIL=SOURCE=337-\nDETAIL=SOURCE=338-(\nDETAIL=SOURCE=339- json_path,\nDETAIL=SOURCE=340- output_path,\nDETAIL=SOURCE=341- command_id,\nDETAIL=SOURCE=342- status,\nDETAIL=SOURCE=343- rc,\nDETAIL=SOURCE=344- host,\nDETAIL=SOURCE=345- mode,\nDETAIL=SOURCE=346- component,\nDETAIL=SOURCE=347- started,\nDETAIL=SOURCE=348- finished,\nDETAIL=SOURCE=349- reference_sha,\nDETAIL=SOURCE=350- error_sha,\nDETAIL=SOURCE=351- command_sha,\nDETAIL=SOURCE=352- raw_sha,\nDETAIL=SOURCE=353- sanitized_sha,\nDETAIL=SOURCE=354- run_started,\nDETAIL=SOURCE=355- repeat_blocked,\nDETAIL=SOURCE=356- block_reason,\nDETAIL=SOURCE=357- changes_made,\nDETAIL=SOURCE=358:) = sys.argv[1:]\nDETAIL=SOURCE=359-\nDETAIL=SOURCE=360-output = Path(output_path).read_text(\nDETAIL=SOURCE=361- encoding=\"utf-8\",\nDETAIL=SOURCE=362- errors=\"replace\",\nDETAIL=SOURCE=363-)\nDETAIL=SOURCE=364-\nDETAIL=SOURCE=365-encoded = output.encode(\"utf-8\")\nDETAIL=SOURCE=366-json_limit = 300_000\nDETAIL=SOURCE=367-output_truncated = len(encoded) > json_limit\nDETAIL=SOURCE=368-\nDETAIL=SOURCE=369-if output_truncated:\nDETAIL=SOURCE=370- output_preview = encoded[:json_limit].decode(\nDETAIL=SOURCE=371- \"utf-8\",\nDETAIL=SOURCE=372- errors=\"ignore\",\nDETAIL=SOURCE=373- )\nDETAIL=SOURCE=374-else:\nDETAIL=SOURCE=375- output_preview = output\nDETAIL=SOURCE=376-\nDETAIL=SOURCE=377-document = {\nDETAIL=SOURCE=378- \"schema_version\": 1,\nDETAIL=SOURCE=379- \"channel\": \"homelab-runtime\",\nDETAIL=SOURCE=380- \"command_id\": command_id,\nDETAIL=SOURCE=381- \"status\": status,\nDETAIL=SOURCE=382- \"rc\": int(rc),\nDETAIL=SOURCE=383- \"host\": host,\nDETAIL=SOURCE=384- \"mode\": mode,\nDETAIL=SOURCE=385- \"component\": component,\nDETAIL=SOURCE=386- \"started_at_utc\": started,\nDETAIL=SOURCE=387- \"finished_at_utc\": finished,\nDETAIL=SOURCE=388- \"reference_register_checked\": True,\nDETAIL=SOURCE=389: \"reference_sha256\": reference_sha,\nDETAIL=SOURCE=390- \"error_register_checked\": True,\nDETAIL=SOURCE=391: \"error_register_sha256\": error_sha,\nDETAIL=SOURCE=392: \"command_sha256\": command_sha,\nDETAIL=SOURCE=393: \"duplicate_failed_command_blocked\": repeat_blocked == \"true\",\nDETAIL=SOURCE=394- \"block_reason\": block_reason or None,\nDETAIL=SOURCE=395- \"execution_started\": run_started == \"true\",\nDETAIL=SOURCE=396- \"changes_made\": changes_made == \"true\",\nDETAIL=SOURCE=397- \"sanitized\": True,\nDETAIL=SOURCE=398- \"secrets_included\": False,\nDETAIL=SOURCE=399- \"private_addresses_included\": False,\nDETAIL=SOURCE=400- \"raw_evidence_retained_locally\": True,\nDETAIL=SOURCE=401: \"raw_evidence_sha256\": raw_sha,\nDETAIL=SOURCE=402: \"sanitized_output_sha256\": sanitized_sha,\nDETAIL=SOURCE=403- \"output_truncated_in_json\": output_truncated,\nDETAIL=SOURCE=404- \"full_sanitized_output_url\": (\nDETAIL=SOURCE=405- \"https://git.gram1.ru/.well-known/\"\nDETAIL=SOURCE=406- \"homelab-runtime/latest.txt\"\nDETAIL=SOURCE=407- ),\nDETAIL=SOURCE=408- \"output\": output_preview,\nDETAIL=SOURCE=409-}\nDETAIL=SOURCE=410-\nDETAIL=SOURCE=411-Path(json_path).write_text(\nDETAIL=SOURCE=412- json.dumps(\nDETAIL=SOURCE=413- document,\nDETAIL=SOURCE=414- ensure_ascii=False,\nDETAIL=SOURCE=415- indent=2,\nDETAIL=SOURCE=416- )\nDETAIL=SOURCE=417- + \"\\n\",\nDETAIL=SOURCE=418- encoding=\"utf-8\",\nDETAIL=SOURCE=419-)\nDETAIL=SOURCE=420-PY\nDETAIL=SOURCE=421-\nDETAIL=SOURCE=422-{\nDETAIL=SOURCE=423- echo 'CHAT_OUTPUT_BEGIN'\nDETAIL=SOURCE=424- echo \"COMMAND_ID=$COMMAND_ID\"\nDETAIL=SOURCE=425- echo \"STATUS=$STATUS\"\nDETAIL=SOURCE=426- echo \"RC=$RC\"\nDETAIL=SOURCE=427- echo \"HOST=$HOST_SHORT\"\nDETAIL=SOURCE=428- echo \"MODE=$MODE\"\nDETAIL=SOURCE=429- echo \"COMPONENT=$COMPONENT\"\nDETAIL=SOURCE=430- echo 'REFERENCE_REGISTER_CHECK=OK'\nDETAIL=SOURCE=431: echo \"REFERENCE_SHA256=$REFERENCE_SHA256\"\nDETAIL=SOURCE=432- echo 'ERROR_REGISTER_CHECK=OK'\nDETAIL=SOURCE=433: echo \"ERROR_REGISTER_SHA256=$ERROR_REGISTER_SHA256\"\nDETAIL=SOURCE=434: echo \"COMMAND_SHA256=$COMMAND_SHA256\"\nDETAIL=SOURCE=435: echo \"DUPLICATE_FAILED_COMMAND_BLOCKED=$REPEAT_BLOCKED\"\nDETAIL=SOURCE=436- echo \"EXECUTION_STARTED=$RUN_STARTED\"\nDETAIL=SOURCE=437- echo \"CHANGES_MADE=$CHANGES_MADE\"\nDETAIL=SOURCE=438- echo 'SANITIZED=yes'\nDETAIL=SOURCE=439- echo 'SECRETS_INCLUDED=no'\nDETAIL=SOURCE=440- echo 'PRIVATE_ADDRESSES_INCLUDED=no'\nDETAIL=SOURCE=441: echo \"RAW_EVIDENCE_SHA256=$RAW_SHA256\"\nDETAIL=SOURCE=442: echo \"SANITIZED_OUTPUT_SHA256=$SANITIZED_SHA256\"\nDETAIL=SOURCE=443- echo 'OUTPUT_BEGIN'\nDETAIL=SOURCE=444- cat \"$SANITIZED_FILE\"\nDETAIL=SOURCE=445- echo\nDETAIL=SOURCE=446- echo 'OUTPUT_END'\nDETAIL=SOURCE=447- echo 'CHAT_OUTPUT_END'\nDETAIL=SOURCE=448-} >\"$TXT_FILE\"\nDETAIL=SOURCE=449-\nDETAIL=SOURCE=450-chmod 0600 \\\nDETAIL=SOURCE=451- \"$RAW_FILE\" \\\nDETAIL=SOURCE=452- \"$SANITIZED_FILE\" \\\nDETAIL=SOURCE=453- \"$JSON_FILE\" \\\nDETAIL=SOURCE=454- \"$TXT_FILE\"\nDETAIL=SOURCE=455-\nDETAIL=SOURCE=456-TARGET=debian@[PRIVATE_IP]\nDETAIL=SOURCE=457-REMOTE_PREFIX=\"/tmp/homelab-runtime-${COMMAND_ID}-$$\"\nDETAIL=SOURCE=458-\nDETAIL=SOURCE=459-SSH_OPTS=(\nDETAIL=SOURCE=460- -o BatchMode=yes\nDETAIL=SOURCE=461- -o ConnectTimeout=10\nDETAIL=SOURCE=462- -o ConnectionAttempts=1\nDETAIL=SOURCE=463- -o StrictHostKeyChecking=yes\nDETAIL=SOURCE=464- -o UserKnownHostsFile=[SENSITIVE_PATH]\nDETAIL=SOURCE=465-)\nDETAIL=SOURCE=466-\nDETAIL=SOURCE=467-scp \\\nDETAIL=SOURCE=468- -q \\\nDETAIL=SOURCE=469- \"${SSH_OPTS[@]}\" \\\nDETAIL=SOURCE=470- \"$JSON_FILE\" \\\nDETAIL=SOURCE=471- \"${TARGET}:${REMOTE_PREFIX}.json\"\nDETAIL=SOURCE=472-\nDETAIL=SOURCE=--\nDETAIL=SOURCE=512-\nDETAIL=SOURCE=513- sleep 2\nDETAIL=SOURCE=514-done\nDETAIL=SOURCE=515-\nDETAIL=SOURCE=516-if [ \"$PUBLIC_VISIBLE\" != true ]; then\nDETAIL=SOURCE=517- echo 'RESULT=FAIL'\nDETAIL=SOURCE=518- echo 'REASON=PUBLIC_RUNTIME_RESULT_NOT_VISIBLE'\nDETAIL=SOURCE=519- echo \"COMMAND_ID=$COMMAND_ID\"\nDETAIL=SOURCE=520- echo \"LOCAL_RAW_FILE=$RAW_FILE\"\nDETAIL=SOURCE=521- exit 75\nDETAIL=SOURCE=522-fi\nDETAIL=SOURCE=523-\nDETAIL=SOURCE=524-printf '%s\\t%s\\t%s\\t%s\\t%s\\t%s\\n' \\\nDETAIL=SOURCE=525- \"$FINISHED_AT\" \\\nDETAIL=SOURCE=526- \"$COMMAND_ID\" \\\nDETAIL=SOURCE=527: \"$COMMAND_SHA256\" \\\nDETAIL=SOURCE=528- \"$RC\" \\\nDETAIL=SOURCE=529- \"$STATUS\" \\\nDETAIL=SOURCE=530- \"$COMPONENT\" >>\"$LEDGER\"\nDETAIL=SOURCE=531-\nDETAIL=SOURCE=532-echo\nDETAIL=SOURCE=533-echo '===== HOMELAB CHAT RUN COMPLETE ====='\nDETAIL=SOURCE=534-echo \"COMMAND_ID=$COMMAND_ID\"\nDETAIL=SOURCE=535-echo \"STATUS=$STATUS\"\nDETAIL=SOURCE=536-echo \"RC=$RC\"\nDETAIL=SOURCE=537-echo 'REFERENCE_REGISTER_CHECK=OK'\nDETAIL=SOURCE=538-echo 'ERROR_REGISTER_CHECK=OK'\nDETAIL=SOURCE=539:echo \"DUPLICATE_FAILED_COMMAND_BLOCKED=$REPEAT_BLOCKED\"\nDETAIL=SOURCE=540-echo 'GITEA_PUBLICATION=OK'\nDETAIL=SOURCE=541-echo \"PUBLIC_URL=$PUBLIC_URL\"\nDETAIL=SOURCE=542-echo \"LOCAL_RAW_FILE=$RAW_FILE\"\nDETAIL=SOURCE=543-echo 'SHELL_SESSION_PRESERVED=yes'\nDETAIL=SOURCE=544-\nDETAIL=SOURCE=545-exit \"$RC\"\nDETAIL=DUPLICATE_FINGERPRINT_AUDIT=PASS\nDETAIL=SECRET_VALUES_OUTPUT=NONE\nCHANGES_MADE=NO\n"
}