"""Install the explicitly labeled two-project test registry for disposable work.""" from __future__ import annotations import argparse import json import os import secrets from pathlib import Path from gewu.application.paths import reject_symlink_components def main() -> None: parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--replace", action="store_true") arguments = parser.parse_args() data_root = Path(os.environ.get("GEWU_DATA_ROOT", "./.data/gewu")).expanduser().absolute() reject_symlink_components(data_root) control_root = data_root / "control" reject_symlink_components(control_root) control_root.mkdir(parents=True, exist_ok=True, mode=0o700) control_root.chmod(0o700) destination = control_root / "registry.json" if destination.exists() and not arguments.replace: raise SystemExit("Registry exists; pass --replace only to deliberately reset it") fixture_path = ( Path(__file__).resolve().parents[1] / "schema" / "fixtures" / "pilot-projects.json" ) def reject_duplicate_keys(pairs: list[tuple[str, object]]) -> dict[str, object]: result: dict[str, object] = {} for key, value in pairs: if key in result: raise ValueError("Test fixture has duplicate JSON keys") result[key] = value return result fixture = json.loads( fixture_path.read_text(encoding="utf-8"), object_pairs_hook=reject_duplicate_keys ) project_fields = { "project_id", "title", "status", "north_star", "key_questions", "autonomy_policy_id", } projects = [] for item in fixture["projects"]: project = {key: value for key, value in item.items() if key in project_fields} projects.append(project) config = { "schema_version": 1, "projects": projects, "policies": fixture["test_policies"], } temporary = control_root / f".{secrets.token_hex(12)}.tmp" try: with temporary.open("x", encoding="utf-8") as stream: json.dump(config, stream, ensure_ascii=False, allow_nan=False, indent=2) stream.flush() os.fsync(stream.fileno()) os.chmod(temporary, 0o600) os.replace(temporary, destination) finally: temporary.unlink(missing_ok=True) print("Installed disposable fixture projects and test-only acceptance policies.") if __name__ == "__main__": main()