from pathlib import Path
import json,shutil,hashlib,re
W=Path('/mnt/data/work4110');I=W/'inputs';R=W/'site';D=I/'документы-и-доказательства-4.10.0-wip';M=I/'память-уаикс-4.10.0-wip';B=I/'война-4.8.0-wip';E=R/'доказательства/редакция-4.11.0'
shutil.copytree(B,R,copy_function=shutil.copy2)
# Latest signed packs are authoritative for their current paths. Owner pack adds absent paths only.
origins={p.relative_to(B).as_posix():'война-4.8.0-wip.zip' for p in B.rglob('*') if p.is_file()}
for base in [M,D,I/'набор-владельца-4.10.0-wip']:
 for p in base.rglob('*'):
  if not p.is_file():continue
  rel=p.relative_to(base);dest=R/rel
  if base.name.startswith('набор-владельца') and dest.exists():continue
  dest.parent.mkdir(parents=True,exist_ok=True);shutil.copy2(p,dest);origins[rel.as_posix()]=base.name+'.zip'
E.mkdir(parents=True,exist_ok=True)
matrix=json.loads((D/'доказательства/редакция-4.10.0/офлайн-матрица-часть-000-086.json').read_text())
print('row keys',list(matrix['проверки'][0]));print(str(matrix['проверки'][0])[:1500])
# Seven pre-editorial source pages have the current tool controls, not the older 4.8 shell.
for p in (D/'доказательства/редакция-4.10.0/редакторские-исходники').rglob('*.html.txt'):
 rel=p.relative_to(D/'доказательства/редакция-4.10.0/редакторские-исходники').as_posix()[:-4];shutil.copy2(p,R/rel);origins[rel]='точный редакционный исходник 4.10.0: '+p.relative_to(D).as_posix()
for p in R.rglob('*.html'):
 rel=p.relative_to(R).as_posix()
 if rel.startswith(('доказательства/','docs/архив-выпусков/')):continue
 # Only pages not already present in latest signed pack get deterministic version derivative.
 if not (D/rel).exists() and not (M/rel).exists():
  s=p.read_text().replace('4.8.0','4.10.0').replace('4.9.0','4.10.0');p.write_text(s)
# Reapply exactly the recorded editorial step, scoped to this reconstructed working root.
s=(D/'доказательства/редакция-4.10.0/editorial.py.txt').read_text().replace("Path('/mnt/data/work4100/site')",f"Path('{R}')")
# Do not overwrite the historic report or sources. Write outputs into this round's evidence.
s=s.replace("E=R/'доказательства/редакция-4.10.0'", "E=R/'доказательства/редакция-4.11.0/восстановление-редактуры'")
(R/'доказательства/редакция-4.11.0/восстановление-редактуры').mkdir(parents=True,exist_ok=True)
exec(compile(s,'replayed-editorial','exec'))
(E/'происхождение-путей-основы.json').write_text(json.dumps(origins,ensure_ascii=False,indent=2))
shutil.copyfile(W/'run/входные-пакеты.json',E/'входные-пакеты.json')
# Keep all input manifests (distinct packages, not a falsely reconstructed root signature).
for base in [M,D,I/'набор-владельца-4.10.0-wip']:
 for n in ['МАНИФЕСТ-ВЫПУСКА.json','ПОДПИСЬ-МАНИФЕСТА.txt','ПУБЛИЧНЫЙ-КЛЮЧ.txt','ПРОВЕРИТЬ-ПОДПИСЬ.py']:
  t=E/'манифесты-входов'/base.name/n;t.parent.mkdir(parents=True,exist_ok=True);shutil.copy2(base/n,t)
print('working root files',sum(p.is_file() for p in R.rglob('*')))
