← Codex ReplayCONTENT HISTORY

Update to Codex Replay

Snapshot Oct 24, 2026 · 13:07 UTC · version 1.0.132

WHAT CHANGED

Payment or plan references changed

Package file — Now says: d233c98d77f2ebea9aed72e4300cc69872440a46d180e81f0975b1a23bb527f6

Observed in published text. Live prices and checkout terms have not been verified by this change.

Save Codex Replay and check future changes in Following.

Up to 3 plugins free · no card required.

All fields and original values.

These are saved file metadata. Open a changed file to read its text edits.

Package file

Before

Sep 30, 2026 · 23:01 UTC

fd0b7569889dadd45fc99dae3665bd2cdb180e28926fb9563bf9112853aad664

After

Oct 24, 2026 · 13:07 UTC

d233c98d77f2ebea9aed72e4300cc69872440a46d180e81f0975b1a23bb527f6

Package file

Before

Sep 30, 2026 · 23:01 UTC

7523

After

Oct 24, 2026 · 13:07 UTC

34483

Package file

Before

Sep 30, 2026 · 23:01 UTC

{"sha256":"e2e4b208b8cf7e8c70b8b5bff0c23ed06269b31b9dfe02d4e52f88dec7e3f4ce","size":6951}

After

Oct 24, 2026 · 13:07 UTC

Not present

Package file

Before

Sep 30, 2026 · 23:01 UTC

{"sha256":"0bdfdaa4e0671c2021959e7c6d1e642dc390bf7583ccc51f7eda3756a1e7af3f","size":9241}

After

Oct 24, 2026 · 13:07 UTC

Not present

Compare saved observations

Download comparison JSON

Changed files

Choose a file to see its text changes. Binary or large files show metadata only.

.codex-plugin/plugin.json →

OWNERS →

README.md →

TEMPEST.md →

assets/model-pricing.json →

docs/security-review/managed-network-settings.json →

docs/security-review/real-model-results.json →

integrity.json →

manual_tests/README.md →

manual_tests/egress_probe.py →

manual_tests/prompt_guard.py →

manual_tests/runtime_errors.py →

manual_tests/worker_isolation.py →

mcp/__pycache__/controller_constants.cpython-312.pyc →

mcp/__pycache__/final_results_receipt.cpython-312.pyc →

mcp/__pycache__/plugin_installations.cpython-312.pyc →

mcp/__pycache__/replay_batch.cpython-312.pyc →

mcp/__pycache__/replay_configuration.cpython-312.pyc →

mcp/__pycache__/server.cpython-312.pyc →

mcp/codex-worker.mjs →

mcp/controller-ranges.js →

mcp/controller.css →

mcp/controller.html →

mcp/replay_batch.py →

mcp/server.py →

mcp/worker-policy.json →

plans/MULTI_THREAD_REPLAY.md →

scripts/__pycache__/claude_code_sample_loader.cpython-312.pyc →

scripts/__pycache__/historical_discovery.cpython-312.pyc →

scripts/__pycache__/historical_discovery_capabilities.cpython-312.pyc →

scripts/__pycache__/historical_discovery_core.cpython-312.pyc →

scripts/__pycache__/historical_execution.cpython-312.pyc →

scripts/__pycache__/historical_file_selection.cpython-312.pyc →

scripts/__pycache__/historical_replay.cpython-312.pyc →

scripts/__pycache__/precompute_sample_configurations.cpython-312.pyc →

scripts/__pycache__/record_claude_code_samples.cpython-312.pyc →

scripts/__pycache__/verify_claude_sample.cpython-312.pyc →

scripts/historical_execution.py →

scripts/historical_replay.py →

scripts/metrics/2_start_controller.py →

scripts/metrics/3_report_start_metrics.py →

scripts/metrics/4_report_final_metrics.py →

scripts/metrics/__pycache__/3_report_start_metrics.cpython-312.pyc →

scripts/metrics/__pycache__/4_report_final_metrics.cpython-312.pyc →

scripts/metrics/__pycache__/replay_metrics_common.cpython-312.pyc →

scripts/metrics/replay_metrics_common.py →

skills/codex-replay/SKILL.md →

tests/__pycache__/test_claude_code_sample_loader.cpython-312.pyc →

tests/__pycache__/test_claude_sample_verification.cpython-312.pyc →

tests/__pycache__/test_controller_batch_ui.cpython-312.pyc →

tests/__pycache__/test_controller_explanations.cpython-312.pyc →

tests/__pycache__/test_controller_file_configuration.cpython-312.pyc →

tests/__pycache__/test_controller_installations.cpython-312.pyc →

tests/__pycache__/test_controller_range_ui.cpython-312.pyc →

tests/__pycache__/test_controller_ranges.cpython-312.pyc →

tests/__pycache__/test_controller_scoring.cpython-312.pyc →

tests/__pycache__/test_controller_search.cpython-312.pyc →

tests/__pycache__/test_controller_transcript_inference.cpython-312.pyc →

tests/__pycache__/test_historical_discovery.cpython-312.pyc →

tests/__pycache__/test_historical_discovery_capabilities.cpython-312.pyc →

tests/__pycache__/test_historical_execution.cpython-312.pyc →

tests/__pycache__/test_historical_file_selection.cpython-312.pyc →

tests/__pycache__/test_lean_replay.cpython-312.pyc →

tests/__pycache__/test_maintained_catalog.cpython-312.pyc →

tests/__pycache__/test_mcp_retry_resilience.cpython-312.pyc →

tests/__pycache__/test_mcp_server.cpython-312.pyc →

tests/__pycache__/test_mcp_server_models.cpython-312.pyc →

tests/__pycache__/test_node_runtime.cpython-312.pyc →

tests/__pycache__/test_plugin_contract.cpython-312.pyc →

tests/__pycache__/test_plugin_metrics_contract.cpython-312.pyc →

tests/__pycache__/test_record_claude_code_samples.cpython-312.pyc →

tests/__pycache__/test_replay_metrics.cpython-312.pyc →

tests/__pycache__/test_replay_ranges.cpython-312.pyc →

tests/__pycache__/test_report_explanations.cpython-312.pyc →

tests/__pycache__/test_reviewer_privacy.cpython-312.pyc →

tests/test_controller_auth.py →

tests/test_controller_installations.py →

tests/test_controller_range_ui.py →

tests/test_controller_scoring.py →

tests/test_historical_execution.py →

tests/test_mcp_server.py →

tests/test_mcp_server_models.py →

tests/test_node_runtime.py →

tests/test_replay_metrics.py →

worker/src/codex-worker.mjs →

worker/src/worker-policy.mjs →

worker/tests/codex-worker.test.mjs →

worker/tests/worker-policy.test.mjs →

tests/test_mcp_server.py

− removed · + added

--- before
+++ after
@@ -3,8 +3,6 @@
 from __future__ import annotations
 
 import ast
-import hashlib
-import hmac
 import http.client
 import importlib.util
 import json
@@ -96,6 +94,173 @@
 
 
 class ControllerServerTests(unittest.TestCase):
+    def test_default_launch_ignores_symlinks_in_writable_cache(self) -> None:
+        for attack in ("log", "missing-log-target", "controller-directory", "runs-directory"):
+            with self.subTest(attack=attack), tempfile.TemporaryDirectory() as temporary:
+                home = Path(temporary).resolve()
+                session = "f" * 32
+                cache = home / ".cache" / "codex-replay"
+                old_instance = cache / "controllers" / session
+                outside = home / "outside-sandbox"
+                outside.mkdir(mode=0o755)
+                marker = outside / "marker"
+                marker.write_text("unchanged")
+                if attack == "controller-directory":
+                    old_instance.parent.mkdir(parents=True)
+                    old_instance.symlink_to(outside, target_is_directory=True)
+                elif attack == "runs-directory":
+                    cache.mkdir(parents=True)
+                    (cache / "runs").symlink_to(outside, target_is_directory=True)
+                else:
+                    old_instance.mkdir(parents=True)
+                    target = outside / "new-file" if attack == "missing-log-target" else marker
+                    (old_instance / "controller-server.log").symlink_to(target)
+                before = marker.stat()
+                outside_mode = outside.stat().st_mode
+                environment = dict(os.environ)
+                environment.pop("CODEX_REPLAY_RUN_ROOT", None)
+                # Exercise both default and explicitly forwarded Codex homes.
+                environment.pop("CODEX_HOME", None)
+                codex_home = home / ".codex"
+                if attack == "controller-directory":
+                    codex_home = home / "host-codex-home"
+                    environment["CODEX_HOME"] = str(codex_home)
+                environment.update(
+                    {"HOME": str(home), "CODEX_REPLAY_CONTROLLER_IDLE_TIMEOUT_SECONDS": "10"}
+                )
+                private_root = codex_home / "state" / "plugins" / "codex-replay"
+                runtime = private_root / "controllers" / session / "controller-server.json"
+                try:
+                    result = subprocess.run(
+                        [sys.executable, str(SERVER_PATH)],
+                        input=json.dumps(
+                            {
+                                "jsonrpc": "2.0",
+                                "id": 1,
+                                "method": "tools/call",
+                                "params": {
+                                    "name": "open_controller",
+                                    "arguments": {"controller_session_id": session},
+                                },
+                            }
+                        )
+                        + "\n",
+                        env=environment,
+                        capture_output=True,
+                        text=True,
+                        timeout=15,
+                    )
+                    self.assertEqual(result.returncode, 0, result.stderr)
+                    reply = json.loads(result.stdout)["result"]
+                    self.assertFalse(reply.get("isError"), reply)
+                    self.assertEqual(marker.read_text(), "unchanged")
+                    self.assertEqual(marker.stat().st_mode, before.st_mode)
+                    self.assertEqual(marker.stat().st_mtime_ns, before.st_mtime_ns)
+                    self.assertEqual(outside.stat().st_mode, outside_mode)
+                    self.assertEqual(sorted(p.name for p in outside.iterdir()), ["marker"])
+                    self.assertTrue(runtime.is_file())
+                    self.assertTrue((private_root / "runs").is_dir())
+                    sidecar = home / "metrics-sidecar.json"
+                    sidecar.touch()
+                    observer = subprocess.run(
+                        [
+                            sys.executable,
+                            str(PLUGIN_ROOT / "scripts" / "metrics" / "2_start_controller.py"),
+                            "--controller-session-id",
+                            session,
+                            "--startup-timeout-seconds",
+                            "0",
+                        ],
+                        env={
+                            **environment,
+                            "CODEX_PLUGIN_METRICS_OUTPUT": str(sidecar),
+                            "XDG_CACHE_HOME": str(home / ".cache"),
+                        },
+                        capture_output=True,
+                        text=True,
+                        timeout=5,
+                    )
+                    self.assertEqual(observer.returncode, 0, observer.stderr)
+                    self.assertEqual(
+                        json.loads(sidecar.read_text())["measurements"][0]["dimensions"]["outcome"],
+                        "ready",
+                    )
+                finally:
+                    # Also shut down the old implementation when demonstrating the regression.
+                    for path in (runtime, old_instance / "controller-server.json"):
+                        if path.is_file():
+                            state = json.loads(path.read_text())
+                            controller_request(
+                                state["port"],
+                                "POST",
+                                "/api/shutdown",
+                                payload={},
+                                headers={
+                                    "Content-Type": "application/json",
+                                    "X-Codex-Replay-Control": state["control_token"],
+                                },
+                            )
+
+    def test_discovery_preserves_host_config_without_exposing_it_to_worker(self) -> None:
+        server = load_server()
+        with mock.patch.dict(
+            os.environ,
+            {"CLAUDE_CONFIG_DIR": "/fixture/history", "REPLAY_SECRET_CANARY": "synthetic"},
+        ):
+            engine = server._worker_environment(model_worker=False)
+            worker = server._worker_environment()
+        self.assertEqual(engine["CLAUDE_CONFIG_DIR"], "/fixture/history")
+        self.assertNotIn("CLAUDE_CONFIG_DIR", worker)
+        self.assertNotIn("REPLAY_SECRET_CANARY", worker)
+
+    def test_mcp_ignores_executable_overrides_when_launching(self) -> None:
+        server = load_server()
+        with mock.patch.object(server, "_open_controller", return_value={}) as launch:
+            for override in ("/tmp/project/codex", None, {"path": "/tmp/project/codex"}):
+                with self.subTest(override=override):
+                    result = server._handle_mcp_request(
+                        "tools/call",
+                        {
+                            "name": "open_controller",
+                            "arguments": {
+                                "controller_session_id": "a" * 32,
+                                "codex_cli_path": override,
+                            },
+                        },
+                    )
+                    self.assertEqual(result, {})
+                    launch.assert_called_once_with("a" * 32)
+                    launch.reset_mock()
+            server._handle_mcp_request(
+                "tools/call",
+                {
+                    "name": "open_controller",
+                    "arguments": {"controller_session_id": "a" * 32},
+                },
+            )
+            launch.assert_called_once_with("a" * 32)
+
+    def test_worker_ignores_legacy_executable_hint(self) -> None:
+        with (
+            tempfile.TemporaryDirectory() as temporary,
+            mock.patch.dict(os.environ, {"CODEX_REPLAY_RUN_ROOT": temporary + "/runs"}),
+        ):
+            server = load_server()
+            root = server.CONTROLLER_INSTANCE_ROOT
+            root.mkdir(parents=True)
+            executable = root / "project-codex"
+            executable.write_text("#!/bin/sh\nexit 0\n")
+            executable.chmod(0o755)
+            (root / "codex-cli-path.json").write_text(json.dumps({"path": str(executable)}))
+            with (
+                mock.patch.dict(os.environ, {"PATH": "/usr/bin"}, clear=True),
+            ):
+                self.assertEqual(server._worker_environment(), {"PATH": "/usr/bin"})
+                with mock.patch.dict(os.environ, {"CODEX_CLI_PATH": "/trusted/bin/codex"}):
+                    environment = server._worker_environment()
+                    self.assertEqual(environment["CODEX_CLI_PATH"], "/trusted/bin/codex")
+                    self.assertEqual(environment["PATH"], "/trusted/bin:/usr/bin")
+
     def test_stdio_exposes_only_the_controller_launcher(self) -> None:
         requests = [
             {
@@ -220,207 +385,6 @@
         self.assertEqual(status, "unverified")
         self.assertEqual(health, payload)
 
-    def test_loopback_controller_allows_same_origin_without_browser_authentication(self) -> None:
-        server = load_server()
-        control_token = "control-" + ("x" * 48)
-        httpd = server._ControllerHTTPServer(("127.0.0.1", 0), control_token)
-        thread = threading.Thread(target=httpd.serve_forever, daemon=True)
-        thread.start()
-        port = int(httpd.server_address[1])
-
-        def request(
-            method: str,
-            path: str,
-            *,
-            body: str | None = None,
-            headers: dict[str, str] | None = None,
-        ) -> tuple[int, dict[str, str], bytes]:
-            connection = http.client.HTTPConnection("127.0.0.1", port, timeout=5)
-            try:
-                connection.request(method, path, body=body, headers=headers or {})
-                response = connection.getresponse()
-                return response.status, dict(response.getheaders()), response.read()
-            finally:
-                connection.close()
-
-        try:
-            challenge = "test-challenge"
-            status, _, body = request("GET", f"/health?challenge={challenge}")
-            self.assertEqual(status, 200)
-            health = json.loads(body)
-            self.assertEqual(health["server"], "codex-replay")
-            self.assertEqual(
-                health["proof"],
-                hmac.new(control_token.encode(), challenge.encode(), hashlib.sha256).hexdigest(),
-            )
-
-            status, _, _ = request("GET", "/auth?token=unused")
-            self.assertEqual(status, 404)
-            status, _, _ = request("POST", "/api/launch", body="{}")
-            self.assertEqual(status, 404)
-
-            status, _, body = request(
-                "POST",
-                "/api/heartbeat",
-                body="{}",
-                headers={
-                    "Content-Type": "application/json",
-                    "Origin": httpd.origin,
-                },
-            )
-            self.assertEqual(status, 200)
-            heartbeat = json.loads(body)
-            self.assertTrue(heartbeat["ok"])
-            self.assertEqual(heartbeat["controller_session_id"], httpd.controller_session_id)
-            self.assertGreater(heartbeat["heartbeat_interval_seconds"], 0)
-
-            status, _, _ = request(
-                "POST",
-                "/api/heartbeat",
-                body="{}",
-                headers={
-                    "Content-Type": "application/json",
-                    "Origin": "https://example.com",
-                },
-            )
-            self.assertEqual(status, 403)
-
-            status, _, body = request("GET", "/")
-            self.assertEqual(status, 200)
-            self.assertIn(b"codex-replay.controller-draft.v7", body)
-            self.assertNotIn(b"window.openai", body)
-            self.assertNotIn(b"controller-session", body)
-            status, headers, body = request("GET", "/controller.css")
-            self.assertEqual(status, 200)
-            self.assertEqual(headers["Content-Type"], "text/css; charset=utf-8")
-            self.assertIn(b":root", body)
-            status, headers, body = request("GET", "/controller-ranges.js")
-            self.assertEqual(status, 200)
-            self.assertEqual(headers["Content-Type"], "text/javascript; charset=utf-8")
-            self.assertEqual(body, server.APP_RANGES.read_bytes())
-            self.assertIn("script-src 'self'", headers["Content-Security-Policy"])
-
-            result = {
-                "content": [{"type": "text", "text": "Ready."}],
-                "structuredContent": {"state": {"models": []}},
-            }
-            with mock.patch.object(server, "_call_tool", return_value=result):
-                status, _, body = request(
-                    "POST",
-                    "/api/call",
-                    body=json.dumps({"name": "get_state", "arguments": {}}),
-                    headers={
-                        "Content-Type": "application/json",
-                        "Origin": httpd.origin,
-                    },
-                )
-                self.assertEqual(status, 200)
-                self.assertEqual(json.loads(body), result)
-
-                status, _, _ = request(
-                    "POST",
-                    "/api/call",
-                    body=json.dumps({"name": "get_state", "arguments": {}}),
-                    headers={
-                        "Content-Type": "application/json",
-                        "Origin": "https://example.com",
-                    },
-                )
-                self.assertEqual(status, 403)
-
-                status, _, _ = request(
-                    "POST",
-                    "/api/call",
-                    body=json.dumps({"name": "get_state", "arguments": {}}),
-                    headers={"Content-Type": "application/json"},
-                )
-                self.assertEqual(status, 403)
-
-                status, _, _ = request(
-                    "POST",
-                    "/api/call",
-                    body=json.dumps({"name": "open_controller", "arguments": {}}),
-                    headers={
-                        "Content-Type": "application/json",
-                        "Origin": httpd.origin,
-                    },
-                )
-                self.assertEqual(status, 400)
-        finally:
-            httpd.shutdown()
-            thread.join(timeout=5)
-            httpd.server_close()
-
-    def test_same_origin_report_downloads_require_no_session_token(self) -> None:
-        server = load_server()
-        with tempfile.TemporaryDirectory() as temporary:
-            run_root = Path(temporary).resolve()
-            run_directory = run_root / "run-1"
-            run_directory.mkdir()
-            artifacts = {
-                "json": (
-                    b'{"status":"completed","original_request":"'
-                    + b"x" * (19 * 1024 * 1024)
-                    + b'"}\n',
-                    "application/json; charset=utf-8",
-                ),
-                "html": (
-                    b"<!doctype html><title>Replay report</title>" + b"x" * (19 * 1024 * 1024),
-                    "text/html; charset=utf-8",
-                ),
-            }
-            for artifact_format, (body, _) in artifacts.items():
-                (run_directory / f"report.{artifact_format}").write_bytes(body)
-
-            with mock.patch.object(server, "RUN_ROOT", run_root):
-                httpd = server._ControllerHTTPServer(
-                    ("127.0.0.1", 0),
-                    "control-" + ("x" * 48),
-                )
-                thread = threading.Thread(target=httpd.serve_forever, daemon=True)
-                thread.start()
-                port = int(httpd.server_address[1])
-
-                def request(
-                    artifact_format: str,
-                    *,
-                    origin: str | None = None,
-                ) -> tuple[int, dict[str, str], bytes]:
-                    connection = http.client.HTTPConnection("127.0.0.1", port, timeout=5)
-                    headers = {
-                        "Content-Type": "application/json",
-                        "Origin": httpd.origin if origin is None else origin,
-                    }
-                    try:
-                        connection.request(
-                            "POST",
-                            "/api/download",
-                            body=json.dumps({"run_id": "run-1", "format": artifact_format}),
-                            headers=headers,
-                        )
-                        response = connection.getresponse()
-                        return response.status, dict(response.getheaders()), response.read()
-                    finally:
-                        connection.close()
-
-                try:
-                    for artifact_format, (expected_body, content_type) in artifacts.items():
-                        status, headers, body = request(artifact_format)
-                        self.assertEqual(status, 200)
-                        self.assertEqual(body, expected_body)
-                        self.assertEqual(headers["Content-Type"], content_type)
-                        self.assertEqual(
-                            headers["Content-Disposition"],
-                            f'attachment; filename="codex-replay-run-1-report.{artifact_format}"',
-                        )
-
-                    status, _, _ = request("html", origin="https://example.com")
-                    self.assertEqual(status, 403)
-                finally:
-                    httpd.shutdown()
-                    thread.join(timeout=5)
-                    httpd.server_close()
-
     def test_http_daemon_mode_starts_and_stops_cleanly(self) -> None:
         with tempfile.TemporaryDirectory() as temporary:
             root = Path(temporary)
@@ -519,13 +483,11 @@
                         *,
                         reservation: socket.socket,
                         controller_session_id: str,
-                        codex_cli_path: str | None = None,
                         plugin_root: Path = PLUGIN_ROOT,
                     ) -> subprocess.Popen[bytes]:
                         process = original_spawn(
                             reservation=reservation,
                             controller_session_id=controller_session_id,
-                            codex_cli_path=codex_cli_path,
                             plugin_root=plugin_root,
                         )
                         spawned.append(process)
@@ -585,6 +547,14 @@
                                 headers={
                                     "Content-Type": "application/json",
                                     "Origin": f"http://127.0.0.1:{port}",
+                                    server.CONTROLLER_BROWSER_HEADER: json.loads(
+                                        (
+                                            root
+                                            / "controllers"
+                                            / session
+                                            / "controller-server.json"
+                                        ).read_text()
+                                    )["browser_token"],
                                 },
                             )
                             self.assertEqual(status, 200)
@@ -606,6 +576,9 @@
                             headers={
                                 "Content-Type": "application/json",
                                 "Origin": f"http://127.0.0.1:{first_port}",
+                                server.CONTROLLER_BROWSER_HEADER: json.loads(
+                                    runtimes[0].read_text()
+                                )["browser_token"],
                             },
                         )
                         self.assertEqual(status, 400)
@@ -678,6 +651,9 @@
                     headers={
                         "Content-Type": "application/json",
                         "Origin": f"http://127.0.0.1:{port}",
+                        "X-Codex-Replay-Access": json.loads(
+                            (root / "controllers" / session / "controller-server.json").read_text()
+                        )["browser_token"],
                     },
                 )
                 self.assertEqual(status, 200)
@@ -914,7 +890,6 @@
         self.assertIn("controller_session_id", controller)
         self.assertNotIn("codex-replay.controller-session", controller)
         self.assertNotIn("X-Codex-Replay-Session", controller)
-        self.assertNotIn("sessionStorage", controller)
         self.assertIn('fetch("/api/call"', controller)
         self.assertIn('fetch("/api/download"', controller)
         self.assertIn('fetch("/api/heartbeat"', controller)
@@ -2639,6 +2614,64 @@
                 server._run_process(["unused"], cwd=PLUGIN_ROOT, timeout=1)
         spawn.assert_not_called()
 
+    def test_shutdown_interrupts_waiting_runs_without_starting_them(self) -> None:
+        server = load_server()
+        release = threading.Event()
+        condition = threading.Condition()
+        entered: set[str] = set()
+        count = server.MAX_PARALLEL_RUNS + 2
+
+        def workflow(directory, request):
+            with condition:
+                entered.add(directory.name)
+                condition.notify_all()
+            release.wait(timeout=10)
+
+        with tempfile.TemporaryDirectory() as temporary:
+            root = Path(temporary).resolve()
+            directories = [root / f"run-{index}" for index in range(count)]
+            with (
+                mock.patch.object(server, "RUN_ROOT", root),
+                mock.patch.object(server, "_coordinator", side_effect=workflow),
+            ):
+                workers: list[threading.Thread] = []
+                try:
+                    for directory in directories:
+                        directory.mkdir()
+                        state = server._initial_state(directory)
+                        state.update(phase="queued", coordinator_pid=os.getpid())
+                        server._write_json(server._state_path(directory), state)
+                        server._write_json(directory / server.COORDINATOR_REQUEST_NAME, {})
+                        server._spawn_coordinator(directory)
+                    with condition:
+                        self.assertTrue(
+                            condition.wait_for(
+                                lambda: len(entered) == server.MAX_PARALLEL_RUNS, timeout=5
+                            )
+                        )
+                    with server._active_processes_lock:
+                        workers = list(server._run_threads.values())
+                    server._cancel_run({"run_id": directories[-1].name})
+                    server._stop_jobs()
+                    with self.assertRaisesRegex(server.ControllerError, "shutting down"):
+                        server._spawn_coordinator(directories[-2])
+                    for directory in directories[:-1]:
+                        state = server._read_json(server._state_path(directory))
+                        self.assertEqual(state["status"], "failed")
+                        self.assertTrue(state["interrupted"])
+                    self.assertEqual(
+                        server._read_json(server._state_path(directories[-1]))["status"],
+                        "cancelled",
+                    )
+                finally:
+                    release.set()
+                    for worker in workers:
+                        worker.join(timeout=5)
+                        self.assertFalse(worker.is_alive())
+                self.assertEqual(entered, {directory.name for directory in directories[:-2]})
+                self.assertFalse(server._run_cancellations)
+                self.assertEqual(server._active_controller_runs(), 0)
+
     def test_metrics_sidecar_is_not_inherited_by_server_or_worker(self) -> None:
         server = load_server()
         with tempfile.TemporaryDirectory() as temporary, socket.socket() as reservation:
@@ -3056,20 +3089,25 @@
                         "if sys.argv[1:] == ['--version']:",
                         "    print('codex fixture')",
                         "    raise SystemExit(0)",
+                        "if 'app-server' in sys.argv:",
+                        "    for line in sys.stdin:",
+                        "        m = json.loads(line)",
+                        "        if 'id' in m: print(json.dumps({'id': m['id'], 'result': {'config': {}, 'requirements': None}}), flush=True)",
+                        "    raise SystemExit(0)",
                         "sys.stdin.read()",
                         "args = sys.argv[1:]",
                         "workspace = Path(args[args.index('--cd') + 1])",
-                        "counter = Path(os.environ['FAKE_RETRY_COUNTER'])",
+                        f"counter = Path({str(counter)!r})",
                         "attempt = int(counter.read_text() or '0') + 1 if counter.exists() else 1",
                         "counter.write_text(str(attempt))",
                         "print(json.dumps({'type': 'thread.started', 'thread_id': f'fixture-thread-{attempt}'}))",
                         "print(json.dumps({'type': 'turn.started'}))",
                         "if attempt <= 3:",
-                        "    assert not list(workspace.iterdir())",
+                        "    assert not [p for p in workspace.iterdir() if p.name != '.replay-tmp']",
                         "    (workspace / f'partial-{attempt}.txt').write_text('partial')",
                         "    print(json.dumps({'type': 'error', 'message': 'connection reset by peer'}))",
                         "else:",
-                        "    assert not list(workspace.iterdir())",
+                        "    assert not [p for p in workspace.iterdir() if p.name != '.replay-tmp']",
                         "    print(json.dumps({'type': 'item.completed', 'item': {'type': 'agent_message', 'text': 'completed after retries'}}))",
                         "    print(json.dumps({'type': 'turn.completed', 'usage': {'input_tokens': 1, 'cached_input_tokens': 0, 'output_tokens': 1, 'reasoning_output_tokens': 0}}))",
                         "",
Full technical diff · 116 changed fields

changed /files/.codex-plugin~1plugin.json/sha256

BEFORE
"303b2b85c54fe63feedec6a4cced5b53d315dd34c5815139580d3254f39d4e8b"
AFTER
"3ed9e5ef538287d7249b6ff4a2275117f627824c04667007567825b95d3635ac"

changed /files/OWNERS/sha256

BEFORE
"12aeb715e62296d82974db971780c325721e093498ba5f7f2781d1830d09ce3a"
AFTER
"b3b03c7a1386a1d1917a4476917d0e02a89ef2b17a939fa6a53531bc66e9cf0c"

changed /files/OWNERS/size

BEFORE
108
AFTER
20

changed /files/README.md/sha256

BEFORE
"a7b6176cb3f3b9c36ad318c345b0eeff863fe0131ef980da070bb6d7bacfa391"
AFTER
"60a2f366b29a52064f15383961c30c894e4b34c710a9606cd74f4276c697c911"

changed /files/README.md/size

BEFORE
19728
AFTER
22407

removed /files/TEMPEST.md

BEFORE
{
  "sha256": "5425717f71bf3d49b91222d0ed4e5b10c910da41a8000f52f03220784430789b",
  "size": 430
}
AFTER
Field is absent

changed /files/assets~1model-pricing.json/sha256

BEFORE
"fd0b7569889dadd45fc99dae3665bd2cdb180e28926fb9563bf9112853aad664"
AFTER
"d233c98d77f2ebea9aed72e4300cc69872440a46d180e81f0975b1a23bb527f6"

changed /files/assets~1model-pricing.json/size

BEFORE
7523
AFTER
34483

added /files/docs~1security-review~1managed-network-settings.json

BEFORE
Field was absent
AFTER
{
  "sha256": "44db0b91ba9d8bb521c1405d75e967ddc815b32524f6b35ae851297fa201377f",
  "size": 6308
}

added /files/docs~1security-review~1real-model-results.json

BEFORE
Field was absent
AFTER
{
  "sha256": "ef493135c323f02a5a69a9f8ce28cb16cb63be0d7e659a323f6a24a4d7ac5172",
  "size": 15447
}

added /files/integrity.json

BEFORE
Field was absent
AFTER
{
  "sha256": "37028c58914518efeb7e71b4c0e927b2fbe351bac76435439ea2acf86a45558b",
  "size": 17104
}

changed /files/manual_tests~1README.md/sha256

BEFORE
"05e45014b45c1d28f61e68e0650473852b0500e2bdca0e68f36c9fd1009fc9a9"
AFTER
"47790cf92f30b3815cbad43bca020f9f92ba040699ababcb58a3e1aa21ce84a9"

changed /files/manual_tests~1README.md/size

BEFORE
1477
AFTER
2999

added /files/manual_tests~1egress_probe.py

BEFORE
Field was absent
AFTER
{
  "sha256": "86eb8309e1b50b043309aa2d4efca4b06db02cac934c606711ffe0202e4133eb",
  "size": 2330
}

added /files/manual_tests~1prompt_guard.py

BEFORE
Field was absent
AFTER
{
  "sha256": "75892689bd4e6b664607b0d977d52bb9993c967d881d1a669ef5d7165cac163f",
  "size": 3654
}

changed /files/manual_tests~1runtime_errors.py/sha256

BEFORE
"0c757f4d12a55aa879863e74ed5625c02da89740a9d081ca8fc8fbc7d159c045"
AFTER
"70eb5caf8ab81d458f28f22ce4d075b6724d031d84554aeeb76dbb187ff6638d"

changed /files/manual_tests~1runtime_errors.py/size

BEFORE
9393
AFTER
9334

added /files/manual_tests~1worker_isolation.py

BEFORE
Field was absent
AFTER
{
  "sha256": "b31c1263c8acaf646a0917939d11d843e77718bf33e8b21b2e6ffead780aea77",
  "size": 12997
}

removed /files/mcp~1__pycache__~1controller_constants.cpython-312.pyc

BEFORE
{
  "sha256": "49d0fdbc9c023462607c8d07e240f32a89b566f5522000acdf5d189f9d7cd08b",
  "size": 1424
}
AFTER
Field is absent

removed /files/mcp~1__pycache__~1final_results_receipt.cpython-312.pyc

BEFORE
{
  "sha256": "6deb7cdc0dde8458ee150480d7f235430940ae16b40f9763c9e6d9e6a4c2edf6",
  "size": 6504
}
AFTER
Field is absent

removed /files/mcp~1__pycache__~1plugin_installations.cpython-312.pyc

BEFORE
{
  "sha256": "98c75225a0ee86faad7f893ab82a814c9b21b75214c9f360dfd430173758cde4",
  "size": 6233
}
AFTER
Field is absent

removed /files/mcp~1__pycache__~1replay_batch.cpython-312.pyc

BEFORE
{
  "sha256": "08326457b35aaf24b3b3f2df56267831419615e722c871e648cf5fb68b45931b",
  "size": 17150
}
AFTER
Field is absent

removed /files/mcp~1__pycache__~1replay_configuration.cpython-312.pyc

BEFORE
{
  "sha256": "c57a1da95008569f8546124b0925fde176c2ecd5bd6052e3a307150d89cc358f",
  "size": 11541
}
AFTER
Field is absent

removed /files/mcp~1__pycache__~1server.cpython-312.pyc

BEFORE
{
  "sha256": "53edaca4f74e5564b76e9a18c873d69279b3c67a2bba82ce2c6a66d72bba3231",
  "size": 178302
}
AFTER
Field is absent

changed /files/mcp~1codex-worker.mjs/sha256

BEFORE
"b147ece3ee39bf73cbcbd0f9ed3f6782937e7d90b043734f8016180d2aac9740"
AFTER
"58cc917e5a19511d1a4255aebc1372e419c2911e257102a7d2d03e0c14136d4e"

changed /files/mcp~1codex-worker.mjs/size

BEFORE
43193
AFTER
51695

changed /files/mcp~1controller-ranges.js/sha256

BEFORE
"0f4980819a57a0e6d52cdd4f0f9507774e5d44ed66ad8afee140cf81a6c0c2d8"
AFTER
"ec662eee290f4b371ca06f129ea7f709c03c4c54183065782b00d38748ad5a75"

changed /files/mcp~1controller-ranges.js/size

BEFORE
43052
AFTER
46358

changed /files/mcp~1controller.css/sha256

BEFORE
"603afedbae820418f33e93a7fa38dc964904dc65525fcd31bc289935d1c7428c"
AFTER
"8f7c4775c8a3a5ffbbed5796bb9da048ccb7299e3bf99a6928c31325be769cb8"

changed /files/mcp~1controller.css/size

BEFORE
21866
AFTER
23106

changed /files/mcp~1controller.html/sha256

BEFORE
"c168cf51755006692cc027414ab167a4beb754eaf72408d88698ad7229a7be22"
AFTER
"2dc12aacc608abccaa4deb89545fa8c3b48adde4d61d437b1beb88f0ce50d625"

changed /files/mcp~1controller.html/size

BEFORE
149726
AFTER
149932

changed /files/mcp~1replay_batch.py/sha256

BEFORE
"94f4e9769b616aa74124847210a84b8db2abae282c700a5bc0831ca6d8813e94"
AFTER
"a98479977e861582c6e42bfa62fbbe3f69ca2c66b838d86e6e65e26e7f265025"

changed /files/mcp~1replay_batch.py/size

BEFORE
15118
AFTER
18362

changed /files/mcp~1server.py/sha256

BEFORE
"d591b41a9627bc490998c10219b9a4d67736e40d990ac991d64bca0f46825080"
AFTER
"282212a2b9bdd622f78a62db470eb74dabc5b1bc553d13206abf9ecebf704dab"

changed /files/mcp~1server.py/size

BEFORE
149473
AFTER
147833

added /files/mcp~1worker-policy.json

BEFORE
Field was absent
AFTER
{
  "sha256": "434484e50d84c94a2d95f3ffc4a8a1216dcfc210008ad7fd397adf8b4fc97654",
  "size": 1869
}

removed /files/plans~1MULTI_THREAD_REPLAY.md

BEFORE
{
  "sha256": "95de9c2dd648109a18bd2a63311500e7ce5888621fa8727bb79e41ffcd679c10",
  "size": 2387
}
AFTER
Field is absent

removed /files/scripts~1__pycache__~1claude_code_sample_loader.cpython-312.pyc

BEFORE
{
  "sha256": "f5f6d10831d638999c75fd72b2c75f675a133facb6957316c1aae820a87838aa",
  "size": 38582
}
AFTER
Field is absent

removed /files/scripts~1__pycache__~1historical_discovery.cpython-312.pyc

BEFORE
{
  "sha256": "7446522c9c52d6e222fe81e92a740c89cfffcbe9ceebf976935a36465fe6a296",
  "size": 3013
}
AFTER
Field is absent

removed /files/scripts~1__pycache__~1historical_discovery_capabilities.cpython-312.pyc

BEFORE
{
  "sha256": "bc80d556eb067037507237525e422e2db2ba980276c929f396983ce1f869118c",
  "size": 26952
}
AFTER
Field is absent

removed /files/scripts~1__pycache__~1historical_discovery_core.cpython-312.pyc

BEFORE
{
  "sha256": "1cdf82d5537cb0081a5ca1fe4e9df401ff1ae6a883e9531aeb7ac85095d479fc",
  "size": 129592
}
AFTER
Field is absent

removed /files/scripts~1__pycache__~1historical_execution.cpython-312.pyc

BEFORE
{
  "sha256": "5587aa6cea7c696f91a1575623ad15d15694893c2777431a29ae69e7639bf46b",
  "size": 94456
}
AFTER
Field is absent

removed /files/scripts~1__pycache__~1historical_file_selection.cpython-312.pyc

BEFORE
{
  "sha256": "09aecfb984eb5bdcbd3f1cd9412d8f702ea9ff3703cbbb309b53f22a27e4c96c",
  "size": 84692
}
AFTER
Field is absent

removed /files/scripts~1__pycache__~1historical_replay.cpython-312.pyc

BEFORE
{
  "sha256": "3f3df32576c7d3352849feb3ac59852a8f47cfc8e400e1b5c32b60c24f217301",
  "size": 137186
}
AFTER
Field is absent

removed /files/scripts~1__pycache__~1precompute_sample_configurations.cpython-312.pyc

BEFORE
{
  "sha256": "cf3a3470e4db9eae21797f520c0ecb3904d353a84c96bce2eb92e2b6c20e0fec",
  "size": 6733
}
AFTER
Field is absent

removed /files/scripts~1__pycache__~1record_claude_code_samples.cpython-312.pyc

BEFORE
{
  "sha256": "2ada19aad95c2354b87546b58097b4030053e933e46d43924efd54387434b49a",
  "size": 55142
}
AFTER
Field is absent

removed /files/scripts~1__pycache__~1verify_claude_sample.cpython-312.pyc

BEFORE
{
  "sha256": "1a7c69ec0110e4f6436f61aa5e8927ebf4a2b1af39579b7a862f495de5c91977",
  "size": 9774
}
AFTER
Field is absent

changed /files/scripts~1historical_execution.py/sha256

BEFORE
"ecd613568138616baa8170d1c8feb7e17c349ebb4b6027179ba740f63bb784b6"
AFTER
"988b9e59e22a0c4a2a627accfe31ac2e7e469f8f4cc5c9eb1a1244692f0dd1aa"

changed /files/scripts~1historical_execution.py/size

BEFORE
85246
AFTER
80106

changed /files/scripts~1historical_replay.py/sha256

BEFORE
"67bf95dead2c01c34d12ab5555b34c82c834834371a079a63721fb8d3f700cb5"
AFTER
"93e2678c0557bfa0bd1b87d34f077da32ceab2689fd52d3519d5d1c173f4dad0"

changed /files/scripts~1historical_replay.py/size

BEFORE
130534
AFTER
130571

changed /files/scripts~1metrics~12_start_controller.py/sha256

BEFORE
"5787fc54a489fb6fdfd1a58fff56cb9306d55bac8f854e1bc2eb1f591e522d71"
AFTER
"cb2f512251f66ceeb8e225780b55b3d3f4b519871112a4eada4ff8dc105ab3c7"

changed /files/scripts~1metrics~12_start_controller.py/size

BEFORE
3547
AFTER
3596

changed /files/scripts~1metrics~13_report_start_metrics.py/sha256

BEFORE
"7004d6698b8de1fa2c5b4c1a7a2fe178e450cebc3b27bfd64d3971102b465e7c"
AFTER
"0cf8b2a76d3fd71dd978680e30874ab3f7a14ded61bd994beb8b72ebf728cc4c"

changed /files/scripts~1metrics~13_report_start_metrics.py/size

BEFORE
3483
AFTER
3481

changed /files/scripts~1metrics~14_report_final_metrics.py/sha256

BEFORE
"1cb2d650a348eaf519db106a875fbbd3fc858770f36fab5761f3b7ba6f533c12"
AFTER
"dece2f5b3019ffd9bed06aa11b79dff0608d1a2071b30f49c5b5d8b6c22c26d4"

changed /files/scripts~1metrics~14_report_final_metrics.py/size

BEFORE
44526
AFTER
44524

removed /files/scripts~1metrics~1__pycache__~13_report_start_metrics.cpython-312.pyc

BEFORE
{
  "sha256": "025e312e0ec3d750bb4547858ff3221b893005e7df26735cfdd1051e26e584ae",
  "size": 4743
}
AFTER
Field is absent

removed /files/scripts~1metrics~1__pycache__~14_report_final_metrics.cpython-312.pyc

BEFORE
{
  "sha256": "9e3078f27ed79115615527f7d2dab1daa9741714c2f1ae7eede0e6d5ba5e523b",
  "size": 50209
}
AFTER
Field is absent

removed /files/scripts~1metrics~1__pycache__~1replay_metrics_common.cpython-312.pyc

BEFORE
{
  "sha256": "8c76e408ee14ff1e45f0b8cff8b7a5512604bb67fd810c1b634b6bec9844d319",
  "size": 13800
}
AFTER
Field is absent

changed /files/scripts~1metrics~1replay_metrics_common.py/sha256

BEFORE
"9a3e62438ee30485c8163d37fa2e6876842a369b1c5bd9ee42ac11e18ea0f9c8"
AFTER
"115d330050d5a46980db278a14471dace894ead47cce4a157b1c561a02bb0846"

changed /files/scripts~1metrics~1replay_metrics_common.py/size

BEFORE
9165
AFTER
9673

changed /files/skills~1codex-replay~1SKILL.md/sha256

BEFORE
"ae6bf35ef05bb0e60ecd5e41bd657b72d28e6db54dca7fe826a25be9a35b8528"
AFTER
"a6eec69fa3f0d2607a8a489fd0a2a0c4ff9fc9d1a5332641ef8f63b4b968f40f"

changed /files/skills~1codex-replay~1SKILL.md/size

BEFORE
5434
AFTER
5386

removed /files/tests~1__pycache__~1test_claude_code_sample_loader.cpython-312.pyc

BEFORE
{
  "sha256": "17a45fb73e444c4a6248fe792be070a0e2dcc016854a170b1cdc5c976a221247",
  "size": 44723
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_claude_sample_verification.cpython-312.pyc

BEFORE
{
  "sha256": "603387be0d1b46c8f86bc2434b74dcfa6f9283bd9dab684563a55d5067c7264c",
  "size": 13587
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_controller_batch_ui.cpython-312.pyc

BEFORE
{
  "sha256": "b3df7d807dbe782b56f9335c52d853e74a3325ebd3c9607c404a9daa8a9a9ca7",
  "size": 21267
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_controller_explanations.cpython-312.pyc

BEFORE
{
  "sha256": "c824520cb7a38b25b3060076fd95e0239db8e63aca04e84960e57c6ed693badd",
  "size": 5767
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_controller_file_configuration.cpython-312.pyc

BEFORE
{
  "sha256": "faf02cd49d1f10cb5a8b4bf1aacb1b60179166715bd2bd7740656b55ab495d22",
  "size": 4057
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_controller_installations.cpython-312.pyc

BEFORE
{
  "sha256": "e165ce9d60cb3b45e903850e4e3b0c8b3ba7637e8306c98beb3c1b92010b2646",
  "size": 18835
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_controller_range_ui.cpython-312.pyc

BEFORE
{
  "sha256": "ad2636c918dbf2ed9fee680fb17365ef8c590dd917b2a3f43ce1635e121ef2da",
  "size": 48689
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_controller_ranges.cpython-312.pyc

BEFORE
{
  "sha256": "534b3f42f7e4e8f842607502deb289f438152e4c8927ef38b1f92e00831f274d",
  "size": 24514
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_controller_scoring.cpython-312.pyc

BEFORE
{
  "sha256": "e2e4b208b8cf7e8c70b8b5bff0c23ed06269b31b9dfe02d4e52f88dec7e3f4ce",
  "size": 6951
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_controller_search.cpython-312.pyc

BEFORE
{
  "sha256": "0bdfdaa4e0671c2021959e7c6d1e642dc390bf7583ccc51f7eda3756a1e7af3f",
  "size": 9241
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_controller_transcript_inference.cpython-312.pyc

BEFORE
{
  "sha256": "4bfb8fc1512ba639ae8203114f3f5c63f41866f1bb9bf2849368d8eda6ae3bac",
  "size": 4868
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_historical_discovery.cpython-312.pyc

BEFORE
{
  "sha256": "0c7b4566c4ba24488646842645aea5d1fda67142038efcd82aa85bd350b97e45",
  "size": 45655
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_historical_discovery_capabilities.cpython-312.pyc

BEFORE
{
  "sha256": "433d4a01a47441c3666f5f1f83170f44e17f236024af0f8ffd7d79202a63b2a2",
  "size": 17060
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_historical_execution.cpython-312.pyc

BEFORE
{
  "sha256": "9fd217cf340c010a3cb3a568e5a0e3eabf3f36af1748e29ceeaf08b073e3e3c4",
  "size": 95032
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_historical_file_selection.cpython-312.pyc

BEFORE
{
  "sha256": "dc92695472f0981ee31a3155e2f23696259d69e40f953fd1914cfc128f3084da",
  "size": 71448
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_lean_replay.cpython-312.pyc

BEFORE
{
  "sha256": "b5d1af368b7f27ff1f65658ef463f50c3288402c13adeff444ddd0e14a2ce515",
  "size": 153821
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_maintained_catalog.cpython-312.pyc

BEFORE
{
  "sha256": "135472261f4b2e3a157a4ea878643b7b9e1042372e6784b4ee167af5d7d87131",
  "size": 2019
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_mcp_retry_resilience.cpython-312.pyc

BEFORE
{
  "sha256": "63da4023d937ea24c2d1826ad113d366ee4900c0ff79d00f50cc23edf7806af0",
  "size": 5708
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_mcp_server.cpython-312.pyc

BEFORE
{
  "sha256": "27ded72aa56c65d24962512ba856917ca3559059cad3331786b3ce0c716fa95e",
  "size": 176337
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_mcp_server_models.cpython-312.pyc

BEFORE
{
  "sha256": "a1ab27d8d03f62e3e5e90dbb015dbe6186289512434c7ebeef8217ba62fe236c",
  "size": 96727
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_node_runtime.cpython-312.pyc

BEFORE
{
  "sha256": "dd7ee95669281c7dc94662776a274f980084217e98eec10b12fcc559a02a5fb5",
  "size": 10026
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_plugin_contract.cpython-312.pyc

BEFORE
{
  "sha256": "03a6927dc1985b12b762a74c10ea1c1f53b64fd867d4c43ca9fd346651aa4edd",
  "size": 12051
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_plugin_metrics_contract.cpython-312.pyc

BEFORE
{
  "sha256": "121ea8c5848f7237d4172215fe0481c7052cf3ccc0e3d6a6ac40babf7fb32f87",
  "size": 10932
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_record_claude_code_samples.cpython-312.pyc

BEFORE
{
  "sha256": "6ee25c5dc75e76e89a14b4763d85ba4642065091d110e5ffe2da1467111159da",
  "size": 52771
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_replay_metrics.cpython-312.pyc

BEFORE
{
  "sha256": "8d88bfd07b4198753305427cdf2e510f570f055ca663832a302672235e407c45",
  "size": 132260
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_replay_ranges.cpython-312.pyc

BEFORE
{
  "sha256": "3e378555de395ae78e15510d4a4a61c6d15c110ec1d51b1085204eb99e5a70fc",
  "size": 40653
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_report_explanations.cpython-312.pyc

BEFORE
{
  "sha256": "dd1f7cf4cb00b9424faf10e001f79415227df762b2bad489a620d7bad03c8575",
  "size": 7038
}
AFTER
Field is absent

removed /files/tests~1__pycache__~1test_reviewer_privacy.cpython-312.pyc

BEFORE
{
  "sha256": "926960deab2a76b7fc2180d0e3688c95ac5d6340be901a999bcd6b107c3acebe",
  "size": 12080
}
AFTER
Field is absent

added /files/tests~1test_controller_auth.py

BEFORE
Field was absent
AFTER
{
  "sha256": "71b689dafd781d4bb2438a51de5c8adfe9ddca2d8a162742a2355212521895ab",
  "size": 14475
}

changed /files/tests~1test_controller_installations.py/sha256

BEFORE
"fc977d5294fd1eba58e48b9bf1933bca973107b87216bcadffd63e70211cad6c"
AFTER
"351a83339e4ec2cbc300ed034cb15ab20d863660a7e9d8569f08ec6a23e1fc41"

changed /files/tests~1test_controller_installations.py/size

BEFORE
13986
AFTER
14472

changed /files/tests~1test_controller_range_ui.py/sha256

BEFORE
"e2f09a1779cfc63b5ced8ac19746474afd9e5e261f1375b35da04724e26cc3c7"
AFTER
"c2f40d0210ccb85b0d5cf679f735397f68cba1d0a3c19b975f00111e76ad6859"

changed /files/tests~1test_controller_range_ui.py/size

BEFORE
43635
AFTER
43788

changed /files/tests~1test_controller_scoring.py/sha256

BEFORE
"9a39697fdc208b7d790a82f61d8aa106284d14a977c528bbe463899fc0054d05"
AFTER
"046239daad52ca9ef6f881001563d16925ce95ca6033e2b9c3d94ea2565f2c5b"

changed /files/tests~1test_controller_scoring.py/size

BEFORE
5309
AFTER
9274

changed /files/tests~1test_historical_execution.py/sha256

BEFORE
"00bec69ffe46720b474f9542da8e2f6655c9f8b44bd766bbb593bd28babc0ce1"
AFTER
"f56649d0ff928a145b3f6b1acf407c20294609952679c3d19d0b6ad8481d5e27"

changed /files/tests~1test_historical_execution.py/size

BEFORE
80726
AFTER
66242

changed /files/tests~1test_mcp_server.py/sha256

BEFORE
"693c130ac9fd07190b7192346eb5086af6eb70511982868c420644e6cbd9889f"
AFTER
"52b1c2a18b6eaa8b9840376e73900cb3f5ff64dd94de87c1ce0829be4f7b9c0d"

changed /files/tests~1test_mcp_server.py/size

BEFORE
143808
AFTER
147784

changed /files/tests~1test_mcp_server_models.py/sha256

BEFORE
"51da6f8b766e1900109e4460889717608dcdc8512918547b5acfe023e44b6ad3"
AFTER
"63cfc2b059f8083fdb37938fb59889c0f44771d09c92eaa0cd86dc4cf504f7e3"

changed /files/tests~1test_mcp_server_models.py/size

BEFORE
80827
AFTER
85664

changed /files/tests~1test_node_runtime.py/sha256

BEFORE
"34592733b082a5fa8fa816a27cf1c8f59bb98bd12be9f0d4ef67099f60c4c884"
AFTER
"c9774e380bbcc20a4ff38187d5bb6f9983f50336e958c019a3e7a82354c95a4a"

changed /files/tests~1test_node_runtime.py/size

BEFORE
6371
AFTER
8787

changed /files/tests~1test_replay_metrics.py/sha256

BEFORE
"9777788d80585a7cede7370d478ca3a8b345fa3ff33ec478dd413f17efe6a393"
AFTER
"bb9dba233e2bc571940bee7b8d9707828a92706b6ebe59262de3108f627333f3"

changed /files/tests~1test_replay_metrics.py/size

BEFORE
98952
AFTER
99163

changed /files/worker~1src~1codex-worker.mjs/sha256

BEFORE
"36338d4f5a82f2d9805deb98b0ffecda511a2942c77cc3dd0517259c7527b312"
AFTER
"9ee8c74339141ad561bd31bf899c12b4ebb4a25f43604ed51853c2d2498129fd"

changed /files/worker~1src~1codex-worker.mjs/size

BEFORE
27741
AFTER
27969

added /files/worker~1src~1worker-policy.mjs

BEFORE
Field was absent
AFTER
{
  "sha256": "015fbc05817b48b7069d40e4a01a8b5280b992842d124bc792dd92937b550be6",
  "size": 6750
}

changed /files/worker~1tests~1codex-worker.test.mjs/sha256

BEFORE
"aa73b45b5476cc8bbc1f0d6d8fd1e60d0c37dd8386ff6a4d65560056b1b7d820"
AFTER
"6b57eb7f5c49a34ef5140484afbe5cbb688aba4c43104c745dc8424df321d6af"

changed /files/worker~1tests~1codex-worker.test.mjs/size

BEFORE
28179
AFTER
28553

added /files/worker~1tests~1worker-policy.test.mjs

BEFORE
Field was absent
AFTER
{
  "sha256": "19fd3ebbee5b79eadc862309ef818d420db78b193783c5b1fc2b55bb09563a7c",
  "size": 2474
}
Full snapshot data
{
  "files": {
    ".codex-plugin/plugin.json": {
      "sha256": "3ed9e5ef538287d7249b6ff4a2275117f627824c04667007567825b95d3635ac",
      "size": 2212
    },
    ".gitignore": {
      "sha256": "6ed66d2c09255e46f22258daae3dfb29cf00af2a9125ac6072fb4dd2d94adfd9",
      "size": 75
    },
    ".mcp.json": {
      "sha256": "e91a9ed1f2cf317928886206480fcf45c2d4e3ff46221edcebdd58084d55abab",
      "size": 743
    },
    "AGENTS.md": {
      "sha256": "d10822a8cbfe23401c9c635fc03934c3400ad48fe38b3ee7d1b84bf461a4b437",
      "size": 340
    },
    "BASELINE_HANDLING.md": {
      "sha256": "2b9e95c55dc507915eb16ecd6d087f7a55848e78069ef79eecfd0ef2b0273f90",
      "size": 3686
    },
    "OWNERS": {
      "sha256": "b3b03c7a1386a1d1917a4476917d0e02a89ef2b17a939fa6a53531bc66e9cf0c",
      "size": 20
    },
    "README.md": {
      "sha256": "60a2f366b29a52064f15383961c30c894e4b34c710a9606cd74f4276c697c911",
      "size": 22407
    },
    "TEMPEST_REVIEW": {
      "sha256": "cb73d60563e63a2250a3133cb78f1335443d615df3926e7cd631e607aac2c79e",
      "size": 381
    },
    "analytics.yaml": {
      "sha256": "de6db3ab97644bb31a4137a3ad0f333da2ec99f296a700b97ed61aa4cb1f4ce7",
      "size": 8861
    },
    "assets/claude-code-sample-tasks.json": {
      "sha256": "2ad93d4f7e735a4664e22af92e9f5167369647dceffc04992dd3c18c7681c2ff",
      "size": 2319
    },
    "assets/claude-code-samples/.gitattributes": {
      "sha256": "14e9d71d80a6daaf433ce985b7ce1d3813c67c66355e341206bba1f8e3603fd4",
      "size": 34
    },
    "assets/claude-code-samples/index.json": {
      "sha256": "aa31532f666dc08c59922342ddf6adc0a4e1c783971bdbbf28a4b47ca89e6c44",
      "size": 19324
    },
    "assets/claude-code-samples/records/jqlang__jq-2157--claude-fable-5/configuration.json": {
      "sha256": "260c1680d98d019c3c69428244fbb9333a78c6c07b03f3c8d621dc030a8cc81a",
      "size": 8659
    },
    "assets/claude-code-samples/records/jqlang__jq-2157--claude-fable-5/patch.diff": {
      "sha256": "caf963ec5d0174af831634fbfbdce2c64d4c32544a41e3896987b351a034b438",
      "size": 1042
    },
    "assets/claude-code-samples/records/jqlang__jq-2157--claude-fable-5/result.json": {
      "sha256": "a5fe806fcbb955c04154e648b51bcd4ab9bc8c3070d9572116dc6eb7b7819da8",
      "size": 1862
    },
    "assets/claude-code-samples/records/jqlang__jq-2157--claude-fable-5/transcript.000.jsonl": {
      "sha256": "6acdaaac6152fc4161e6a41b61a2536071cf78654c84e0a7eec8a5d96eca4317",
      "size": 148795
    },
    "assets/claude-code-samples/records/jqlang__jq-2157--claude-fable-5/transcript.001.jsonl": {
      "sha256": "e272da8ba546363507f6436c7363ea919e3e0fb3c9a01013579673527e983646",
      "size": 54385
    },
    "assets/claude-code-samples/records/jqlang__jq-2157--claude-haiku-4-5-20251001/configuration.json": {
      "sha256": "248d87a3265cf5647b1f285823c546bcd9f6e1ddd9ab1a4e40962b4158d57b74",
      "size": 6659
    },
    "assets/claude-code-samples/records/jqlang__jq-2157--claude-haiku-4-5-20251001/patch.diff": {
      "sha256": "9445976a95b9c8e38df576420c227b38b74a056e8f1e4480792c877b9d269197",
      "size": 711
    },
    "assets/claude-code-samples/records/jqlang__jq-2157--claude-haiku-4-5-20251001/result.json": {
      "sha256": "111b4ab6d41ccabf34764d7e0c7bd0926373b56615599ea3e4afb962dae4ba75",
      "size": 1514
    },
    "assets/claude-code-samples/records/jqlang__jq-2157--claude-haiku-4-5-20251001/transcript.000.jsonl": {
      "sha256": "b88f572eeebd9af0211210f7236f56fb71b17add8cbac717327ea321465c8a20",
      "size": 129710
    },
    "assets/claude-code-samples/records/jqlang__jq-2157--claude-opus-5/configuration.json": {
      "sha256": "4c3e67d9f229ac261a0de1ebb0435930049786fdf0fbf0220de01f40c27591c1",
      "size": 8491
    },
    "assets/claude-code-samples/records/jqlang__jq-2157--claude-opus-5/patch.diff": {
      "sha256": "99d589569d6b02883a65a17ea5226a97aa82f20dd4b91bd313358d4c821a7093",
      "size": 2271
    },
    "assets/claude-code-samples/records/jqlang__jq-2157--claude-opus-5/result.json": {
      "sha256": "735b65b5811a7a1a47ef8f62d8a69f09c0534aaf3b33349079428a688e92d7ef",
      "size": 1861
    },
    "assets/claude-code-samples/records/jqlang__jq-2157--claude-opus-5/transcript.000.jsonl": {
      "sha256": "3796443edc614f04baa4bf6e04fab70541bd552a41e0edef566c610ff5473a52",
      "size": 147887
    },
    "assets/claude-code-samples/records/jqlang__jq-2157--claude-opus-5/transcript.001.jsonl": {
      "sha256": "fe631249b6a21bb98fd726fd5e3af8422eb6337ee294187f34c2a592956331b4",
      "size": 14343
    },
    "assets/claude-code-samples/records/jqlang__jq-2157--claude-sonnet-5/configuration.json": {
      "sha256": "b6c168be8a82d00fdb97c839bdfd8e9e3914db0e9e9ae9292f9ae4467cd15a5c",
      "size": 6701
    },
    "assets/claude-code-samples/records/jqlang__jq-2157--claude-sonnet-5/patch.diff": {
      "sha256": "8f080d797c6ea03c93f406b6061cf5e33b15a152ff270372fcc40d564bc24ea1",
      "size": 889
    },
    "assets/claude-code-samples/records/jqlang__jq-2157--claude-sonnet-5/result.json": {
      "sha256": "5bdc7d8093ece9e9105bbae4bd88ec18a5cef67c8d12ad417ec58f8f8549acb6",
      "size": 1873
    },
    "assets/claude-code-samples/records/jqlang__jq-2157--claude-sonnet-5/transcript.000.jsonl": {
      "sha256": "cad98ffa406aab52bcacd186b7b7931753411ef8899195f80cd81841784670c2",
      "size": 124910
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-fable-5/configuration.json": {
      "sha256": "3e92bb640aa03cff401c522b632a326b8c6ea4c4d539cd489c1b17c1c99cb2db",
      "size": 10770
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-fable-5/patch.diff": {
      "sha256": "93a8e36b683ffdca45e3572798a50c285f050ea0a64280b20fc687da5a240d0d",
      "size": 2365
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-fable-5/result.json": {
      "sha256": "e55d1cbedf2c579aee881c5d87d602f2b28341db7d244b0889a0578833a6d01c",
      "size": 1899
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-fable-5/transcript.000.jsonl": {
      "sha256": "faf31f5a5283a5096335012a89940763bce2435ce113c74909e1ee9e6997323c",
      "size": 148871
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-fable-5/transcript.001.jsonl": {
      "sha256": "2c885709d57691769333f0495a267421e5253c44d034a4a1d8553630b42f0edd",
      "size": 147715
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-fable-5/transcript.002.jsonl": {
      "sha256": "7020e71139c1c04610f2f45f33233dc8535f16ce05d60b8e22778852d27738d4",
      "size": 145425
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-fable-5/transcript.003.jsonl": {
      "sha256": "d9110543c0cacefbc477361649f28ba9ef25153c5d245571b76406e115e168dc",
      "size": 4355
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-haiku-4-5-20251001/configuration.json": {
      "sha256": "a95a5533c36e35c9012692f0b6ffc0c462cc4ee5b739f1455d20027028c31425",
      "size": 7249
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-haiku-4-5-20251001/patch.diff": {
      "sha256": "bf45c94dd54f1d87d6c02c82c37240241fd540948b4a513df1a5802e4ddd9f8c",
      "size": 545
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-haiku-4-5-20251001/result.json": {
      "sha256": "ddf89e66704a4e38c606f7414b5eb604ef1c4d86cdf47d6289c188963991ae80",
      "size": 1512
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-haiku-4-5-20251001/transcript.000.jsonl": {
      "sha256": "42ebb3e516b9c821111454c51bda937f6a77b899e5b05caacab9f8c9f4afab73",
      "size": 147596
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-haiku-4-5-20251001/transcript.001.jsonl": {
      "sha256": "8dfb888ed7b3e446d5f7c9d1c1b962ab3f7dafa0ce8c837714ad2ae502256b38",
      "size": 66871
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-opus-5/configuration.json": {
      "sha256": "4618412a6a02ee716f30f796e883a9d889d8608ddf13c5046f91d6c48a667b7e",
      "size": 9628
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-opus-5/patch.diff": {
      "sha256": "201abca2d852ea66dd2f3e149234078ae412c75d0b1e7cc435fc8aff17a0d3c3",
      "size": 3739
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-opus-5/result.json": {
      "sha256": "52b30b1328a42f37ce5e65e3d5b95c9ae17590e86651cd7101caa76df0b9cb09",
      "size": 1899
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-opus-5/transcript.000.jsonl": {
      "sha256": "76ccfb49d925e01dc8b6c4438bef7ef88c8ba0a5d5a249f66f7f934f29ed7c97",
      "size": 148295
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-opus-5/transcript.001.jsonl": {
      "sha256": "ece8fef0ccf3bb4c76a98b85e9a1c94c7f0d972137b399d572aa9f7dc57f6ed2",
      "size": 129714
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-sonnet-5/configuration.json": {
      "sha256": "ec6cdbb392fc2b6d754d94ecba6d292f3ee3bdff90818febd1277e8e156eeb62",
      "size": 8506
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-sonnet-5/patch.diff": {
      "sha256": "856003f06831eb8663911c20dc47371ddc9f08e2521671a8957f95bdf24bef9c",
      "size": 2003
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-sonnet-5/result.json": {
      "sha256": "8e4a76ba49335a99dd56a17aaf5f55ede38bcdb0ba435d10c60435a1acf60f3e",
      "size": 1893
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-sonnet-5/transcript.000.jsonl": {
      "sha256": "ab055fde4077f68fa3f4e5e5b2a29f2673d23e1855ebfaa87a1825be293ab9c0",
      "size": 147596
    },
    "assets/claude-code-samples/records/jqlang__jq-2919--claude-sonnet-5/transcript.001.jsonl": {
      "sha256": "ceca0c88ba428474fef846af4855242aa196c1c4a481b0ca8135869329991d41",
      "size": 129557
    },
    "assets/icon.svg": {
      "sha256": "707542c12360b1dbbd7eb00190a03013bc988fd984115afbfbb535f994662d4e",
      "size": 795
    },
    "assets/model-pricing.json": {
      "sha256": "d233c98d77f2ebea9aed72e4300cc69872440a46d180e81f0975b1a23bb527f6",
      "size": 34483
    },
    "docs/security-review/managed-network-settings.json": {
      "sha256": "44db0b91ba9d8bb521c1405d75e967ddc815b32524f6b35ae851297fa201377f",
      "size": 6308
    },
    "docs/security-review/real-model-results.json": {
      "sha256": "ef493135c323f02a5a69a9f8ce28cb16cb63be0d7e659a323f6a24a4d7ac5172",
      "size": 15447
    },
    "integrity.json": {
      "sha256": "37028c58914518efeb7e71b4c0e927b2fbe351bac76435439ea2acf86a45558b",
      "size": 17104
    },
    "manual_tests/README.md": {
      "sha256": "47790cf92f30b3815cbad43bca020f9f92ba040699ababcb58a3e1aa21ce84a9",
      "size": 2999
    },
    "manual_tests/egress_probe.py": {
      "sha256": "86eb8309e1b50b043309aa2d4efca4b06db02cac934c606711ffe0202e4133eb",
      "size": 2330
    },
    "manual_tests/prompt_guard.py": {
      "sha256": "75892689bd4e6b664607b0d977d52bb9993c967d881d1a669ef5d7165cac163f",
      "size": 3654
    },
    "manual_tests/runtime_errors.py": {
      "sha256": "70eb5caf8ab81d458f28f22ce4d075b6724d031d84554aeeb76dbb187ff6638d",
      "size": 9334
    },
    "manual_tests/worker_isolation.py": {
      "sha256": "b31c1263c8acaf646a0917939d11d843e77718bf33e8b21b2e6ffead780aea77",
      "size": 12997
    },
    "mcp/codex-worker.mjs": {
      "sha256": "58cc917e5a19511d1a4255aebc1372e419c2911e257102a7d2d03e0c14136d4e",
      "size": 51695
    },
    "mcp/controller-ranges.js": {
      "sha256": "ec662eee290f4b371ca06f129ea7f709c03c4c54183065782b00d38748ad5a75",
      "size": 46358
    },
    "mcp/controller.css": {
      "sha256": "8f7c4775c8a3a5ffbbed5796bb9da048ccb7299e3bf99a6928c31325be769cb8",
      "size": 23106
    },
    "mcp/controller.html": {
      "sha256": "2dc12aacc608abccaa4deb89545fa8c3b48adde4d61d437b1beb88f0ce50d625",
      "size": 149932
    },
    "mcp/controller_constants.py": {
      "sha256": "facf39759b6ec8906d7f29a223168299391810b6f2d644e844392dbda8fc5bbc",
      "size": 1268
    },
    "mcp/final_results_receipt.py": {
      "sha256": "34d9cb0b2688fcc9971f7373bf4b920fcb33801aa20e106909ad680cf1624e1d",
      "size": 4554
    },
    "mcp/plugin_installations.py": {
      "sha256": "266acaf9306d14219386452736113843fbc427b9328858cd40f2b0c9c9fa2394",
      "size": 4535
    },
    "mcp/replay_batch.py": {
      "sha256": "a98479977e861582c6e42bfa62fbbe3f69ca2c66b838d86e6e65e26e7f265025",
      "size": 18362
    },
    "mcp/replay_configuration.py": {
      "sha256": "bc050e82efda9efa8c6688e43a8d13002cf33ba800b8893f5173f963e2dc27b3",
      "size": 10704
    },
    "mcp/server.py": {
      "sha256": "282212a2b9bdd622f78a62db470eb74dabc5b1bc553d13206abf9ecebf704dab",
      "size": 147833
    },
    "mcp/worker-policy.json": {
      "sha256": "434484e50d84c94a2d95f3ffc4a8a1216dcfc210008ad7fd397adf8b4fc97654",
      "size": 1869
    },
    "scripts/claude_code_sample_loader.py": {
      "sha256": "b6ebd974f60d57a9ce3ae8805268252c3bc3925587fd4a45507e1baeac3161df",
      "size": 30761
    },
    "scripts/historical_discovery.py": {
      "sha256": "556e09b0cc1331673a7c5ca1a7eef5cfacb1a5c8d1cace5b6863806db371a4e3",
      "size": 1631
    },
    "scripts/historical_discovery_capabilities.py": {
      "sha256": "b81212a50a7d65f4667c74124c0fa3a4c2ba433b0cf19973b87911f2a6648379",
      "size": 24233
    },
    "scripts/historical_discovery_core.py": {
      "sha256": "cf099e11a5800a3c7209cc1f265cf038ed626dcc6b03622452607214dcb43ea0",
      "size": 124133
    },
    "scripts/historical_execution.py": {
      "sha256": "988b9e59e22a0c4a2a627accfe31ac2e7e469f8f4cc5c9eb1a1244692f0dd1aa",
      "size": 80106
    },
    "scripts/historical_file_selection.py": {
      "sha256": "e384ab8596fc437fbbba2ee958bb74ebabca1d6dd9d3d522e4c728bb3a1a7aa2",
      "size": 71237
    },
    "scripts/historical_replay.py": {
      "sha256": "93e2678c0557bfa0bd1b87d34f077da32ceab2689fd52d3519d5d1c173f4dad0",
      "size": 130571
    },
    "scripts/metrics/1_probe_metrics.py": {
      "sha256": "caa4b92980d176d527da849c33c9c9df58b17d1150e02dfa49fc5c166c3e303d",
      "size": 1588
    },
    "scripts/metrics/2_start_controller.py": {
      "sha256": "cb2f512251f66ceeb8e225780b55b3d3f4b519871112a4eada4ff8dc105ab3c7",
      "size": 3596
    },
    "scripts/metrics/3_report_start_metrics.py": {
      "sha256": "0cf8b2a76d3fd71dd978680e30874ab3f7a14ded61bd994beb8b72ebf728cc4c",
      "size": 3481
    },
    "scripts/metrics/4_report_final_metrics.py": {
      "sha256": "dece2f5b3019ffd9bed06aa11b79dff0608d1a2071b30f49c5b5d8b6c22c26d4",
      "size": 44524
    },
    "scripts/metrics/replay_metrics_common.py": {
      "sha256": "115d330050d5a46980db278a14471dace894ead47cce4a157b1c561a02bb0846",
      "size": 9673
    },
    "scripts/precompute_sample_configurations.py": {
      "sha256": "818397e83b9e14853d42affd3ebb1989779f0beee6ead3f8d94343c128949da8",
      "size": 4326
    },
    "scripts/record_claude_code_samples.py": {
      "sha256": "5661c2c977070d41f87558f07127b653455e764e88fcca836a75d00117036fb9",
      "size": 42584
    },
    "scripts/verify_claude_sample.py": {
      "sha256": "09f31dab9549d249bef28f48f685c171c7be305741ef06d929fde01af9426304",
      "size": 7261
    },
    "skills/codex-replay/SKILL.md": {
      "sha256": "a6eec69fa3f0d2607a8a489fd0a2a0c4ff9fc9d1a5332641ef8f63b4b968f40f",
      "size": 5386
    },
    "skills/codex-replay/agents/openai.yaml": {
      "sha256": "f3f13a40849e2de6d4ecc4f5c09a0b52d5743cfd0585b2f1c8ed2b24234cfa74",
      "size": 315
    },
    "tests/test_claude_code_sample_loader.py": {
      "sha256": "dbaa329c48f1f6e9592e68a86db4987808c054b3a16857495222ae64f6b5cd86",
      "size": 30612
    },
    "tests/test_claude_sample_verification.py": {
      "sha256": "77bfdf357d3a49422d483d24d3208d974010bfee082a9ce6051eaf0548ce963c",
      "size": 7606
    },
    "tests/test_controller_auth.py": {
      "sha256": "71b689dafd781d4bb2438a51de5c8adfe9ddca2d8a162742a2355212521895ab",
      "size": 14475
    },
    "tests/test_controller_batch_ui.py": {
      "sha256": "e4fbfb7548e0cfd1d8666e6e6490f3c391d4d013f63b59c071f05854d303fd9e",
      "size": 18266
    },
    "tests/test_controller_explanations.py": {
      "sha256": "55c3ad52b554fa522212314da10f629f2c5293faf3bb346825e503242d65b042",
      "size": 6625
    },
    "tests/test_controller_file_configuration.py": {
      "sha256": "04f1599e1b7b6cb31f0eb0777c1448f74847e4e06c23728524e80d1a504ab3a2",
      "size": 2904
    },
    "tests/test_controller_installations.py": {
      "sha256": "351a83339e4ec2cbc300ed034cb15ab20d863660a7e9d8569f08ec6a23e1fc41",
      "size": 14472
    },
    "tests/test_controller_range_ui.py": {
      "sha256": "c2f40d0210ccb85b0d5cf679f735397f68cba1d0a3c19b975f00111e76ad6859",
      "size": 43788
    },
    "tests/test_controller_ranges.py": {
      "sha256": "8dafae8315f379957735a7d468549a1e0376f67928a30d5193c640fb4c3ae174",
      "size": 17929
    },
    "tests/test_controller_scoring.py": {
      "sha256": "046239daad52ca9ef6f881001563d16925ce95ca6033e2b9c3d94ea2565f2c5b",
      "size": 9274
    },
    "tests/test_controller_search.py": {
      "sha256": "89d4ed601d083051904ce2f7c1e01abdcecfb05e542d5ddaa1362fba0013e1e5",
      "size": 8189
    },
    "tests/test_controller_transcript_inference.py": {
      "sha256": "444e106fa54362f1c9eceb5ebe3a18123d675031cd77eb379e45145bebee56ed",
      "size": 6040
    },
    "tests/test_historical_discovery.py": {
      "sha256": "0671b562ca5cecad2e1f507424ee00ddd773af6bfd5bec545ed77809c8ba5a7d",
      "size": 43668
    },
    "tests/test_historical_discovery_capabilities.py": {
      "sha256": "21801b6aea46a7c205a325a8d23a5b2ede9536068b25e789231aaa67c52db80a",
      "size": 11597
    },
    "tests/test_historical_execution.py": {
      "sha256": "f56649d0ff928a145b3f6b1acf407c20294609952679c3d19d0b6ad8481d5e27",
      "size": 66242
    },
    "tests/test_historical_file_selection.py": {
      "sha256": "17bc466d0252395971e4442d42a6f437bd15fd870aa95e1e89bdaaaa2c0d554b",
      "size": 55087
    },
    "tests/test_lean_replay.py": {
      "sha256": "5303dff62cd77640aef27f7c9df3d00c56a4c67df93cf47960737deecefc52f3",
      "size": 140310
    },
    "tests/test_maintained_catalog.py": {
      "sha256": "4ff2a6436dfb34ced512befae3e2a40254d7fe6c91efff31dc10d0377c75aea5",
      "size": 1080
    },
    "tests/test_mcp_retry_resilience.py": {
      "sha256": "a9aab71212892f6e760c30a1c833784904128a662be5bd6c615b1a49a81175b5",
      "size": 3874
    },
    "tests/test_mcp_server.py": {
      "sha256": "52b1c2a18b6eaa8b9840376e73900cb3f5ff64dd94de87c1ce0829be4f7b9c0d",
      "size": 147784
    },
    "tests/test_mcp_server_models.py": {
      "sha256": "63cfc2b059f8083fdb37938fb59889c0f44771d09c92eaa0cd86dc4cf504f7e3",
      "size": 85664
    },
    "tests/test_node_runtime.py": {
      "sha256": "c9774e380bbcc20a4ff38187d5bb6f9983f50336e958c019a3e7a82354c95a4a",
      "size": 8787
    },
    "tests/test_plugin_contract.py": {
      "sha256": "0976876cb190333e1c6f9497906e702916d34eb6ef708261922325c45f0c1eff",
      "size": 8020
    },
    "tests/test_plugin_metrics_contract.py": {
      "sha256": "184a013dc2eee24c3d8293a159146c8f414346b894d4b13fcefd9affd150263c",
      "size": 8383
    },
    "tests/test_record_claude_code_samples.py": {
      "sha256": "5923b58876d8034eb9e4fa43c23b607fdaacb5e81c12d18802a6de6befe57c02",
      "size": 30838
    },
    "tests/test_replay_metrics.py": {
      "sha256": "bb9dba233e2bc571940bee7b8d9707828a92706b6ebe59262de3108f627333f3",
      "size": 99163
    },
    "tests/test_replay_ranges.py": {
      "sha256": "bc0e128d6efad28dc106d4a93add2b60c75e74b2ee8636dcd7d35c365e5926d6",
      "size": 37298
    },
    "tests/test_report_explanations.py": {
      "sha256": "b3a4a922a0737921d948f3e6452b206b6f8d2d9da2ebeed247314056d95096b8",
      "size": 5224
    },
    "tests/test_reviewer_privacy.py": {
      "sha256": "e43d620641d3ca183a85d9bdcaa18166b0b02d94a6398cd439f0585d33587a81",
      "size": 8956
    },
    "worker/.gitignore": {
      "sha256": "4d56952b0fb13bf8f9b6c13a6d4c34a075bac3af447636a1df4335d7576e2f97",
      "size": 14
    },
    "worker/package-lock.json": {
      "sha256": "43b2572bc6cc3bba695ca949f9873118c52e50e8de84a719d97d23490500a2c7",
      "size": 19062
    },
    "worker/package.json": {
      "sha256": "de55086136cda81d13a8a31dd576a4728af5d1a11a7026ebaf3a845bfbde5103",
      "size": 392
    },
    "worker/scripts/build.mjs": {
      "sha256": "3ef881d010e9c9254ea6c1ef5be54c7e6de2047801ea683f0f81b12cc27c89c8",
      "size": 699
    },
    "worker/src/codex-worker.mjs": {
      "sha256": "9ee8c74339141ad561bd31bf899c12b4ebb4a25f43604ed51853c2d2498129fd",
      "size": 27969
    },
    "worker/src/worker-policy.mjs": {
      "sha256": "015fbc05817b48b7069d40e4a01a8b5280b992842d124bc792dd92937b550be6",
      "size": 6750
    },
    "worker/tests/codex-worker.test.mjs": {
      "sha256": "6b57eb7f5c49a34ef5140484afbe5cbb688aba4c43104c745dc8424df321d6af",
      "size": 28553
    },
    "worker/tests/worker-policy.test.mjs": {
      "sha256": "19fd3ebbee5b79eadc862309ef818d420db78b193783c5b1fc2b55bb09563a7c",
      "size": 2474
    }
  }
}

SHA-256 of public snapshot: 41d0a493722da16a24648dc98ae36d9015457e837dc4119cfc3d93dd1f188d6d