39 lines
9.9 KiB
JSON
39 lines
9.9 KiB
JSON
{
|
|
"schema_version": 1,
|
|
"channel": "homelab-runtime",
|
|
"command_id": "HOMELAB-SKLADCHIK-HANDOFF-MUTATION-CONTRACT-READ-ONLY-20260805T132500Z",
|
|
"status": "OK",
|
|
"rc": 0,
|
|
"host": "pve01",
|
|
"mode": "verify",
|
|
"component": "skladchik-handoff-mutation-contract-ro",
|
|
"started_at_utc": "2026-08-05T13:43:23Z",
|
|
"finished_at_utc": "2026-08-05T13:43:24Z",
|
|
"reference_register_checked": true,
|
|
"reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e",
|
|
"error_register_checked": true,
|
|
"error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83",
|
|
"command_sha256": "a3b0c734b66148908c75cebaabbc4fd76c8102414584c20c6fdf04a6ef01f0b4",
|
|
"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": "77fd1a6ce83e382a7d9873abbeaed83e449a67837978c2799713efdcb62dc8e5",
|
|
"sanitized_output_sha256": "77fd1a6ce83e382a7d9873abbeaed83e449a67837978c2799713efdcb62dc8e5",
|
|
"output_truncated_in_json": false,
|
|
"full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt",
|
|
"output": "HOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"HOMELAB-SKLADCHIK-HANDOFF-MUTATION-CONTRACT-READ-ONLY-20260805T132500Z\",\"command_rc\":0,\"mutation_outcome\":\"NO_MUTATION\",\"output_truncated_in_json\":false,\"rc\":0,\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"adapter\":{\"basename\":\"homelab-command-adapter\",\"mode_risk_contract\":{\"candidate_values\":[\"HIGH\",\"READ_ONLY\",\"REVERSIBLE\",\"available\",\"change\",\"change capsule must declare production change\",\"change capsule requires available rollback\",\"change capsule risk must be REVERSIBLE or HIGH\",\"invalid mode\",\"invalid risk\",\"non-change capsule cannot declare changes\",\"non-change capsule risk must be READ_ONLY\",\"production\"],\"comparisons\":[{\"line\":370,\"names\":[\"mode\"],\"segment_sha256\":\"fb9813b54c11137bed7aedcae743fc0a0db019a66562c6f3380fce1a69f76370\",\"text\":\"if mode not in ALLOWED_MODES:\\n raise AdapterError(\\\"invalid mode\\\")\",\"values\":[\"invalid mode\"]},{\"line\":384,\"names\":[\"risk\"],\"segment_sha256\":\"e49cc412f4f63f1515bfc021820cb8d7f9640f950ea9b8a0f13dad14a60d5839\",\"text\":\"if risk not in ALLOWED_RISKS:\\n raise AdapterError(\\\"invalid risk\\\")\",\"values\":[\"invalid risk\"]},{\"line\":386,\"names\":[\"mode\",\"risk\"],\"segment_sha256\":\"bb56e08695ce4980c221165b414b27f3afc246b8b5c1d3402c1c831292acef5a\",\"text\":\"if mode == \\\"change\\\" and risk not in {\\\"REVERSIBLE\\\", \\\"HIGH\\\"}:\\n raise AdapterError(\\\"change capsule risk must be REVERSIBLE or HIGH\\\")\",\"values\":[\"HIGH\",\"REVERSIBLE\",\"change\",\"change capsule risk must be REVERSIBLE or HIGH\"]},{\"line\":386,\"names\":[\"mode\",\"risk\"],\"segment_sha256\":\"1c673162449940fc60421bc5517f24f7a30580c824b6dfb0de885cd7b98650cb\",\"text\":\"mode == \\\"change\\\" and risk not in {\\\"REVERSIBLE\\\", \\\"HIGH\\\"}\",\"values\":[\"HIGH\",\"REVERSIBLE\",\"change\"]},{\"line\":386,\"names\":[\"mode\"],\"segment_sha256\":\"8917390eaf3d01fb76a51dfd8243748ec4bd46c94d93ae4d47382246b8e52a69\",\"text\":\"mode == \\\"change\\\"\",\"values\":[\"change\"]},{\"line\":386,\"names\":[\"risk\"],\"segment_sha256\":\"724ee6c7d954e249f31d377b059766cc67b75131513b547c93479821daff1665\",\"text\":\"risk not in {\\\"REVERSIBLE\\\", \\\"HIGH\\\"}\",\"values\":[\"HIGH\",\"REVERSIBLE\"]},{\"line\":388,\"names\":[\"mode\",\"risk\"],\"segment_sha256\":\"c7c3a84d312747700b4f14f46c2d4b5031e7cbcd8cf567c736a690d6d377ce84\",\"text\":\"if mode != \\\"change\\\" and risk != \\\"READ_ONLY\\\":\\n raise AdapterError(\\\"non-change capsule risk must be READ_ONLY\\\")\",\"values\":[\"READ_ONLY\",\"change\",\"non-change capsule risk must be READ_ONLY\"]},{\"line\":388,\"names\":[\"mode\",\"risk\"],\"segment_sha256\":\"434a09e2c0c02c095361b91cc1e32ab1bb1ffe4dae45c65b541d010268040e03\",\"text\":\"mode != \\\"change\\\" and risk != \\\"READ_ONLY\\\"\",\"values\":[\"READ_ONLY\",\"change\"]},{\"line\":388,\"names\":[\"mode\"],\"segment_sha256\":\"b11dada48a10d3dd45c37ed5841dfd90fe39169d56a8d87bb3db50de138540ce\",\"text\":\"mode != \\\"change\\\"\",\"values\":[\"change\"]},{\"line\":388,\"names\":[\"risk\"],\"segment_sha256\":\"79f7afe950f69ed28d3f9245007eb96ade840ed1e6b3dbe1b06c2ff5d55038e1\",\"text\":\"risk != \\\"READ_ONLY\\\"\",\"values\":[\"READ_ONLY\"]},{\"line\":399,\"names\":[\"mode\"],\"segment_sha256\":\"d640c7dc4427bd639bf28465290f4701b93d1fddd4adee8a03f1d80ce32eb387\",\"text\":\"if mode != \\\"change\\\" and any(flags.values()):\\n raise AdapterError(\\n \\\"non-change capsule cannot declare changes\\\"\\n )\",\"values\":[\"change\",\"non-change capsule cannot declare changes\"]},{\"line\":399,\"names\":[\"mode\"],\"segment_sha256\":\"266d98ea980186e8471babd7f4c560a932d94a83be926a459beaed430da7dc84\",\"text\":\"mode != \\\"change\\\" and any(flags.values())\",\"values\":[\"change\"]},{\"line\":399,\"names\":[\"mode\"],\"segment_sha256\":\"b11dada48a10d3dd45c37ed5841dfd90fe39169d56a8d87bb3db50de138540ce\",\"text\":\"mode != \\\"change\\\"\",\"values\":[\"change\"]},{\"line\":403,\"names\":[\"mode\"],\"segment_sha256\":\"c24b94f6049271719b2ea5316cfc4d72d3cef3c615462c5648b24974163c497a\",\"text\":\"if mode == \\\"change\\\" and not flags[\\\"production\\\"]:\\n raise AdapterError(\\n \\\"change capsule must declare production change\\\"\\n )\",\"values\":[\"change\",\"change capsule must declare production change\",\"production\"]},{\"line\":403,\"names\":[\"mode\"],\"segment_sha256\":\"f0c2605aac2630fd54fda61abe05546ff3d3d977c4a6a50125e020869a49301a\",\"text\":\"mode == \\\"change\\\" and not flags[\\\"production\\\"]\",\"values\":[\"change\",\"production\"]},{\"line\":403,\"names\":[\"mode\"],\"segment_sha256\":\"8917390eaf3d01fb76a51dfd8243748ec4bd46c94d93ae4d47382246b8e52a69\",\"text\":\"mode == \\\"change\\\"\",\"values\":[\"change\"]}],\"raises\":[{\"line\":371,\"segment_sha256\":\"6d78e0909f5bb1c43cef5c9bc042720485fd0fbcb2762ccf45b7ecae433a904b\",\"text\":\"raise AdapterError(\\\"invalid mode\\\")\"},{\"line\":385,\"segment_sha256\":\"87216e6143dce952e5941a434e807e0a5ed4f39b1e04aca99176a8aa6453e1ad\",\"text\":\"raise AdapterError(\\\"invalid risk\\\")\"},{\"line\":387,\"segment_sha256\":\"43098cc02c674830f07b2d9438e5a31307585cf955039af501a23b8f05600037\",\"text\":\"raise AdapterError(\\\"change capsule risk must be REVERSIBLE or HIGH\\\")\"},{\"line\":389,\"segment_sha256\":\"a00c40ee846c32cb3b5198553cb60d4967d4ea2b06f65174fd436ca696009f82\",\"text\":\"raise AdapterError(\\\"non-change capsule risk must be READ_ONLY\\\")\"},{\"line\":542,\"segment_sha256\":\"e4509eefed0a60ced14742d43e40dd528988c46b11c81a162eaf1b97b5c4969c\",\"text\":\"raise AdapterError(\\\"invalid payload mode\\\")\"}]},\"process_sites\":[{\"call\":\"subprocess.run\",\"line\":664,\"names\":[],\"segment_sha256\":\"fbe36f5d1ed7b23d545f105135de2993138aa4a8dafc9f5419d7c37b36deebae\",\"stderr\":\"subprocess.PIPE\",\"stdin\":\"subprocess.DEVNULL\",\"stdout\":\"subprocess.PIPE\",\"text\":\"subprocess.run(\\n args,\\n stdin=subprocess.DEVNULL,\\n stdout=subprocess.PIPE,\\n stderr=subprocess.PIPE,\\n text=True,\\n check=False,\\n timeout=timeout,\\n env=(SAFE_ENV if env is None else env),\\n )\"},{\"call\":\"subprocess.Popen\",\"line\":1626,\"names\":[],\"segment_sha256\":\"90bb736720d2877f6704459828dc5551619ba00834a4660e9ed9c7f86e05b8c6\",\"stderr\":\"subprocess.STDOUT\",\"stdin\":\"subprocess.DEVNULL\",\"stdout\":\"handle\",\"text\":\"subprocess.Popen(\\n [\\n sys.executable,\\n \\\"-B\\\",\\n str(Path(__file__).resolve()),\\n \\\"--worker\\\",\\n short_id,\\n ],\\n stdin=subprocess.DEVNULL,\\n stdout=handle,\\n stderr=subprocess.STDOUT,\\n env=SAFE_ENV,\\n start_new_session=True,\\n close_fds=True,\\n )\"},{\"call\":\"subprocess.Popen\",\"line\":2056,\"names\":[],\"segment_sha256\":\"4582da2d6b8e31108deedee5a5d6b877788db5da0f6d52120a605d76d0037d97\",\"stderr\":\"subprocess.STDOUT\",\"stdin\":\"subprocess.DEVNULL\",\"stdout\":\"subprocess.PIPE\",\"text\":\"subprocess.Popen(\\n args,\\n stdin=subprocess.DEVNULL,\\n stdout=subprocess.PIPE,\\n stderr=subprocess.STDOUT,\\n text=True,\\n env=environment,\\n start_new_session=True,\\n close_fds=True,\\n )\"}],\"sha256\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\"},\"analysis_ready\":true,\"changes_made\":false,\"command_id\":\"HOMELAB-SKLADCHIK-HANDOFF-MUTATION-CONTRACT-READ-ONLY-20260805T132500Z\",\"command_rc\":0,\"mutation_outcome\":\"NO_MUTATION\",\"next_action\":\"BUILD_SHA_GUARDED_SECRET_HANDOFF_TRANSACTION\",\"output_truncated_in_json\":false,\"rc\":0,\"read_only\":true,\"required_transaction_guards\":{\"atomic_replace\":true,\"automatic_exact_rollback\":true,\"byte_for_byte_backup\":true,\"candidate_compile_and_selftest\":true,\"candidate_in_temporary_directory\":true,\"expected_sha_preconditions\":true,\"read_exact_current_sources\":true,\"secret_never_in_capsule_argv_output_or_evidence\":true,\"service_health_verification\":true},\"rollback_restored\":null,\"rollback_started\":false,\"root_cause_classification\":\"MUTATION_CAPSULE_AND_STDIN_CONTRACT_CAPTURED\",\"runner_candidates\":[],\"schema\":1,\"status\":\"OK\"}\n"
|
|
}
|