{ "schema_version": 1, "channel": "homelab-runtime", "command_id": "SUPPORT-260921-HOMELAB-BACKUP-V2-WRAPPER-TOPOLOGY-READONLY-1010R1", "status": "OK", "rc": 0, "host": "pve01", "mode": "read-only", "component": "homelab-backup-v2-wrapper-topology", "started_at_utc": "2026-09-21T01:32:18Z", "finished_at_utc": "2026-09-21T01:32:18Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", "command_sha256": "5e5fdf246ba93cf69bd15007c0f7841be1336d6804b8f438fcd8c9cdc2fb7777", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, "change_declared": false, "result_contract_valid": true, "result_contract_status": null, "result_contract_error": null, "command_rc": 0, "changes_made": false, "rollback_started": false, "rollback_restored": null, "mutation_outcome": "NO_MUTATION", "sanitized": true, "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, "raw_evidence_sha256": "6bc6bee22d47b1f894187fc6de7668c0043a3a7c662da9f032ed015b6c3a35df", "sanitized_output_sha256": "6bc6bee22d47b1f894187fc6de7668c0043a3a7c662da9f032ed015b6c3a35df", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", "output": "WORKERS2_BACKUP_V2_WRAPPER_TOPOLOGY_BEGIN=1\nCOMMAND_ID=SUPPORT-260921-HOMELAB-BACKUP-V2-WRAPPER-TOPOLOGY-READONLY-1010R1\nMODE=read-only\nCOMPONENT=homelab-backup-v2-wrapper-topology\nHOST=pve01\nUID=0\nMUTATION_BOUNDARY=READ_ONLY_NO_FETCH_NO_WRITE_NO_SERVICE_ACTION_NO_BACKUP_NO_RESTORE_NO_RETENTION_NO_DELETE_NO_MAIL\nBASELINE_WRAPPER={\"bytes\":1656,\"line_count\":26,\"path\":\"/root/homelab-ops-cr-2026-1005/tasks/backup-v2-health-alerting-remediation-v1/assets/baseline/homelab-backup-v2\",\"sha256\":\"5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2\"}\nLIVE_WRAPPER={\"bytes\":1656,\"exists\":true,\"matches_baseline\":true,\"sha256\":\"5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2\"}\nWRAPPER_STRUCTURAL_LINES=[{\"line\":1,\"sha256\":\"b8e3eb3a9453a6029acccdb951bd492355329b651710c125505dc3bdd93e2dda\",\"text\":\"#!/usr/bin/python3\"},{\"line\":2,\"sha256\":\"a6284e6d3d43bdfbf0da732945adb2b4f31147c92bea47aee100d7f556c22d00\",\"text\":\"from __future__ import annotations\"},{\"line\":3,\"sha256\":\"d57b832dfc7acf24f005d35dc8899167b4a24174254f82c3ab1613c6fef08a9c\",\"text\":\"import hashlib, importlib, os, pathlib, stat, sys\"},{\"line\":4,\"sha256\":\"17400810c4582ee38c329bddfd08f1e890bd051b71d7d96fb9d06a05b0fdd49c\",\"text\":\"ACCEPTED=pathlib.Path('/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b')\"},{\"line\":5,\"sha256\":\"52c13f181fdac27c548266b89ea785484b7332cb2fe88bdc6f3f8a650d808154\",\"text\":\"EXPECTED={'fresh_lxc_helper.py': 'dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011', 'producer_exec_helper.py': 'b3b97099bcd7126670f866e81faae6a42a96d869d9989e6a67f6ea6c871c90b3', 'lxc_adapter.py': '3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d', 'qemu_adapter.py': '1906db42bd34bbe85eb46fd9797b3572d46e0a41c29d1c29be5f9df5e448f15b', 'scheduler_adapter.py': 'a6f67159a64067773323f028126e3109e15cf17a8142cea5e6129970f1d4da96', 'entry504.py': 'ca6876fa9c3b1465b045344a8ad46962de16972c7dadc4ac6257c7d225047793'}\"},{\"line\":6,\"sha256\":\"53899176cd1c7bf5ff0ed1858bb5559fe73b3f583f503f5e38bde6235585b41b\",\"text\":\"def sha(p):\"},{\"line\":7,\"sha256\":\"6f05a753872e4a9d008a43f3131f07c93f0cf02ca80dd73628c8706244200664\",\"text\":\" h=hashlib.sha256()\"},{\"line\":8,\"sha256\":\"30997ff7b356f45d65ef1c5187f82f2e6141f93da71b38c59fe2c4c5e1e7f7d8\",\"text\":\" with open(p,'rb',buffering=0) as f:\"},{\"line\":9,\"sha256\":\"23658886042f84f880741d8725dcf0154bc118892bc6d91addfdf6e53d5a2cdc\",\"text\":\" while True:\"},{\"line\":10,\"sha256\":\"1b0070a369fbe1210497b72433a6fb37cf1571221e660d1ea2f4d6bdaa6d85ad\",\"text\":\" b=f.read(1048576)\"},{\"line\":11,\"sha256\":\"59298bba03fc4a48910e101eba38bd90228cf134c395434b745955b079b40142\",\"text\":\" if not b: break\"},{\"line\":12,\"sha256\":\"a1ae395f5814ee5b68d9ff0c1c455c562692686f513549d9550a1ca882f04b94\",\"text\":\" h.update(b)\"},{\"line\":13,\"sha256\":\"d38d3e66a9218f9b7e3565a1a9686e2514d11c0e7dc6e1a888b31bf726b5eabd\",\"text\":\" return h.hexdigest()\"},{\"line\":14,\"sha256\":\"2c4c5b0ebed3de9b574a3757903571ebf0dcaec6764f9f8d245ce0740a619321\",\"text\":\"def main():\"},{\"line\":15,\"sha256\":\"8ed597bfa67a39fd3247aa69d60fbf38d6c6eb2c99ba8233b08ad5707acd37d7\",\"text\":\" st=os.lstat(ACCEPTED)\"},{\"line\":16,\"sha256\":\"418757f9d5c90ddff43aa74e84da536f2a2341be2a15649bc1cea54d5a2f6614\",\"text\":\" if not stat.S_ISDIR(st.st_mode) or stat.S_ISLNK(st.st_mode) or st.st_uid!=0 or st.st_gid!=0 or stat.S_IMODE(st.st_mode)!=0o500: raise SystemExit('RELEASE_ROOT_IDENTITY')\"},{\"line\":17,\"sha256\":\"d55be1792bbfcb551d4d51970890586be4a5a1da8914179a8b2062694c0e5b5e\",\"text\":\" names=sorted(p.name for p in ACCEPTED.iterdir())\"},{\"line\":18,\"sha256\":\"e5a3133c28e977c4e9c8167dde7bb65433318db3e99df775b1f1bb647489aad1\",\"text\":\" if names!=sorted(EXPECTED): raise SystemExit('RELEASE_FILESET')\"},{\"line\":19,\"sha256\":\"fead4124009a37228b983368c62a7d9bc05cdbb43454bcc5caac80217b2905f9\",\"text\":\" for name,want in EXPECTED.items():\"},{\"line\":20,\"sha256\":\"9f397676d47b0693c062fa93bb3920967e19c945e0dfc6c97b915bd319ceb1b4\",\"text\":\" p=ACCEPTED/name; s=os.lstat(p)\"},{\"line\":21,\"sha256\":\"77ebd02c8e8b9a86beda5fbd6492917d2d9cd5dbe3dcd6af2cf494615fc01d59\",\"text\":\" if not stat.S_ISREG(s.st_mode) or stat.S_ISLNK(s.st_mode) or s.st_uid!=0 or s.st_gid!=0 or stat.S_IMODE(s.st_mode)!=0o400 or sha(p)!=want: raise SystemExit('RELEASE_FILE_IDENTITY_'+name)\"},{\"line\":22,\"sha256\":\"620a9fc1637030bd3806385e4d032f1d88f118fab60839cdcd08958ff76347d1\",\"text\":\" sys.dont_write_bytecode=True\"},{\"line\":23,\"sha256\":\"205047de2556322fcf287fe1a64a3ee1c5f1a6b6d031d7eb1ca3984be8f51cd9\",\"text\":\" sys.path.insert(0,str(ACCEPTED))\"},{\"line\":24,\"sha256\":\"007cf559e27a685d7242eeae848187802be787058680e8524508ef30d7ca8070\",\"text\":\" e=importlib.import_module('entry504')\"},{\"line\":25,\"sha256\":\"f89328a065052a0617651ce50185d40cbb3fdf066ce0451fe8ad67e23abe8579\",\"text\":\" return int(e.main())\"},{\"line\":26,\"sha256\":\"781bcc48cb7af0089f84c37d854593c43723833f0f9bced4c2d02aed0894040b\",\"text\":\"if __name__=='__main__': raise SystemExit(main())\"}]\nWRAPPER_ABSOLUTE_PATHS=[\"/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b\",\"/usr/bin/python3\"]\nWRAPPER_ENV_NAMES=[]\nWRAPPER_PY_NAMES=[\"entry504.py\",\"fresh_lxc_helper.py\",\"lxc_adapter.py\",\"producer_exec_helper.py\",\"qemu_adapter.py\",\"scheduler_adapter.py\"]\nWRAPPER_SHA256_LITERALS=[\"1906db42bd34bbe85eb46fd9797b3572d46e0a41c29d1c29be5f9df5e448f15b\",\"3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d\",\"a6f67159a64067773323f028126e3109e15cf17a8142cea5e6129970f1d4da96\",\"b3b97099bcd7126670f866e81faae6a42a96d869d9989e6a67f6ea6c871c90b3\",\"ca6876fa9c3b1465b045344a8ad46962de16972c7dadc4ac6257c7d225047793\",\"dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011\"]\nABSOLUTE_PATH_META=[{\"bytes\":null,\"exists\":true,\"is_dir\":true,\"is_file\":false,\"path\":\"/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b\",\"sha256\":null},{\"bytes\":6812336,\"exists\":true,\"is_dir\":false,\"is_file\":true,\"path\":\"/usr/bin/python3\",\"sha256\":\"17b78e0a93175e86f9ac03141924fd7a7f0c0c52e66b34bfa0de20ffef989df1\"}]\nSHA_LITERAL_REFERENCE_HITS=[{\"hits\":[{\"bytes\":1656,\"path\":\"/usr/local/sbin/homelab-backup-v2\",\"sha256\":\"5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2\"}],\"literal\":\"1906db42bd34bbe85eb46fd9797b3572d46e0a41c29d1c29be5f9df5e448f15b\"},{\"hits\":[{\"bytes\":1656,\"path\":\"/usr/local/sbin/homelab-backup-v2\",\"sha256\":\"5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2\"}],\"literal\":\"3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d\"},{\"hits\":[{\"bytes\":1656,\"path\":\"/usr/local/sbin/homelab-backup-v2\",\"sha256\":\"5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2\"}],\"literal\":\"a6f67159a64067773323f028126e3109e15cf17a8142cea5e6129970f1d4da96\"},{\"hits\":[{\"bytes\":1656,\"path\":\"/usr/local/sbin/homelab-backup-v2\",\"sha256\":\"5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2\"}],\"literal\":\"b3b97099bcd7126670f866e81faae6a42a96d869d9989e6a67f6ea6c871c90b3\"},{\"hits\":[{\"bytes\":1656,\"path\":\"/usr/local/sbin/homelab-backup-v2\",\"sha256\":\"5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2\"}],\"literal\":\"ca6876fa9c3b1465b045344a8ad46962de16972c7dadc4ac6257c7d225047793\"},{\"hits\":[{\"bytes\":1656,\"path\":\"/usr/local/sbin/homelab-backup-v2\",\"sha256\":\"5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2\"}],\"literal\":\"dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011\"}]\nARCHIVE_CANDIDATES=[]\nRUNTIME_NAME_HITS=[{\"bytes\":1656,\"path\":\"/usr/local/sbin/homelab-backup-v2\",\"sha256\":\"5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2\"}]\nNO_MUTATION=true\nNO_GIT_FETCH=true\nNO_WRITE=true\nNO_SERVICE_ACTION=true\nNO_BACKUP_STARTED=true\nNO_RESTORE_STARTED=true\nNO_RETENTION_RUN_STARTED=true\nNO_DELETE=true\nNO_MAIL_SENT=true\nTOPOLOGY_DURATION_SEC=0.047\nTASK_RESULT=PASS_HOMELAB_BACKUP_V2_WRAPPER_TOPOLOGY_READONLY\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"SUPPORT-260921-HOMELAB-BACKUP-V2-WRAPPER-TOPOLOGY-READONLY-1010R1\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\nWORKERS2_BACKUP_V2_WRAPPER_TOPOLOGY_END=1\n" }