CHAT_OUTPUT_BEGIN
COMMAND_ID=SUPPORT-260915-INFRA-DR-BACKUPV2-CT112-CLOUD-SEAL-CONTRACT-PREFLIGHT-427R1
STATUS=OK
RC=0
HOST=pve01
MODE=read-only
COMPONENT=infra-dr-backupv2-ct112-cloud-seal-contract-preflight
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
COMMAND_SHA256=c92db35b051b231f28f75dee8513620581c9e13c76afce192d2ec6fee0e4f079
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=c1d3cbae7498e09aa4e54da7ebb0dccf3852f02ee425b59732aff80cbe2d72d3
SANITIZED_OUTPUT_SHA256=c1d3cbae7498e09aa4e54da7ebb0dccf3852f02ee425b59732aff80cbe2d72d3
OUTPUT_BEGIN
COMMAND_ID=SUPPORT-260915-INFRA-DR-BACKUPV2-CT112-CLOUD-SEAL-CONTRACT-PREFLIGHT-427R1
MODE=READ_ONLY_CT112_CLOUD_SEAL_CONTRACT_PREFLIGHT
NO_BACKUP_EXECUTION=YES
NO_VZDUMP_EXECUTION=YES
NO_CLOUD_ACCESS=YES
NO_RCLONE_EXECUTION=YES
NO_CLOUD_DELETION=YES
NO_SYSTEMD_MUTATION=YES
NO_FILE_MUTATION=YES
PRODUCTION_AND_CANDIDATE_IDENTITY=PASS
SOURCE_SET_IDENTITY=PASS
G426_IMMUTABLE_COMMIT=8e261f22b35fe49616ab7c2e23f5cac3a5b66376
G426_STAGE_BINDING=PASS
G426_GENERATION=G426-20260915T115318Z-d9bb39ace5781d2e
G426_PAYLOAD_BYTES=223855196
G426_PAYLOAD_SHA256=8b7ed12905966302695ab4d8a3de81c171ed516e1f072eb1f761aace05cecd12
G426_PAYLOAD_MODE=0400
CLOUD_ENGINE_OWNER_GRAPH=PASS
GUEST266_RUN_FLOW_CONTRACT={"direct_calls":["Path","all","callable","check_result","clock","compression_check","core.canonical_bytes","core.manifest_hash","core.valid_name","core.validate_inventory","guard","int","job.get","large.cleanup","large.discover","large.restore","large.upload","len","produce","producer.validate_job","say","state_guard","t.create","t.make_dir","t.need","time.time"],"signature":"(job, work, entries, cloud, reader, produce, state_guard, guard, compression_check, generation, say, clock=<function <lambda> at 0x76417f8f07c0>)","source":"def run_flow(job,work,entries,cloud,reader,produce,state_guard,guard,compression_check,generation,say,clock=lambda:int(time.time())):\n    \"\"\"Caller provides real fresh PVE guards; simulation callbacks live in tests only.\"\"\"\n    producer.validate_job(job,clock());core.validate_inventory(entries)\n    t.need(job['type']=='lxc' and job.get('compression_dependent') is False,'FIRST_GUEST_POLICY')\n    t.need(core.valid_name(generation),'GENERATION_ID')\n    t.need(all(callable(f) for f in (produce,state_guard,guard,compression_check,say,clock)),'CALLBACKS_REQUIRED')\n    work=Path(work);state_guard();guard()\n    for sub in ('producer','upload','restore'):t.make_dir(work/sub,exclusive=True)\n    say('PHASE','REAL_SINGLE_GUEST_SNAPSHOT')\n    produced=produce(job,work/'producer')\n    source=check_result(produced,job,work/'producer');state_guard();guard()\n    t.create(work/'PRODUCER.json',core.canonical_bytes(produced))\n    say('PRODUCER_RC',0);say('PAYLOAD_BYTES',produced['size']);say('ARCHIVE_SHA256',produced['sha256'])\n    logical='guest-%s-%s-%d'%(job['node'],job['type'],job['vmid'])\n    say('PHASE','TWO_REPLICA_UPLOAD_AND_READBACK')\n    up=large.upload(source,work/'upload',entries,cloud,generation,logical,RESERVE_BYTES,guard,clock=clock)\n    t.need(up['manifest']['payload_bytes']==produced['size'] and up['manifest']['payload_sha256']==produced['sha256'],'MANIFEST_PRODUCER_MISMATCH')\n    say('SEALED_QUORUM_VERIFIED','YES');mh=core.manifest_hash(up['manifest']);say('MANIFEST_SHA256',mh)\n    say('PHASE','CLOUD_DISCOVERY_AND_ARCHIVE_RECONSTRUCTION')\n    found=large.discover(reader,entries,logical,mh)\n    restored=large.restore(work/'restore',reader,found)\n    t.need(compression_check(work/'restore/restored.bin') is True,'RECONSTRUCTED_COMPRESSION_FAILED')\n    state_guard();guard();say('PHASE','GUARDED_LOCAL_PAYLOAD_CLEANUP')\n    count=large.cleanup(up,restored,reader,guard)\n    return {'state':'SINGLE_GUEST_ARCHIVE_SEALED_AND_CLOUD_RECONSTRUCTED','vmid':job['vmid'],'type':job['type'],'node':job['node'],\n        'generation':generation,'logical_id':logical,'manifest_sha256':mh,'payload_bytes':produced['size'],'payload_sha256':produced['sha256'],\n        'replicas':up['manifest']['replicas'],'parts_count':len(up['manifest']['parts']),'archive_cloud_restore_verified':True,\n        'guest_restore_verified':False,'application_consistency_verified':False,'whole_node_backup':False,'local_payload_files_remaining':0,\n        'files_deleted':count,'accounts_scanned':found['accounts_scanned'],'config_sha256':job['config_sha256']}\n","source_sha256":"789140b440fc756f99c8979b543c60a44ada096b5acece83e7173791f23bb55c"}
LARGE264_UPLOAD_CONTRACT={"direct_calls":["Path","clock","cloud.absent","cloud.bind","cloud.get","cloud.put","cloud.quota","cloud.read_stream","core.allocate","core.canonical_bytes","core.make_manifest","core.manifest_hash","core.quota_reason","core.valid_name","core.validate_inventory","core.verify_receipts","guard","hashlib.sha256","int","len","r.validate_seal","receipt","receipts.append","s.split_file","s.verify_parts","str","t.create","t.make_dir","t.need","t.sha","time.time"],"signature":"(source, work, entries, cloud, generation, logical_id, reserve, guard, clock=<function <lambda> at 0x76417facc180>)","source":"def upload(source,work,entries,cloud,generation,logical_id,reserve,guard,clock=lambda:int(time.time())):\n    \"\"\"Upload and seal; retain all source bytes here. Cleanup is a later gated operation.\"\"\"\n    work=Path(work);source=Path(source);guard();core.validate_inventory(entries)\n    t.need(core.valid_name(generation) and core.valid_name(logical_id),'GENERATION_ID')\n    partdir=work/'parts';t.make_dir(partdir,exclusive=True)\n    record=s.split_file(source,partdir)\n    t.create(work/'parts-record.json',core.canonical_bytes(record))\n    quotas={e['account_id']:cloud.quota(e['crypt_remote']) for e in entries}\n    allocation=core.allocate(entries,quotas,record['payload_bytes'],reserve,clock())\n    m=core.make_manifest(generation,logical_id,record['payload_bytes'],record['payload_sha256'],record['parts'],allocation)\n    mb=core.canonical_bytes(m);mh=core.manifest_hash(m);cloud.bind(m)\n    t.create(work/'allocation.json',core.canonical_bytes(allocation));t.create(work/'manifest.json',mb)\n    for rep in m['replicas']:\n        guard();cloud.absent(rep['crypt_remote'])\n    receipts=[]\n    for rep in m['replicas']:\n        guard();remote=rep['crypt_remote'];q=cloud.quota(remote)\n        t.need(core.quota_reason(q,clock()) is None and q['free']>=allocation['required_free_bytes'],'SELECTED_ACCOUNT_CAPACITY_CHANGED')\n        s.verify_parts(partdir,record)\n        for part in m['parts']:cloud.put(remote,part['name'],partdir/part['name'])\n        cloud.put(remote,'manifest.json',work/'manifest.json')\n        t.need(cloud.get(remote,'manifest.json',len(mb)+1)==mb,'MANIFEST_READBACK_MISMATCH')\n        whole=hashlib.sha256();count=0\n        for part in m['parts']:\n            observed=cloud.read_stream(remote,part['name'],part['size'],part['sha256'],whole.update)\n            t.need(observed=={'size':part['size'],'sha256':part['sha256']},'PART_READBACK_MISMATCH');count+=observed['size']\n        receipts.append(receipt(rep,m,whole,count));t.create(work/('receipt-%d.json'%len(receipts)),core.canonical_bytes(receipts[-1]))\n    core.verify_receipts(m,receipts)\n    seal={'schema_version':2,'state':'SEALED','generation':generation,'logical_id':logical_id,\n          'manifest_sha256':mh,'replicas':m['replicas'],'receipts':receipts,\n          'acceptance':'IDENTICAL_SEAL_REQUIRED_ON_BOTH_NAMED_ACCOUNTS'}\n    sb=core.canonical_bytes(seal);t.need(len(sb)<=core.SEAL_MAX_BYTES,'SEAL_BOUND')\n    r.validate_seal(sb,entries,generation,logical_id);t.create(work/'SEALED.json',sb)\n    for rep in m['replicas']:\n        guard();cloud.put(rep['crypt_remote'],'SEALED.json',work/'SEALED.json')\n    for rep in m['replicas']:\n        t.need(cloud.get(rep['crypt_remote'],'SEALED.json',len(sb)+1)==sb,'SEALED_QUORUM_REQUIRED')\n    guard();s.verify_parts(partdir,record)\n    t.create(work/'QUORUM_VERIFIED.json',core.canonical_bytes({'manifest_sha256':mh,'seal_sha256':t.sha(sb)}))\n    return {'sealed':True,'manifest':m,'seal_bytes':sb,'parts_record':record,'source':str(source),'work':str(work)}\n","source_sha256":"3fc04eea643b977e58713bea8a7b9bcfd485e60251a4393874dfe1a428014bbe"}
LARGE264_RESTORE_CONTRACT={"direct_calls":["Path","cloud.read_stream","core.canonical_bytes","core.manifest_hash","core.validate_manifest","core.verify_receipts","download_part","enumerate","fresh_seals","hashlib.sha256","receipt","receipts.append","s.reassemble","str","t.create","t.make_dir","t.need"],"signature":"(work, cloud, discovery)","source":"def restore(work,cloud,discovery):\n    \"\"\"Reconstruct one replica on disk; hash every byte of the other independently.\"\"\"\n    work=Path(work);m=discovery['manifest'];core.validate_manifest(m)\n    partdir=work/'parts';t.make_dir(partdir,exclusive=True);owned={};receipts=[]\n    for i,rep in enumerate(m['replicas']):\n        whole=hashlib.sha256();count=0\n        for part in m['parts']:\n            if i==0:owned[part['name']]=download_part(cloud,rep,m,part,partdir/part['name'],whole)\n            else:\n                got=cloud.read_stream(rep['crypt_remote'],m['generation'],part['name'],part['size'],part['sha256'],whole.update)\n                t.need(got=={'size':part['size'],'sha256':part['sha256']},'PART_DOWNLOAD_MISMATCH')\n            count+=part['size']\n        receipts.append(receipt(rep,m,whole,count))\n    core.verify_receipts(m,receipts);fresh_seals(cloud,discovery)\n    rec={'schema_version':1,'payload_bytes':m['payload_bytes'],'payload_sha256':m['payload_sha256'],\n         'part_bytes':core.PART_BYTES,'parts':m['parts'],'owned':owned,'source_identity':[0]*8}\n    result=s.reassemble(partdir,rec,work/'restored.bin')\n    fresh_seals(cloud,discovery)\n    t.create(work/'RESTORE_VERIFIED.json',core.canonical_bytes({'manifest_sha256':core.manifest_hash(m),'verified_replicas':2,\n                 'accounts_scanned':discovery['accounts_scanned'],'payload_bytes':result['size'],'payload_sha256':result['sha256']}))\n    return {'verified_replicas':2,'manifest_sha256':core.manifest_hash(m),'discovery':discovery,\n            'parts_record':rec,'reassembled':result,'work':str(work)}\n","source_sha256":"0a73a874d1354b5a63645f4848a9bae933e463e444c3db177ab07c01ecd1f614"}
LARGE264_DISCOVER_CONTRACT={"direct_calls":["all","blobs.append","candidates.append","cloud.get","cloud.list_generations","core.canonical_bytes","core.valid_hash","core.valid_name","core.validate_inventory","core.validate_manifest","core.verify_receipts","generations.update","iter","len","next","r.strict_json","r.validate_seal","seen.values","set","sorted","t.need","t.sha","type"],"signature":"(cloud, entries, logical_id, expected_hash)","source":"def discover(cloud,entries,logical_id,expected_hash):\n    \"\"\"Find placement from all cloud catalogs, using only an external manifest digest.\"\"\"\n    core.validate_inventory(entries)\n    t.need(core.valid_name(logical_id) and core.valid_hash(expected_hash),'DISCOVERY_INPUT')\n    listed={};generations=set()\n    for e in entries:\n        gs=cloud.list_generations(e['crypt_remote'])\n        t.need(type(gs) is list and len(gs)<=r.MAX_GENERATIONS and all(core.valid_name(g) for g in gs),'GENERATION_LIST_INVALID')\n        t.need(len(gs)==len(set(gs)),'GENERATION_LIST_DUPLICATE');listed[e['crypt_remote']]=set(gs);generations.update(gs)\n    t.need(len(generations)<=r.MAX_GENERATIONS,'TOTAL_GENERATIONS_BOUND')\n    candidates=[]\n    for gen in sorted(generations):\n        seen={}\n        for e in entries:\n            remote=e['crypt_remote']\n            if gen not in listed[remote]:continue\n            b=cloud.get(remote,gen,'SEALED.json',core.SEAL_MAX_BYTES+1,missing_ok=True)\n            if b is None:continue\n            seal=r.validate_seal(b,entries,gen,logical_id)\n            t.need(remote in {x['crypt_remote'] for x in seal['replicas']},'UNNAMED_SEAL_LOCATION');seen[remote]=(b,seal)\n        if not seen:continue\n        sb,seal=next(iter(seen.values()))\n        if seal['manifest_sha256']!=expected_hash:continue\n        named={x['crypt_remote'] for x in seal['replicas']}\n        t.need(set(seen)==named and all(b==sb for b,_ in seen.values()),'IDENTICAL_TWO_SEALS_REQUIRED')\n        blobs=[]\n        for rep in seal['replicas']:\n            b=cloud.get(rep['crypt_remote'],gen,'manifest.json',core.MANIFEST_MAX_BYTES+1)\n            t.need(type(b) is bytes and t.sha(b)==expected_hash,'MANIFEST_DIGEST_MISMATCH')\n            m=r.strict_json(b,core.MANIFEST_MAX_BYTES);core.validate_manifest(m)\n            t.need(m['generation']==gen and m['logical_id']==logical_id and m['replicas']==seal['replicas'],'MANIFEST_PLACEMENT')\n            t.need(core.canonical_bytes(m)==b,'MANIFEST_CANONICAL_BYTES');core.verify_receipts(m,seal['receipts']);blobs.append(b)\n        t.need(len(blobs)==2 and blobs[0]==blobs[1],'TWO_MANIFEST_COPIES_REQUIRED')\n        candidates.append({'manifest':m,'seal_bytes':sb,'accounts_scanned':len(listed)})\n    t.need(len(candidates)==1,'EXACTLY_ONE_ACCEPTED_GENERATION_REQUIRED')\n    return candidates[0]\n","source_sha256":"0f9d514dfa0985bfa0ee6446aa85a78377346003039896395cb39e0bf3643702"}
LARGE264_CLEANUP_CONTRACT={"direct_calls":["Path","any","core.canonical_bytes","core.manifest_hash","core.validate_manifest","core.verify_receipts","fresh_seals","guard","items.append","len","os.close","os.fsync","os.stat","os.unlink","p.exists","p.is_symlink","r.strict_json","restore_result.get","s.hash_file","s.validate_record","s.verify_parts","str","t.ident","t.need","t.open_dir","tuple","type","upload_result.get"],"signature":"(upload_result, restore_result, cloud, guard)","source":"def cleanup(upload_result,restore_result,cloud,guard):\n    \"\"\"No unlink until every expected file and both remote seals have passed verification.\"\"\"\n    t.need(type(upload_result) is dict and upload_result.get('sealed') is True,'UPLOAD_QUORUM_REQUIRED')\n    t.need(type(restore_result) is dict and restore_result.get('verified_replicas')==2,'RESTORE_REQUIRED')\n    m=upload_result['manifest'];core.validate_manifest(m);mh=core.manifest_hash(m)\n    t.need(restore_result['manifest_sha256']==mh,'RESTORE_GENERATION_MISMATCH')\n    t.need(core.canonical_bytes(restore_result['discovery']['manifest'])==core.canonical_bytes(m) and\n           restore_result['discovery']['seal_bytes']==upload_result['seal_bytes'],'RESTORE_QUORUM_MISMATCH')\n    core.verify_receipts(m,r.strict_json(upload_result['seal_bytes'],core.SEAL_MAX_BYTES)['receipts'])\n    guard();fresh_seals(cloud,restore_result['discovery'])\n    items=[]\n    for record,base in ((upload_result['parts_record'],Path(upload_result['work'])/'parts'),\n                        (restore_result['parts_record'],Path(restore_result['work'])/'parts')):\n        s.validate_record(record);s.verify_parts(base,record)\n        for part in record['parts']:items.append((base/part['name'],tuple(record['owned'][part['name']]),part['size'],part['sha256']))\n    items.append((Path(upload_result['source']),tuple(upload_result['parts_record']['source_identity']),m['payload_bytes'],m['payload_sha256']))\n    items.append((Path(restore_result['work'])/'restored.bin',tuple(restore_result['reassembled']['identity']),m['payload_bytes'],m['payload_sha256']))\n    t.need(len({str(p) for p,_,_,_ in items})==len(items),'CLEANUP_DUPLICATE_PATH')\n    for p,identity,size,h in items:\n        n,d,seen=s.hash_file(p,size);t.need(seen==identity and n==size and d==h,'CLEANUP_IDENTITY_OR_HASH')\n    guard();fresh_seals(cloud,restore_result['discovery'])\n    for p,identity,size,h in items:\n        parent=t.open_dir(p.parent)\n        try:\n            t.need(t.ident(os.stat(p.name,dir_fd=parent,follow_symlinks=False))==identity,'CLEANUP_FILE_CHANGED')\n            os.unlink(p.name,dir_fd=parent);os.fsync(parent)\n        finally:os.close(parent)\n    t.need(not any(p.exists() or p.is_symlink() for p,_,_,_ in items),'LOCAL_CLEANUP_INCOMPLETE')\n    return len(items)\n","source_sha256":"2cbbf3325b84192705686a2c6d3a02f58a75f51145f68204786e08194013cd3b"}
LARGE264_FUNCTION_INDEX={"cleanup":"(upload_result, restore_result, cloud, guard)","discover":"(cloud, entries, logical_id, expected_hash)","download_part":"(cloud, rep, m, part, path, whole)","flags":"(executable, snapshot, work, args)","fresh_seals":"(cloud, discovery)","process_stream":"(argv, env, size, digest, consume, seconds)","random_source":"(path, size=536870929)","receipt":"(rep, m, whole, count)","restore":"(work, cloud, discovery)","upload":"(source, work, entries, cloud, generation, logical_id, reserve, guard, clock=<function <lambda> at 0x76417facc180>)"}
TEST_GUEST266_STORE_SOURCE={"source":"class Store:\n    def __init__(self,mode='ok'):self.objects={};self.m=None;self.mode=mode\n    def quota(self,remote):return {'ok':True,'observed_at':NOW,'total':1000*G,'used':0,'free':1000*G-int(remote[1:])*1000}\n    def bind(self,m):self.m=m\n    def absent(self,remote):\n        if self.mode=='collision':raise t.Stop('COLLISION')\n    def put(self,remote,name,path):\n        if remote==self.m['replicas'][1]['crypt_remote'] and (self.mode=='second' or self.mode=='second_seal' and name=='SEALED.json'):raise t.Stop('TEST_FAILURE')\n        key=(remote,self.m['generation'],name)\n        if key in self.objects:raise t.Stop('COLLISION')\n        self.objects[key]=Path(path).read_bytes()\n    def get(self,remote,name,limit):return self.objects[(remote,self.m['generation'],name)][:limit]\n    def read_stream(self,remote,name,size,h,consume):\n        b=self.get(remote,name,size+1);sink=s.DigestSink(size,h)\n        for i in range(0,len(b),257):sink.feed(b[i:i+257]);consume(b[i:i+257])\n        return sink.finish()\n","source_sha256":"e45ff3e4e95d841661711a92f70d6f927351f9e6d60a3325fece9de4669b0664"}
TEST_GUEST266_READER_SOURCE={"source":"class Reader:\n    def __init__(self,store,mode='ok'):self.store=store;self.mode=mode;self.listed=[]\n    def list_generations(self,remote):\n        self.listed.append(remote)\n        return sorted({gen for r,gen,n in self.store.objects if r==remote})\n    def get(self,remote,gen,name,limit,missing_ok=False):\n        v=self.store.objects.get((remote,gen,name))\n        if v is None and missing_ok:return None\n        if v is None:raise t.Stop('MISSING')\n        return v[:limit]\n    def read_stream(self,remote,gen,name,size,h,consume):\n        b=self.get(remote,gen,name,size+1)\n        if self.mode=='corrupt' and remote==self.store.m['replicas'][1]['crypt_remote']:b=b'!'+b[1:]\n        sink=s.DigestSink(size,h)\n        for i in range(0,len(b),257):sink.feed(b[i:i+257]);consume(b[i:i+257])\n        return sink.finish()\n","source_sha256":"dd76a1f73d7b66ecb837c2b80514a45f5ffd265d819aec6bda3d92d8113d1fcb"}
TEST_GUEST266_INVENTORY_CONTRACT={"direct_calls":["('acct%d' % i).encode","range","t.sha"],"signature":"()","source":"def inventory():return [{'account_id':t.sha(('acct%d'%i).encode()),'crypt_remote':'c%d'%i,'mail_remote':'m%d'%i,'wrapped_path':'bucket'} for i in range(13)]\n","source_sha256":"4f0238dd193df9eb06953459c1e6dbe8eef7f7d3cdd3712be7d3c27b9abd6559"}
TEST_PRODUCER282_E2E_SOURCE={"source":" def test_fresh_archive_flows_through_existing_two_replica_engine(self):\n  import guest266 as guest\n  import test_guest266 as support\n  job,tools=self.fixture();work=self.root/'generation';work.mkdir(mode=0o700)\n  store=support.Store();now=int(time.time())\n  def quota(remote):return {'ok':True,'observed_at':now,'total':1000*1024**3,'used':0,'free':1000*1024**3-int(remote[1:])*1000}\n  store.quota=quota\n  def prod(j,p):return f.produce(j,p,tools,lambda:None,mapping=MAP,expected_config=job['config_sha256'],emit=lambda k,v:self.events.append((k,v)))\n  def crc(p):return subprocess.run(['/usr/bin/zstd','--test','--quiet',str(p)],stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL).returncode==0\n  result=guest.run_flow(job,work,support.inventory(),store,support.Reader(store),prod,lambda:None,lambda:None,crc,'G268-fixture',lambda k,v:None,clock=lambda:now)\n  self.assertEqual(result['local_payload_files_remaining'],0);self.assertTrue(result['archive_cloud_restore_verified']);self.assertFalse(result['guest_restore_verified'])\n  self.assertTrue((work/'producer/producer.stderr.log').exists());self.assertFalse((work/'producer/guest-112.tar.zst').exists())\n","source_sha256":"a6de003495ee86836bb1bffb2a22a124331a4323726f5715c2a934d445d6b24f"}
CANDIDATE_CLOUD_ADAPTER_REFERENCES=[{"file":"large264.py","line":56,"line_sha256":"4ab4edc665f49c291b4ca5abb42b2e27a74403237f18eeabafab26dfb6dbbfd5","tokens":["class","CloudLarge","t","RcloneIO"]},{"file":"large264.py","line":59,"line_sha256":"d9107b9e748f739f75a51ce83c5708419ce820ae1090723ab8026949927e02c4","tokens":["t","need","type","args","is","list","and","args","and","args","in","about","lsjson","copyto","cat","RCLONE_VERB_FORBIDDEN"]},{"file":"large264.py","line":61,"line_sha256":"64b38e98ebced99e31c8f94c752a2767cae4b427e23d07bd1e3064ef4a2e2c45","tokens":["self","check","seconds","min","if","args","copyto","else","self","deadline","time","monotonic"]},{"file":"large264.py","line":63,"line_sha256":"95e28cb4c920f1f05c3b36f067a836e937b488aacbd4b8464d96b9c41b3e7575","tokens":["if","args","copyto","self","writes_attempted"]},{"file":"large264.py","line":74,"line_sha256":"f69498f74dc185afaea74dad0cbe99178138f77cd288369e3cd6e9eba05ea4ec","tokens":["rc","_","self","call","lsjson","dest","stat"]},{"file":"large264.py","line":78,"line_sha256":"ff1b43c434f93c38e81d2b9bd559e31baef49dcf3ed4bde121b02f72b38f607f","tokens":["rc","_","self","call","copyto","str","path","dest","immutable","no","update","modtime"]},{"file":"large264.py","line":132,"line_sha256":"6cad508b04c1979421f1df76e719cf88139404497f82f198f9aeb30afe55c6b3","tokens":["quotas","e","account_id","cloud","quota","e","crypt_remote","for","e","in","entries"]},{"file":"large264.py","line":141,"line_sha256":"501fc63af37bd9126f146bbc6562c1d135cfca1f67db3ef1f53a9b949fdc61e7","tokens":["guard","remote","rep","crypt_remote","q","cloud","quota","remote"]},{"file":"restore262.py","line":3,"line_sha256":"bbd85fe87a59f8247a0a1a5cc42ed497bbafdfbc87e03590612447d705256d9e","tokens":["Cloud","access","is","strictly","lsjson","cat","No","source","local","workspace","manifest","receipt"]},{"file":"restore262.py","line":50,"line_sha256":"e442d31b20e2eff9207d7fc0b651516ba35d205677719c9a2add3f1e0f5090ce","tokens":["t","need","t","sha","t","read_secure","self","executable","self","exe_sha","RCLONE_BINARY_CHANGED"]},{"file":"restore262.py","line":62,"line_sha256":"a1c27af31b577ebbce3ccfffad12e19986dc4af9437cf454480c2dd49dda9c94","tokens":["t","need","type","args","is","list","and","args","and","args","in","lsjson","cat","READ_ONLY_CLOUD_VERB_REQUIRED"]},{"file":"restore262.py","line":69,"line_sha256":"93cbda6a3396bc2369974f589ad0a1494e7561a293ebadfe361c38d64f8acf87","tokens":["rc","out","self","call","lsjson","self","address","remote","dirs","only","max","depth"]},{"file":"stream263.py","line":3,"line_sha256":"14c9c361fa8ac5652d5ee51d2f3f18721d40d02442fb2e0e3da2c5cbe47cc99a","tokens":["No","executable","entry","point","network","rclone","backup","execution","sealing","or","deletion"]},{"file":"test_guest266.py","line":25,"line_sha256":"23b4bb50f445dce73aec7ebd298f7d6ecb1063c6049601af0dae6061f7f9636d","tokens":["def","quota","self","remote","return","ok","True","observed_at","NOW","total","G","used","free","G","int","remote"]},{"file":"test_producer282.py","line":190,"line_sha256":"b54584f63e7cb14df8cb2c66db5cbd015113fca4052614c02df0996f2a6b8f7f","tokens":["def","quota","remote","return","ok","True","observed_at","now","total","used","free","int","remote"]},{"file":"test_pve270.py","line":189,"line_sha256":"b54584f63e7cb14df8cb2c66db5cbd015113fca4052614c02df0996f2a6b8f7f","tokens":["def","quota","remote","return","ok","True","observed_at","now","total","used","free","int","remote"]},{"file":"transport261.py","line":3,"line_sha256":"44ce8b584aa0bd838288d3f181dd94c706cb7198cd5d7265305d1432647338c0","tokens":["Only","about","lsjson","copyto","and","cat","are","permitted","A","completed","canary","is","a","small"]},{"file":"transport261.py","line":171,"line_sha256":"7bd06d43b3c7c43e92988bc7f5bc79c61ff5a4cdeb0dbc2c719bc09d6d5296bd","tokens":["class","RcloneIO"]},{"file":"transport261.py","line":185,"line_sha256":"0a241b5e17035863793b414ac6576aa655e63cae48232001b88b38d46c593b7f","tokens":["need","sha","read_secure","self","executable","self","exe_sha","RCLONE_BINARY_CHANGED"]},{"file":"transport261.py","line":187,"line_sha256":"e4da1a906be5d6978f3a47abcd8d524463a8c41ec17dae4a813aec34f6d2349d","tokens":["need","args","in","about","lsjson","copyto","cat","RCLONE_VERB_FORBIDDEN"]},{"file":"transport261.py","line":193,"line_sha256":"95e28cb4c920f1f05c3b36f067a836e937b488aacbd4b8464d96b9c41b3e7575","tokens":["if","args","copyto","self","writes_attempted"]},{"file":"transport261.py","line":197,"line_sha256":"a887c54bf0d144f2fb71086d385dd1eecd5f3c4ed54c8d46fd3775be00275e3e","tokens":["def","quota","self","remote"]},{"file":"transport261.py","line":219,"line_sha256":"b8f85d8b53248a1a6741103aa8ec42a948488b1daca961287026505b0754bafb","tokens":["rc","_","self","call","lsjson","self","address","remote","max","depth"]},{"file":"transport261.py","line":224,"line_sha256":"f69498f74dc185afaea74dad0cbe99178138f77cd288369e3cd6e9eba05ea4ec","tokens":["rc","_","self","call","lsjson","dest","stat"]},{"file":"transport261.py","line":227,"line_sha256":"ec6a68482d4a09142676ac25a5010d18bdcf8b21d9f60067e857f5818c3e1311","tokens":["rc","_","self","call","copyto","str","path","dest","immutable","no","update","modtime"]},{"file":"transport261.py","line":248,"line_sha256":"12f619354bdfdb6783b881c113091a83637a533c3de9b7e185e8ed9e8bd35f60","tokens":["for","e","in","entries","quotas","e","account_id","cloud","quota","e","crypt_remote"]},{"file":"transport261.py","line":255,"line_sha256":"3ecbce0f455e711bb54ae15ac845dc3de4e46d8ba23713ec58ec4d7f8eea8815","tokens":["q","cloud","quota","e","crypt_remote"]},{"file":"v2core.py","line":110,"line_sha256":"1a51f0e9266b714dd0ebfaf2043d97756197268e3676b2897d53e570528ee2fc","tokens":["rclone","crypt","byte","header","plus","per","nonempty","KiB","block"]}]
G426_PAYLOAD_POST_INSPECTION_SHA256=8b7ed12905966302695ab4d8a3de81c171ed516e1f072eb1f761aace05cecd12
PRODUCTION_POST_PREFLIGHT_UNCHANGED=PASS
CANDIDATE_POST_PREFLIGHT_UNCHANGED=PASS
CLOUD_SEAL_CONTRACT_PREFLIGHT=PASS
STATUS=OK
PHASE=COMPLETE
REASON=NONE
NEXT_GATE=CT112_REAL_BACKUP_1_TWO_REPLICA_SEAL_IMPLEMENTATION
CHANGES_MADE=false
MUTATION_OUTCOME=NO_MUTATION
BACKUP_EXECUTIONS=0
VZDUMP_EXECUTIONS=0
CLOUD_WRITES=0
CLOUD_DELETIONS=0
SYSTEMD_MUTATIONS=0
SCHEDULER_CUTOVER=NO
LEGACY_BACKUP_DISABLES=0
LOCAL_G426_PAYLOAD_PRESERVED=YES
HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"SUPPORT-260915-INFRA-DR-BACKUPV2-CT112-CLOUD-SEAL-CONTRACT-PREFLIGHT-427R1","rollback_restored":null,"rollback_started":false,"status":"OK","version":1}

OUTPUT_END
CHAT_OUTPUT_END
