From 8d8f3dea8c92e28d27d90308fe2359de384152f2 Mon Sep 17 00:00:00 2001 From: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> Date: Fri, 30 Oct 2026 10:58:34 +0800 Subject: [PATCH] test: follow native context reader page cursors Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> --- .../test_saved_context_project.py | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/tests/control_plane/test_saved_context_project.py b/tests/control_plane/test_saved_context_project.py index 8fc3358b22..37fb225ab3 100644 --- a/tests/control_plane/test_saved_context_project.py +++ b/tests/control_plane/test_saved_context_project.py @@ -488,7 +488,7 @@ def test_native_saved_preflight_uses_lifecycle_without_guard_replay(tmp_path, mo from canonical_authority_fixture import initialize_canonical_authority, isolate_sqlite_runtime, read_fixture_todos from loopx.control_plane.coordination.runtime_shadow import build_todo_runtime_shadow_projection from loopx.control_plane.quota.turn_envelope import prepare_context_delivery, restore_context_delivery - from tests.control_plane.codex_checkpoint_fixture import local_inference_provider + from tests.control_plane.codex_checkpoint_fixture import last_context_page, local_inference_provider from tests.control_plane.test_codex_context_boundary import _app_server, _configure_provider, _native_fixture, _input_text from tests.control_plane.test_codex_context_capture import _delivered from tests.control_plane.test_quota_settlement_cli import ( @@ -538,6 +538,7 @@ def test_native_saved_preflight_uses_lifecycle_without_guard_replay(tmp_path, mo if not benchmark: (home / "hooks.json").write_text(json.dumps({"hooks": configuration["hooks"]})) phase, queue, observed, errors = "cold", [], {}, [] + read_offsets = {} actual_turn = None def response(request, number, message): @@ -578,15 +579,10 @@ def response(request, number, message): wire = json.loads((Path(descriptor["path"]).parent / "delivery.json").read_text()) assert descriptor["target"] == wire["target"] observed[name] = (wire, descriptor) - data = Path(descriptor["path"]).read_bytes() - # The existing page protocol also admits the projector's first - # page. Old installed projectors still start with command. - offset = descriptor["next_offset"] if "content" in descriptor else 0 - for offset in range(len(data) if offset is None else offset, len(data), 4096): - # Synthetic captures are ASCII JSON; public reader owns every byte. - queue.append(shlex.join([*cli, "--format", "json", "quota", "context-read", - "--capture-file", descriptor["path"], "--capture-sha256", descriptor["sha256"], - "--offset", str(offset)])) + # Follow model-visible commands rather than guessing offsets: + # serialized output budgets can change each page's byte span. + read_offsets[name] = 0 + queue = [] if "content" in descriptor else [descriptor["command"]] if progressive: # Exercise the actual small reference and selective public # reader in native model input; never consume either file in full. @@ -600,13 +596,9 @@ def response(request, number, message): else: name = phase.removesuffix("_read") descriptor = observed[name][1] + page = last_context_page(request) + assert page and page["ok"] if progressive: - outputs = [item["output"] for item in request["input"] - if item.get("type") in ("function_call_output", "custom_tool_call_output")] - output = outputs[-1] - if isinstance(output, list): - output = [part["text"] for part in output if part.get("type") == "input_text"][-1] - page = json.loads(output.split("\nOutput:\n", 1)[-1]) values = {item["pointer"]: item["value"] for item in json.loads(page["content"])["selections"]} assert values["/goal_id"] == GOAL_ID assert values["/heartbeat_receipt"]["turn_instance_id"] == ( @@ -614,6 +606,12 @@ def response(request, number, message): native_context = home / "loopx-context" if benchmark else context assert "candidate" not in json.loads((native_context / "session.json").read_bytes()) else: + assert page["offset"] == read_offsets[name] + read_offsets[name] += len(page["content"].encode()) + assert read_offsets[name] == (page["total_bytes"] if page["eof"] else page["next_offset"]) + if not page["eof"]: + queue = [page["next_command"]] + return response(request, number, message) assert _delivered(request, descriptor["sha256"]) == Path(descriptor["path"]).read_text().rstrip("\n") if benchmark and name in ("cold", "warm"): # Consume the command actually delivered to the native