1
0
Files
homelab-public-context/runtime/latest.json
T
2026-10-08 00:35:41 +00:00

39 lines
15 KiB
JSON

{
"schema_version": 1,
"channel": "homelab-runtime",
"command_id": "SUPPORT-261008-CT112-PLAN-DATAFLOW-ROOT-99824R1",
"status": "OK",
"rc": 0,
"host": "pve01",
"mode": "read-only",
"component": "ct112-plan-dataflow-root",
"started_at_utc": "2026-10-08T00:35:34Z",
"finished_at_utc": "2026-10-08T00:35:40Z",
"reference_register_checked": true,
"reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66",
"error_register_checked": true,
"error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0",
"command_sha256": "e556870d31392c4f44f6bf6b71f9a92b401d209eb60db4d0148f3eb69139f49a",
"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": "7a58f71f363c8e390fd3b6af5b01d7f21d758c734e92ae73164c0e5358fa59b7",
"sanitized_output_sha256": "7a58f71f363c8e390fd3b6af5b01d7f21d758c734e92ae73164c0e5358fa59b7",
"output_truncated_in_json": false,
"full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt",
"output": "CT112_PLAN_DATAFLOW_ROOT=V1\nMODE=read-only\nNO_BACKUP_EXECUTION=true\nNO_MUTATION=true\nPINNED_WRAPPER_COUNT=1\nSOURCE_IDENTITIES_VALID=true\nP282_SELECT112_FUNCTION_COUNT=1\nP282_SELECT112_ARGS=current,baseline,now\nP282_SELECT112_FIRST_LINE=29\nP282_SELECT112_TOP_LEVEL_STATEMENTS=25\nREC|P282_SELECT112|IDX=1|LINE=30\nREC|P282_SELECT112|IDX=1|KIND=Assign\nREC|P282_SELECT112|IDX=1|AST=rows = g.plan_rows(current)\nREC|P282_SELECT112|IDX=2|LINE=30\nREC|P282_SELECT112|IDX=2|KIND=Assign\nREC|P282_SELECT112|IDX=2|AST=previous = g.plan_rows(baseline)\nREC|P282_SELECT112|IDX=3|LINE=31\nREC|P282_SELECT112|IDX=3|KIND=Assign\nREC|P282_SELECT112|IDX=3|AST=by_id = _j_vmid_: j for j in previous_\nREC|P282_SELECT112|IDX=4|LINE=32\nREC|P282_SELECT112|IDX=4|KIND=Expr\nREC|P282_SELECT112|IDX=4|AST=need(TARGET_VMID in by_id, _<S>_)\nREC|P282_SELECT112|IDX=5|LINE=33\nREC|P282_SELECT112|IDX=5|KIND=Expr\nREC|P282_SELECT112|IDX=5|AST=g.same_state(baseline, current, TARGET_VMID)\nREC|P282_SELECT112|IDX=6|LINE=34\nREC|P282_SELECT112|IDX=6|KIND=Expr\nREC|P282_SELECT112|IDX=6|AST=need(_j_vmid_ for j in rows_ == set(by_id), _<S>_)\nREC|P282_SELECT112|IDX=7|LINE=35\nREC|P282_SELECT112|IDX=7|KIND=For\nREC|P282_SELECT112|IDX=7|AST=for row in rows: need(row_config_sha256_ == by_id_row_vmid_config_sha256_, _<S>_)\nREC|P282_SELECT112|IDX=8|LINE=37\nREC|P282_SELECT112|IDX=8|KIND=Assign\nREC|P282_SELECT112|IDX=8|AST=selected = _j for j in rows if j_vmid_ == TARGET_VMID_\nREC|P282_SELECT112|IDX=9|LINE=38\nREC|P282_SELECT112|IDX=9|KIND=Expr\nREC|P282_SELECT112|IDX=9|AST=need(len(selected) == 1, _CT112_NOT_UNIQUE_)\nREC|P282_SELECT112|IDX=10|LINE=39\nREC|P282_SELECT112|IDX=10|KIND=Assign\nREC|P282_SELECT112|IDX=10|AST=job = copy.deepcopy(selected_0_)\nREC|P282_SELECT112|IDX=11|LINE=39\nREC|P282_SELECT112|IDX=11|KIND=Expr\nREC|P282_SELECT112|IDX=11|AST=old.validate_job(job, now)\nREC|P282_SELECT112|IDX=12|LINE=40\nREC|P282_SELECT112|IDX=12|KIND=Expr\nREC|P282_SELECT112|IDX=12|AST=need(current.get(_<S>_) == _, _<S>_)\nREC|P282_SELECT112|IDX=13|LINE=41\nREC|P282_SELECT112|IDX=13|KIND=Expr\nREC|P282_SELECT112|IDX=13|AST=need(job.get(_compression_dependent_) is False and job.get(_configured_full_cycle_fits_) is True, _<S>_)\nREC|P282_SELECT112|IDX=14|LINE=42\nREC|P282_SELECT112|IDX=14|KIND=Assign\nREC|P282_SELECT112|IDX=14|AST=disks = job.get(_disks_)\nREC|P282_SELECT112|IDX=15|LINE=42\nREC|P282_SELECT112|IDX=15|KIND=Expr\nREC|P282_SELECT112|IDX=15|AST=need(type(disks) is list and len(disks) == 1, _<S>_)\nREC|P282_SELECT112|IDX=16|LINE=43\nREC|P282_SELECT112|IDX=16|KIND=Assign\nREC|P282_SELECT112|IDX=16|AST=disk = disks_0_\nREC|P282_SELECT112|IDX=17|LINE=44\nREC|P282_SELECT112|IDX=17|KIND=Expr\nREC|P282_SELECT112|IDX=17|AST=need(disk.get(_<S>_) == _rootfs_ and disk.get(_<S>_) == _<S>_ and (disk.get(_<S>_) in (_<S>_, _<S>_)), _<S>_)\nREC|P282_SELECT112|IDX=18|LINE=45\nREC|P282_SELECT112|IDX=18|KIND=Assign\nREC|P282_SELECT112|IDX=18|AST=size = job.get(_<S>_)\nREC|P282_SELECT112|IDX=19|LINE=46\nREC|P282_SELECT112|IDX=19|KIND=Expr\nREC|P282_SELECT112|IDX=19|AST=need(type(size) is int and 0 < size <= stream.MAX_BYTES and (size == disk.get(_<S>_)), _<S>_)\nREC|P282_SELECT112|IDX=20|LINE=47\nREC|P282_SELECT112|IDX=20|KIND=Assign\nREC|P282_SELECT112|IDX=20|AST=stores = _x_<S>_: x for x in current.get(_<S>_, _)_\nREC|P282_SELECT112|IDX=21|LINE=47\nREC|P282_SELECT112|IDX=21|KIND=Assign\nREC|P282_SELECT112|IDX=21|AST=st = stores.get(disk.get(_<S>_), _)\nREC|P282_SELECT112|IDX=22|LINE=48\nREC|P282_SELECT112|IDX=22|KIND=Expr\nREC|P282_SELECT112|IDX=22|AST=need(st.get(_<S>_) is True and st.get(_<S>_) is True and (st.get(_type_) in (_<S>_, _<S>_)), _<S>_)\nREC|P282_SELECT112|IDX=23|LINE=49\nREC|P282_SELECT112|IDX=23|KIND=Expr\nREC|P282_SELECT112|IDX=23|AST=need(type(st.get(_<S>_)) is int and st_<S>_ >= max(1024 _ 3, size), _<S>_)\nREC|P282_SELECT112|IDX=24|LINE=50\nREC|P282_SELECT112|IDX=24|KIND=Expr\nREC|P282_SELECT112|IDX=24|AST=require_target(job, by_id_TARGET_VMID_config_sha256_)\nP282_SELECT112_LINE30_AST=rows = g.plan_rows(current),previous = g.plan_rows(baseline)\nREC|SELECT_CALL|LINE=30|NAME=plan_rows\nREC|SELECT_CALL|LINE=30|AST=g.plan_rows(current)\nREC|SELECT_CALL|LINE=30|NAME=plan_rows\nREC|SELECT_CALL|LINE=30|AST=g.plan_rows(baseline)\nREC|SELECT_CALL|LINE=32|NAME=need\nREC|SELECT_CALL|LINE=32|AST=need(TARGET_VMID in by_id, _<S>_)\nREC|SELECT_CALL|LINE=33|NAME=same_state\nREC|SELECT_CALL|LINE=33|AST=g.same_state(baseline, current, TARGET_VMID)\nREC|SELECT_CALL|LINE=34|NAME=need\nREC|SELECT_CALL|LINE=34|AST=need(_j_vmid_ for j in rows_ == set(by_id), _<S>_)\nREC|SELECT_CALL|LINE=36|NAME=need\nREC|SELECT_CALL|LINE=36|AST=need(row_config_sha256_ == by_id_row_vmid_config_sha256_, _<S>_)\nREC|SELECT_CALL|LINE=38|NAME=need\nREC|SELECT_CALL|LINE=38|AST=need(len(selected) == 1, _CT112_NOT_UNIQUE_)\nREC|SELECT_CALL|LINE=39|NAME=validate_job\nREC|SELECT_CALL|LINE=39|AST=old.validate_job(job, now)\nREC|SELECT_CALL|LINE=40|NAME=need\nREC|SELECT_CALL|LINE=40|AST=need(current.get(_<S>_) == _, _<S>_)\nREC|SELECT_CALL|LINE=41|NAME=need\nREC|SELECT_CALL|LINE=41|AST=need(job.get(_compression_dependent_) is False and job.get(_configured_full_cycle_fits_) is True, _<S>_)\nREC|SELECT_CALL|LINE=42|NAME=need\nREC|SELECT_CALL|LINE=42|AST=need(type(disks) is list and len(disks) == 1, _<S>_)\nREC|SELECT_CALL|LINE=44|NAME=need\nREC|SELECT_CALL|LINE=44|AST=need(disk.get(_<S>_) == _rootfs_ and disk.get(_<S>_) == _<S>_ and (disk.get(_<S>_) in (_<S>_, _<S>_)), _<S>_)\nREC|SELECT_CALL|LINE=46|NAME=need\nREC|SELECT_CALL|LINE=46|AST=need(type(size) is int and 0 < size <= stream.MAX_BYTES and (size == disk.get(_<S>_)), _<S>_)\nREC|SELECT_CALL|LINE=48|NAME=need\nREC|SELECT_CALL|LINE=48|AST=need(st.get(_<S>_) is True and st.get(_<S>_) is True and (st.get(_type_) in (_<S>_, _<S>_)), _<S>_)\nREC|SELECT_CALL|LINE=49|NAME=need\nREC|SELECT_CALL|LINE=49|AST=need(type(st.get(_<S>_)) is int and st_<S>_ >= max(1024 _ 3, size), _<S>_)\nREC|SELECT_CALL|LINE=50|NAME=require_target\nREC|SELECT_CALL|LINE=50|AST=require_target(job, by_id_TARGET_VMID_config_sha256_)\nHANDLER_BASELINE_FUNCTION_COUNT=1\nHANDLER_BASELINE_ARGS=NONE\nHANDLER_BASELINE_FIRST_LINE=31\nHANDLER_BASELINE_TOP_LEVEL_STATEMENTS=3\nREC|HANDLER_BASELINE|IDX=1|LINE=32\nREC|HANDLER_BASELINE|IDX=1|KIND=Assign\nREC|HANDLER_BASELINE|IDX=1|AST=b = t.read_secure(PLAN, 1024 _ 1024, private=True)_0_\nREC|HANDLER_BASELINE|IDX=2|LINE=33\nREC|HANDLER_BASELINE|IDX=2|KIND=If\nREC|HANDLER_BASELINE|IDX=2|AST=if t.sha(b) _= PLAN_SHA: raise RuntimeError(_PLAN_REFERENCE_IDENTITY_)\nREC|HANDLER_BASELINE|IDX=3|LINE=34\nREC|HANDLER_BASELINE|IDX=3|KIND=Try\nREC|HANDLER_BASELINE|IDX=3|AST=try: return json.loads(b.decode(_<S>_, _<S>_)) except (ValueError, UnicodeError): raise RuntimeError(_<S>_) from None\nHANDLER_FRESH_FUNCTION_COUNT=1\nHANDLER_FRESH_ARGS=now\nHANDLER_FRESH_FIRST_LINE=42\nHANDLER_FRESH_TOP_LEVEL_STATEMENTS=8\nREC|HANDLER_FRESH|IDX=1|LINE=43\nREC|HANDLER_FRESH|IDX=1|KIND=Assign\nREC|HANDLER_FRESH|IDX=1|AST=rows = _json_cmd(_<S>_, _<S>_, _<S>_)\nREC|HANDLER_FRESH|IDX=2|LINE=44\nREC|HANDLER_FRESH|IDX=2|KIND=Assign\nREC|HANDLER_FRESH|IDX=2|AST=stores = _json_cmd(_<S>_)\nREC|HANDLER_FRESH|IDX=3|LINE=45\nREC|HANDLER_FRESH|IDX=3|KIND=If\nREC|HANDLER_FRESH|IDX=3|AST=if not isinstance(rows, list) or not isinstance(stores, list): raise RuntimeError(_<S>_)\nREC|HANDLER_FRESH|IDX=4|LINE=46\nREC|HANDLER_FRESH|IDX=4|KIND=Assign\nREC|HANDLER_FRESH|IDX=4|AST=configs = _\nREC|HANDLER_FRESH|IDX=5|LINE=47\nREC|HANDLER_FRESH|IDX=5|KIND=For\nREC|HANDLER_FRESH|IDX=5|AST=for r in rows: if not isinstance(r, dict) or r.get(_node_) _= _pve01_ or r.get(_type_) not in (_lxc_, _<S>_): continue vmid = r.get(_vmid_) if type(vmid) is not int: raise RuntimeError(_<S>_) configs_vmid_ = _json_cmd(f_<S>_r_type_<S>_vmid_<S>_)\nREC|HANDLER_FRESH|IDX=6|LINE=52\nREC|HANDLER_FRESH|IDX=6|KIND=Assign\nREC|HANDLER_FRESH|IDX=6|AST=v = os.statvfs(STAGING)\nREC|HANDLER_FRESH|IDX=7|LINE=52\nREC|HANDLER_FRESH|IDX=7|KIND=Assign\nREC|HANDLER_FRESH|IDX=7|AST=free = v.f_frsize _ v.f_bavail\nREC|HANDLER_FRESH|IDX=8|LINE=53\nREC|HANDLER_FRESH|IDX=8|KIND=Return\nREC|HANDLER_FRESH|IDX=8|AST=return pve265.make_plan(rows, configs, stores, _defaults(), free, now, node=_pve01_)\nHANDLER_RUN_FUNCTION_COUNT=1\nHANDLER_RUN_ARGS=target,state_writer\nHANDLER_RUN_FIRST_LINE=100\nHANDLER_RUN_TOP_LEVEL_STATEMENTS=24\nREC|HANDLER_RUN|IDX=1|LINE=101\nREC|HANDLER_RUN|IDX=1|KIND=If\nREC|HANDLER_RUN|IDX=1|AST=if not isinstance(target, dict) or target.get(_<S>_) _= CT_ID or target.get(_vmid_) _= 112: return (_ for _ in ()).throw(RuntimeError(_<S>_))\nREC|HANDLER_RUN|IDX=2|LINE=102\nREC|HANDLER_RUN|IDX=2|KIND=If\nREC|HANDLER_RUN|IDX=2|AST=if _sha(PLAN, 1024 _ 1024) _= PLAN_SHA: raise RuntimeError(_PLAN_REFERENCE_IDENTITY_)\nREC|HANDLER_RUN|IDX=3|LINE=103\nREC|HANDLER_RUN|IDX=3|KIND=Assign\nREC|HANDLER_RUN|IDX=3|AST=tools = _<S>_: _tool(VZDUMP, VZDUMP_SHA), _<S>_: _tool(ZSTD, ZSTD_SHA)_\nREC|HANDLER_RUN|IDX=4|LINE=103\nREC|HANDLER_RUN|IDX=4|KIND=Expr\nREC|HANDLER_RUN|IDX=4|AST=_tool(RCLONE, RCLONE_SHA)\nREC|HANDLER_RUN|IDX=5|LINE=104\nREC|HANDLER_RUN|IDX=5|KIND=Assign\nREC|HANDLER_RUN|IDX=5|AST=pvesh_sha = _sha(PVESH)\nREC|HANDLER_RUN|IDX=6|LINE=104\nREC|HANDLER_RUN|IDX=6|KIND=Assign\nREC|HANDLER_RUN|IDX=6|AST=baseline = _baseline()\nREC|HANDLER_RUN|IDX=7|LINE=104\nREC|HANDLER_RUN|IDX=7|KIND=Assign\nREC|HANDLER_RUN|IDX=7|AST=now = int(time.time())\nREC|HANDLER_RUN|IDX=8|LINE=104\nREC|HANDLER_RUN|IDX=8|KIND=Assign\nREC|HANDLER_RUN|IDX=8|AST=current = _fresh_plan(now)\nREC|HANDLER_RUN|IDX=9|LINE=104\nREC|HANDLER_RUN|IDX=9|KIND=Assign\nREC|HANDLER_RUN|IDX=9|AST=job = pve282.select112(current, baseline, now)\nREC|HANDLER_RUN|IDX=10|LINE=105\nREC|HANDLER_RUN|IDX=10|KIND=Assign\nREC|HANDLER_RUN|IDX=10|AST=expected = job_config_sha256_\nREC|HANDLER_RUN|IDX=11|LINE=105\nREC|HANDLER_RUN|IDX=11|KIND=Assign\nREC|HANDLER_RUN|IDX=11|AST=mapping = pve282.host_mapping()\nREC|HANDLER_RUN|IDX=12|LINE=105\nREC|HANDLER_RUN|IDX=12|KIND=Expr\nREC|HANDLER_RUN|IDX=12|AST=pve282.validate_mapping(mapping)\nREC|HANDLER_RUN|IDX=13|LINE=106\nREC|HANDLER_RUN|IDX=13|KIND=FunctionDef\nREC|HANDLER_RUN|IDX=13|AST=def producer_guard(): now2 = int(time.time()) cur = _fresh_plan(now2) fresh = pve282.select112(cur, baseline, now2) tasks = _json_cmd(_<S>_, _<S>_, _<S>_) guest266.no_active_tasks(tasks, 112) if _sha(PVESH) _= pvesh_sha: raise RuntimeError(_<S>_) pve282.live_gate(fresh, str(PVESH), pvesh_sha, expected)\nVZDUMP_CONFIG_BYTES=566\nVZDUMP_CONFIG_TYPED_INPUT=str\nDRY_RUN_STARTED=true\nBASELINE_LOAD_OK=true\nFRESH_PLAN_MAKE_OK=true\nBASELINE_LIVE_PLAN_CHANGED_KEYS=all_guest_coverage_eligible,collected_at_utc,global_blockers,global_defaults,guest_membership_and_configs_stable,jobs,local_guest_count,node_execution_approved,observed_at,pvesh_get_calls,pvesh_sha256,refresh_required_before_backup,staging_free_bytes,storages,tools\nBASELINE_PLAN_TYPE=dict\nBASELINE_PLAN_KEYS=all_guest_coverage_eligible,backup_executed,capacity_policy,collected_at_utc,full_host_coverage,global_blockers,global_defaults,guest_membership_and_configs_stable,jobs,local_guest_count,node,node_execution_approved,nodeset_backup_approved,observed_at,pvesh_get_calls,pvesh_sha256,refresh_required_before_backup,schema_version,staging_free_bytes,storages,tools\nBASELINE_PLAN_JOBS_TYPE=list\nBASELINE_PLAN_JOB_COUNT=6\nBASELINE_PLAN_VMID_LIST_HASH=b6b595ac377f78e071aca2ab359a7c7ae1bcb0485e68728a7c48f076f36cde40\nBASELINE_PLAN_VM112_COUNT=1\nBASELINE_PLAN_VM112_FIELDS=application_consistency_verified,archive_cap_bytes,blockers,cdrom_count,cdrom_media_included,compression_dependent,config_sha256,configured_archive_bound_bytes,configured_disk_bytes,configured_full_cycle_fits,coverage_eligible,disks,global_defaults_sha256,guest_restore_verified,hookscript_present,local_reserve_bytes,lock_present,node,observed_at,reported_maxdisk_bytes,reported_maxmem_bytes,snapshot_history_included,status,template,type,unused_volume_count,vmid\nBASELINE_PLAN_VM112_AGE_SECONDS=2223483\nFRESH_PLAN_TYPE=dict\nFRESH_PLAN_KEYS=all_guest_coverage_eligible,backup_executed,capacity_policy,full_host_coverage,global_blockers,global_defaults,jobs,local_guest_count,node,nodeset_backup_approved,observed_at,schema_version,staging_free_bytes,storages\nFRESH_PLAN_JOBS_TYPE=list\nFRESH_PLAN_JOB_COUNT=8\nFRESH_PLAN_VMID_LIST_HASH=a6268963746816277a805ff5113847e826ba0ce06c0ae1cf316594a474670de6\nFRESH_PLAN_VM112_COUNT=1\nFRESH_PLAN_VM112_FIELDS=application_consistency_verified,archive_cap_bytes,blockers,cdrom_count,cdrom_media_included,compression_dependent,config_sha256,configured_archive_bound_bytes,configured_disk_bytes,configured_full_cycle_fits,coverage_eligible,disks,global_defaults_sha256,guest_restore_verified,hookscript_present,local_reserve_bytes,lock_present,node,observed_at,reported_maxdisk_bytes,reported_maxmem_bytes,snapshot_history_included,status,template,type,unused_volume_count,vmid\nFRESH_PLAN_VM112_AGE_SECONDS=6\nBASELINE_LIVE_VM112_CHANGED_KEYS=blockers,coverage_eligible,global_defaults_sha256,observed_at\nVM112_FIELD_CONFIG_SHA256_EQUAL=true\nVM112_FIELD_GLOBAL_DEFAULTS_SHA256_EQUAL=false\nVM112_FIELD_NODE_EQUAL=true\nVM112_FIELD_VMID_EQUAL=true\nVM112_FIELD_TYPE_EQUAL=true\nVM112_FIELD_TEMPLATE_EQUAL=true\nVM112_FIELD_BLOCKERS_EQUAL=false\nVM112_FIELD_COVERAGE_ELIGIBLE_EQUAL=false\nVM112_FIELD_COMPRESSION_DEPENDENT_EQUAL=true\nVM112_FIELD_CONFIGURED_FULL_CYCLE_FITS_EQUAL=true\nREAL_SELECT112_DRYRUN_SKIPPED=true\nDECISION=PASS_SOURCE_AND_LIVE_PLAN_COMPARISON_RECORDED\nNEXT_GATE=FIX_EXACT_PLAN_NOT_STABLE_MISMATCH_NOT_GUARD_BYPASS\nCHANGES_MADE=false\nROLLBACK_STARTED=false\nROLLBACK_RESTORED=null\nMUTATION_OUTCOME=NO_MUTATION\nEND_MARKER=true\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-261008-CT112-PLAN-DATAFLOW-ROOT-99824R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\nPLAN_DATAFLOW_PYTHON_RC=0\n"
}