Files
digital-drosophila/tools/publish_phase4ah.py
T
2026-09-30 09:59:18 +08:00

43 lines
1.8 KiB
Python

"""Publish only small sealed conditional-audit evidence, not bulk backup."""
import json
from pathlib import Path
import shutil
import sys
ROOT = Path('/data/digital-drosophila')
MODEL = ROOT / 'models/male-cns-lif/kc-drive-audit-v1'
EXP = ROOT / 'experiments/phase4ah-kc-drive-audit'
sys.path.insert(0, str(MODEL))
from context import check, digest, save
sys.path.insert(0, str(ROOT / 'models/male-cns-lif/terminal-scope-diagnostic-v1'))
from diagnostic import manifest_check
def main():
check()
verification = {str(p.relative_to(ROOT)): manifest_check(p, digest) for p in (MODEL, EXP)}
assert all(v['pass'] for v in verification.values())
registry = ROOT / 'registry/phase4ah-kc-drive-audit'
registry.mkdir(exist_ok=False)
records = []
manifest = json.loads((EXP / 'manifest.json').read_text())
for p in [EXP / r['path'] for r in manifest['files']] + [EXP / 'manifest.json', EXP / 'checksums.sha256']:
if p.stat().st_size > 4 * 1024**2 or p.suffix not in ('.json', '.csv', '.md', '.sha256'):
continue
target = registry / 'evidence' / p.relative_to(EXP)
target.parent.mkdir(parents=True, exist_ok=True)
with p.open('rb') as src, target.open('xb') as dst:
shutil.copyfileobj(src, dst)
assert digest(target) == digest(p)
records.append(dict(source=str(p.relative_to(ROOT)), copy=str(target.relative_to(registry)),
bytes=p.stat().st_size, sha256=digest(p)))
save(registry / 'evidence-index.json', records)
save(registry / 'seal-verification.json', verification)
with (EXP / 'REPORT.md').open('rb') as src, (ROOT / 'docs/progress/phase4ah-kc-drive-audit.md').open('xb') as dst:
shutil.copyfileobj(src, dst)
print(json.dumps(dict(copied=len(records), verification=verification)), flush=True)
if __name__ == '__main__':
main()