"""Apply only independently reviewed owner source, using the normal allocator.""" from pathlib import Path import hashlib import json import re import subprocess import sys HERE = Path(__file__).resolve().parent ROOT = Path('/home/worsch/railiance-platform') PACKET = HERE.parent / 'platform-broker-followthrough-r1' REVIEW = HERE.parent / 'platform-broker-review-r1/review.json' NEW_PLAN = 'workplans/RPF-WP-0060-browser-case-platform-bindings.md' BASE = '104ed90f42a9a86bf9fda343b49b65a85c9ee4b9' def digest(raw): return hashlib.sha256(raw).hexdigest() def git(*args): return subprocess.check_output(['git', '-C', str(ROOT), *args], stderr=subprocess.PIPE, timeout=40).decode().strip() assert git('rev-parse', 'HEAD') == BASE assert git('ls-remote', 'origin', 'refs/heads/main').split()[0] == BASE assert digest(REVIEW.read_bytes()) == '05d5bf9c2b90a8562ce4675866b8b23c0e12d5d069b43b194948d384b0a553f5' review = json.loads(REVIEW.read_text()) assert review['source_integration_verdict'] == 'accept' assert review['t1_complete'] is False manifest = json.loads((PACKET / 'manifest.json').read_text()) assert digest((PACKET / 'platform-source.patch').read_bytes()) == review['candidate_patch_sha256'] assert {r['path']: r['output_sha256'] for r in manifest['files']} == { r['path']: r['sha256'] for r in review['reviewed_outputs']} for row in manifest['files']: assert digest((ROOT / row['path']).read_bytes()) == row['input_sha256'] assert digest((PACKET / 'candidate' / row['path']).read_bytes()) == row['output_sha256'] assert not (ROOT / NEW_PLAN).exists() old_plans = {str(p.relative_to(ROOT)): digest(p.read_bytes()) for p in (ROOT / 'workplans').rglob('*.md')} assert not any(re.search(r'^id:\s*RPF-WP-0060\s*$', (ROOT / p).read_text(), re.M) for p in old_plans) dirty = git('diff', '--name-only').splitlines() staged = git('diff', '--cached', '--name-only').splitlines() assert set(dirty + staged) == {'.custodian-brief.md', 'WORK-RECORDS.md'} originals = {p: {'worktree': digest((ROOT / p).read_bytes()), 'index': git('ls-files', '--stage', '--', p)} for p in set(dirty + staged)} sys.path.insert(0, '/home/worsch/repo-manager/src') from repo_manager.identifiers import ensure_missing_work_record_identifiers preview = ensure_missing_work_record_identifiers(ROOT, execute=False) assert preview['ok'] and not preview['assignments'] and not preview['files_changed'] for row in manifest['files']: (ROOT / row['path']).write_bytes((PACKET / 'candidate' / row['path']).read_bytes()) (ROOT / NEW_PLAN).write_bytes((HERE / 'workplan.md').read_bytes()) preview = ensure_missing_work_record_identifiers(ROOT, execute=False) (HERE / 'identifier-preview.json').write_text(json.dumps(preview, indent=2) + '\n') assert preview['ok'] and preview['files_changed'] == [NEW_PLAN] assert len(preview['assignments']) == 5 assigned = ensure_missing_work_record_identifiers(ROOT, execute=True) (HERE / 'identifier-assignment.json').write_text(json.dumps(assigned, indent=2) + '\n') assert assigned['ok'] and assigned['files_changed'] == [NEW_PLAN] for p, value in old_plans.items(): assert digest((ROOT / p).read_bytes()) == value for p, value in originals.items(): assert digest((ROOT / p).read_bytes()) == value['worktree'] assert git('ls-files', '--stage', '--', p) == value['index'] files = [dict(path=row['path'], sha256=row['output_sha256']) for row in manifest['files']] files.append(dict(path=NEW_PLAN, sha256=digest((ROOT / NEW_PLAN).read_bytes()))) cfg = {'owner': 'railiance-platform', 'base_revision': BASE, 'message': 'Bind mint broker validation to exact reviewed sources and track successor obligations', 'files': files} (HERE / 'publication-inputs.json').write_text(json.dumps(cfg, indent=2) + '\n') (HERE / 'source-application.json').write_text(json.dumps({ 'base': BASE, 'review_sha256': 'sha256:' + digest(REVIEW.read_bytes()), 'files': files, 'existing_workplans_preserved': len(old_plans), 'unrelated_state': originals, 'native_actions': False, 'tasks': {'RPF-WP-0060-T01': 'progress', 'RPF-WP-0060-T02': 'done', 'RPF-WP-0060-T03': 'todo', 'RPF-WP-0060-T04': 'todo'}}, indent=2) + '\n') print(json.dumps({'status': 'applied_source_only', 'files': len(files), 'normal_allocator_assignments': len(assigned['assignments']), 'existing_workplans_preserved': len(old_plans)}))