import hashlib,json,shutil,stat
from pathlib import Path
P=Path(__file__).resolve().parent
target=P/'private/first-phase';assert not target.exists();target.mkdir(mode=0o700)
for lane in ['B','C']:
    source=P/'private'/('C' if lane=='C' else '')
    dst=target/lane;dst.mkdir(mode=0o700)
    for f in source.iterdir():
        if not f.is_file() or f.name=='tokens.json':continue
        shutil.copy2(f,dst/f.name);(dst/f.name).chmod(0o600)
original=P/'private/source-original/app/store/model/nutrition/NutritionLack.php';original.parent.mkdir(parents=True,mode=0o700)
shutil.copy2(P/'source/app/store/model/nutrition/NutritionLack.php',original);original.chmod(0o600)
assert hashlib.sha256(original.read_bytes()).hexdigest()=='8ea785ca5c8717185284e582f253f53fc713b955a4847b150a9c547b8f782d14'
assert hashlib.sha256((P/'private/candidate/app/store/model/nutrition/NutritionLack.php').read_bytes()).hexdigest()=='a81a7a4eff91aec6745517a26a8794f8ccda4edf633c993406d5c557525d6afd'
files={str(f.relative_to(P)):{'bytes':f.stat().st_size,'sha256':hashlib.sha256(f.read_bytes()).hexdigest()} for f in sorted(target.rglob('*')) if f.is_file()}
manifest={'stage':'immutable first phase only; overall task incomplete','HTTP':{'B':6,'C':4},'B_committed_new_masters':3,'B_committed_new_answers':10,'B_aborted_master_INSERT':1,'B_aborted_zero_row_soft_UPDATE':1,'C_committed_new_masters':1,'C_committed_new_answers':2,'C_failed_master_INSERT_attempts':2,'source_original_sha256':'8ea785ca5c8717185284e582f253f53fc713b955a4847b150a9c547b8f782d14','Root_accepted_candidate_sha256':'a81a7a4eff91aec6745517a26a8794f8ccda4edf633c993406d5c557525d6afd','files':files}
(P/'first-phase-manifest.json').write_text(json.dumps(manifest,indent=2)+'\n')
print(json.dumps({'first_phase_files':len(files),'first_phase_manifest_sha256':hashlib.sha256((P/'first-phase-manifest.json').read_bytes()).hexdigest(),'HTTP_B':6,'HTTP_C':4,'immutable_raw_snapshots':True}))
