import hashlib
import json
import os
import re
from datetime import datetime, timedelta, timezone
from pathlib import Path

root = Path(__file__).resolve().parents[1]
os.umask(0o077)
for source in (root / 'helpers').glob('*.py'):
    compile(source.read_text(encoding='utf-8'), str(source), 'exec')
report = (root / '00_RECOVERY_ko.md').read_text(encoding='utf-8')
for target in re.findall(r'\]\(([^)]+)\)', report):
    if not target.startswith('https://'):
        assert (root / target).is_file(), target
files = []
for path in sorted(root.rglob('*')):
    if not path.is_file() or path == root / 'manifest.json':
        continue
    files.append({'path': str(path.relative_to(root)), 'bytes': path.stat().st_size,
                  'sha256': hashlib.sha256(path.read_bytes()).hexdigest()})
manifest = {
    'schema_version': 'codex.artifact-manifest.v1',
    'created_at': datetime.now(timezone(timedelta(hours=9))).isoformat(),
    'profile': 'ltb1021', 'project': 'contextra', 'task': 'ivpm-only-recovery',
    'run_id': 'r01', 'lifecycle': 'durable-large', 'cleanup_candidate_at': 'manual-review',
    'private_evidence_not_for_redistribution': True, 'files': files,
}
(root / 'manifest.json').write_text(json.dumps(manifest, ensure_ascii=False, indent=2) + '\n', encoding='utf-8')
print(json.dumps({'files': len(files), 'syntax_and_links': 'passed'}))
