{
  "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"
}
