CHAT_OUTPUT_BEGIN
COMMAND_ID=SUPPORT-261001-BACKUPV2-GREENRUN-REPLICA-SEMANTICS-99286R1
STATUS=OK
RC=0
HOST=pve01
MODE=read-only
COMPONENT=backupv2-greenrun-replica-semantics
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
COMMAND_SHA256=61da54040f32177be6f3809e8495cb184cceb11de39b9d9bf7eb6119c2720e57
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=f0929f6271f6d6f73ad0dba877ee9ff7adf6772ceb58510da01fc056a0920840
SANITIZED_OUTPUT_SHA256=f0929f6271f6d6f73ad0dba877ee9ff7adf6772ceb58510da01fc056a0920840
OUTPUT_BEGIN
BACKUPV2_GREENRUN_REPLICA_SEMANTICS=V1
INGRESS_HOSTKEY_SELF_BOUND=true
BACKUPV2_TARGETS_SHA_EXACT=true
BACKUPV2_RETIRED_US_NETBIRD_EXACT=true
FN_GREEN_RUN_PRESENT=true
FN_GREEN_RUN_PARAMS=label
FN_GREEN_RUN_DIRECT_CALLS=BackupError,append,backup_target,bootstrap_vps_keys,dumps,ensure_router_known_hosts,get,join,len,load_targets,print,sub,sum,upper
FN_GREEN_RUN_IF_TESTS=failures,_allocator_healthy_ in r
FN_GREEN_RUN_COMP_FILTERS=t.get(_green1_),t[_type_] _= _control_,t[_type_] == _control_
FN_GREEN_RUN_IMPORTANT_CALLS=load_targets(),bootstrap_vps_keys(targets),backup_target(t, green_verify=t[_type_] _= _control_)
FN_GREEN_RUN_RETURNS=0
FN_GREEN_RUN_KEYS=allocator_healthy,generation,green1,logical_id,payload_bytes,replicas,type
FN_GREEN_RUN_STRINGS=_CLOUD_BACKUP_TARGET_COUNT=,_CONTROL_VERIFY_TARGET_COUNT=,_GENERATION=,_REPLICAS=,_TARGET_COUNT=,_TARGET_FAILURES,generation,green1,logical_id,replicas
FN_BACKUP_TARGET_PRESENT=true
FN_BACKUP_TARGET_PARAMS=t,green_verify
FN_BACKUP_TARGET_DIRECT_CALLS=BackupError,Path,bool,capture_target,cleanup_source,control_verify,ensure_dir,epoch,exists,generation_id,reconstruct_replica,rmtree,unlink,upload_and_seal,validate_payload,write_state
FN_BACKUP_TARGET_IF_TESTS=t[_type_] == _control_,green_verify,pathlib.Path(payload).exists(),ha _= hb or ha _= manifest[_payload_sha256_]
FN_BACKUP_TARGET_COMP_FILTERS=NONE
FN_BACKUP_TARGET_IMPORTANT_CALLS=capture_target(t, gen, work),upload_and_seal(t, payload, meta),write_state(t[_logical_id_], _SUCCESS_, generation=gen, payload_sha256=manifest[_payload_sha256_], manifest_sha256=msha, replicas=manifest[_replicas_], green_verified=bool(green_verify), last_success_epoch=epoch()),reconstruct_replica(manifest, manifest[_replicas_][0], a),validate_payload(t, a),reconstruct_replica(manifest, manifest[_replicas_][1], b),validate_payload(t, b),write_state(t[_logical_id_], result, generation=gen, reason=e.code, sealed=sealed)
FN_BACKUP_TARGET_RETURNS=control_verify(t),{_logical_id_: t[_logical_id_], _generation_: gen, _result_: _SUCCESS_, _payload_bytes_: manifest[_payload_bytes_], _replicas_: 2, _allocator_healthy_: alloc[_healthy_]}
FN_BACKUP_TARGET_KEYS=allocator_healthy,generation,healthy,logical_id,payload_bytes,payload_sha256,replicas,result,type
FN_BACKUP_TARGET_STRINGS=GREEN_REPLICA_COMPARE,SUCCESS,generation,logical_id,replicas
FN_SELECT_REPLICAS_PRESENT=true
FN_SELECT_REPLICAS_PARAMS=rows,payload_bytes,reserve_bytes
FN_SELECT_REPLICAS_DIRECT_CALLS=BackupError,add,append,dict,get,isinstance,len,set,sort
FN_SELECT_REPLICAS_IF_TESTS=len(out) _= 2,not isinstance(r.get(_free_), int),r[_free_] < payload_bytes + reserve_bytes,r[_physical_] in phys,len(out) == 2
FN_SELECT_REPLICAS_COMP_FILTERS=NONE
FN_SELECT_REPLICAS_IMPORTANT_CALLS=NONE
FN_SELECT_REPLICAS_RETURNS=out
FN_SELECT_REPLICAS_KEYS=crypt,free,physical
FN_SELECT_REPLICAS_STRINGS=NONE
FN_UPLOAD_AND_SEAL_PRESENT=true
FN_UPLOAD_AND_SEAL_PARAMS=t,payload_path,source_meta
FN_UPLOAD_AND_SEAL_DIRECT_CALLS=BackupError,Path,allocator,canonical_json,make_manifest,part_plan,rclone_cat_bytes,rclone_cat_hash,rclone_rcat,remote_exists_any,remote_generation_path,sha256_bytes,sha256_file,stat,utcnow
FN_UPLOAD_AND_SEAL_IF_TESTS=remote_exists_any(t[_scope_], t[_logical_id_], gen),rclone_cat_bytes(base + _/manifest.json_) _= mb,rclone_cat_bytes(base + _/SEALED.json_) _= sb,got _= part[_sha256_]
FN_UPLOAD_AND_SEAL_COMP_FILTERS=NONE
FN_UPLOAD_AND_SEAL_IMPORTANT_CALLS=make_manifest(t[_scope_], t[_logical_id_], gen, n, psha, parts, reps, source_meta),rclone_rcat(base + _/manifest.json_, data=mb),rclone_rcat(base + _/SEALED.json_, data=sb),rclone_rcat(rp, source_path=payload_path, offset=part[_offset_], length=part[_bytes_]),rclone_cat_hash(rp, part[_bytes_]),rclone_cat_bytes(base + _/manifest.json_),rclone_cat_bytes(base + _/SEALED.json_)
FN_UPLOAD_AND_SEAL_RETURNS=(manifest, msha, {_unhealthy_: bad, _healthy_: healthy})
FN_UPLOAD_AND_SEAL_KEYS=bytes,crypt,generation,healthy,logical_id,manifest_sha256,name,offset,payload_sha256,schema,scope,sealed_at_utc,sha256,status,unhealthy
FN_UPLOAD_AND_SEAL_STRINGS=/manifest.json,GENERATION_COLLISION,MANIFEST_READBACK_MISMATCH,generation,logical_id,manifest_sha256
FN_WRITE_STATE_PRESENT=true
FN_WRITE_STATE_PARAMS=logical_id,result
FN_WRITE_STATE_DIRECT_CALLS=BackupError,atomic_write,canonical_json,epoch,utcnow
FN_WRITE_STATE_IF_TESTS=result not in RESULT_CLASSES,result == _SUCCESS_
FN_WRITE_STATE_COMP_FILTERS=NONE
FN_WRITE_STATE_IMPORTANT_CALLS=NONE
FN_WRITE_STATE_RETURNS=j
FN_WRITE_STATE_KEYS=last_success_epoch,logical_id,result,schema,updated_at_utc
FN_WRITE_STATE_STRINGS=SUCCESS,last_success_epoch,logical_id,state
FN_SCHEDULED_RUN_PRESENT=true
FN_SCHEDULED_RUN_PARAMS=NONE
FN_SCHEDULED_RUN_DIRECT_CALLS=backup_target,choose_due_target,load_state_all,load_targets,print
FN_SCHEDULED_RUN_IF_TESTS=t is None
FN_SCHEDULED_RUN_COMP_FILTERS=NONE
FN_SCHEDULED_RUN_IMPORTANT_CALLS=load_targets(),choose_due_target(targets, state),backup_target(t, green_verify=False)
FN_SCHEDULED_RUN_RETURNS=0,0,2
FN_SCHEDULED_RUN_KEYS=logical_id
FN_SCHEDULED_RUN_STRINGS=SCHEDULE_DECISION=DEFER_NO_DUE_TARGET,SCHEDULE_RESULT=SUCCESS,SCHEDULE_TARGET=,logical_id
FN_CHOOSE_DUE_TARGET_PRESENT=true
FN_CHOOSE_DUE_TARGET_PARAMS=targets,state,now
FN_CHOOSE_DUE_TARGET_DIRECT_CALLS=append,epoch,get,int,max,sort
FN_CHOOSE_DUE_TARGET_IF_TESTS=not c,not t.get(_enabled_, True),last == 0 or age >= due
FN_CHOOSE_DUE_TARGET_COMP_FILTERS=NONE
FN_CHOOSE_DUE_TARGET_IMPORTANT_CALLS=NONE
FN_CHOOSE_DUE_TARGET_RETURNS=c[0][3],None
FN_CHOOSE_DUE_TARGET_KEYS=due_seconds,enabled,last_success_epoch,logical_id
FN_CHOOSE_DUE_TARGET_STRINGS=due_seconds,enabled,last_success_epoch,logical_id
FN_RCLONE_RCAT_PRESENT=true
FN_RCLONE_RCAT_PARAMS=remote_path,source_path,offset,length,data,timeout
FN_RCLONE_RCAT_DIRECT_CALLS=BackupError,Popen,close,communicate,kill,len,min,open,rclone_base_args,read,seek,str,write
FN_RCLONE_RCAT_IF_TESTS=p.returncode _= 0,data is not None,not b
FN_RCLONE_RCAT_COMP_FILTERS=NONE
FN_RCLONE_RCAT_IMPORTANT_CALLS=NONE
FN_RCLONE_RCAT_RETURNS=NONE
FN_RCLONE_RCAT_KEYS=NONE
FN_RCLONE_RCAT_STRINGS=RCLONE_RCAT_FAILED
FN_MAKE_MANIFEST_PRESENT=true
FN_MAKE_MANIFEST_PARAMS=scope,logical_id,generation,payload_bytes,payload_sha256,parts,replicas,source_meta
FN_MAKE_MANIFEST_DIRECT_CALLS=BackupError,fullmatch,int,len,sum,utcnow
FN_MAKE_MANIFEST_IF_TESTS=len(replicas) _= 2 or len({r[_physical_] for r in replicas}) _= 2,not re.fullmatch(_[0-9a-f]{64}_, payload_sha256),sum((int(p[_bytes_]) for p in parts)) _= payload_bytes
FN_MAKE_MANIFEST_COMP_FILTERS=NONE
FN_MAKE_MANIFEST_IMPORTANT_CALLS=NONE
FN_MAKE_MANIFEST_RETURNS={_schema_: 2, _scope_: scope, _logical_id_: logical_id, _generation_: generation, _created_at_utc_: utcnow(), _payload_bytes_: payload_bytes, _payload_sha256_: payload_sha256, _part_size_: PART_SIZE, _parts_: parts, _replicas_: [{_crypt_: r[_crypt_], _physical_: r[_physical_]} for r in replicas], _source_meta_: source_meta}
FN_MAKE_MANIFEST_KEYS=bytes,created_at_utc,crypt,generation,logical_id,part_size,parts,payload_bytes,payload_sha256,physical,replicas,schema,scope,source_meta
FN_MAKE_MANIFEST_STRINGS=MANIFEST_PART_TOTAL_MISMATCH,MANIFEST_PAYLOAD_SHA_INVALID,MANIFEST_REPLICA_PHYSICAL_DUPLICATE,generation,logical_id,replicas
FN_GENERATION_ID_PRESENT=true
FN_GENERATION_ID_PARAMS=logical_id
FN_GENERATION_ID_DIRECT_CALLS=hex,now,strftime,urandom
FN_GENERATION_ID_IF_TESTS=NONE
FN_GENERATION_ID_COMP_FILTERS=NONE
FN_GENERATION_ID_IMPORTANT_CALLS=NONE
FN_GENERATION_ID_RETURNS=f_v2-{logical_id}-{ts}-{os.urandom(6).hex()}_
FN_GENERATION_ID_KEYS=NONE
FN_GENERATION_ID_STRINGS=NONE
FN_LOAD_TARGETS_PRESENT=true
FN_LOAD_TARGETS_PARAMS=NONE
FN_LOAD_TARGETS_DIRECT_CALLS=BackupError,get,isinstance,len,loads,read_text,set
FN_LOAD_TARGETS_IF_TESTS=j.get(_schema_) _= 1 or not isinstance(j.get(_targets_), list),len(ids) _= len(set(ids))
FN_LOAD_TARGETS_COMP_FILTERS=NONE
FN_LOAD_TARGETS_IMPORTANT_CALLS=NONE
FN_LOAD_TARGETS_RETURNS=j[_targets_]
FN_LOAD_TARGETS_KEYS=logical_id,schema,targets
FN_LOAD_TARGETS_STRINGS=TARGET_MANIFEST_DUPLICATE,TARGET_MANIFEST_SCHEMA,logical_id,targets
FN_BOOTSTRAP_VPS_KEYS_PRESENT=true
FN_BOOTSTRAP_VPS_KEYS_PARAMS=targets
FN_BOOTSTRAP_VPS_KEYS_DIRECT_CALLS=BackupError,decode,ensure_vps_known_hosts,get,operator_key_fingerprint,run,str,strip,vps_run
FN_BOOTSTRAP_VPS_KEYS_IF_TESTS=t[_type_] not in (_vps_md_, _vps_spb_),probe.returncode == 0,not os.environ.get(_SSH_AUTH_SOCK_),tag not in (_ADDED_, _ALREADY_)
FN_BOOTSTRAP_VPS_KEYS_COMP_FILTERS=x[_type_] == _vps_us_
FN_BOOTSTRAP_VPS_KEYS_IMPORTANT_CALLS=NONE
FN_BOOTSTRAP_VPS_KEYS_RETURNS=results
FN_BOOTSTRAP_VPS_KEYS_KEYS=SSH_AUTH_SOCK,logical_id,type
FN_BOOTSTRAP_VPS_KEYS_STRINGS=SSH_AUTH_SOCK,logical_id,ssh-keygen
FN_VPS_SSH_ARGV_PRESENT=true
FN_VPS_SSH_ARGV_PARAMS=t
FN_VPS_SSH_ARGV_DIRECT_CALLS=str
FN_VPS_SSH_ARGV_IF_TESTS=use_agent
FN_VPS_SSH_ARGV_COMP_FILTERS=NONE
FN_VPS_SSH_ARGV_IMPORTANT_CALLS=NONE
FN_VPS_SSH_ARGV_RETURNS=a
FN_VPS_SSH_ARGV_KEYS=host,port,user
FN_VPS_SSH_ARGV_STRINGS=IdentityAgent=none,StrictHostKeyChecking=yes
FN_CAPTURE_VPS_US_PRESENT=true
FN_CAPTURE_VPS_US_PARAMS=t,gen,work
FN_CAPTURE_VPS_US_DIRECT_CALLS=join,pipe_to_zstd,vps_ssh_argv
FN_CAPTURE_VPS_US_IF_TESTS=NONE
FN_CAPTURE_VPS_US_COMP_FILTERS=NONE
FN_CAPTURE_VPS_US_IMPORTANT_CALLS=NONE
FN_CAPTURE_VPS_US_RETURNS=(payload, {_generation_: gen, _source_class_: _vps_us_, _consistency_: _SQLITE_ONLINE_BACKUP_PLUS_NONDB_FILES_, _sqlite_count_: 4}, None)
FN_CAPTURE_VPS_US_KEYS=consistency,generation,source_class,sqlite_count
FN_CAPTURE_VPS_US_STRINGS=generation
MAIN_IF_TESTS=len(argv) < 2,cmd == _selftest_,cmd == _green1_,cmd == _green2_,cmd == _scheduled_,cmd == _discover_ and len(argv) == 3
MAIN_IMPORTANT_CALLS=selftest(),green_run(_GREEN1_),green_run(_GREEN2_),scheduled_run(),discover(argv[2])
CALLSITE_GREEN_RUN=green_run(_GREEN1_),green_run(_GREEN2_)
CALLSITE_SCHEDULED_RUN=scheduled_run()
CALLSITE_BACKUP_TARGET=backup_target(t, green_verify=False),backup_target(t, green_verify=t[_type_] _= _control_)
CALLSITE_SELECT_REPLICAS=select_replicas(rows, payload_bytes, RESERVE_BYTES)
CALLSITE_UPLOAD_AND_SEAL=upload_and_seal(t, payload, meta)
CALLSITE_WRITE_STATE=write_state(t[_logical_id_], _SUCCESS_, generation=gen, verification=_existing_control_engine_verify_, last_success_epoch=epoch()),write_state(t[_logical_id_], _SUCCESS_, generation=gen, payload_sha256=manifest[_payload_sha256_], manifest_sha256=msha, replicas=manifest[_replicas_], green_verified=bool(green_verify), last_success_epoch=epoch()),write_state(t[_logical_id_], result, generation=gen, reason=e.code, sealed=sealed)
TARGET_VPS_US_COUNT=1
TARGET_VPS_US_1_SAFE={"due_seconds":86400,"enabled":false,"green1":true,"logical_id":"us-netbird","port":22,"scope":"vps","type":"vps_us","user":"root"}
TARGET_VPS_MD_COUNT=1
TARGET_VPS_MD_1_SAFE={"due_seconds":86400,"enabled":false,"green1":true,"logical_id":"md-relay","port":22,"scope":"vps","type":"vps_md","user":"ops"}
TARGET_VPS_SPB_COUNT=1
TARGET_VPS_SPB_1_SAFE={"due_seconds":86400,"enabled":false,"green1":true,"logical_id":"spb-ingress","port":22,"scope":"vps","type":"vps_spb","user":"edgeadmin"}
US_NETBIRD_AST_OCCURRENCES={t[_logical_id_] for t in default_targets() if t.get(_green1_)} == {_ct112_, _node-pve01_, _md-relay_, _spb-ingress_, _us-netbird_, _router-netcraze_, _xf-codevipe_, _xf-zakrutim_, _control-bootstrap-v2_}
BACKUPV2_SERVICE_EXECSTART=/usr/local/sbin/homelab-backup-v2 scheduled
BACKUPV2_TIMER_ACTIVE=active
BACKUPV2_TIMER_ENABLED=enabled
BACKUPV2_GREENRUN_REPLICA_READY=true
DECISION=PASS_BACKUPV2_GREENRUN_REPLICA_SEMANTICS
NEXT_GATE=FINAL_BACKUPV2_NEW_TARGET_INTEGRATION_AND_GLOBAL_CLOSEOUT
TASK_RESULT=BACKUPV2_GREENRUN_REPLICA_SEMANTICS
CHANGES_MADE=false
ROLLBACK_STARTED=false
ROLLBACK_RESTORED=null
MUTATION_OUTCOME=NO_MUTATION
HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-261001-BACKUPV2-GREENRUN-REPLICA-SEMANTICS-99286R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null}

OUTPUT_END
CHAT_OUTPUT_END
