the-custodian/docs/changes/netkingdom-target-2026-10-16/integrate_source_wave6.py
codex 6cf0012a6e
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 3s
Reject generated-only commits / generated-commit-guard (push) Successful in 12s
docs: preserve reviewed NetKingdom session artifacts
2026-11-01 23:09:51 +01:00

72 lines
4.4 KiB
Python

"""Apply independently reviewed Approval adapter and Access B1 R2 source."""
import integrate_source_wave5 as integration
import hashlib
import json
from pathlib import Path
import subprocess
from datetime import datetime, timezone
integration.TARGETS = (
('approval-engine', 'approval-go-fact', 'implementation.patch',
'096de94db8afff6b429215d951a98b94cd501cc6a7e1c374420e546169df2179',
'eece796b8bbee19551f6aa07ad389cbf83cabcdb', 'manifest.json', 'files'),
('access-engine', 'access-native-source/b1', 'b1-r2-over-native-prep-r2.patch',
'8880eb0f693f6793cfa6b3ea6f2466dbe67313e521a7f79c30180ca4880609b9',
'919ce25a377300ef9749c85e41b608467bed02ad', 'manifest-r2.json', 'source_files_sha256'),
)
def main():
prepared = []
wp = 'workplans/FLEX-WP-0024-decision-envelope-authenticity.md'
managed = {'FLEX-WP-0024-T05': 'cfe4d275-9f02-5090-8391-06eea59d45c5',
'FLEX-WP-0024-T06': '7f785b52-bf62-5884-8d34-670d70bc9023'}
for repo, part, filename, patch_hash, head, manifest_name, key in integration.TARGETS:
owner, folder = Path('/home/worsch') / repo, integration.ROOT / part
patch = folder / filename
assert not (folder / 'canonical-integration.json').exists()
assert integration.digest(patch) == patch_hash
assert subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=owner, text=True).strip() == head
files = json.loads((folder / manifest_name).read_text())[key]
before = {name: integration.digest(owner / name) for name in files}
for name in files:
tracked = subprocess.run(['git', 'ls-files', '--error-unmatch', name], cwd=owner, capture_output=True).returncode == 0
assert tracked or not (owner / name).exists(), name
if tracked:
original = subprocess.check_output(['git', 'show', 'HEAD:' + name], cwd=owner)
current = (owner / name).read_bytes()
if repo == 'access-engine' and name == wp:
without_ids = current
for value in managed.values():
line = f'state_hub_task_id: "{value}"\n'.encode()
assert without_ids.count(line) == 1
without_ids = without_ids.replace(line, b'')
assert without_ids == original, 'only verified registrar IDs may differ'
source = Path('/tmp/netkingdom-target-root-review/access-b1') / name
reviewed = source.read_bytes()
assert hashlib.sha256(reviewed).hexdigest() == files[name]
for task, value in managed.items():
anchor = ('id: ' + task + '\nstatus: ' + ('done' if task.endswith('T05') else 'progress') + '\npriority: high\n').encode()
assert reviewed.count(anchor) == 1
reviewed = reviewed.replace(anchor, anchor + f'state_hub_task_id: "{value}"\n'.encode())
files[name] = hashlib.sha256(reviewed).hexdigest()
else:
assert current == original, name
subprocess.run(['git', 'apply', '--check', str(patch)], cwd=owner, check=True)
prepared.append((repo, owner, folder, patch, patch_hash, head, before, files))
for repo, owner, folder, patch, patch_hash, head, before, files in prepared:
assert subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=owner, text=True).strip() == head
assert all(integration.digest(owner / name) == value for name, value in before.items())
subprocess.run(['git', 'apply', str(patch)], cwd=owner, check=True)
assert all(integration.digest(owner / name) == value for name, value in files.items())
receipt = {'repo': repo, 'base_commit': head, 'patch_sha256': 'sha256:' + patch_hash,
'integrated_at': datetime.now(timezone.utc).isoformat(),
'files_sha256': {name: 'sha256:' + value for name, value in files.items()},
'source_integrated': True, 'committed': False, 'published': False,
'native_accepted': False,
'preserved_registrar_ids': managed if repo == 'access-engine' else {}}
(folder / 'canonical-integration.json').write_text(json.dumps(receipt, indent=2) + '\n')
print(repo, 'reviewed source integrated; native acceptance unchanged')
if __name__ == '__main__':
main()