headroom/tests
Focused Instability 7d4ae86ec0
feat(parser): detect re-issued identical tool calls as reread waste (#909)
Fixes #908

## Problem

Reread waste detection matches `tool_result` blocks by exact
`content_hash` only. Two gaps hide a common waste pattern — the agent
re-issuing the *same tool call* and paying full price for a
near-identical result:

1. **Byte-different results escape matching.** Same tool, same
arguments, but the second result differs trivially (embedded mtimes,
timestamps, ordering) → different hash, zero reread counted.
2. **Anthropic `tool_use` parts were dropped entirely** in
`parse_message_to_blocks` — only OpenAI-style `message.tool_calls`
produced `tool_call` blocks, so Anthropic/Strands traffic had no
call-side record at all.

## Fix

- Parse Anthropic `tool_use` / Strands `toolUse` content parts into
`tool_call` blocks (same shape as the OpenAI path: `function_name`,
`tool_call_id` flags).
- Tag every `tool_call` block with a canonical `call_key` = hash(name +
arguments re-serialized with sorted keys), so `'{"path": "a.py",
"lines": 100}'` (OpenAI JSON string) and `{"lines": 100, "path":
"a.py"}` (Anthropic dict) hash equal — covered by a cross-format parity
test.
- Second reread pass in `parse_messages` groups calls by `call_key`:
repeat invocations past the existing `REREAD_ADJACENT_GAP` polling guard
count their **result** tokens into `reread_tokens`, subject to the
existing `REREAD_MIN_TOKENS` floor. Results already counted by the
content-hash pass are skipped, so byte-identical repeats are never
double-counted.

No new `WasteSignals` field — a byte-different re-fetch of an identical
call is reread waste by the existing definition. Detection is
Python-only (`parser.py`); no Rust parity surface.

## Proof

Re-reading the same file twice, 7 messages apart, second serve differing
only by an mtime line:

```
main:        tool_call blocks: 2, reread_tokens: 0
this branch: tool_call blocks: 2, reread_tokens: 381
```

## Testing

- 11 new tests (`TestCallArgMatchReread`): changed-result repeat counted
(OpenAI + Anthropic + Strands formats), byte-identical repeat counted
exactly once, polling gap skipped, different args not matched, sub-floor
results skipped, repeat without result ignored, canonical-key
normalization, cross-format call_key parity.
- Full `tests/test_parser.py` suite: 87 passed. Consumer regression
sweep (reporting, config, request outcome, read lifecycle,
observability, storage): 188 passed.
- `ruff check` + `ruff format --check` + `mypy headroom/parser.py`
clean.

Co-authored-by: integration-check <integration@local>
2026-06-12 17:16:56 -05:00
..
cli
fixtures/memory_tool_definitions fix(memory): expose memory IDs in auto-tail + memory_list tool + ID-usage guidance 2026-05-19 22:10:42 -05:00
integrations/test_strands
parity fix(proxy): restore Codex usage headers on WS and streaming SSE transports (#577) (#794) 2026-06-09 15:55:53 -05:00
test_backends fix(proxy): Strands MCP bundle + backend path fixes + Codex fail-closed protection 2026-05-21 11:00:14 -07:00
test_cache
test_cli fix(codex): poll /wham/usage for subscription limits (handshake no longer sends x-codex-* headers) (#924) 2026-06-12 17:03:14 -05:00
test_compression
test_dashboard test(dashboard): fix playwright importorskip placement 2026-04-21 00:10:05 -05:00
test_evals
test_install fix(codex): poll /wham/usage for subscription limits (handshake no longer sends x-codex-* headers) (#924) 2026-06-12 17:03:14 -05:00
test_integrations fix: B1 — retire ICM, RollingWindow, scoring, relevance + dependents 2026-05-02 12:23:17 -07:00
test_learn fix(learn): claude-cli streams output with idle timeout (#373) 2026-06-11 11:55:19 -05:00
test_mcp_registry fix(codex): respect CODEX_HOME for wrap config (#731) 2026-06-10 18:21:29 -05:00
test_memory feat(memory): add opt-in Apple-GPU (MPS) embedding runtime (#766) 2026-06-11 12:59:20 -05:00
test_providers style: match CI ruff formatting 2026-04-22 22:21:00 -05:00
test_proxy feat(proxy): log compressed messages alongside original request (#261) 2026-06-11 19:02:54 -05:00
test_scripts fix(ci): restore repro harness test in dev installs 2026-04-20 22:12:01 +07:00
test_storage fix: B1 — retire ICM, RollingWindow, scoring, relevance + dependents 2026-05-02 12:23:17 -07:00
test_transforms feat(proxy): add agent-90 savings profile (#830) 2026-06-11 18:58:06 -05:00
__init__.py
_dotenv.py fix(tests): stop module-level dotenv loaders from polluting os.environ during pytest collection 2026-04-26 09:15:37 -07:00
conftest.py fix: B1 — retire ICM, RollingWindow, scoring, relevance + dependents 2026-05-02 12:23:17 -07:00
e2e_real_compression.py fix: complete /v1/responses compression telemetry, multi-frame WS, frozen-count cap 2026-05-07 14:50:03 -07:00
e2e_ws_codex_usage_headers.py fix(proxy): restore Codex usage headers on WS and streaming SSE transports (#577) (#794) 2026-06-09 15:55:53 -05:00
e2e_ws_responses_compression.py fix: complete /v1/responses compression telemetry, multi-frame WS, frozen-count cap 2026-05-07 14:50:03 -07:00
repro_unsendable_panic.py fix(ci): restore green lint gate on main 2026-06-04 14:15:49 -07:00
test_acceptance.py fix: B1 — retire ICM, RollingWindow, scoring, relevance + dependents 2026-05-02 12:23:17 -07:00
test_adapter_hooks.py fix: B5 — TOIN observation-only refactor + per-tenant aggregation key 2026-05-02 16:24:03 -07:00
test_adaptive_sizer.py
test_agent_savings.py feat: add dashboard agent usage stats (#814) 2026-06-12 14:12:22 -05:00
test_anthropic_beta_session_sticky.py fix: A6 — anthropic-beta and openai-beta deterministic merge + session-sticky 2026-05-02 09:53:37 -07:00
test_anthropic_pre_upstream_backpressure.py refactor(proxy): migrate Gemini + Anthropic non-streaming onto outcome funnel 2026-05-14 19:38:54 -07:00
test_anthropic_stage_timings.py fix: B1 — retire ICM, RollingWindow, scoring, relevance + dependents 2026-05-02 12:23:17 -07:00
test_auth_mode.py feat: add dashboard agent usage stats (#814) 2026-06-12 14:12:22 -05:00
test_backend_anyllm.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_backend_bugs.py fix(tests): stop module-level dotenv loaders from polluting os.environ during pytest collection 2026-04-26 09:15:37 -07:00
test_backend_streaming_cache_metrics.py fix(proxy): record cache reads/writes on backend-routed streaming (#327) 2026-05-14 11:01:57 -07:00
test_banner_upstream_targets.py feat: add Vertex AI proxy routing (#793) 2026-06-09 23:05:30 -07:00
test_bedrock_region.py fix(tests): stop module-level dotenv loaders from polluting os.environ during pytest collection 2026-04-26 09:15:37 -07:00
test_binaries.py fix: docker install fails with PermissionError in readonly cache dir 2026-04-20 17:36:44 -07:00
test_bundled_tools_savings.py fix(tests): stop module-level dotenv loaders from polluting os.environ during pytest collection 2026-04-26 09:15:37 -07:00
test_cache_aligner_detector_only.py fix(tests): update CacheAligner detector-only tests for F2.2 5-field CompressionPolicy 2026-05-06 14:39:39 -07:00
test_canonical_pipeline.py fix: align docs and prune dead compatibility surfaces 2026-05-09 14:07:59 -07:00
test_ccr.py feat(rust): retire python smart_crusher, ship rust-only via pyo3 2026-04-27 00:52:21 -07:00
test_ccr_batch_processor.py
test_ccr_batch_store.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_ccr_context_tracker.py fix(ccr): scope proactive expansion by workspace (cross-project leak) 2026-05-26 13:23:51 -07:00
test_ccr_feedback.py
test_ccr_mcp_server.py fix(ccr): use shared compression store (#875) 2026-06-11 18:41:39 -05:00
test_ccr_response_handler.py fix(ccr): skip CCR when model calls headroom_retrieve alongside user tools (#839) 2026-06-10 21:12:26 -05:00
test_ccr_response_handler_extra.py fix: B1 — retire ICM, RollingWindow, scoring, relevance + dependents 2026-05-02 12:23:17 -07:00
test_ccr_row_drop_store_bridge.py fix(crusher): bridge SmartCrusher row-drop hash to Python compression_store (#389) 2026-05-05 11:41:48 -07:00
test_ccr_rust_marker_hash_bridge.py fix(ccr): key Rust search/diff/log markers with explicit_hash (#852) 2026-06-11 13:08:05 -05:00
test_ccr_tool_always_on.py fix: B7 — CCR hardening: persistent backends + always-on tool 2026-05-02 16:52:33 -07:00
test_ccr_tool_injection.py
test_claude_session_branch_compare.py
test_claude_session_mode_benchmark.py
test_cli_learn.py Fix learn CLI worker expectation in CI 2026-05-09 22:11:42 -07:00
test_cli_perf_format.py feat: add dashboard agent usage stats (#814) 2026-06-12 14:12:22 -05:00
test_cli_proxy_env.py feat: add dashboard agent usage stats (#814) 2026-06-12 14:12:22 -05:00
test_cli_proxy_improvements.py feat(cli): comprehensive help text, validation, and exception handling improvements (#640) 2026-06-10 20:53:18 -05:00
test_cli_tools.py test: apply linux ruff formatting 2026-04-23 08:49:50 -05:00
test_code_compressor_thread_safety.py test(code_compressor): add unsendable-panic repro and thread-local parser tests 2026-06-03 17:02:07 -05:00
test_codex_openai_contract_parity.py fix(proxy): restore Codex usage headers on WS and streaming SSE transports (#577) (#794) 2026-06-09 15:55:53 -05:00
test_codex_rate_limits.py fix(codex): poll /wham/usage for subscription limits (handshake no longer sends x-codex-* headers) (#924) 2026-06-12 17:03:14 -05:00
test_codex_responses_waste_signals.py fix(codex): compute waste signals on the OpenAI Responses path (#898) 2026-06-12 17:10:29 -05:00
test_codex_ws_compression_scheduler.py test(codex): de-flake semaphore-tail ratio check on fast runners 2026-06-03 23:57:31 -07:00
test_compaction_markdown_kv.py feat: gated Markdown-KV compaction formatter (serialization-aware output) (#859) 2026-06-11 13:03:50 -05:00
test_compress_api.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_compress_failure.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_compression_cache.py fix: complete /v1/responses compression telemetry, multi-frame WS, frozen-count cap 2026-05-07 14:50:03 -07:00
test_compression_decision.py fix(proxy): surface CompressionDecision.passthrough_reason in tags 2026-05-15 14:40:00 -07:00
test_compression_determinism.py Compress Codex Responses payloads 2026-05-10 17:27:47 -07:00
test_compression_observability.py fix: expose compression latency bottlenecks 2026-05-12 13:34:08 -07:00
test_compression_policy.py fix(policy): correct warm-cache penalty in net_mutation_gain to (S + dT) (#903) 2026-06-12 17:14:30 -05:00
test_compression_policy_toin_gate.py fix(transforms): F2.2 c2/3 — wire toin_read_only gate + extend policy_selected log 2026-05-06 14:37:33 -07:00
test_compression_safety_rails.py feat: compression safety rails — error-output protection, pipeline circuit breaker, library inflation guard (#851) 2026-06-11 12:55:13 -05:00
test_compression_store.py fix(ccr): make retrieval TTL configurable (#715) 2026-06-10 23:20:46 -05:00
test_compression_summary.py
test_compression_summary_eval.py
test_compression_summary_hard_eval.py fix(tests): stop module-level dotenv loaders from polluting os.environ during pytest collection 2026-04-26 09:15:37 -07:00
test_compression_summary_integration.py fix(tests): stop module-level dotenv loaders from polluting os.environ during pytest collection 2026-04-26 09:15:37 -07:00
test_compression_summary_tool_eval.py fix(tests): stop module-level dotenv loaders from polluting os.environ during pytest collection 2026-04-26 09:15:37 -07:00
test_compression_units.py Compress Codex Responses payloads 2026-05-10 17:27:47 -07:00
test_config.py feat: detect re-served tool results as over-compression waste signal (#854) 2026-06-11 13:07:04 -05:00
test_copilot_auth.py fix: harden Copilot API auth token handling (#557) 2026-06-11 12:57:48 -05:00
test_copilot_linux_secret.py fix(copilot): support subscription auth through Headroom 2026-06-02 21:24:47 -07:00
test_copilot_macos_keychain.py fix(copilot): support subscription auth through Headroom 2026-06-02 21:24:47 -07:00
test_copilot_quota.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_copilot_subscription_smoke.py fix(copilot): restore generic endpoint for non-subscription OAuth (#610) (#612) 2026-06-04 16:27:54 -07:00
test_corrupt_golden_bytes_recovery.py fix(proxy): fail-open on corrupt golden bytes instead of RuntimeError (#603) 2026-06-04 18:19:06 -07:00
test_cost_tracker_counterfactual.py style: fix linting and formatting issues 2026-06-03 20:08:26 +05:30
test_critical_fixes.py fix: B5 — TOIN observation-only refactor + per-tenant aggregation key 2026-05-02 16:24:03 -07:00
test_critical_gaps.py fix: B5 — TOIN observation-only refactor + per-tenant aggregation key 2026-05-02 16:24:03 -07:00
test_dashboard_agent_usage.py feat: add dashboard agent usage stats (#814) 2026-06-12 14:12:22 -05:00
test_dashboard_cache_ttl_playwright.py ci: run dashboard playwright tests in a dedicated job (#921) 2026-06-12 10:20:37 -05:00
test_evals_datasets.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_evals_metrics.py feat(evals): add zero-cost tool schema compaction integrity eval (#817) 2026-06-10 16:03:42 -05:00
test_exceptions.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_forwarded_headers.py fix(proxy): F4 — trust X-Forwarded-* only behind allow-listed gateway 2026-05-06 14:37:09 -07:00
test_gemini_function_response_waste.py fix(gemini): surface functionResponse payloads to waste-signal detection (#897) 2026-06-12 17:09:20 -05:00
test_google_multimodal.py fix: correct preserved-entry index mapping in Gemini content round-trip (#836) 2026-06-10 21:10:56 -05:00
test_google_multimodal_e2e.py
test_graph.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_handler_outcome_tag_invariant.py refactor(proxy): MemoryRanker + ImageCompressionDecision + branch-aware version-sync 2026-05-19 12:13:09 -05:00
test_header_isolation.py fix: A5 — strip x-headroom-* from upstream-bound headers (P5-49) 2026-05-02 09:35:27 -07:00
test_hnsw_only.py
test_hooks.py
test_image_compression.py
test_image_compression_decision.py refactor(proxy): MemoryRanker + ImageCompressionDecision + branch-aware version-sync 2026-05-19 12:13:09 -05:00
test_image_compressor.py fix: release image router models after compression 2026-04-29 01:45:27 -04:00
test_image_log_redaction.py fix(observability): G3 remediation — bound cardinality + wire dead metrics 2026-05-24 10:41:56 -07:00
test_image_ocr_api_compat.py fix: PR #372 — restore [image] extra on Python 3.13 via rapidocr 3.x adapter 2026-05-04 08:20:01 -07:00
test_issue_728_empty_tools_injection.py fix: don't inject empty tools:[] when client omitted the tools field (#772) 2026-06-08 21:55:59 -08:00
test_issue_746_tool_search.py fix: preserve Claude Code tool-search deferral through the proxy (#746) (#753) 2026-06-08 11:20:48 -07:00
test_kompress_preload_deferral.py fix(proxy): make Kompress eager preload cache-only so a cold cache can't block startup (#783) 2026-06-11 12:53:03 -05:00
test_lean_ctx_installer.py feat: add lean-ctx context tool support 2026-05-11 17:54:17 -04:00
test_log_compressor.py
test_memory_auto_tail.py fix(memory): READ-ONLY framing + fail-closed unresolved-project fallback 2026-05-26 14:32:08 -07:00
test_memory_bridge.py
test_memory_decision.py fix(proxy): MemoryDecision contract + 3 bypass bugs + drop 500-char query cap 2026-05-19 11:13:52 -05:00
test_memory_eval.py
test_memory_handler_concurrent_init.py fix: add anthropic pre-upstream timeouts 2026-04-21 09:48:32 +07:00
test_memory_handler_native_ops.py fix(memory): expose memory IDs in auto-tail + memory_list tool + ID-usage guidance 2026-05-19 22:10:42 -05:00
test_memory_handler_project_isolation.py fix(memory): READ-ONLY framing + fail-closed unresolved-project fallback 2026-05-26 14:32:08 -07:00
test_memory_injection_budget.py fix(proxy): MemoryDecision contract + 3 bypass bugs + drop 500-char query cap 2026-05-19 11:13:52 -05:00
test_memory_integration.py
test_memory_invariants.py fix(proxy): MemoryDecision contract + 3 bypass bugs + drop 500-char query cap 2026-05-19 11:13:52 -05:00
test_memory_query.py fix(proxy): MemoryDecision contract + 3 bypass bugs + drop 500-char query cap 2026-05-19 11:13:52 -05:00
test_memory_ranker.py Merge remote-tracking branch 'origin/main' into refactor/memory-tool-handles 2026-05-19 22:17:20 -05:00
test_memory_storage_router.py fix(memory): READ-ONLY framing + fail-closed unresolved-project fallback 2026-05-26 14:32:08 -07:00
test_memory_sync.py fix: harden learn path handling across platforms 2026-05-09 15:45:26 -07:00
test_memory_system.py
test_memory_tool_mode.py fix: integrate B6+B7 — fix cross-test contamination + injector mock parity 2026-05-02 17:05:58 -07:00
test_memory_tool_session_sticky.py fix: A7 — memory tool injection session-sticky for both Anthropic and OpenAI 2026-05-02 10:11:27 -07:00
test_memory_tracker.py
test_memory_tracker_integration.py
test_memory_usage_integration.py fix(tests): stop module-level dotenv loaders from polluting os.environ during pytest collection 2026-04-26 09:15:37 -07:00
test_memory_wrapper.py test: apply linux ruff formatting 2026-04-23 08:49:50 -05:00
test_ml_model_registry_lifecycle.py fix: release image router models after compression 2026-04-29 01:45:27 -04:00
test_models.py
test_network_diff_capture.py feat: add differential network capture harness (#761) 2026-06-08 22:18:31 -07:00
test_oauth_bearer_routing.py style: fix ruff lint/format and mypy errors for CI 3.12 pass 2026-04-20 13:23:20 -05:00
test_observability_metrics.py
test_observability_tracing.py
test_onnx_runtime.py fix(onnx): reduce retained cpu memory 2026-04-20 22:31:48 +00:00
test_openai_beta_session_sticky.py fix: A6 — anthropic-beta and openai-beta deterministic merge + session-sticky 2026-05-02 09:53:37 -07:00
test_openai_codex_routing.py feat: add dashboard agent usage stats (#814) 2026-06-12 14:12:22 -05:00
test_openai_codex_ws_lifecycle.py fix(proxy): restore Codex usage headers on WS and streaming SSE transports (#577) (#794) 2026-06-09 15:55:53 -05:00
test_openai_codex_ws_timings.py fix(proxy): restore Codex usage headers on WS and streaming SSE transports (#577) (#794) 2026-06-09 15:55:53 -05:00
test_openai_responses_compression_units.py Rename tool output compression parallelism env 2026-06-04 14:54:21 +10:00
test_openai_responses_context_compaction.py fix: schema compaction must not drop property names that match DROP_KEYS (#785) 2026-06-09 16:29:18 -05:00
test_openai_responses_t3_replay_regression.py Rename tool output compression parallelism env 2026-06-04 14:54:21 +10:00
test_openai_streaming_backend.py
test_owned_asset_encoding.py fix: decode/encode owned config, state and template assets as UTF-8 2026-06-03 03:25:42 +08:00
test_package_init_lazy.py fix(proxy): lazy-import server to avoid fastapi crash (#442) 2026-06-10 12:44:23 -05:00
test_parser.py feat(parser): detect re-issued identical tool calls as reread waste (#909) 2026-06-12 17:16:56 -05:00
test_paths.py feat: add lean-ctx context tool support 2026-05-11 17:54:17 -04:00
test_paths_backward_compat.py fix(wrap): track shared proxy clients with markers (#877) 2026-06-11 19:42:43 -05:00
test_pipeline.py test: apply linux ruff formatting 2026-04-23 08:49:50 -05:00
test_plugin_manifests.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_plugins_hermes_retrieve.py feat(plugins): Hermes agent headroom_retrieve plugin (#824) 2026-06-11 18:43:10 -05:00
test_pr208_changes.py fix(proxy): defer file logging install to create_app() 2026-04-28 15:28:33 -07:00
test_pricing.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_pricing_litellm.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_probe_recorder.py feat: probe-based retention scoring of recorded compression events (#862) 2026-06-11 13:02:36 -05:00
test_prometheus_stage_timing_concurrency.py perf(proxy): reduce lock contention on stage-timing metrics 2026-04-20 22:08:09 +07:00
test_provider_aider.py feat(proxy): per-project savings breakdown on the dashboard (claude, codex, aider, copilot, cursor) (#803) 2026-06-10 21:04:45 -05:00
test_provider_claude.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_provider_codex_install.py fix(codex): poll /wham/usage for subscription limits (handshake no longer sends x-codex-* headers) (#924) 2026-06-12 17:03:14 -05:00
test_provider_codex_runtime.py fix(ci): update tests to assert absence of requires_openai_auth (bug 3, #406) 2026-05-06 12:18:47 -05:00
test_provider_copilot_wrap.py feat(proxy): per-project savings breakdown on the dashboard (claude, codex, aider, copilot, cursor) (#803) 2026-06-10 21:04:45 -05:00
test_provider_cursor.py feat(proxy): per-project savings breakdown on the dashboard (claude, codex, aider, copilot, cursor) (#803) 2026-06-10 21:04:45 -05:00
test_provider_model_fallback.py
test_provider_openclaw_wrap.py fix(cli): proxy/perf/wrap UX cleanup + perf --hours correctness 2026-05-07 16:43:35 -07:00
test_provider_package_init.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_provider_proxy_routes.py feat: add Vertex AI proxy routing (#793) 2026-06-09 23:05:30 -07:00
test_provider_registry.py feat: add Vertex AI proxy routing (#793) 2026-06-09 23:05:30 -07:00
test_provider_registry_extended.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_proxy_anthropic_cache_stability.py fix: integrate B6+B7 — fix cross-test contamination + injector mock parity 2026-05-02 17:05:58 -07:00
test_proxy_anthropic_compression_diagnostics.py fix: A3 — byte-faithful Python forwarders; serialize canonical only when mutated 2026-05-02 09:02:10 -07:00
test_proxy_batch_integration.py
test_proxy_byte_faithful_forwarding.py fix: A3 — byte-faithful Python forwarders; serialize canonical only when mutated 2026-05-02 09:02:10 -07:00
test_proxy_cache_ttl_metrics.py
test_proxy_ccr.py fix(ccr): make retrieval TTL configurable (#715) 2026-06-10 23:20:46 -05:00
test_proxy_codex_route_aliases.py Minimize Codex model metadata changes 2026-06-01 17:27:31 -06:00
test_proxy_compress_endpoint.py
test_proxy_compression_executor.py fix: expose compression latency bottlenecks 2026-05-12 13:34:08 -07:00
test_proxy_compression_headers.py fix: strip accept-encoding from forwarded proxy headers 2026-04-15 11:40:11 -07:00
test_proxy_copilot_auth_hooks.py fix(proxy): thread tags into 13 outcome sites + synth /v1/models + free-fn _extract_tags 2026-05-15 19:15:48 -07:00
test_proxy_count_tokens_integration.py
test_proxy_dashboard_stats_cache.py fix: expose compression latency bottlenecks 2026-05-12 13:34:08 -07:00
test_proxy_debug_endpoints.py fix(security): block DNS-rebinding on /debug/* and /stats/reset via Host-header allowlist (#605) 2026-06-11 12:58:33 -05:00
test_proxy_disable_kompress.py Add option to disable Kompress fallback (#514) 2026-06-10 22:02:13 -05:00
test_proxy_gemini_integration.py
test_proxy_gemini_native_integration.py
test_proxy_google_cloudcode_route_aliases.py chore: format proxy route tests with ruff 2026-04-21 19:38:32 +00:00
test_proxy_handler_helpers.py fix(codex): poll /wham/usage for subscription limits (handshake no longer sends x-codex-* headers) (#924) 2026-06-12 17:03:14 -05:00
test_proxy_handlers_batch.py fix(proxy): thread tags into 13 outcome sites + synth /v1/models + free-fn _extract_tags 2026-05-15 19:15:48 -07:00
test_proxy_healthchecks.py feat(proxy): add agent-90 savings profile (#830) 2026-06-11 18:58:06 -05:00
test_proxy_hooks_regression.py test(proxy): align hooks regression test with Bug 3 recount semantics 2026-04-30 13:26:53 -07:00
test_proxy_memory_integration.py test(memory): live tests for delete-via-[id] + dedup-hint mechanism 2026-05-19 22:18:15 -05:00
test_proxy_mode_benchmark.py
test_proxy_modes.py
test_proxy_openai_cache_stability.py fix: A3 — byte-faithful Python forwarders; serialize canonical only when mutated 2026-05-02 09:02:10 -07:00
test_proxy_openai_responses_bypass.py fix: per-project memory storage so projects can no longer bleed memories (GH #462) 2026-05-13 15:27:41 -07:00
test_proxy_openai_responses_integration.py fix: stabilize codex compression, stats, and proxy lifecycle 2026-05-09 13:47:53 -07:00
test_proxy_package_init.py fix(proxy): lazy-import server to avoid fastapi crash (#442) 2026-06-10 12:44:23 -05:00
test_proxy_passthrough_integration.py fix: B1 — retire ICM, RollingWindow, scoring, relevance + dependents 2026-05-02 12:23:17 -07:00
test_proxy_pipeline_lifecycle.py feat: probe-based retention scoring of recorded compression events (#862) 2026-06-11 13:02:36 -05:00
test_proxy_project_savings.py feat(proxy): per-project savings breakdown on the dashboard (claude, codex, aider, copilot, cursor) (#803) 2026-06-10 21:04:45 -05:00
test_proxy_savings_history.py feat(dashboard): per-model savings breakdown and expected-vs-actual cost on historical charts (#807) 2026-06-10 23:53:57 -05:00
test_proxy_scalability.py fix(proxy): support multi-worker Docker env startup 2026-04-26 12:25:33 +00:00
test_proxy_stats_recent_requests.py feat: add dashboard agent usage stats (#814) 2026-06-12 14:12:22 -05:00
test_proxy_streaming_ratelimit_headers.py fix(proxy): restore Codex usage headers on WS and streaming SSE transports (#577) (#794) 2026-06-09 15:55:53 -05:00
test_proxy_streaming_request_logger.py feat(proxy): log compressed messages alongside original request (#261) 2026-06-11 19:02:54 -05:00
test_proxy_streaming_resilience.py style: fix linting and formatting issues 2026-06-03 20:08:26 +05:30
test_proxy_system_prompt_immutable.py fix: A3 — byte-faithful Python forwarders; serialize canonical only when mutated 2026-05-02 09:02:10 -07:00
test_proxy_telemetry_env.py
test_proxy_warmup.py fix: align docs and prune dead compatibility surfaces 2026-05-09 14:07:59 -07:00
test_quality_retention.py feat(rust): SmartCrusher PR4 — lossless-first default + CCR-Dropped restoration 2026-04-27 16:30:22 -07:00
test_quota_registry.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_realignment_live_multi_turn.py fix(security): allowlist GitGuardian-flagged test fixtures 2026-05-02 18:33:22 -07:00
test_release_version.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_release_workflows.py feat: add dashboard agent usage stats (#814) 2026-06-12 14:12:22 -05:00
test_relevance.py feat(relevance): weight BM25 score_batch by corpus IDF (#646) 2026-06-05 14:15:44 -08:00
test_relevance_extra.py feat(rust): retire python smart_crusher, ship rust-only via pyo3 2026-04-27 00:52:21 -07:00
test_reporting.py feat: detect re-served tool results as over-compression waste signal (#854) 2026-06-11 13:07:04 -05:00
test_request_outcome.py feat: add Vertex AI proxy routing (#793) 2026-06-09 23:05:30 -07:00
test_responses_pyo3_compression.py fix: align docs and prune dead compatibility surfaces 2026-05-09 14:07:59 -07:00
test_responses_ws_pyo3_compression.py fix: align docs and prune dead compatibility surfaces 2026-05-09 14:07:59 -07:00
test_rtk_installer.py
test_rust_core_smoke.py fix: A0 — fail-loud rust core deployment smoke test 2026-05-02 17:52:37 -07:00
test_search_compressor.py
test_security_validations.py
test_session_probes.py feat: probe-based retention scoring of recorded compression events (#862) 2026-06-11 13:02:36 -05:00
test_shared_context.py
test_signals_keyword_parity.py chore(transforms): retire dead text_compressor module (Phase 3e.3) 2026-04-29 21:14:36 -07:00
test_smart_crusher_toin_attachment.py fix(smart_crusher): re-land orphaned audit close-out — CCR knob + scorer fail-loud 2026-04-28 18:37:52 -07:00
test_sqlite_graph_store.py
test_sqlite_vector_index.py fix(memory): batch onnx embeddings and sqlite-vec ops 2026-04-24 09:49:28 +00:00
test_sse_thinking_blocks.py fix: A8 — SSE delta arms, UTF-8 buffer, phase preservation, request-id, 413 2026-05-02 10:35:11 -07:00
test_sse_utf8_split.py [codex] fix(proxy): parse CRLF SSE event terminators (#649) 2026-06-10 21:16:00 -05:00
test_ssl_context.py fix(ssl): upstream httpx client inherits SSL_CERT_FILE, REQUESTS_CA_BUNDLE, NODE_EXTRA_CA_CERTS (#745) 2026-06-08 21:10:47 -08:00
test_stage_timer.py feat(proxy): add per-stage timings for Codex WS and Anthropic HTTP paths 2026-04-20 22:01:41 +07:00
test_startup_log_noise.py fix: suppress LiteLLM provider banner before import (#874) 2026-06-11 15:10:20 -05:00
test_storage_backends.py test: apply linux ruff formatting 2026-04-23 08:49:50 -05:00
test_strands_tokenizer.py
test_strategy_stats_supabase.py feat(telemetry): surface per-strategy compression counters 2026-04-29 14:14:09 -07:00
test_streaming_usage_parser.py fix(content-router,proxy): cache-safe text-block compression and online streaming usage 2026-05-08 15:20:54 -07:00
test_subscription_base.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_subscription_client.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_subscription_tracker.py fix(subscription): wire tokens_saved_rtk from RTK stats endpoint 2026-05-22 13:48:42 -07:00
test_subscription_tracker_rtk_wired.py fix(tests): mock logger.warning directly instead of relying on caplog 2026-05-25 16:32:31 -07:00
test_subscription_window_render.py fix: PR #281 — synthesize 5h subscription window after Anthropic reset 2026-05-04 08:17:25 -07:00
test_tag_protection_integration.py
test_tag_protector_invariant.py fix: A9 — tag protector discards wrap on placeholder loss 2026-05-02 18:01:24 -07:00
test_telemetry.py fix(telemetry): honour HEADROOM_TELEMETRY=off in /v1/telemetry collector (#390) 2026-05-05 11:30:10 -07:00
test_telemetry_context.py refactor(telemetry): centralize stack slug validation + cardinality cap 2026-04-17 18:42:41 +02:00
test_telemetry_warning.py feat: add lean-ctx context tool support 2026-05-11 17:54:17 -04:00
test_text_compressors.py chore(transforms): retire dead text_compressor module (Phase 3e.3) 2026-04-29 21:14:36 -07:00
test_toin.py fix: align docs and prune dead compatibility surfaces 2026-05-09 14:07:59 -07:00
test_toin_feedback.py fix: log Codex ws cancellations safely 2026-05-10 09:06:07 -07:00
test_toin_fixes.py fix: B5 — TOIN observation-only refactor + per-tenant aggregation key 2026-05-02 16:24:03 -07:00
test_toin_full_integration.py fix: B5 — TOIN observation-only refactor + per-tenant aggregation key 2026-05-02 16:24:03 -07:00
test_toin_integration.py feat(rust): retire python smart_crusher, ship rust-only via pyo3 2026-04-27 00:52:21 -07:00
test_toin_observation_only.py fix: align docs and prune dead compatibility surfaces 2026-05-09 14:07:59 -07:00
test_toin_publish.py fix: B5 — TOIN observation-only refactor + per-tenant aggregation key 2026-05-02 16:24:03 -07:00
test_token_headroom_mode.py fix: complete /v1/responses compression telemetry, multi-frame WS, frozen-count cap 2026-05-07 14:50:03 -07:00
test_tokenizer.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_tokenizers.py fix: correct tiktoken encoding for unknown gpt-4 model snapshots (#552) 2026-06-03 13:12:16 -07:00
test_tool_result_interceptors.py fix(review-3): address third-pass PR #210 feedback 2026-04-20 20:24:47 -07:00
test_transforms_content_detection.py test: align test_error_detection with Phase 3e.1 bug fixes 2026-04-29 16:10:08 -07:00
test_transforms_content_router.py fix: ignore brackets inside JSON strings when splitting mixed content (#553) 2026-06-03 12:32:56 -07:00
test_transforms_log_compressor.py feat(rust): port log_compressor to Rust + bug fixes (Phase 3e.5) 2026-04-29 20:47:49 -07:00
test_transforms_package.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_transforms_search_compressor.py fix(ccr): key Rust search/diff/log markers with explicit_hash (#852) 2026-06-11 13:08:05 -05:00
test_utils.py test: add missing type hints to FakeProvider in test_utils (#631) 2026-06-10 21:15:16 -05:00
test_ws_http_fallback.py fix(proxy): restore Codex usage headers on WS and streaming SSE transports (#577) (#794) 2026-06-09 15:55:53 -05:00
test_ws_memory_relay.py Fix CI lint errors and test failures 2026-04-14 18:23:06 -07:00
test_ws_session_registry.py feat(proxy): track Codex WS sessions and cancel relay tasks deterministically 2026-04-20 22:01:41 +07:00