Files
TheTree_mock/docs/plans/original-completion-2026-10-02/execution/drive-offload-canonical-r05-20261015/tree-offload-canonical-r05.py
T

12 lines
2.0 KiB
Python

exec(open('/private/tmp/tree-offload-review-r04.py').read().split("if __name__")[0])
R04=D;D=R/'docs/plans/original-completion-2026-10-02/execution/drive-offload-canonical-r05-20261015';parent=B/'p08-03-code/.runtime/P08-03/evidence-archive/pre-d369';roots=sorted(str(x.relative_to(B))for x in parent.iterdir()if x.is_dir()and not x.is_symlink());assert len(roots)==8
def check_idle():
c=sqlite3.connect('file:'+str(DB/'the-tree-p08-03-code/state.sqlite')+'?mode=ro',uri=True);assert c.execute("select count(*) from runs where finished is null and status not in ('failed','finished')").fetchone()[0]==0
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())and not any(x.startswith('n'+str(B/s)+'/')for x in opened.splitlines())
if __name__=='__main__':
assert D.exists() and not any(D.iterdir());check_idle();old=json.loads((R04/'MANIFEST.json').read_bytes());objects={x['sha256']:x for x in old['members']if x['type']=='file'};before=shutil.disk_usage(R).free;rows=inv();missing=[x for x in rows if x['type']=='file'and(x['sha256']not in objects or objects[x['sha256']]['bytes']!=x['bytes'])]
save(D/'COVERAGE_CHECK.json',dict(files=sum(x['type']=='file'for x in rows),missing_files=len(missing),missing=[dict(path=x['path'],bytes=x['bytes'],sha256=x['sha256'])for x in missing],all_objects_available_in_verified_r04_cloud=not missing))
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),free_before=before,source_r04_manifest_sha256=sha(R04/'MANIFEST.json'),source_r04_archive_sha256=json.loads((R04/'PREPARED.json').read_bytes())['sha256'],created=time.time(),scope='Idle superseded canonical pre-d369 historical P08 evidence only; current build and current candidates retained',formal_credit=0)
save(D/'MANIFEST.json',m);print(json.dumps(dict(files=m['files'],logical_bytes=m['logical_bytes'],missing=len(missing))),flush=True)