"""Static text adaptation only; never imports or runs the prepared adapters.""" from pathlib import Path import ast import hashlib import json BASE = Path(__file__).resolve().parent ROOT = BASE.parents[1] OLD = ROOT / '.local/navigation-prerelease-20260911' def sha(p): return hashlib.sha256(p.read_bytes()).hexdigest() old_inventory = {p.name: sha(p) for p in OLD.iterdir() if p.is_file()} native = (ROOT / '.local/text-repair-save-native-20260911/helper.py').read_text(encoding='utf-8') commands = native[native.index('COMMANDS = {'):native.index('\n\n\ndef now')] p = (OLD / 'prepare.py').read_text(encoding='utf-8') p = p.replace('import traceback', 'import traceback\nimport sys\nimport tomllib') p = p.replace("COMMIT = 'eeeaa1262748800c4c9aaa1eca79a7de96757358'", "COMMIT = '33c6d83e9ba9a5b1310b1b627d7c40affcbcf15c'") p = p.replace("BRANCH = 'codex/navigation-prerelease-source-20260911'", "BRANCH = 'codex/navigation-repair-prerelease-source-20260911'") p = p.replace("GATES = ROOT / '.local/text-navigation-native-fixes-20260911'\nDESKTOP = ROOT / '.local/text-navigation-desktop-20260911'", "GATES = ROOT / '.local/text-repair-save-20260911'") p = p.replace('72c2e8154f9945aa87d0cbf9cc148934a84614e15576673496aa5a5907c12154', '75a282fd3d4cb2dec6763046ea45d0caa015b998281fbdd6f222d8e3a175b13f') p = p.replace('7ff9e5703e33bd72e5c2186dd61125e965b82b8dfbf085961d514b005e716798', '213fdb39ea7c3601b4baac674c3ab3ecc863ac44db1b092d922d3e24f26887b7') p = p.replace('\n\n\ndef now', '\n\n' + commands + '\n\n\ndef now', 1) p = p.replace('inputs4', 'inputs1') a = p.index(" gate_path = GATES / 'final-gate-result.json'") b = p.index(" server = ROOT /", a) p = p[:a] + ''' assert len(expected) == 500 complete = load(GATES / 'complete.json') assert complete['archiveSha256'] == ZIP_SHA and complete['inputsUnchanged'] is True assert complete['gates'] == list(COMMANDS) and complete['sourceHead'] == manifest['head'] # The gates captured eeeaa126 plus the repair delta; COMMIT commits those # exact raw inputs. Never relabel the captured sourceHead as a clean build. assert manifest['head'] == 'eeeaa1262748800c4c9aaa1eca79a7de96757358' for name, command in COMMANDS.items(): receipt = load(GATES / (name + '-result.json')) assert receipt['exitCode'] == 0 and receipt['inputsUnchanged'] is True and receipt['command'] == command assert sha(GATES / (name + '-stdout.log')) == receipt['stdoutSha256'] assert sha(GATES / (name + '-stderr.log')) == receipt['stderrSha256'] build = load(GATES / 'gui-build-result.json')['binary'] artifact = build['artifact'] assert artifact['target']['name'] == 'arcadia-studio' and artifact['profile']['test'] is False assert artifact['profile']['opt_level'] == '0' and artifact['profile']['debug_assertions'] is True assert Path(artifact['executable']).resolve() == Path(build['path']).resolve() assert Path(build['path']).resolve().is_relative_to(ROOT / '.local/target-gnullvm') gui = GATES / 'gui-repair.exe' assert sha(gui) == build['sha256'] == 'b183ef31f16b3986538b3f2aba8435eab45978635c47f99ca01be6e72b168848' assert gui.stat().st_size == build['bytes'] == 113206272 summaries = re.findall(r'test result: ok\\. (\\d+) passed; (\\d+) failed; (\\d+) ignored; (\\d+) measured; (\\d+) filtered out;', (GATES / 'desktop-tests-stdout.log').read_text(encoding='utf-8')) assert summaries == [('755', '0', '1', '0', '0')] counts = dict(zip(('passed', 'failed', 'ignored', 'measured', 'filtered'), map(int, summaries[0]))) ''' + p[b:] p = p.replace(" manifest, frozen, build, gui, counts, server, dll, old = admission()", """ # Later root commits may record evidence only. Do not silently package later # production/docs/dependency or instruction changes under the tested source. git(ROOT, 'merge-base', '--is-ancestor', COMMIT, before['head']) later = git(ROOT, 'diff', '--name-only', '-z', COMMIT, before['head']).decode().split('\\0')[:-1] assert all(p.startswith('harness/') and not p.startswith('harness/fixtures/') for p in later), later manifest, frozen, build, gui, counts, server, dll, old = admission() for path, raw in frozen.items(): assert ordinary(ROOT / path).read_bytes() == raw, f'Current frozen input changed: {path}'""") p = p.replace(" # Local clone has its own index/refs", """ registry = {(x['name'], x['version'], x['source']): x['registry_checksum'] for x in notice['packages'] if x['source']} locked = {(x['name'], x['version'], x.get('source')): x.get('checksum') for x in tomllib.loads(frozen['Cargo.lock'].decode())['package']} assert registry and all(locked.get(k) == v for k, v in registry.items()), 'Historical registry coverage differs.' # Local clone has its own index/refs""") p = p.replace(" frozen[p] = (ROOT / p).read_bytes()", " if p in frozen:\n assert frozen[p] == (ROOT / p).read_bytes(), p\n frozen[p] = (ROOT / p).read_bytes()") a = p.index(' provenance.update({') b = p.index(" (BASE / 'evidence').mkdir()",a) p = p[:a] + ''' provenance.update({'gui-inputs1.json': GATES / 'inputs1.json', 'gui-complete.json': GATES / 'complete.json', 'gui-gate-run.py': GATES / 'run.py'}) for name in COMMANDS: for suffix in ('-result.json', '-stdout.log', '-stderr.log'): provenance['gui-' + name + suffix] = GATES / (name + suffix) ''' + p[b:] p = p.replace("'build': 'evidence/gui-build-v3.json', 'preserved': 'evidence/gui-v3-preserved.json', 'inputs': 'evidence/gui-inputs1.json', 'full_gate': 'evidence/gui-full-corrected.json'", "'build': 'evidence/gui-gui-build-result.json', 'inputs': 'evidence/gui-inputs1.json', 'full_gate': 'evidence/gui-desktop-tests-result.json', 'complete': 'evidence/gui-complete.json', 'captured_head': manifest['head'], 'scope': 'Built from captured eeeaa126 plus exact repair input delta; those bytes are committed at base_commit, then reconstructed without changing code.'") p = p.replace("'branch': BRANCH, 'source_repository': str(SOURCE)", "'branch': BRANCH, 'record_only_root_paths_after_base': later, 'historical_registry_count': len(registry), 'source_repository': str(SOURCE)") p = p.replace("if __name__ == '__main__':\n", "if __name__ == '__main__':\n sys.stdout.reconfigure(encoding='utf-8')\n sys.stderr.reconfigure(encoding='utf-8')\n") (BASE / 'prepare.py').write_text(p, encoding='utf-8', newline='\n') ps = (OLD / 'package2.ps1').read_text(encoding='utf-8').replace('eeeaa1262748800c4c9aaa1eca79a7de96757358', '33c6d83e9ba9a5b1310b1b627d7c40affcbcf15c') (BASE / 'package2.ps1').write_text(ps, encoding='utf-8', newline='\n') r = (OLD / 'readback.py').read_text(encoding='utf-8').replace('import stat', 'import stat\nimport sys') r = r.replace('relative, historical_inputs', 'relative, historical_inputs, HISTORY') r = r.replace(" docs = load(stage / 'documentation-check.json')", """ previous = load(HISTORY / 'prior-dependency-notices.json') def registry_key(item): return item['name'], item['version'], item['source'], item['registry_checksum'] collected = {registry_key(x): x for x in notices['packages'] if x['source']} covered = 0 for old in previous['packages']: if not old['source']: continue current = collected[registry_key(old)] assert old['license'] == current['license'] assert set(old['features']).issubset(current['features']) # Exact recorded notice files must remain in the actual ZIP. Current # metadata does not substitute for the historical server's provenance. new_notices = {(n['path'], n['sha256']) for n in current['notices']} for item in old['notices']: assert (item['path'], item['sha256']) in new_notices assert actual[item['path']]['sha256'] == item['sha256'] assert old['embedded_fonts'] == current['embedded_fonts'] covered += 1 assert covered == preparation['historical_registry_count'] docs = load(stage / 'documentation-check.json')""") r = r.replace("'notice_roots': notices['root_packages']", "'historical_registry_packages_covered': covered, 'notice_roots': notices['root_packages']") r = r.replace("if __name__ == '__main__':\n", "if __name__ == '__main__':\n sys.stdout.reconfigure(encoding='utf-8')\n sys.stderr.reconfigure(encoding='utf-8')\n") (BASE / 'readback.py').write_text(r, encoding='utf-8', newline='\n') for name in ('prepare.py', 'readback.py'): ast.parse((BASE / name).read_text(encoding='utf-8'), filename=name) assert old_inventory == {p.name: sha(p) for p in OLD.iterdir() if p.is_file()} print(json.dumps({'static_ast': 'PASS', 'old_adapter_files_unchanged': len(old_inventory)}))