from pathlib import Path import os,json,hashlib,tarfile,io,shutil,time,subprocess,sqlite3 R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');B=R/'artifacts/original-completion-2026-10-02';D=R/'docs/plans/original-completion-2026-10-02/execution/drive-offload-cold-r06-20261015';T=Path('/private/tmp/tree-offload-cold-r06') roots=['p23-03-native-os-49445d4-r13','p08-runtime-preview-8d52b20-target-r02/stage','p08-runtime-preview-78dc82d-targeted-r01/stage','p08-runtime-preview-12f04d6-target-impact-r03/stage'] def sha(p): h=hashlib.sha256() with p.open('rb')as f: for b in iter(lambda:f.read(1024**2),b''):h.update(b) return h.hexdigest() def save(p,v):p.write_text(json.dumps(v,ensure_ascii=False,indent=2)+'\n') def idle(): ps=subprocess.check_output(['ps','-axo','pid,command'],text=True);opened=subprocess.run(['lsof','-n','-F','n'],capture_output=True,text=True).stdout for s in roots: assert not any(str(B/s)in x for x in ps.splitlines());assert not any(x.startswith('n'+str(B/s)+'/')for x in opened.splitlines());assert not subprocess.check_output(['git','-C',str(R),'ls-files','--',str(B/s)],text=True).strip() def inv(): rows=[] for s in roots: p=B/s;assert p.is_dir()and not p.is_symlink() for x in [p]+sorted(p.rglob('*')): st=x.lstat();assert not x.is_symlink()and(x.is_file()or x.is_dir()),str(x);v=dict(path=str(x.relative_to(B)),type='file'if x.is_file()else'directory',mode=st.st_mode&0o7777,mtime_ns=st.st_mtime_ns) if x.is_file():v.update(bytes=st.st_size,sha256=sha(x),allocated=st.st_blocks*512) rows.append(v) return rows if __name__=='__main__': assert not D.exists()and not T.exists();D.mkdir();T.mkdir();idle();free=shutil.disk_usage(R).free;rows=inv();objs={x['sha256']:x for x in rows if x['type']=='file'};m=dict(base=str(B),roots=roots,members=rows,files=sum(x['type']=='file'for x in rows),logical_bytes=sum(x.get('bytes',0)for x in rows),unique_bytes=sum(x['bytes']for x in objs.values()),free_before=free,created=time.time(),scope='Superseded P23 49445d4 r13 diagnostic including its failed original12 observations, plus three older P08 runtime-preview stage copies; P23 held9a26 and P08 currentd369 and all P18 sources/proofs retained; no acceptance change',formal_credit=0);save(D/'MANIFEST.json',m);assert free>m['unique_bytes']+512*1024**2 a=T/'cold-r06.tar.gz' with tarfile.open(a,'w:gz',compresslevel=6)as t: for h,x in sorted(objs.items()): assert shutil.disk_usage(R).free>1024**3;t.add(B/x['path'],arcname='objects/'+h,recursive=False) v=(D/'MANIFEST.json').read_bytes();e=tarfile.TarInfo('MANIFEST.json');e.size=len(v);t.addfile(e,io.BytesIO(v)) seen=set() with tarfile.open(a,'r|gz')as t: for e in t: assert e.isfile()and e.name not in seen;seen.add(e.name) with t.extractfile(e)as f: if e.name=='MANIFEST.json':assert f.read()==(D/'MANIFEST.json').read_bytes() else: h=e.name[8:];assert e.name.startswith('objects/')and h in objs and e.size==objs[h]['bytes'];v=hashlib.sha256() for b in iter(lambda:f.read(1024**2),b''):v.update(b) assert v.hexdigest()==h assert seen=={'MANIFEST.json'}|{'objects/'+h for h in objs};save(D/'PREPARED.json',dict(archive=str(a),bytes=a.stat().st_size,sha256=sha(a),all_members_verified=True,unique_payloads=len(objs)));print(json.dumps(dict(files=m['files'],logical_bytes=m['logical_bytes'],unique_bytes=m['unique_bytes'],archive_bytes=a.stat().st_size)),flush=True)