From d655ace97c404ea1510cf65db70dc12dda4a6ce3 Mon Sep 17 00:00:00 2001 From: Eugene Eisenstein Date: Wed, 2 Sep 2026 18:26:44 -0400 Subject: [PATCH] fix(tests): repair unsatisfiable unified-test assertions and surface traces MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Five of the eight persistent `unified-tests` failures assert things the code cannot produce. None are regressions. Raise the queue-drain timeout to 600s on the three large longmem fixtures. They ingest 484-550 messages across ~50 sessions, then wait on the 60s `WaitAction` default; the deriver is still working normally when the timer fires. Matches the sibling 550-message case that already passes. Raise `max_tokens` to 2500 in the two config-summary fixtures. Context allocates 40% of the limit to the summary, so the previous 400 gave a 160-token budget while `SUMMARY.MAX_TOKENS_SHORT` is 1000 — no conforming summary could ever fit, and the query returned `summary=None` even though the summary was created. Drop `session_id` from the dream test's `get_representation` step. A bare session id becomes a one-element allowlist, and an allowlist narrows levels to `ALLOWLIST_SAFE_LEVELS` (`explicit`), so the deductive and inductive observations the step asserts on are excluded by design. The unscoped representation is where the dreamer's conclusions are actually served. Delete `WaitAction.flush`. Flush is process-wide — the harness starts the deriver with `DERIVER_FLUSH_ENABLED=true` — and there is no per-request flush, so the field never had an effect despite being set in 47 places. `TestStep` now forbids extra fields so a dead knob cannot silently accumulate again. Presign the reasoning traces alongside `results.json` and report both to the Discord webhook and a GitHub job summary. The traces hold the full prompts and model outputs and were already uploaded, but only `results.json` was surfaced. Co-Authored-By: Claude Opus 5 (1M context) --- tests/unified/runner.py | 148 +++++++++++++----- tests/unified/schema.py | 8 +- .../test_cases/config_deriver_hierarchy.json | 6 +- .../config_message_positive_override.json | 3 +- .../test_cases/config_peercard_control.json | 3 +- .../test_cases/config_summary_control.json | 5 +- .../config_summary_control_deriver_off.json | 5 +- .../dialectic_reasoning_levels.json | 3 +- .../dialectic_structured_output.json | 3 +- .../test_cases/dialectic_tool_calls.json | 3 +- .../dream_knowledge_updates_and_patterns.json | 13 +- tests/unified/test_cases/longmem_ancash.json | 3 +- .../longmem_ancash_directional.json | 3 +- .../test_cases/longmem_ancash_no_session.json | 3 +- .../unified/test_cases/longmem_giftcard.json | 2 +- tests/unified/test_cases/longmem_plank.json | 3 +- ...ple_7161e7e2_single-session-assistant.json | 2 +- ...m_triple_e47becba_single-session-user.json | 3 +- ...iple_gpt4_59149c77_temporal-reasoning.json | 2 +- .../test_cases/message_deriver_disabled.json | 3 +- .../observation_2peer_bidirectional.json | 3 +- ...servation_2peer_both_observe_me_false.json | 3 +- .../test_cases/observation_2peer_default.json | 3 +- ...r_observe_me_false_blocks_observation.json | 3 +- ...me_false_but_can_still_observe_others.json | 3 +- ...eer_unidirectional_alice_observes_bob.json | 3 +- ...eer_unidirectional_bob_observes_alice.json | 3 +- ...ervation_3peer_all_observe_each_other.json | 3 +- .../observation_3peer_circular.json | 3 +- ...3peer_multiple_observers_one_observed.json | 6 +- ..._3peer_one_observer_multiple_observed.json | 3 +- ...servation_3peer_selective_observation.json | 3 +- .../observation_4peer_complex_matrix.json | 3 +- .../observation_asymmetric_visibility.json | 6 +- ...bservation_isolation_between_sessions.json | 6 +- .../test_cases/peer_isolation_test.json | 6 +- .../test_cases/scope_confines_recall.json | 3 +- .../test_cases/session_deriver_disabled.json | 3 +- .../test_cases/workspace_chat_cross_peer.json | 3 +- .../workspace_chat_from_observations.json | 3 +- .../workspace_deriver_disabled.json | 3 +- 41 files changed, 162 insertions(+), 137 deletions(-) diff --git a/tests/unified/runner.py b/tests/unified/runner.py index c9e9d2e3..bb6ceee7 100644 --- a/tests/unified/runner.py +++ b/tests/unified/runner.py @@ -5,7 +5,8 @@ import os import sys import threading import time -from datetime import datetime, timezone +from dataclasses import dataclass +from datetime import UTC, datetime from pathlib import Path from typing import Any @@ -87,17 +88,80 @@ async def send_discord_message(webhook_url: str, message: str) -> None: logger.exception("Failed to send Discord notification") +@dataclass +class RunArtifact: + """One uploaded file: its S3 key, and a presigned URL when one could be made.""" + + key: str + url: str | None = None + + +@dataclass +class RunArtifacts: + """Artifacts published for a run. Any field is None when its upload failed.""" + + results: RunArtifact | None = None + traces: RunArtifact | None = None + + +# 3 days. Long enough to survive a weekend before someone reads the report. +PRESIGN_EXPIRY_SECONDS = 259200 + + +def presign(s3_client: Any, bucket: str, key: str) -> RunArtifact: + """Wrap an uploaded key with a presigned URL, or just the key if signing fails.""" + try: + url: str = s3_client.generate_presigned_url( + "get_object", + Params={"Bucket": bucket, "Key": key}, + ExpiresIn=PRESIGN_EXPIRY_SECONDS, + ) + return RunArtifact(key=key, url=url) + except Exception as e: + logger.warning(f"Could not generate S3 presigned URL for {key}: {e}") + return RunArtifact(key=key) + + +def artifact_lines(artifacts: RunArtifacts) -> list[str]: + """Render each uploaded artifact as one markdown line: link when presigned, key otherwise. + + Both artifacts are surfaced. The reasoning traces carry the full prompts and + model outputs for the run, which is what a failure usually needs to diagnose. + """ + labels = [ + ("Complete results", artifacts.results), + ("Reasoning traces", artifacts.traces), + ] + lines: list[str] = [] + for label, artifact in labels: + if artifact is None: + continue + if artifact.url: + lines.append(f"[{label}]({artifact.url}) — `{artifact.key}`") + else: + lines.append(f"{label}: `{artifact.key}`") + return lines + + +def write_job_summary(lines: list[str]) -> None: + """Append a markdown block to the GitHub Actions job summary; a no-op locally.""" + summary_path = os.getenv("GITHUB_STEP_SUMMARY") + if not summary_path: + return + try: + with open(summary_path, "a", encoding="utf-8") as handle: + handle.write("\n".join(lines) + "\n") + except OSError as e: + logger.warning(f"Could not write job summary: {e}") + + async def save_results_to_s3( results: dict[str, tuple[str, float]], failed_count: int, total_count: int, execution_time: float, -) -> tuple[str | None, str | None]: - """Save comprehensive test results to S3. - - Returns: - Tuple of (presigned_url, s3_key). Either or both may be None if upload/URL generation fails. - """ +) -> RunArtifacts: + """Save comprehensive test results and reasoning traces to S3.""" try: import boto3 @@ -112,13 +176,13 @@ async def save_results_to_s3( credentials = session.get_credentials() # pyright: ignore if not credentials: logger.warning("No AWS credentials available, skipping S3 upload") - return None, None + return RunArtifacts() except Exception as e: logger.warning(f"Could not verify AWS credentials: {e}, skipping S3 upload") - return None, None + return RunArtifacts() # Create comprehensive results object - timestamp = datetime.now(timezone.utc).isoformat() + timestamp = datetime.now(UTC).isoformat() github_run_id = os.getenv("GITHUB_RUN_ID", "local") github_run_attempt = os.getenv("GITHUB_RUN_ATTEMPT", "1") github_sha = os.getenv("GITHUB_SHA", "unknown") @@ -150,7 +214,7 @@ async def save_results_to_s3( # One "folder" per run: /// holding results.json plus # the reasoning-trace file(s), so a run's summary and full LLM I/O live together. - date_str = datetime.now(timezone.utc).strftime("%Y-%m-%d") + date_str = datetime.now(UTC).strftime("%Y-%m-%d") sha_short = github_sha[:7] if github_sha != "unknown" else "unknown" ref_slug = github_ref.replace("/", "-") # branch names may contain "/" run_slug = f"{ref_slug}-{sha_short}-{github_run_id}-{github_run_attempt}" @@ -169,6 +233,7 @@ async def save_results_to_s3( # Upload the reasoning traces (full LLM/deriver I/O) captured this run. The # API and deriver both append to REASONING_TRACES_FILE (file-locked). Use # upload_file so large trace files stream via multipart instead of buffering. + traces: RunArtifact | None = None traces_path_str = os.getenv("REASONING_TRACES_FILE") if traces_path_str: traces_path = Path(traces_path_str) @@ -182,6 +247,7 @@ async def save_results_to_s3( ExtraArgs={"ContentType": "application/x-ndjson"}, ) logger.info(f"Saved reasoning traces to S3 key {traces_key}") + traces = presign(s3_client, s3_bucket, traces_key) except Exception as e: logger.error( f"Failed to upload reasoning traces: {e}", exc_info=True @@ -191,20 +257,13 @@ async def save_results_to_s3( f"REASONING_TRACES_FILE={traces_path} is missing or empty; no traces uploaded" ) - try: - url: str = s3_client.generate_presigned_url( # pyright: ignore - "get_object", - Params={"Bucket": s3_bucket, "Key": results_key}, - ExpiresIn=259200, # 3 days - ) - return url, results_key # pyright: ignore - except Exception as e: - logger.warning(f"Could not generate S3 presigned URL: {e}") - return None, results_key + return RunArtifacts( + results=presign(s3_client, s3_bucket, results_key), traces=traces + ) except Exception as e: logger.error(f"Failed to save results to S3: {e}", exc_info=True) - return None, None + return RunArtifacts() class UnifiedTestExecutor: @@ -357,7 +416,9 @@ class UnifiedTestExecutor: if step.duration: await asyncio.sleep(step.duration) if step.target == "queue_empty": - # Flush mode is enabled by default in the harness (DERIVER_FLUSH_ENABLED=true) + # Flush is process-wide, not per-step: the harness starts the + # deriver with DERIVER_FLUSH_ENABLED=true so batches never wait + # on the token threshold. See tests/bench/harness.py. await self.wait_for_queue(step.timeout) elif isinstance(step, ScheduleDreamAction): @@ -771,30 +832,41 @@ class UnifiedTestRunner: # 5. Save results and send notifications # Always attempt S3 upload - save_results_to_s3 will check for credentials - url: str | None - s3_key: str | None - url, s3_key = await save_results_to_s3( + artifacts = await save_results_to_s3( results, failed_count, total_count, total_suite_time ) - # 6. Send Discord notification + # 6. Report the run: GitHub job summary, then Discord. + passed_count = total_count - failed_count + status_emoji = "✅" if failed_count == 0 else "⚠️" + headline = ( + f"Results: {passed_count}/{total_count} passed, " + f"{failed_count}/{total_count} failed" + ) + + write_job_summary( + [ + f"## {status_emoji} Unified Test Results", + "", + headline, + "", + f"Execution time: {total_suite_time:.2f}s", + "", + *artifact_lines(artifacts), + ] + ) + discord_webhook_url = os.getenv("TEST_DISCORD_WEBHOOK_URL") if discord_webhook_url: - passed_count = total_count - failed_count - status_emoji = "✅" if failed_count == 0 else "⚠️" - message_lines = [ f"{status_emoji} **Unified Test Results**", - f"Results: {passed_count}/{total_count} passed, {failed_count}/{total_count} failed", + headline, f"Execution time: {total_suite_time:.2f}s", + *artifact_lines(artifacts), ] - if s3_key: - message_lines.append(f"File: `{s3_key}`") - if url: - message_lines.append(f"[View Complete Results]({url})") - message = "\n".join(message_lines) - - await send_discord_message(discord_webhook_url, message) + await send_discord_message( + discord_webhook_url, "\n".join(message_lines) + ) return failed_count diff --git a/tests/unified/schema.py b/tests/unified/schema.py index 31e30946..bb54da71 100644 --- a/tests/unified/schema.py +++ b/tests/unified/schema.py @@ -1,7 +1,7 @@ import datetime from typing import Annotated, Any, Literal -from pydantic import BaseModel, Field +from pydantic import BaseModel, ConfigDict, Field from src.config import ReasoningLevel from src.schemas import ( @@ -14,6 +14,8 @@ from src.schemas import ( class TestStep(BaseModel): + model_config = ConfigDict(extra="forbid") # pyright: ignore + description: str | None = None @@ -89,10 +91,6 @@ class WaitAction(TestStep): ) target: Literal["queue_empty"] = "queue_empty" timeout: int = 60 - flush: bool = Field( - False, - description="Enable flush mode to bypass batch token threshold before waiting", - ) # --- Dream Actions --- diff --git a/tests/unified/test_cases/config_deriver_hierarchy.json b/tests/unified/test_cases/config_deriver_hierarchy.json index 1ab883db..8eb7bc9d 100644 --- a/tests/unified/test_cases/config_deriver_hierarchy.json +++ b/tests/unified/test_cases/config_deriver_hierarchy.json @@ -34,8 +34,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", @@ -86,8 +85,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/config_message_positive_override.json b/tests/unified/test_cases/config_message_positive_override.json index 911f21b5..a9a46623 100644 --- a/tests/unified/test_cases/config_message_positive_override.json +++ b/tests/unified/test_cases/config_message_positive_override.json @@ -36,8 +36,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/config_peercard_control.json b/tests/unified/test_cases/config_peercard_control.json index 11db312a..04145446 100644 --- a/tests/unified/test_cases/config_peercard_control.json +++ b/tests/unified/test_cases/config_peercard_control.json @@ -38,8 +38,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/config_summary_control.json b/tests/unified/test_cases/config_summary_control.json index f71cdeee..1e54d692 100644 --- a/tests/unified/test_cases/config_summary_control.json +++ b/tests/unified/test_cases/config_summary_control.json @@ -77,15 +77,14 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", "target": "get_context", "session_id": "session_summary", "summary": true, - "max_tokens": 400, + "max_tokens": 2500, "observer_peer_id": "eve", "assertions": [ { diff --git a/tests/unified/test_cases/config_summary_control_deriver_off.json b/tests/unified/test_cases/config_summary_control_deriver_off.json index 7a788990..96dfb769 100644 --- a/tests/unified/test_cases/config_summary_control_deriver_off.json +++ b/tests/unified/test_cases/config_summary_control_deriver_off.json @@ -76,15 +76,14 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", "target": "get_context", "session_id": "session_summary", "summary": true, - "max_tokens": 400, + "max_tokens": 2500, "observer_peer_id": "eve", "assertions": [ { diff --git a/tests/unified/test_cases/dialectic_reasoning_levels.json b/tests/unified/test_cases/dialectic_reasoning_levels.json index 509e0c39..13cf9780 100644 --- a/tests/unified/test_cases/dialectic_reasoning_levels.json +++ b/tests/unified/test_cases/dialectic_reasoning_levels.json @@ -45,8 +45,7 @@ { "step_type": "wait", "target": "queue_empty", - "timeout": 120, - "flush": true + "timeout": 120 }, { "step_type": "query", diff --git a/tests/unified/test_cases/dialectic_structured_output.json b/tests/unified/test_cases/dialectic_structured_output.json index 59cc1365..bfcb094e 100644 --- a/tests/unified/test_cases/dialectic_structured_output.json +++ b/tests/unified/test_cases/dialectic_structured_output.json @@ -80,8 +80,7 @@ { "step_type": "wait", "target": "queue_empty", - "timeout": 180, - "flush": true + "timeout": 180 }, { "step_type": "query", diff --git a/tests/unified/test_cases/dialectic_tool_calls.json b/tests/unified/test_cases/dialectic_tool_calls.json index 0ae3b923..77845a11 100644 --- a/tests/unified/test_cases/dialectic_tool_calls.json +++ b/tests/unified/test_cases/dialectic_tool_calls.json @@ -80,8 +80,7 @@ { "step_type": "wait", "target": "queue_empty", - "timeout": 180, - "flush": true + "timeout": 180 }, { "step_type": "query", diff --git a/tests/unified/test_cases/dream_knowledge_updates_and_patterns.json b/tests/unified/test_cases/dream_knowledge_updates_and_patterns.json index 7a6f1764..28e262b7 100644 --- a/tests/unified/test_cases/dream_knowledge_updates_and_patterns.json +++ b/tests/unified/test_cases/dream_knowledge_updates_and_patterns.json @@ -44,8 +44,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "add_messages", @@ -75,8 +74,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "add_messages", @@ -114,8 +112,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "schedule_dream", @@ -127,8 +124,7 @@ { "step_type": "wait", "target": "queue_empty", - "timeout": 180, - "flush": true + "timeout": 180 }, { "step_type": "query", @@ -148,7 +144,6 @@ "target": "get_representation", "observer_peer_id": "assistant", "observed_peer_id": "maya", - "session_id": "maya_life_story", "assertions": [ { "assertion_type": "llm_judge", diff --git a/tests/unified/test_cases/longmem_ancash.json b/tests/unified/test_cases/longmem_ancash.json index ef455eb8..52ed0523 100644 --- a/tests/unified/test_cases/longmem_ancash.json +++ b/tests/unified/test_cases/longmem_ancash.json @@ -75,8 +75,7 @@ { "step_type": "wait", "target": "queue_empty", - "timeout": 180, - "flush": true + "timeout": 180 }, { "step_type": "query", diff --git a/tests/unified/test_cases/longmem_ancash_directional.json b/tests/unified/test_cases/longmem_ancash_directional.json index 2871a9a0..b27adf04 100644 --- a/tests/unified/test_cases/longmem_ancash_directional.json +++ b/tests/unified/test_cases/longmem_ancash_directional.json @@ -74,8 +74,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/longmem_ancash_no_session.json b/tests/unified/test_cases/longmem_ancash_no_session.json index b0462d4a..97c7292c 100644 --- a/tests/unified/test_cases/longmem_ancash_no_session.json +++ b/tests/unified/test_cases/longmem_ancash_no_session.json @@ -74,8 +74,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/longmem_giftcard.json b/tests/unified/test_cases/longmem_giftcard.json index 6ef43463..e1fa8fe6 100644 --- a/tests/unified/test_cases/longmem_giftcard.json +++ b/tests/unified/test_cases/longmem_giftcard.json @@ -3664,7 +3664,7 @@ { "step_type": "wait", "target": "queue_empty", - "flush": true + "timeout": 600 }, { "step_type": "query", diff --git a/tests/unified/test_cases/longmem_plank.json b/tests/unified/test_cases/longmem_plank.json index bbdcd765..a9426bbc 100644 --- a/tests/unified/test_cases/longmem_plank.json +++ b/tests/unified/test_cases/longmem_plank.json @@ -154,8 +154,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/longmem_triple_7161e7e2_single-session-assistant.json b/tests/unified/test_cases/longmem_triple_7161e7e2_single-session-assistant.json index 1564b289..c9ed3d39 100644 --- a/tests/unified/test_cases/longmem_triple_7161e7e2_single-session-assistant.json +++ b/tests/unified/test_cases/longmem_triple_7161e7e2_single-session-assistant.json @@ -3719,7 +3719,7 @@ { "step_type": "wait", "target": "queue_empty", - "flush": true + "timeout": 600 }, { "step_type": "query", diff --git a/tests/unified/test_cases/longmem_triple_e47becba_single-session-user.json b/tests/unified/test_cases/longmem_triple_e47becba_single-session-user.json index 48911d89..01165256 100644 --- a/tests/unified/test_cases/longmem_triple_e47becba_single-session-user.json +++ b/tests/unified/test_cases/longmem_triple_e47becba_single-session-user.json @@ -3833,8 +3833,7 @@ { "step_type": "wait", "target": "queue_empty", - "timeout": 600, - "flush": true + "timeout": 600 }, { "step_type": "query", diff --git a/tests/unified/test_cases/longmem_triple_gpt4_59149c77_temporal-reasoning.json b/tests/unified/test_cases/longmem_triple_gpt4_59149c77_temporal-reasoning.json index ded356dd..427f6b6d 100644 --- a/tests/unified/test_cases/longmem_triple_gpt4_59149c77_temporal-reasoning.json +++ b/tests/unified/test_cases/longmem_triple_gpt4_59149c77_temporal-reasoning.json @@ -3431,7 +3431,7 @@ { "step_type": "wait", "target": "queue_empty", - "flush": true + "timeout": 600 }, { "step_type": "query", diff --git a/tests/unified/test_cases/message_deriver_disabled.json b/tests/unified/test_cases/message_deriver_disabled.json index 315c0995..fa6937c9 100644 --- a/tests/unified/test_cases/message_deriver_disabled.json +++ b/tests/unified/test_cases/message_deriver_disabled.json @@ -40,8 +40,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/observation_2peer_bidirectional.json b/tests/unified/test_cases/observation_2peer_bidirectional.json index 17d85a68..ce453889 100644 --- a/tests/unified/test_cases/observation_2peer_bidirectional.json +++ b/tests/unified/test_cases/observation_2peer_bidirectional.json @@ -40,8 +40,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/observation_2peer_both_observe_me_false.json b/tests/unified/test_cases/observation_2peer_both_observe_me_false.json index 5e33adb2..c12c2e50 100644 --- a/tests/unified/test_cases/observation_2peer_both_observe_me_false.json +++ b/tests/unified/test_cases/observation_2peer_both_observe_me_false.json @@ -40,8 +40,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/observation_2peer_default.json b/tests/unified/test_cases/observation_2peer_default.json index ba771615..debd86a9 100644 --- a/tests/unified/test_cases/observation_2peer_default.json +++ b/tests/unified/test_cases/observation_2peer_default.json @@ -40,8 +40,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/observation_2peer_observe_me_false_blocks_observation.json b/tests/unified/test_cases/observation_2peer_observe_me_false_blocks_observation.json index f153c5ea..cf1f7c80 100644 --- a/tests/unified/test_cases/observation_2peer_observe_me_false_blocks_observation.json +++ b/tests/unified/test_cases/observation_2peer_observe_me_false_blocks_observation.json @@ -40,8 +40,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/observation_2peer_observe_me_false_but_can_still_observe_others.json b/tests/unified/test_cases/observation_2peer_observe_me_false_but_can_still_observe_others.json index a5c3de23..b5e606aa 100644 --- a/tests/unified/test_cases/observation_2peer_observe_me_false_but_can_still_observe_others.json +++ b/tests/unified/test_cases/observation_2peer_observe_me_false_but_can_still_observe_others.json @@ -40,8 +40,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/observation_2peer_unidirectional_alice_observes_bob.json b/tests/unified/test_cases/observation_2peer_unidirectional_alice_observes_bob.json index 944efacb..7c1c8703 100644 --- a/tests/unified/test_cases/observation_2peer_unidirectional_alice_observes_bob.json +++ b/tests/unified/test_cases/observation_2peer_unidirectional_alice_observes_bob.json @@ -40,8 +40,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/observation_2peer_unidirectional_bob_observes_alice.json b/tests/unified/test_cases/observation_2peer_unidirectional_bob_observes_alice.json index 99538fa4..c7d411ba 100644 --- a/tests/unified/test_cases/observation_2peer_unidirectional_bob_observes_alice.json +++ b/tests/unified/test_cases/observation_2peer_unidirectional_bob_observes_alice.json @@ -40,8 +40,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/observation_3peer_all_observe_each_other.json b/tests/unified/test_cases/observation_3peer_all_observe_each_other.json index e201309c..fa6cae29 100644 --- a/tests/unified/test_cases/observation_3peer_all_observe_each_other.json +++ b/tests/unified/test_cases/observation_3peer_all_observe_each_other.json @@ -52,8 +52,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/observation_3peer_circular.json b/tests/unified/test_cases/observation_3peer_circular.json index 4ae12689..f7c95ddf 100644 --- a/tests/unified/test_cases/observation_3peer_circular.json +++ b/tests/unified/test_cases/observation_3peer_circular.json @@ -52,8 +52,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/observation_3peer_multiple_observers_one_observed.json b/tests/unified/test_cases/observation_3peer_multiple_observers_one_observed.json index 8449df1f..08768e84 100644 --- a/tests/unified/test_cases/observation_3peer_multiple_observers_one_observed.json +++ b/tests/unified/test_cases/observation_3peer_multiple_observers_one_observed.json @@ -48,8 +48,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", @@ -130,8 +129,7 @@ { "step_type": "wait", "target": "queue_empty", - "timeout": 180, - "flush": true + "timeout": 180 }, { "step_type": "query", diff --git a/tests/unified/test_cases/observation_3peer_one_observer_multiple_observed.json b/tests/unified/test_cases/observation_3peer_one_observer_multiple_observed.json index e329b4bc..9a2d060b 100644 --- a/tests/unified/test_cases/observation_3peer_one_observer_multiple_observed.json +++ b/tests/unified/test_cases/observation_3peer_one_observer_multiple_observed.json @@ -48,8 +48,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/observation_3peer_selective_observation.json b/tests/unified/test_cases/observation_3peer_selective_observation.json index b0c08325..f39fef80 100644 --- a/tests/unified/test_cases/observation_3peer_selective_observation.json +++ b/tests/unified/test_cases/observation_3peer_selective_observation.json @@ -48,8 +48,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/observation_4peer_complex_matrix.json b/tests/unified/test_cases/observation_4peer_complex_matrix.json index 23a4c70b..17d723a2 100644 --- a/tests/unified/test_cases/observation_4peer_complex_matrix.json +++ b/tests/unified/test_cases/observation_4peer_complex_matrix.json @@ -52,8 +52,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/observation_asymmetric_visibility.json b/tests/unified/test_cases/observation_asymmetric_visibility.json index 24710477..46acf71a 100644 --- a/tests/unified/test_cases/observation_asymmetric_visibility.json +++ b/tests/unified/test_cases/observation_asymmetric_visibility.json @@ -40,8 +40,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "create_session", @@ -77,8 +76,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/observation_isolation_between_sessions.json b/tests/unified/test_cases/observation_isolation_between_sessions.json index 6ed6c0eb..dddb8eab 100644 --- a/tests/unified/test_cases/observation_isolation_between_sessions.json +++ b/tests/unified/test_cases/observation_isolation_between_sessions.json @@ -40,8 +40,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "create_session", @@ -77,8 +76,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/peer_isolation_test.json b/tests/unified/test_cases/peer_isolation_test.json index 2c87fced..54bc3e8e 100644 --- a/tests/unified/test_cases/peer_isolation_test.json +++ b/tests/unified/test_cases/peer_isolation_test.json @@ -48,8 +48,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "create_session", @@ -81,8 +80,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/scope_confines_recall.json b/tests/unified/test_cases/scope_confines_recall.json index 77589ca8..725cd376 100644 --- a/tests/unified/test_cases/scope_confines_recall.json +++ b/tests/unified/test_cases/scope_confines_recall.json @@ -55,8 +55,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/session_deriver_disabled.json b/tests/unified/test_cases/session_deriver_disabled.json index 2c613fb7..0af60379 100644 --- a/tests/unified/test_cases/session_deriver_disabled.json +++ b/tests/unified/test_cases/session_deriver_disabled.json @@ -30,8 +30,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/workspace_chat_cross_peer.json b/tests/unified/test_cases/workspace_chat_cross_peer.json index 3d474c1d..a611948e 100644 --- a/tests/unified/test_cases/workspace_chat_cross_peer.json +++ b/tests/unified/test_cases/workspace_chat_cross_peer.json @@ -68,8 +68,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/workspace_chat_from_observations.json b/tests/unified/test_cases/workspace_chat_from_observations.json index f40eae04..8142317b 100644 --- a/tests/unified/test_cases/workspace_chat_from_observations.json +++ b/tests/unified/test_cases/workspace_chat_from_observations.json @@ -52,8 +52,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query", diff --git a/tests/unified/test_cases/workspace_deriver_disabled.json b/tests/unified/test_cases/workspace_deriver_disabled.json index ce1a054c..b30e9953 100644 --- a/tests/unified/test_cases/workspace_deriver_disabled.json +++ b/tests/unified/test_cases/workspace_deriver_disabled.json @@ -30,8 +30,7 @@ }, { "step_type": "wait", - "target": "queue_empty", - "flush": true + "target": "queue_empty" }, { "step_type": "query",