1
0

runtime: publish SUPPORT-261008-CT112-PLAN-DATAFLOW-ROOT-99824R1

This commit is contained in:
homelab-runtime-publisher
2026-10-08 00:35:41 +00:00
parent 32ab2c1752
commit e20121232b
4 changed files with 560 additions and 46 deletions
File diff suppressed because one or more lines are too long
@@ -0,0 +1,274 @@
CHAT_OUTPUT_BEGIN
COMMAND_ID=SUPPORT-261008-CT112-PLAN-DATAFLOW-ROOT-99824R1
STATUS=OK
RC=0
HOST=pve01
MODE=read-only
COMPONENT=ct112-plan-dataflow-root
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
COMMAND_SHA256=e556870d31392c4f44f6bf6b71f9a92b401d209eb60db4d0148f3eb69139f49a
DUPLICATE_FAILED_COMMAND_BLOCKED=false
EXECUTION_STARTED=true
CHANGE_DECLARED=false
RESULT_CONTRACT_VALID=true
RESULT_CONTRACT_STATUS=NOT_APPLICABLE
RESULT_CONTRACT_ERROR=NONE
COMMAND_RC=0
CHANGES_MADE=false
ROLLBACK_STARTED=false
ROLLBACK_RESTORED=null
MUTATION_OUTCOME=NO_MUTATION
SANITIZED=yes
SECRETS_INCLUDED=no
PRIVATE_ADDRESSES_INCLUDED=no
RAW_EVIDENCE_SHA256=7a58f71f363c8e390fd3b6af5b01d7f21d758c734e92ae73164c0e5358fa59b7
SANITIZED_OUTPUT_SHA256=7a58f71f363c8e390fd3b6af5b01d7f21d758c734e92ae73164c0e5358fa59b7
OUTPUT_BEGIN
CT112_PLAN_DATAFLOW_ROOT=V1
MODE=read-only
NO_BACKUP_EXECUTION=true
NO_MUTATION=true
PINNED_WRAPPER_COUNT=1
SOURCE_IDENTITIES_VALID=true
P282_SELECT112_FUNCTION_COUNT=1
P282_SELECT112_ARGS=current,baseline,now
P282_SELECT112_FIRST_LINE=29
P282_SELECT112_TOP_LEVEL_STATEMENTS=25
REC|P282_SELECT112|IDX=1|LINE=30
REC|P282_SELECT112|IDX=1|KIND=Assign
REC|P282_SELECT112|IDX=1|AST=rows = g.plan_rows(current)
REC|P282_SELECT112|IDX=2|LINE=30
REC|P282_SELECT112|IDX=2|KIND=Assign
REC|P282_SELECT112|IDX=2|AST=previous = g.plan_rows(baseline)
REC|P282_SELECT112|IDX=3|LINE=31
REC|P282_SELECT112|IDX=3|KIND=Assign
REC|P282_SELECT112|IDX=3|AST=by_id = _j_vmid_: j for j in previous_
REC|P282_SELECT112|IDX=4|LINE=32
REC|P282_SELECT112|IDX=4|KIND=Expr
REC|P282_SELECT112|IDX=4|AST=need(TARGET_VMID in by_id, _<S>_)
REC|P282_SELECT112|IDX=5|LINE=33
REC|P282_SELECT112|IDX=5|KIND=Expr
REC|P282_SELECT112|IDX=5|AST=g.same_state(baseline, current, TARGET_VMID)
REC|P282_SELECT112|IDX=6|LINE=34
REC|P282_SELECT112|IDX=6|KIND=Expr
REC|P282_SELECT112|IDX=6|AST=need(_j_vmid_ for j in rows_ == set(by_id), _<S>_)
REC|P282_SELECT112|IDX=7|LINE=35
REC|P282_SELECT112|IDX=7|KIND=For
REC|P282_SELECT112|IDX=7|AST=for row in rows: need(row_config_sha256_ == by_id_row_vmid_config_sha256_, _<S>_)
REC|P282_SELECT112|IDX=8|LINE=37
REC|P282_SELECT112|IDX=8|KIND=Assign
REC|P282_SELECT112|IDX=8|AST=selected = _j for j in rows if j_vmid_ == TARGET_VMID_
REC|P282_SELECT112|IDX=9|LINE=38
REC|P282_SELECT112|IDX=9|KIND=Expr
REC|P282_SELECT112|IDX=9|AST=need(len(selected) == 1, _CT112_NOT_UNIQUE_)
REC|P282_SELECT112|IDX=10|LINE=39
REC|P282_SELECT112|IDX=10|KIND=Assign
REC|P282_SELECT112|IDX=10|AST=job = copy.deepcopy(selected_0_)
REC|P282_SELECT112|IDX=11|LINE=39
REC|P282_SELECT112|IDX=11|KIND=Expr
REC|P282_SELECT112|IDX=11|AST=old.validate_job(job, now)
REC|P282_SELECT112|IDX=12|LINE=40
REC|P282_SELECT112|IDX=12|KIND=Expr
REC|P282_SELECT112|IDX=12|AST=need(current.get(_<S>_) == _, _<S>_)
REC|P282_SELECT112|IDX=13|LINE=41
REC|P282_SELECT112|IDX=13|KIND=Expr
REC|P282_SELECT112|IDX=13|AST=need(job.get(_compression_dependent_) is False and job.get(_configured_full_cycle_fits_) is True, _<S>_)
REC|P282_SELECT112|IDX=14|LINE=42
REC|P282_SELECT112|IDX=14|KIND=Assign
REC|P282_SELECT112|IDX=14|AST=disks = job.get(_disks_)
REC|P282_SELECT112|IDX=15|LINE=42
REC|P282_SELECT112|IDX=15|KIND=Expr
REC|P282_SELECT112|IDX=15|AST=need(type(disks) is list and len(disks) == 1, _<S>_)
REC|P282_SELECT112|IDX=16|LINE=43
REC|P282_SELECT112|IDX=16|KIND=Assign
REC|P282_SELECT112|IDX=16|AST=disk = disks_0_
REC|P282_SELECT112|IDX=17|LINE=44
REC|P282_SELECT112|IDX=17|KIND=Expr
REC|P282_SELECT112|IDX=17|AST=need(disk.get(_<S>_) == _rootfs_ and disk.get(_<S>_) == _<S>_ and (disk.get(_<S>_) in (_<S>_, _<S>_)), _<S>_)
REC|P282_SELECT112|IDX=18|LINE=45
REC|P282_SELECT112|IDX=18|KIND=Assign
REC|P282_SELECT112|IDX=18|AST=size = job.get(_<S>_)
REC|P282_SELECT112|IDX=19|LINE=46
REC|P282_SELECT112|IDX=19|KIND=Expr
REC|P282_SELECT112|IDX=19|AST=need(type(size) is int and 0 < size <= stream.MAX_BYTES and (size == disk.get(_<S>_)), _<S>_)
REC|P282_SELECT112|IDX=20|LINE=47
REC|P282_SELECT112|IDX=20|KIND=Assign
REC|P282_SELECT112|IDX=20|AST=stores = _x_<S>_: x for x in current.get(_<S>_, _)_
REC|P282_SELECT112|IDX=21|LINE=47
REC|P282_SELECT112|IDX=21|KIND=Assign
REC|P282_SELECT112|IDX=21|AST=st = stores.get(disk.get(_<S>_), _)
REC|P282_SELECT112|IDX=22|LINE=48
REC|P282_SELECT112|IDX=22|KIND=Expr
REC|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>_)
REC|P282_SELECT112|IDX=23|LINE=49
REC|P282_SELECT112|IDX=23|KIND=Expr
REC|P282_SELECT112|IDX=23|AST=need(type(st.get(_<S>_)) is int and st_<S>_ >= max(1024 _ 3, size), _<S>_)
REC|P282_SELECT112|IDX=24|LINE=50
REC|P282_SELECT112|IDX=24|KIND=Expr
REC|P282_SELECT112|IDX=24|AST=require_target(job, by_id_TARGET_VMID_config_sha256_)
P282_SELECT112_LINE30_AST=rows = g.plan_rows(current),previous = g.plan_rows(baseline)
REC|SELECT_CALL|LINE=30|NAME=plan_rows
REC|SELECT_CALL|LINE=30|AST=g.plan_rows(current)
REC|SELECT_CALL|LINE=30|NAME=plan_rows
REC|SELECT_CALL|LINE=30|AST=g.plan_rows(baseline)
REC|SELECT_CALL|LINE=32|NAME=need
REC|SELECT_CALL|LINE=32|AST=need(TARGET_VMID in by_id, _<S>_)
REC|SELECT_CALL|LINE=33|NAME=same_state
REC|SELECT_CALL|LINE=33|AST=g.same_state(baseline, current, TARGET_VMID)
REC|SELECT_CALL|LINE=34|NAME=need
REC|SELECT_CALL|LINE=34|AST=need(_j_vmid_ for j in rows_ == set(by_id), _<S>_)
REC|SELECT_CALL|LINE=36|NAME=need
REC|SELECT_CALL|LINE=36|AST=need(row_config_sha256_ == by_id_row_vmid_config_sha256_, _<S>_)
REC|SELECT_CALL|LINE=38|NAME=need
REC|SELECT_CALL|LINE=38|AST=need(len(selected) == 1, _CT112_NOT_UNIQUE_)
REC|SELECT_CALL|LINE=39|NAME=validate_job
REC|SELECT_CALL|LINE=39|AST=old.validate_job(job, now)
REC|SELECT_CALL|LINE=40|NAME=need
REC|SELECT_CALL|LINE=40|AST=need(current.get(_<S>_) == _, _<S>_)
REC|SELECT_CALL|LINE=41|NAME=need
REC|SELECT_CALL|LINE=41|AST=need(job.get(_compression_dependent_) is False and job.get(_configured_full_cycle_fits_) is True, _<S>_)
REC|SELECT_CALL|LINE=42|NAME=need
REC|SELECT_CALL|LINE=42|AST=need(type(disks) is list and len(disks) == 1, _<S>_)
REC|SELECT_CALL|LINE=44|NAME=need
REC|SELECT_CALL|LINE=44|AST=need(disk.get(_<S>_) == _rootfs_ and disk.get(_<S>_) == _<S>_ and (disk.get(_<S>_) in (_<S>_, _<S>_)), _<S>_)
REC|SELECT_CALL|LINE=46|NAME=need
REC|SELECT_CALL|LINE=46|AST=need(type(size) is int and 0 < size <= stream.MAX_BYTES and (size == disk.get(_<S>_)), _<S>_)
REC|SELECT_CALL|LINE=48|NAME=need
REC|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>_)
REC|SELECT_CALL|LINE=49|NAME=need
REC|SELECT_CALL|LINE=49|AST=need(type(st.get(_<S>_)) is int and st_<S>_ >= max(1024 _ 3, size), _<S>_)
REC|SELECT_CALL|LINE=50|NAME=require_target
REC|SELECT_CALL|LINE=50|AST=require_target(job, by_id_TARGET_VMID_config_sha256_)
HANDLER_BASELINE_FUNCTION_COUNT=1
HANDLER_BASELINE_ARGS=NONE
HANDLER_BASELINE_FIRST_LINE=31
HANDLER_BASELINE_TOP_LEVEL_STATEMENTS=3
REC|HANDLER_BASELINE|IDX=1|LINE=32
REC|HANDLER_BASELINE|IDX=1|KIND=Assign
REC|HANDLER_BASELINE|IDX=1|AST=b = t.read_secure(PLAN, 1024 _ 1024, private=True)_0_
REC|HANDLER_BASELINE|IDX=2|LINE=33
REC|HANDLER_BASELINE|IDX=2|KIND=If
REC|HANDLER_BASELINE|IDX=2|AST=if t.sha(b) _= PLAN_SHA: raise RuntimeError(_PLAN_REFERENCE_IDENTITY_)
REC|HANDLER_BASELINE|IDX=3|LINE=34
REC|HANDLER_BASELINE|IDX=3|KIND=Try
REC|HANDLER_BASELINE|IDX=3|AST=try: return json.loads(b.decode(_<S>_, _<S>_)) except (ValueError, UnicodeError): raise RuntimeError(_<S>_) from None
HANDLER_FRESH_FUNCTION_COUNT=1
HANDLER_FRESH_ARGS=now
HANDLER_FRESH_FIRST_LINE=42
HANDLER_FRESH_TOP_LEVEL_STATEMENTS=8
REC|HANDLER_FRESH|IDX=1|LINE=43
REC|HANDLER_FRESH|IDX=1|KIND=Assign
REC|HANDLER_FRESH|IDX=1|AST=rows = _json_cmd(_<S>_, _<S>_, _<S>_)
REC|HANDLER_FRESH|IDX=2|LINE=44
REC|HANDLER_FRESH|IDX=2|KIND=Assign
REC|HANDLER_FRESH|IDX=2|AST=stores = _json_cmd(_<S>_)
REC|HANDLER_FRESH|IDX=3|LINE=45
REC|HANDLER_FRESH|IDX=3|KIND=If
REC|HANDLER_FRESH|IDX=3|AST=if not isinstance(rows, list) or not isinstance(stores, list): raise RuntimeError(_<S>_)
REC|HANDLER_FRESH|IDX=4|LINE=46
REC|HANDLER_FRESH|IDX=4|KIND=Assign
REC|HANDLER_FRESH|IDX=4|AST=configs = _
REC|HANDLER_FRESH|IDX=5|LINE=47
REC|HANDLER_FRESH|IDX=5|KIND=For
REC|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>_)
REC|HANDLER_FRESH|IDX=6|LINE=52
REC|HANDLER_FRESH|IDX=6|KIND=Assign
REC|HANDLER_FRESH|IDX=6|AST=v = os.statvfs(STAGING)
REC|HANDLER_FRESH|IDX=7|LINE=52
REC|HANDLER_FRESH|IDX=7|KIND=Assign
REC|HANDLER_FRESH|IDX=7|AST=free = v.f_frsize _ v.f_bavail
REC|HANDLER_FRESH|IDX=8|LINE=53
REC|HANDLER_FRESH|IDX=8|KIND=Return
REC|HANDLER_FRESH|IDX=8|AST=return pve265.make_plan(rows, configs, stores, _defaults(), free, now, node=_pve01_)
HANDLER_RUN_FUNCTION_COUNT=1
HANDLER_RUN_ARGS=target,state_writer
HANDLER_RUN_FIRST_LINE=100
HANDLER_RUN_TOP_LEVEL_STATEMENTS=24
REC|HANDLER_RUN|IDX=1|LINE=101
REC|HANDLER_RUN|IDX=1|KIND=If
REC|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>_))
REC|HANDLER_RUN|IDX=2|LINE=102
REC|HANDLER_RUN|IDX=2|KIND=If
REC|HANDLER_RUN|IDX=2|AST=if _sha(PLAN, 1024 _ 1024) _= PLAN_SHA: raise RuntimeError(_PLAN_REFERENCE_IDENTITY_)
REC|HANDLER_RUN|IDX=3|LINE=103
REC|HANDLER_RUN|IDX=3|KIND=Assign
REC|HANDLER_RUN|IDX=3|AST=tools = _<S>_: _tool(VZDUMP, VZDUMP_SHA), _<S>_: _tool(ZSTD, ZSTD_SHA)_
REC|HANDLER_RUN|IDX=4|LINE=103
REC|HANDLER_RUN|IDX=4|KIND=Expr
REC|HANDLER_RUN|IDX=4|AST=_tool(RCLONE, RCLONE_SHA)
REC|HANDLER_RUN|IDX=5|LINE=104
REC|HANDLER_RUN|IDX=5|KIND=Assign
REC|HANDLER_RUN|IDX=5|AST=pvesh_sha = _sha(PVESH)
REC|HANDLER_RUN|IDX=6|LINE=104
REC|HANDLER_RUN|IDX=6|KIND=Assign
REC|HANDLER_RUN|IDX=6|AST=baseline = _baseline()
REC|HANDLER_RUN|IDX=7|LINE=104
REC|HANDLER_RUN|IDX=7|KIND=Assign
REC|HANDLER_RUN|IDX=7|AST=now = int(time.time())
REC|HANDLER_RUN|IDX=8|LINE=104
REC|HANDLER_RUN|IDX=8|KIND=Assign
REC|HANDLER_RUN|IDX=8|AST=current = _fresh_plan(now)
REC|HANDLER_RUN|IDX=9|LINE=104
REC|HANDLER_RUN|IDX=9|KIND=Assign
REC|HANDLER_RUN|IDX=9|AST=job = pve282.select112(current, baseline, now)
REC|HANDLER_RUN|IDX=10|LINE=105
REC|HANDLER_RUN|IDX=10|KIND=Assign
REC|HANDLER_RUN|IDX=10|AST=expected = job_config_sha256_
REC|HANDLER_RUN|IDX=11|LINE=105
REC|HANDLER_RUN|IDX=11|KIND=Assign
REC|HANDLER_RUN|IDX=11|AST=mapping = pve282.host_mapping()
REC|HANDLER_RUN|IDX=12|LINE=105
REC|HANDLER_RUN|IDX=12|KIND=Expr
REC|HANDLER_RUN|IDX=12|AST=pve282.validate_mapping(mapping)
REC|HANDLER_RUN|IDX=13|LINE=106
REC|HANDLER_RUN|IDX=13|KIND=FunctionDef
REC|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)
VZDUMP_CONFIG_BYTES=566
VZDUMP_CONFIG_TYPED_INPUT=str
DRY_RUN_STARTED=true
BASELINE_LOAD_OK=true
FRESH_PLAN_MAKE_OK=true
BASELINE_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
BASELINE_PLAN_TYPE=dict
BASELINE_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
BASELINE_PLAN_JOBS_TYPE=list
BASELINE_PLAN_JOB_COUNT=6
BASELINE_PLAN_VMID_LIST_HASH=b6b595ac377f78e071aca2ab359a7c7ae1bcb0485e68728a7c48f076f36cde40
BASELINE_PLAN_VM112_COUNT=1
BASELINE_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
BASELINE_PLAN_VM112_AGE_SECONDS=2223483
FRESH_PLAN_TYPE=dict
FRESH_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
FRESH_PLAN_JOBS_TYPE=list
FRESH_PLAN_JOB_COUNT=8
FRESH_PLAN_VMID_LIST_HASH=a6268963746816277a805ff5113847e826ba0ce06c0ae1cf316594a474670de6
FRESH_PLAN_VM112_COUNT=1
FRESH_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
FRESH_PLAN_VM112_AGE_SECONDS=6
BASELINE_LIVE_VM112_CHANGED_KEYS=blockers,coverage_eligible,global_defaults_sha256,observed_at
VM112_FIELD_CONFIG_SHA256_EQUAL=true
VM112_FIELD_GLOBAL_DEFAULTS_SHA256_EQUAL=false
VM112_FIELD_NODE_EQUAL=true
VM112_FIELD_VMID_EQUAL=true
VM112_FIELD_TYPE_EQUAL=true
VM112_FIELD_TEMPLATE_EQUAL=true
VM112_FIELD_BLOCKERS_EQUAL=false
VM112_FIELD_COVERAGE_ELIGIBLE_EQUAL=false
VM112_FIELD_COMPRESSION_DEPENDENT_EQUAL=true
VM112_FIELD_CONFIGURED_FULL_CYCLE_FITS_EQUAL=true
REAL_SELECT112_DRYRUN_SKIPPED=true
DECISION=PASS_SOURCE_AND_LIVE_PLAN_COMPARISON_RECORDED
NEXT_GATE=FIX_EXACT_PLAN_NOT_STABLE_MISMATCH_NOT_GUARD_BYPASS
CHANGES_MADE=false
ROLLBACK_STARTED=false
ROLLBACK_RESTORED=null
MUTATION_OUTCOME=NO_MUTATION
END_MARKER=true
HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-261008-CT112-PLAN-DATAFLOW-ROOT-99824R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null}
PLAN_DATAFLOW_PYTHON_RC=0
OUTPUT_END
CHAT_OUTPUT_END
+8 -8
View File
File diff suppressed because one or more lines are too long
+240 -38
View File
@@ -1,15 +1,15 @@
CHAT_OUTPUT_BEGIN
COMMAND_ID=SUPPORT-261008-CT112-PLAN-STABILITY-GATE-99823R1
COMMAND_ID=SUPPORT-261008-CT112-PLAN-DATAFLOW-ROOT-99824R1
STATUS=OK
RC=0
HOST=pve01
MODE=read-only
COMPONENT=ct112-plan-stability-gate
COMPONENT=ct112-plan-dataflow-root
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
COMMAND_SHA256=1a5770ba51dfc553a4d6c1f4cce407a4b474db5dc6651e273d3fc1d0967f85c0
COMMAND_SHA256=e556870d31392c4f44f6bf6b71f9a92b401d209eb60db4d0148f3eb69139f49a
DUPLICATE_FAILED_COMMAND_BLOCKED=false
EXECUTION_STARTED=true
CHANGE_DECLARED=false
@@ -24,49 +24,251 @@ MUTATION_OUTCOME=NO_MUTATION
SANITIZED=yes
SECRETS_INCLUDED=no
PRIVATE_ADDRESSES_INCLUDED=no
RAW_EVIDENCE_SHA256=2ba70d63d00effa7a30dfbff949a83b8e564af99bec2d3daffe08e322992ab19
SANITIZED_OUTPUT_SHA256=2ba70d63d00effa7a30dfbff949a83b8e564af99bec2d3daffe08e322992ab19
RAW_EVIDENCE_SHA256=7a58f71f363c8e390fd3b6af5b01d7f21d758c734e92ae73164c0e5358fa59b7
SANITIZED_OUTPUT_SHA256=7a58f71f363c8e390fd3b6af5b01d7f21d758c734e92ae73164c0e5358fa59b7
OUTPUT_BEGIN
CT112_PLAN_STABILITY_GATE=V1
CT112_PLAN_DATAFLOW_ROOT=V1
MODE=read-only
NO_MUTATION=true
NO_BACKUP_EXECUTION=true
NO_NETBIRD_DNS_SERVICE_MUTATION=true
WRAPPER_PIN_COUNT=1
ACTIVE_HANDLER_PIN_MATCH=true
P282_PIN_MATCH=true
ACCEPTED_PLAN_VM112_COUNT=1
ACCEPTED_PLAN_HAS_CONFIG_SHA=true
ACCEPTED_PLAN_OBSERVED_AT_TYPE=int
ACCEPTED_PLAN_AGE_SECONDS=2223130
ACCEPTED_PLAN_VM112_FIELD_NAMES=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
SCHEDULED_BACKUP_RESULT=success
SCHEDULED_BACKUP_ACTIVESTATE=inactive
SCHEDULED_BACKUP_SUBSTATE=dead
SELECT112_FUNCTION_COUNT=1
SELECT112_ARGS=current,baseline,now
SELECT112_FIRST_LINE=29
SELECT112_CALL_NAMES=deepcopy,get,len,max,need,plan_rows,require_target,same_state,set,type,validate_job
HANDLER_RUN_TARGET_FUNCTION_COUNT=1
HANDLER_RUN_TARGET_ARGS=target,state_writer
HANDLER_RUN_TARGET_FIRST_LINE=100
HANDLER_RUN_TARGET_CALL_NAMES=CloudLarge,LazyReader,RuntimeError,_baseline,_fresh_plan,_json_cmd,_private_config,_sha,_tool,close,exists,get,gmtime,host_mapping,int,isinstance,len,live_gate,mkdir,monotonic,no_active_tasks,produce,rmtree,run,run_flow,select112,state_writer,str,strftime,throw,time,token_hex,validate_mapping
HANDLER_FRESH_PLAN_FUNCTION_COUNT=1
HANDLER_FRESH_PLAN_ARGS=now
HANDLER_FRESH_PLAN_FIRST_LINE=42
HANDLER_FRESH_PLAN_CALL_NAMES=RuntimeError,_defaults,_json_cmd,get,isinstance,make_plan,statvfs,type
PLAN_NOT_STABLE_GUARD_COUNT=0
PROBE_EXCEPTION_TYPE=Gate
PROBE_HOLD_CODE=PLAN_NOT_STABLE_GUARD_NOT_UNIQUE
DECISION=HOLD_DIAGNOSTIC_NEEDS_CORRECTION
NEXT_GATE=READ_VERIFIED_PROBE_FAILURE
NO_MUTATION=true
PINNED_WRAPPER_COUNT=1
SOURCE_IDENTITIES_VALID=true
P282_SELECT112_FUNCTION_COUNT=1
P282_SELECT112_ARGS=current,baseline,now
P282_SELECT112_FIRST_LINE=29
P282_SELECT112_TOP_LEVEL_STATEMENTS=25
REC|P282_SELECT112|IDX=1|LINE=30
REC|P282_SELECT112|IDX=1|KIND=Assign
REC|P282_SELECT112|IDX=1|AST=rows = g.plan_rows(current)
REC|P282_SELECT112|IDX=2|LINE=30
REC|P282_SELECT112|IDX=2|KIND=Assign
REC|P282_SELECT112|IDX=2|AST=previous = g.plan_rows(baseline)
REC|P282_SELECT112|IDX=3|LINE=31
REC|P282_SELECT112|IDX=3|KIND=Assign
REC|P282_SELECT112|IDX=3|AST=by_id = _j_vmid_: j for j in previous_
REC|P282_SELECT112|IDX=4|LINE=32
REC|P282_SELECT112|IDX=4|KIND=Expr
REC|P282_SELECT112|IDX=4|AST=need(TARGET_VMID in by_id, _<S>_)
REC|P282_SELECT112|IDX=5|LINE=33
REC|P282_SELECT112|IDX=5|KIND=Expr
REC|P282_SELECT112|IDX=5|AST=g.same_state(baseline, current, TARGET_VMID)
REC|P282_SELECT112|IDX=6|LINE=34
REC|P282_SELECT112|IDX=6|KIND=Expr
REC|P282_SELECT112|IDX=6|AST=need(_j_vmid_ for j in rows_ == set(by_id), _<S>_)
REC|P282_SELECT112|IDX=7|LINE=35
REC|P282_SELECT112|IDX=7|KIND=For
REC|P282_SELECT112|IDX=7|AST=for row in rows: need(row_config_sha256_ == by_id_row_vmid_config_sha256_, _<S>_)
REC|P282_SELECT112|IDX=8|LINE=37
REC|P282_SELECT112|IDX=8|KIND=Assign
REC|P282_SELECT112|IDX=8|AST=selected = _j for j in rows if j_vmid_ == TARGET_VMID_
REC|P282_SELECT112|IDX=9|LINE=38
REC|P282_SELECT112|IDX=9|KIND=Expr
REC|P282_SELECT112|IDX=9|AST=need(len(selected) == 1, _CT112_NOT_UNIQUE_)
REC|P282_SELECT112|IDX=10|LINE=39
REC|P282_SELECT112|IDX=10|KIND=Assign
REC|P282_SELECT112|IDX=10|AST=job = copy.deepcopy(selected_0_)
REC|P282_SELECT112|IDX=11|LINE=39
REC|P282_SELECT112|IDX=11|KIND=Expr
REC|P282_SELECT112|IDX=11|AST=old.validate_job(job, now)
REC|P282_SELECT112|IDX=12|LINE=40
REC|P282_SELECT112|IDX=12|KIND=Expr
REC|P282_SELECT112|IDX=12|AST=need(current.get(_<S>_) == _, _<S>_)
REC|P282_SELECT112|IDX=13|LINE=41
REC|P282_SELECT112|IDX=13|KIND=Expr
REC|P282_SELECT112|IDX=13|AST=need(job.get(_compression_dependent_) is False and job.get(_configured_full_cycle_fits_) is True, _<S>_)
REC|P282_SELECT112|IDX=14|LINE=42
REC|P282_SELECT112|IDX=14|KIND=Assign
REC|P282_SELECT112|IDX=14|AST=disks = job.get(_disks_)
REC|P282_SELECT112|IDX=15|LINE=42
REC|P282_SELECT112|IDX=15|KIND=Expr
REC|P282_SELECT112|IDX=15|AST=need(type(disks) is list and len(disks) == 1, _<S>_)
REC|P282_SELECT112|IDX=16|LINE=43
REC|P282_SELECT112|IDX=16|KIND=Assign
REC|P282_SELECT112|IDX=16|AST=disk = disks_0_
REC|P282_SELECT112|IDX=17|LINE=44
REC|P282_SELECT112|IDX=17|KIND=Expr
REC|P282_SELECT112|IDX=17|AST=need(disk.get(_<S>_) == _rootfs_ and disk.get(_<S>_) == _<S>_ and (disk.get(_<S>_) in (_<S>_, _<S>_)), _<S>_)
REC|P282_SELECT112|IDX=18|LINE=45
REC|P282_SELECT112|IDX=18|KIND=Assign
REC|P282_SELECT112|IDX=18|AST=size = job.get(_<S>_)
REC|P282_SELECT112|IDX=19|LINE=46
REC|P282_SELECT112|IDX=19|KIND=Expr
REC|P282_SELECT112|IDX=19|AST=need(type(size) is int and 0 < size <= stream.MAX_BYTES and (size == disk.get(_<S>_)), _<S>_)
REC|P282_SELECT112|IDX=20|LINE=47
REC|P282_SELECT112|IDX=20|KIND=Assign
REC|P282_SELECT112|IDX=20|AST=stores = _x_<S>_: x for x in current.get(_<S>_, _)_
REC|P282_SELECT112|IDX=21|LINE=47
REC|P282_SELECT112|IDX=21|KIND=Assign
REC|P282_SELECT112|IDX=21|AST=st = stores.get(disk.get(_<S>_), _)
REC|P282_SELECT112|IDX=22|LINE=48
REC|P282_SELECT112|IDX=22|KIND=Expr
REC|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>_)
REC|P282_SELECT112|IDX=23|LINE=49
REC|P282_SELECT112|IDX=23|KIND=Expr
REC|P282_SELECT112|IDX=23|AST=need(type(st.get(_<S>_)) is int and st_<S>_ >= max(1024 _ 3, size), _<S>_)
REC|P282_SELECT112|IDX=24|LINE=50
REC|P282_SELECT112|IDX=24|KIND=Expr
REC|P282_SELECT112|IDX=24|AST=require_target(job, by_id_TARGET_VMID_config_sha256_)
P282_SELECT112_LINE30_AST=rows = g.plan_rows(current),previous = g.plan_rows(baseline)
REC|SELECT_CALL|LINE=30|NAME=plan_rows
REC|SELECT_CALL|LINE=30|AST=g.plan_rows(current)
REC|SELECT_CALL|LINE=30|NAME=plan_rows
REC|SELECT_CALL|LINE=30|AST=g.plan_rows(baseline)
REC|SELECT_CALL|LINE=32|NAME=need
REC|SELECT_CALL|LINE=32|AST=need(TARGET_VMID in by_id, _<S>_)
REC|SELECT_CALL|LINE=33|NAME=same_state
REC|SELECT_CALL|LINE=33|AST=g.same_state(baseline, current, TARGET_VMID)
REC|SELECT_CALL|LINE=34|NAME=need
REC|SELECT_CALL|LINE=34|AST=need(_j_vmid_ for j in rows_ == set(by_id), _<S>_)
REC|SELECT_CALL|LINE=36|NAME=need
REC|SELECT_CALL|LINE=36|AST=need(row_config_sha256_ == by_id_row_vmid_config_sha256_, _<S>_)
REC|SELECT_CALL|LINE=38|NAME=need
REC|SELECT_CALL|LINE=38|AST=need(len(selected) == 1, _CT112_NOT_UNIQUE_)
REC|SELECT_CALL|LINE=39|NAME=validate_job
REC|SELECT_CALL|LINE=39|AST=old.validate_job(job, now)
REC|SELECT_CALL|LINE=40|NAME=need
REC|SELECT_CALL|LINE=40|AST=need(current.get(_<S>_) == _, _<S>_)
REC|SELECT_CALL|LINE=41|NAME=need
REC|SELECT_CALL|LINE=41|AST=need(job.get(_compression_dependent_) is False and job.get(_configured_full_cycle_fits_) is True, _<S>_)
REC|SELECT_CALL|LINE=42|NAME=need
REC|SELECT_CALL|LINE=42|AST=need(type(disks) is list and len(disks) == 1, _<S>_)
REC|SELECT_CALL|LINE=44|NAME=need
REC|SELECT_CALL|LINE=44|AST=need(disk.get(_<S>_) == _rootfs_ and disk.get(_<S>_) == _<S>_ and (disk.get(_<S>_) in (_<S>_, _<S>_)), _<S>_)
REC|SELECT_CALL|LINE=46|NAME=need
REC|SELECT_CALL|LINE=46|AST=need(type(size) is int and 0 < size <= stream.MAX_BYTES and (size == disk.get(_<S>_)), _<S>_)
REC|SELECT_CALL|LINE=48|NAME=need
REC|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>_)
REC|SELECT_CALL|LINE=49|NAME=need
REC|SELECT_CALL|LINE=49|AST=need(type(st.get(_<S>_)) is int and st_<S>_ >= max(1024 _ 3, size), _<S>_)
REC|SELECT_CALL|LINE=50|NAME=require_target
REC|SELECT_CALL|LINE=50|AST=require_target(job, by_id_TARGET_VMID_config_sha256_)
HANDLER_BASELINE_FUNCTION_COUNT=1
HANDLER_BASELINE_ARGS=NONE
HANDLER_BASELINE_FIRST_LINE=31
HANDLER_BASELINE_TOP_LEVEL_STATEMENTS=3
REC|HANDLER_BASELINE|IDX=1|LINE=32
REC|HANDLER_BASELINE|IDX=1|KIND=Assign
REC|HANDLER_BASELINE|IDX=1|AST=b = t.read_secure(PLAN, 1024 _ 1024, private=True)_0_
REC|HANDLER_BASELINE|IDX=2|LINE=33
REC|HANDLER_BASELINE|IDX=2|KIND=If
REC|HANDLER_BASELINE|IDX=2|AST=if t.sha(b) _= PLAN_SHA: raise RuntimeError(_PLAN_REFERENCE_IDENTITY_)
REC|HANDLER_BASELINE|IDX=3|LINE=34
REC|HANDLER_BASELINE|IDX=3|KIND=Try
REC|HANDLER_BASELINE|IDX=3|AST=try: return json.loads(b.decode(_<S>_, _<S>_)) except (ValueError, UnicodeError): raise RuntimeError(_<S>_) from None
HANDLER_FRESH_FUNCTION_COUNT=1
HANDLER_FRESH_ARGS=now
HANDLER_FRESH_FIRST_LINE=42
HANDLER_FRESH_TOP_LEVEL_STATEMENTS=8
REC|HANDLER_FRESH|IDX=1|LINE=43
REC|HANDLER_FRESH|IDX=1|KIND=Assign
REC|HANDLER_FRESH|IDX=1|AST=rows = _json_cmd(_<S>_, _<S>_, _<S>_)
REC|HANDLER_FRESH|IDX=2|LINE=44
REC|HANDLER_FRESH|IDX=2|KIND=Assign
REC|HANDLER_FRESH|IDX=2|AST=stores = _json_cmd(_<S>_)
REC|HANDLER_FRESH|IDX=3|LINE=45
REC|HANDLER_FRESH|IDX=3|KIND=If
REC|HANDLER_FRESH|IDX=3|AST=if not isinstance(rows, list) or not isinstance(stores, list): raise RuntimeError(_<S>_)
REC|HANDLER_FRESH|IDX=4|LINE=46
REC|HANDLER_FRESH|IDX=4|KIND=Assign
REC|HANDLER_FRESH|IDX=4|AST=configs = _
REC|HANDLER_FRESH|IDX=5|LINE=47
REC|HANDLER_FRESH|IDX=5|KIND=For
REC|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>_)
REC|HANDLER_FRESH|IDX=6|LINE=52
REC|HANDLER_FRESH|IDX=6|KIND=Assign
REC|HANDLER_FRESH|IDX=6|AST=v = os.statvfs(STAGING)
REC|HANDLER_FRESH|IDX=7|LINE=52
REC|HANDLER_FRESH|IDX=7|KIND=Assign
REC|HANDLER_FRESH|IDX=7|AST=free = v.f_frsize _ v.f_bavail
REC|HANDLER_FRESH|IDX=8|LINE=53
REC|HANDLER_FRESH|IDX=8|KIND=Return
REC|HANDLER_FRESH|IDX=8|AST=return pve265.make_plan(rows, configs, stores, _defaults(), free, now, node=_pve01_)
HANDLER_RUN_FUNCTION_COUNT=1
HANDLER_RUN_ARGS=target,state_writer
HANDLER_RUN_FIRST_LINE=100
HANDLER_RUN_TOP_LEVEL_STATEMENTS=24
REC|HANDLER_RUN|IDX=1|LINE=101
REC|HANDLER_RUN|IDX=1|KIND=If
REC|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>_))
REC|HANDLER_RUN|IDX=2|LINE=102
REC|HANDLER_RUN|IDX=2|KIND=If
REC|HANDLER_RUN|IDX=2|AST=if _sha(PLAN, 1024 _ 1024) _= PLAN_SHA: raise RuntimeError(_PLAN_REFERENCE_IDENTITY_)
REC|HANDLER_RUN|IDX=3|LINE=103
REC|HANDLER_RUN|IDX=3|KIND=Assign
REC|HANDLER_RUN|IDX=3|AST=tools = _<S>_: _tool(VZDUMP, VZDUMP_SHA), _<S>_: _tool(ZSTD, ZSTD_SHA)_
REC|HANDLER_RUN|IDX=4|LINE=103
REC|HANDLER_RUN|IDX=4|KIND=Expr
REC|HANDLER_RUN|IDX=4|AST=_tool(RCLONE, RCLONE_SHA)
REC|HANDLER_RUN|IDX=5|LINE=104
REC|HANDLER_RUN|IDX=5|KIND=Assign
REC|HANDLER_RUN|IDX=5|AST=pvesh_sha = _sha(PVESH)
REC|HANDLER_RUN|IDX=6|LINE=104
REC|HANDLER_RUN|IDX=6|KIND=Assign
REC|HANDLER_RUN|IDX=6|AST=baseline = _baseline()
REC|HANDLER_RUN|IDX=7|LINE=104
REC|HANDLER_RUN|IDX=7|KIND=Assign
REC|HANDLER_RUN|IDX=7|AST=now = int(time.time())
REC|HANDLER_RUN|IDX=8|LINE=104
REC|HANDLER_RUN|IDX=8|KIND=Assign
REC|HANDLER_RUN|IDX=8|AST=current = _fresh_plan(now)
REC|HANDLER_RUN|IDX=9|LINE=104
REC|HANDLER_RUN|IDX=9|KIND=Assign
REC|HANDLER_RUN|IDX=9|AST=job = pve282.select112(current, baseline, now)
REC|HANDLER_RUN|IDX=10|LINE=105
REC|HANDLER_RUN|IDX=10|KIND=Assign
REC|HANDLER_RUN|IDX=10|AST=expected = job_config_sha256_
REC|HANDLER_RUN|IDX=11|LINE=105
REC|HANDLER_RUN|IDX=11|KIND=Assign
REC|HANDLER_RUN|IDX=11|AST=mapping = pve282.host_mapping()
REC|HANDLER_RUN|IDX=12|LINE=105
REC|HANDLER_RUN|IDX=12|KIND=Expr
REC|HANDLER_RUN|IDX=12|AST=pve282.validate_mapping(mapping)
REC|HANDLER_RUN|IDX=13|LINE=106
REC|HANDLER_RUN|IDX=13|KIND=FunctionDef
REC|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)
VZDUMP_CONFIG_BYTES=566
VZDUMP_CONFIG_TYPED_INPUT=str
DRY_RUN_STARTED=true
BASELINE_LOAD_OK=true
FRESH_PLAN_MAKE_OK=true
BASELINE_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
BASELINE_PLAN_TYPE=dict
BASELINE_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
BASELINE_PLAN_JOBS_TYPE=list
BASELINE_PLAN_JOB_COUNT=6
BASELINE_PLAN_VMID_LIST_HASH=b6b595ac377f78e071aca2ab359a7c7ae1bcb0485e68728a7c48f076f36cde40
BASELINE_PLAN_VM112_COUNT=1
BASELINE_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
BASELINE_PLAN_VM112_AGE_SECONDS=2223483
FRESH_PLAN_TYPE=dict
FRESH_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
FRESH_PLAN_JOBS_TYPE=list
FRESH_PLAN_JOB_COUNT=8
FRESH_PLAN_VMID_LIST_HASH=a6268963746816277a805ff5113847e826ba0ce06c0ae1cf316594a474670de6
FRESH_PLAN_VM112_COUNT=1
FRESH_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
FRESH_PLAN_VM112_AGE_SECONDS=6
BASELINE_LIVE_VM112_CHANGED_KEYS=blockers,coverage_eligible,global_defaults_sha256,observed_at
VM112_FIELD_CONFIG_SHA256_EQUAL=true
VM112_FIELD_GLOBAL_DEFAULTS_SHA256_EQUAL=false
VM112_FIELD_NODE_EQUAL=true
VM112_FIELD_VMID_EQUAL=true
VM112_FIELD_TYPE_EQUAL=true
VM112_FIELD_TEMPLATE_EQUAL=true
VM112_FIELD_BLOCKERS_EQUAL=false
VM112_FIELD_COVERAGE_ELIGIBLE_EQUAL=false
VM112_FIELD_COMPRESSION_DEPENDENT_EQUAL=true
VM112_FIELD_CONFIGURED_FULL_CYCLE_FITS_EQUAL=true
REAL_SELECT112_DRYRUN_SKIPPED=true
DECISION=PASS_SOURCE_AND_LIVE_PLAN_COMPARISON_RECORDED
NEXT_GATE=FIX_EXACT_PLAN_NOT_STABLE_MISMATCH_NOT_GUARD_BYPASS
CHANGES_MADE=false
ROLLBACK_STARTED=false
ROLLBACK_RESTORED=null
MUTATION_OUTCOME=NO_MUTATION
END_MARKER=true
HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-261008-CT112-PLAN-STABILITY-GATE-99823R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null}
PROBE_PYTHON_RC=0
HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-261008-CT112-PLAN-DATAFLOW-ROOT-99824R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null}
PLAN_DATAFLOW_PYTHON_RC=0
OUTPUT_END
CHAT_OUTPUT_END