CHAT_OUTPUT_BEGIN
COMMAND_ID=NEWFI-260922-NEWFDOM-DR221-418-OWNER-FD-PHASE-RCA419R1
STATUS=OK
RC=0
HOST=pve01
MODE=read-only
COMPONENT=newfi-dr221-418-owner-fd-phase-rca
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
COMMAND_SHA256=086ee022e9b084cfd4a2a9e59bd32b52470059e7d8713bec3b59065215adf353
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=ff062154f98216b8725381d01e1dd68d7dcceaa4097f2011a73103ceb6b600ad
SANITIZED_OUTPUT_SHA256=ff062154f98216b8725381d01e1dd68d7dcceaa4097f2011a73103ceb6b600ad
OUTPUT_BEGIN
NEWFI419_BEGIN=true
COMMAND_ID=NEWFI-260922-NEWFDOM-DR221-418-OWNER-FD-PHASE-RCA419R1
MODE=read-only
COMPONENT=newfi-dr221-418-owner-fd-phase-rca
TARGET=EXACT_CURRENT_HOMELAB_BACKUP_V2_OWNER_PHASE_AND_PROGRESS
MUTATION_BOUNDARY=NONE;PROC_AND_SOURCE_READ_ONLY;NO_SIGNAL;NO_PTRACE;NO_KILL;NO_SYSTEMD_ACTION;NO_BACKUP;NO_CLOUD_WRITE;NO_VM_WRITE;NO_GIT_WRITE
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
RUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d
BACKUP_WRAPPER_SHA256=5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2
ACCEPTED_RELEASE=/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b
ACCEPTED_RELEASE_GATE=PASS
RUNTIME_SOURCE_PHASE_HINTS_BEGIN=true
RUNTIME_SOURCE_FILE=entry504.py|SHA256=ca6876fa9c3b1465b045344a8ad46962de16972c7dadc4ac6257c7d225047793
1-from __future__ import annotations
2:import hashlib, importlib, json, os, pathlib, stat, sys, types
3-
4-BASE=pathlib.Path('/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1')
--
16-
17-def _sha(p):
18:    h=hashlib.sha256()
19-    with open(p,'rb',buffering=0) as f:
20-        while True:
--
41-    def __setattr__(self,n,v): self._g[n]=v
42-
43:def _wire(wrapper,lxc_adapter,qemu_adapter,scheduler_adapter,base=BASE):
44-    legacy_path=(pathlib.Path(base)/'legacy_engine.py').resolve()
45-    found={}
--
48-            g=vars(value); raw=g.get('__file__')
49-        elif isinstance(value,types.FunctionType):
50:            g=value.__globals__; raw=g.get('__file__')
51-        else:
52-            continue
--
79-    if g.get('choose_due_target') is not scheduler_wired['choose_due_target'] or g.get('write_state') is not scheduler_wired['write_state']:
80-        raise RuntimeError('SCHEDULER_ADAPTER_BIND_RESULT')
81:    return {'legacy_globals':g,'legacy':proxy,'original_capture':original,'qemu_patched_capture':qemu_patched,'patched_capture':patched,'scheduler_wired':scheduler_wired}
82-
83-def _load():
--
86-    sys.path.insert(0,str(BASE))
87-    wrapper=importlib.import_module('wrapper')
88:    # Baseline accepted wrapper selftest stays the compatibility gate; no full old legacy selftest is reintroduced.
89:    wrapper.selftest()
90-    sys.path.insert(0,str(HERE))
91-    lxc_adapter=importlib.import_module('lxc_adapter')
--
97-    return wrapper,lxc_adapter,qemu_adapter,scheduler_adapter,wired
98-
99:def _target(wrapper,lid):
100-    rows=wrapper.load_targets(); hits=[x for x in rows if x.get('logical_id')==lid]
101-    if len(hits)!=1: raise RuntimeError('TARGET_CARDINALITY')
102-    return hits[0]
103-
104:def selftest():
105-    wrapper,lxc_adapter,qemu_adapter,scheduler_adapter,wired=_load()
106:    if wired['legacy_globals'].get('capture_pve_guest') is not wired['patched_capture']:
107-        raise RuntimeError('PATCH_BINDING')
108:    if wired['legacy_globals'].get('choose_due_target') is not wired['scheduler_wired']['choose_due_target']:
109-        raise RuntimeError('SCHEDULER_CHOOSE_BINDING')
110:    if wired['legacy_globals'].get('write_state') is not wired['scheduler_wired']['write_state']:
111-        raise RuntimeError('SCHEDULER_WRITE_BINDING')
112-    if [scheduler_adapter.backoff_seconds(n) for n in range(1,7)]!=[1800,3600,7200,14400,21600,21600]:
--
119-def main(argv=None):
120-    argv=list(sys.argv[1:] if argv is None else argv)
121:    if argv==['selftest']:
122:        return selftest()
123-    wrapper,lxc_adapter,qemu_adapter,scheduler_adapter,wired=_load()
124-    legacy=wired['legacy']
125-    if argv==['scheduler-proof']:
126-        import tempfile
127:        legacy=wired['legacy']; g=wired['legacy_globals']
128-        old_root=g.get('STATE_ROOT'); old_epoch=g.get('epoch')
129-        if old_root is None or not callable(old_epoch): raise RuntimeError('SCHEDULER_PROOF_BASE')
--
133-                g['STATE_ROOT']=pathlib.Path(td); (g['STATE_ROOT']/'state').mkdir(mode=0o700)
134-                g['epoch']=lambda: now[0]
135:                common={'payload_sha256':'a'*64,'manifest_sha256':'b'*64,'replicas':['proof-r1','proof-r2']}
136-                legacy.write_state('proof-a','SUCCESS',generation='proof-a-good',**common)
137-                legacy.write_state('proof-b','SUCCESS',generation='proof-b-good',**common)
RUNTIME_SOURCE_FILE=scheduler_adapter.py|SHA256=a6f67159a64067773323f028126e3109e15cf17a8142cea5e6129970f1d4da96
35-    if prior.get('result')=='SUCCESS':
36-        out={'last_success_epoch':_as_nonneg_int(prior.get('last_success_epoch'),0)}
37:        mapping=(('generation','last_success_generation'),('payload_sha256','last_success_payload_sha256'),
38:                 ('manifest_sha256','last_success_manifest_sha256'),('replicas','last_success_replicas'),
39-                 ('green_verified','last_success_green_verified'))
40-        for src,dst in mapping:
--
42-        return out
43-    out={}
44:    for k in ('last_success_epoch','last_success_generation','last_success_payload_sha256',
45:              'last_success_manifest_sha256','last_success_replicas','last_success_green_verified'):
46-        if k in prior: out[k]=prior[k]
47-    return out
--
53-    _need(hasattr(legacy,'STATE_ROOT'),'LEGACY_STATE_ROOT_REQUIRED')
54-
55:    def choose_due_target(targets,state,now=None):
56-        now=_as_nonneg_int(legacy.epoch() if now is None else now,0)
57-        _need(isinstance(targets,list) and isinstance(state,dict),'SCHEDULER_INPUT_SCHEMA')
RUNTIME_SOURCE_FILE=producer_exec_helper.py|SHA256=b3b97099bcd7126670f866e81faae6a42a96d869d9989e6a67f6ea6c871c90b3
1-from __future__ import annotations
2:import hashlib, json, os, pathlib, sys
3-
4-BASE=pathlib.Path('/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411')
--
8-
9-def sha_file(p:pathlib.Path)->str:
10:    h=hashlib.sha256()
11-    with open(p,'rb',buffering=0) as f:
12-        for b in iter(lambda:f.read(1<<20),b''): h.update(b)
--
19-    p=parent/'PRODUCER_PROCESS.json'
20-    if not p.is_file() or p.is_symlink(): return None
21:    try: d=json.loads(p.read_bytes())
22-    except Exception: return {'summary_read':'FAILED'}
23:    keys=('process_started','producer_rc','capture_success','archive_bytes','stderr_bytes_observed','stderr_bytes_retained','stderr_truncated','stderr_stream_sha256','raw_stderr_exported','child_umask')
24-    return {k:d.get(k) for k in keys if k in d}
25-
26:def selftest()->int:
27-    if sha_file(VZDUMP)!=VZDUMP_SHA: fail('VZDUMP_IDENTITY')
28-    sys.path.insert(0,str(BASE))
--
33-
34-def main()->int:
35:    if sys.argv[1:]==['selftest']: return selftest()
36-    if sys.argv[1:]: fail('ARGC')
37-    raw=sys.stdin.buffer.read(MAX_INPUT+1)
--
61-    except Exception as e:
62-        out={'status':'FAIL','exception_class':type(e).__module__+'.'+type(e).__name__,
63:             'exception_message_sha256':hashlib.sha256(str(e).encode()).hexdigest(),
64-             'process':safe_process_summary(dest.parent)}
65-        print(json.dumps(out,separators=(',',':'),sort_keys=True),flush=True)
--
70-    except Exception as e:
71-        print(json.dumps({'status':'FAIL','exception_class':type(e).__module__+'.'+type(e).__name__,
72:                          'exception_message_sha256':hashlib.sha256(str(e).encode()).hexdigest(),
73-                          'process':None},separators=(',',':'),sort_keys=True),flush=True)
74-        raise SystemExit(2)
RUNTIME_SOURCE_PHASE_HINTS_END=true
MainPID=335341
Result=success
ExecMainStartTimestamp=Tue 2026-09-22 14:51:24 MSK
ExecMainExitTimestamp=
ExecMainPID=335341
ExecMainStatus=0
LoadState=loaded
ActiveState=activating
SubState=start
InvocationID=124bde99379341a1bf82f318f31f9621
OWNER_PID_START=335341
OWNER_INVOCATION_ID=124bde99379341a1bf82f318f31f9621
HEAVY_LOCK_START=BUSY
CURRENT_INVOCATION_JOURNAL_LINES=1
CURRENT_INVOCATION_JOURNAL_SHA256=25b081a572c3c2feb67855d9294cbfad87cb01cd703b722db59fce65e936bf6b
CURRENT_INVOCATION_JOURNAL_BEGIN=true
2026-09-22T14:51:25+03:00 pve01 homelab-backup-v2[335341]: SELFTEST_REPLACEMENT486=PASS
CURRENT_INVOCATION_JOURNAL_END=true
CURRENT_INVOCATION_SELFTEST_PASS=true
CURRENT_INVOCATION_TARGET_SEEN=false
CURRENT_INVOCATION_RESULT_SEEN=false
CURRENT_INVOCATION_LATEST_TARGET=NONE
PROC_SNAPSHOT_BEGIN=A
PROC_PRESENT_A=true
 335341       1   10152 S  0.0  0.0 homelab-backup- /usr/bin/python3 /usr/local/sbin/homelab-backup-v2 scheduled
WCHAN_A=poll_schedule_timeout.constprop.0
SYSCALL_A=7 [PTR] [PTR] [PTR] [PTR] [PTR] [PTR] [PTR] [PTR]
IO_A_rchar=2172298800
IO_A_wchar=1354968903
IO_A_syscr=838052
IO_A_syscw=96420
IO_A_read_bytes=0
IO_A_write_bytes=570032128
STATUS_A_STATE=S
CTX_A_VOL=31893
CTX_A_INVOL=288
FD_COUNT_A=7
FD_A|fd=0|cat=DEV|pos=0|size=0|base=null|path_sha16=fd5d32feb2d35625
FD_A|fd=1|cat=SOCKET|pos=0|size=NA|base=NA|path_sha16=feb8f1e1f9e2ba39
FD_A|fd=2|cat=SOCKET|pos=0|size=NA|base=NA|path_sha16=feb8f1e1f9e2ba39
FD_A|fd=3|cat=BACKUP_RUN|pos=0|size=0|base=homelab-backup-heavy.lock|path_sha16=2642241b0beaa737
FD_A|fd=4|cat=OTHER_FILE|pos=570032128|size=570032128|base=payload.tar.zst|path_sha16=a5bf89245089a1c8
FD_A|fd=5|cat=PIPE|pos=0|size=NA|base=NA|path_sha16=18f487fd1dca338f
FD_A|fd=7|cat=PIPE|pos=0|size=NA|base=NA|path_sha16=6f3886873903d4f2
CHILDREN_A
 903072  335341       1 S ssh             /usr/bin/ssh -o BatchMode=yes -o StrictHostKeyChecking=yes root@pve02 PATH=/usr/sbin:/usr/bin:/sbin:/bin; export PATH; exec qm guest exec 160 --synchronous 1 --timeout 60 -- /usr/bin/python3 -I -B -c 'import base64,sys; p=sys.argv[1]; o=int(sys.argv[2]); n=int(sys.argv[3]); f=open(p,'"'"'rb'"'"'); f.seek(o); b=f.read(n); f.close(); sys.stdout.write(base64.b64encode(b).decode())' /tmp/homelab-v2-xf-0922T115125Z1b7415a2313b.tar.zst 570032128 131072
SOCKETS_A
PROC_SNAPSHOT_END=A
PROC_SNAPSHOT_BEGIN=B
PROC_PRESENT_B=true
 335341       1   10167 S  0.0  0.0 homelab-backup- /usr/bin/python3 /usr/local/sbin/homelab-backup-v2 scheduled
WCHAN_B=poll_schedule_timeout.constprop.0
SYSCALL_B=7 [PTR] [PTR] [PTR] [PTR] [PTR] [PTR] [PTR] [PTR]
IO_B_rchar=2175695809
IO_B_wchar=1357149803
IO_B_syscr=839397
IO_B_syscw=96576
IO_B_read_bytes=0
IO_B_write_bytes=570949632
STATUS_B_STATE=S
CTX_B_VOL=31943
CTX_B_INVOL=288
FD_COUNT_B=7
FD_B|fd=0|cat=DEV|pos=0|size=0|base=null|path_sha16=fd5d32feb2d35625
FD_B|fd=1|cat=SOCKET|pos=0|size=NA|base=NA|path_sha16=feb8f1e1f9e2ba39
FD_B|fd=2|cat=SOCKET|pos=0|size=NA|base=NA|path_sha16=feb8f1e1f9e2ba39
FD_B|fd=3|cat=BACKUP_RUN|pos=0|size=0|base=homelab-backup-heavy.lock|path_sha16=2642241b0beaa737
FD_B|fd=4|cat=OTHER_FILE|pos=570949632|size=570949632|base=payload.tar.zst|path_sha16=a5bf89245089a1c8
FD_B|fd=5|cat=PIPE|pos=0|size=NA|base=NA|path_sha16=3a74719a8d200544
FD_B|fd=7|cat=PIPE|pos=0|size=NA|base=NA|path_sha16=27db66d36b35c3d5
CHILDREN_B
 903386  335341       0 S ssh             /usr/bin/ssh -o BatchMode=yes -o StrictHostKeyChecking=yes root@pve02 PATH=/usr/sbin:/usr/bin:/sbin:/bin; export PATH; exec qm guest exec 160 --synchronous 1 --timeout 60 -- /usr/bin/python3 -I -B -c 'import base64,sys; p=sys.argv[1]; o=int(sys.argv[2]); n=int(sys.argv[3]); f=open(p,'"'"'rb'"'"'); f.seek(o); b=f.read(n); f.close(); sys.stdout.write(base64.b64encode(b).decode())' /tmp/homelab-v2-xf-0922T115125Z1b7415a2313b.tar.zst 570949632 131072
SOCKETS_B
PROC_SNAPSHOT_END=B
PROC_SNAPSHOT_BEGIN=C
PROC_PRESENT_C=true
 335341       1   10182 S  0.0  0.0 homelab-backup- /usr/bin/python3 /usr/local/sbin/homelab-backup-v2 scheduled
WCHAN_C=poll_schedule_timeout.constprop.0
SYSCALL_C=7 [PTR] [PTR] [PTR] [PTR] [PTR] [PTR] [PTR] [PTR]
IO_C_rchar=2178607641
IO_C_wchar=1359019147
IO_C_syscr=840546
IO_C_syscw=96707
IO_C_read_bytes=0
IO_C_write_bytes=571736064
STATUS_C_STATE=S
CTX_C_VOL=31987
CTX_C_INVOL=288
FD_COUNT_C=7
FD_C|fd=0|cat=DEV|pos=0|size=0|base=null|path_sha16=fd5d32feb2d35625
FD_C|fd=1|cat=SOCKET|pos=0|size=NA|base=NA|path_sha16=feb8f1e1f9e2ba39
FD_C|fd=2|cat=SOCKET|pos=0|size=NA|base=NA|path_sha16=feb8f1e1f9e2ba39
FD_C|fd=3|cat=BACKUP_RUN|pos=0|size=0|base=homelab-backup-heavy.lock|path_sha16=2642241b0beaa737
FD_C|fd=4|cat=OTHER_FILE|pos=571736064|size=571736064|base=payload.tar.zst|path_sha16=a5bf89245089a1c8
FD_C|fd=5|cat=PIPE|pos=0|size=NA|base=NA|path_sha16=e931a2a362f85fd8
FD_C|fd=7|cat=PIPE|pos=0|size=NA|base=NA|path_sha16=8d16e18acde67925
CHILDREN_C
 903565  335341       1 S ssh             /usr/bin/ssh -o BatchMode=yes -o StrictHostKeyChecking=yes root@pve02 PATH=/usr/sbin:/usr/bin:/sbin:/bin; export PATH; exec qm guest exec 160 --synchronous 1 --timeout 60 -- /usr/bin/python3 -I -B -c 'import base64,sys; p=sys.argv[1]; o=int(sys.argv[2]); n=int(sys.argv[3]); f=open(p,'"'"'rb'"'"'); f.seek(o); b=f.read(n); f.close(); sys.stdout.write(base64.b64encode(b).decode())' /tmp/homelab-v2-xf-0922T115125Z1b7415a2313b.tar.zst 571736064 131072
SOCKETS_C
PROC_SNAPSHOT_END=C
OWNER_END_STATE|active=activating|sub=start|pid=335341|heavy=BUSY
PID_STABLE=true
DELTA_A_B_rchar=3397009
DELTA_A_B_wchar=2180900
DELTA_A_B_syscr=1345
DELTA_A_B_syscw=156
DELTA_A_B_read_bytes=0
DELTA_A_B_write_bytes=917504
DELTA_B_C_rchar=2911832
DELTA_B_C_wchar=1869344
DELTA_B_C_syscr=1149
DELTA_B_C_syscw=131
DELTA_B_C_read_bytes=0
DELTA_B_C_write_bytes=786432
DELTA_A_C_rchar=6308841
DELTA_A_C_wchar=4050244
DELTA_A_C_syscr=2494
DELTA_A_C_syscw=287
DELTA_A_C_read_bytes=0
DELTA_A_C_write_bytes=1703936
INTERNAL_IO_PROGRESS_30S=true
CURRENT_INVOCATION_END_JOURNAL_LINES=1
CURRENT_INVOCATION_END_JOURNAL_BEGIN=true
2026-09-22T14:51:25+03:00 pve01 homelab-backup-v2[335341]: SELFTEST_REPLACEMENT486=PASS
CURRENT_INVOCATION_END_JOURNAL_END=true
END_INVOCATION_SELFTEST_PASS=true
END_INVOCATION_TARGET_SEEN=false
END_INVOCATION_LATEST_TARGET=NONE
OWNER_PHASE=ACTIVE_AFTER_SELFTEST_BEFORE_TARGET_MARKER
DECISION=PASS_DR221_419_OWNER_PRETARGET_INTERNAL_IO_PROVEN
NEXT_GATE=WAIT_NATURAL_OWNER_COMPLETION_THEN_REISSUE_VM210_MEMBERSHIP_AND_FRESH_BACKUP
CHANGES_MADE_BY_419=false
PRODUCT_MUTATION_BY_419=false
VM_MUTATION_BY_419=false
CLOUD_MUTATION_BY_419=false
HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"NEWFI-260922-NEWFDOM-DR221-418-OWNER-FD-PHASE-RCA419R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null}
NEWFI419_END=true

OUTPUT_END
CHAT_OUTPUT_END
