Files
TheTree_mock/docs/plans/original-completion-2026-10-02/execution/drive-offload-cold-r06-20261015/tree-offload-cold-r06-retire.py
T

20 lines
2.8 KiB
Python

globals().update(__import__('runpy').run_path('/private/tmp/tree-offload-cold-r06.py',run_name='offload_library'))
m=json.loads((D/'MANIFEST.json').read_bytes());roots=m['roots'];rows=m['members'];p=json.loads((D/'PREPARED.json').read_bytes());v=json.loads((D/'CLOUD_ARCHIVE_VERIFIED.json').read_bytes());src=json.loads((D/'SOURCE_RECHECK.json').read_bytes())
assert v['actual_cloud_readback']and v['whole_archive_sha256']==p['sha256']and v['original_file_mappings_verified']==m['files'];assert src['all_sources_unchanged']and src['manifest_sha256']==sha(D/'MANIFEST.json')and time.time()-src['recorded_unix']<3600
for name in ['MANIFEST.json','PREPARED.json','CLOUD_PARTS.json','CLOUD_ARCHIVE_VERIFIED.json','RESTORE.md','restore.py']:
r=json.loads((D/('READBACK-'+name+'.json')).read_bytes());assert r['actual_cloud_readback_verified']and r['sha256']==sha(D/name)
assert not(D/'RETIREMENT.json').exists();idle()
for x in rows:
q=B/x['path'];st=q.lstat();assert not q.is_symlink()and (q.is_file()if x['type']=='file'else q.is_dir());assert st.st_mtime_ns==x['mtime_ns']and st.st_mode&0o7777==x['mode'];assert x['type']!='file'or st.st_size==x['bytes']
for q in [Path(p['archive']),T/'cloud-readback.tar.gz']:assert q.stat().st_size==p['bytes']and sha(q)==p['sha256']
free=shutil.disk_usage(R).free;save(D/'RETIREMENT_INTENT.json',dict(unix=time.time(),manifest_sha256=sha(D/'MANIFEST.json'),whole_archive_sha256=p['sha256'],full_cloud_content_verified=True,all_sources_rehashed_and_stat_rechecked=True,active_jobs_and_open_files_zero=True,files=m['files'],roots=roots))
for x in rows:
if x['type']=='file':(B/x['path']).unlink()
for x in sorted(rows,key=lambda x:len(Path(x['path']).parts),reverse=True):
if x['type']=='directory':(B/x['path']).rmdir()
for s in roots:
root=B/s;assert not root.exists();pointer=root.parent/(root.name+'.CLOUD_ARCHIVE_R06.json');assert not pointer.exists();save(pointer,dict(state='cloud_archived',original_root=str(root),folder_url='https://drive.google.com/drive/folders/1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK',cloud_parts=str(D/'CLOUD_PARTS.json'),restore=str(D/'RESTORE.md'),whole_archive_sha256=p['sha256'],source_and_current_canonical_build_evidence_retained=True,formal_credit=0))
for q in [Path(p['archive']),T/'cloud-readback.tar.gz']:q.unlink()
res=dict(recorded_unix=time.time(),files=m['files'],roots=roots,logical_bytes=m['logical_bytes'],unique_bytes=m['unique_bytes'],cloud_archive_bytes=p['bytes'],free_before_selection=m['free_before'],free_before_retirement=free,free_after=shutil.disk_usage(R).free,net_free_change_from_selection=shutil.disk_usage(R).free-m['free_before'],actual_cloud_readback_all_payloads_verified=True,retired_only_manifest_members=True,current_sources_build_evidence_run_records_review_results_retained=True,temporary_archives_removed_after_verification=True,formal_credit=0)
save(D/'RETIREMENT.json',res);print(json.dumps(res),flush=True)