headroom/tests
Tejas Chopra 8884d87378
fix(transforms): stop compression garbling mixed subagent output (#3286)
## The report

A user's model called compressed subagent output "too garbled to use"
and burned CCR retrievals to reconstruct it — **not** because it needed
more context. One retrieval returned nothing but the Claude Code harness
sanitizer banner, reported as `original_item_count: 33,
compressed_item_count: 25`.

Root-cause chain (verified by reproduction): the harness prepends a
bracket-delimited banner (`[harness: ... you.]` — exactly 33
whitespace-delimited words) and neutralizes `<` → `<\`. Headroom's
mixed-content splitter typed the banner as JSON (bracket balance, no
validation) → SmartCrusher couldn't parse it → the fallback chain fed it
to lossy Kompress → Kompress word-dropped the banner 33→25 and stored it
behind a retrieval hash. Meanwhile tabular sections rendered as
quote-wrapped JSON-string blobs with `\n` as two-character escapes, and
`ensure_ascii=True` boundaries turned the output's unicode (`→ └ ✓`)
into `\uXXXX` soup. The model reasonably concluded the output was
garbled.

## Fixes

1. **`split_into_sections` validates JSON before typing a block
`JSON_ARRAY`** — same validation its own mixed-content gate
(`_has_valid_json_block_with_text`) has always used. Tag-protection
placeholders, which self-isolated only by accident of that bug
(`{{HEADROOM_TAG_N}}` bracket-balances), are now isolated explicitly via
a new `isolate=` parameter fed by the router; contiguous prose fragments
re-coalesce so the `\n\n` reassembly stops doubling newlines in
uncompressed prose.
2. **Kompress gets a real floor: `min_input_words = 64`**
(config-tunable, clamped at the historical 10), applied on the
in-process, batch, apply, and remote paths. Below it, lossy
word-dropping is a net loss — the retrieval marker alone is ~20 words —
and short blocks are disproportionately instruction-like.
3. **The mixed path unwraps SmartCrusher's whole-array CSV render** when
it comes back as a bare JSON string, splicing raw readable lines into
the text instead of a quoted escape blob.
4. **`ensure_ascii=False` at model-visible boundaries**: MCP
retrieve/stats responses and the audit-safe splice reserialization
(which now also matches serde_json's non-escaping behavior).
5. **Kompress honesty**: the marker says `N words compressed to M`
(shared `ccr_retrieval_marker` helper, unit-tested), and
`store_kompress_in_ccr` no longer writes word counts into the store's
*item count* fields — token counts already carry the size story.

The upstream trigger (the harness's `<` → `<\` neutralization corrupting
JSON semantics) is not Headroom's to fix, but with #1 and #2 the banner
now passes through byte-intact and nothing lossy touches it.

## Testing

- New `tests/test_garbled_compression_fixes.py` (12 tests) pins every
fix, including an end-to-end router pass over a reconstructed
harness-sanitized fixture asserting the banner survives byte-identical
and no `\uXXXX` appears.
- Existing small-fixture kompress/router tests updated to set
`min_input_words=10` explicitly (they test other mechanics; fixtures sit
under the new production floor by design).
- Affected sweep (`-k "compress or ccr or crusher or router or mixed or
kompress or hermes"`, ~2.9k tests): green apart from order-dependent
flakes that shift identity between runs (deepseek tokenizer `AutoConfig`
import, hermes/proxy-ccr) — each passes standalone and in direct
combination with the new tests; the full CI shards are the authoritative
check.
- ruff 0.16.3 `check` + `format --check` clean.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01EWKCmcH47hvvoQ35wftXhE

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-27 13:22:26 +05:30
..
cli Add Click-based CLI with memory management commands 2026-01-29 21:30:21 -08:00
fixtures fix(mcp): add explicit Serena reconciliation (#3222) 2026-08-23 11:52:50 -07:00
integrations fix(compression): honor qualified CCR names across integrations (#2698) 2026-08-03 20:17:39 -07:00
parity feat(rust): port CodeCompressor AST compressor to Rust (parity-only) (#1154) 2026-07-27 09:21:57 -07:00
test_backends fix(backends/litellm): None-guard core token counts in OpenAI usage block (#2324) 2026-08-11 23:48:43 -05:00
test_cache fix(cache/semantic): don't semantic-match an empty query across contexts (#3226) 2026-08-23 11:51:33 -07:00
test_cli fix(copilot): preserve native enterprise model routing (#2998) 2026-08-25 21:46:31 -05:00
test_compression fix(code): parse-probe tree-sitter availability in code_handler (#1231) (#1300) 2026-07-09 14:06:29 -05:00
test_dashboard test(dashboard): fix playwright importorskip placement 2026-04-21 00:10:05 -05:00
test_evals Remove LLMLingua: Kompress is the sole text compressor 2026-03-26 11:11:00 -07:00
test_install test(install/windows): verify the PATH guard against the real HKCU registry (#3068) 2026-08-17 20:21:03 -07:00
test_integrations test(agno): drop dead module-level Metrics import (#3269) 2026-08-26 14:44:20 +05:30
test_learn fix(learn): surface Codex analysis failures (#3016) 2026-08-25 21:40:12 -05:00
test_live feat(read-maturation): activity-based hold-back Read maturation (Mechanism B) (#1068) 2026-06-22 22:52:42 -05:00
test_mcp_registry fix(mcp): add explicit Serena reconciliation (#3222) 2026-08-23 11:52:50 -07:00
test_memory fix(memory): sanitize entity_refs to prevent dict-shaped entries crashing search (#2951) 2026-08-13 11:46:44 -05:00
test_providers test: track active LiteLLM DeepSeek pricing (#3161) 2026-08-20 23:19:55 -05:00
test_proxy fix(proxy/anthropic): authenticate and attribute buffered Copilot turns (#3277) 2026-08-26 23:44:03 +05:30
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_tokenizers fix(tokenizers): bound tiktoken vocab load so a stalled download cannot hang requests (#956) (#994) 2026-06-19 11:27:09 -05:00
test_transforms fix(transforms): stop compression garbling mixed subagent output (#3286) 2026-08-27 13:22:26 +05:30
__init__.py Initial commit: Headroom SDK - LLM context optimization toolkit 2026-01-06 23:16:58 -08:00
_dotenv.py fix(tests): stop module-level dotenv loaders from polluting os.environ during pytest collection 2026-04-26 09:15:37 -07:00
_gemini_live.py fix(proxy): relocate stray system-role messages to the top-level system param (#765) (#1357) 2026-08-13 11:52:09 -05:00
_mcp_stub.py fix(codex): stop pinning Codex memory MCP to one project db (#1269) 2026-06-23 07:49:07 -05:00
_skip_helpers.py fix(ccr): skip Anthropic marker emission when tool injection is deferred (#1273) 2026-06-23 12:48:05 -05:00
conftest.py fix(security): address u9up assessment findings (WEB-01–07) (#2207) 2026-08-20 09:02:44 -05:00
e2e_cortex_latency.py fix(cortex-code): migrate to current Cortex REST API endpoints + add e2e benchmarks (#1474) 2026-06-30 14:14:36 -05:00
e2e_cortex_mcp.py fix(cortex-code): migrate to current Cortex REST API endpoints + add e2e benchmarks (#1474) 2026-06-30 14:14:36 -05:00
e2e_cortex_proxy.py fix(cortex-code): migrate to current Cortex REST API endpoints + add e2e benchmarks (#1474) 2026-06-30 14:14:36 -05:00
e2e_cortex_proxy_mcp.py fix(cortex-code): migrate to current Cortex REST API endpoints + add e2e benchmarks (#1474) 2026-06-30 14:14:36 -05:00
e2e_cortex_quality.py fix(cortex-code): migrate to current Cortex REST API endpoints + add e2e benchmarks (#1474) 2026-06-30 14:14:36 -05:00
e2e_cortex_savings.py fix(cortex-code): migrate to current Cortex REST API endpoints + add e2e benchmarks (#1474) 2026-06-30 14:14:36 -05: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_5xx_accounting_all_providers.py fix(proxy): count exhausted upstream 5xx as failed across all providers (#1571) 2026-07-09 17:07:08 -05:00
test_acceptance.py fix: B1 — retire ICM, RollingWindow, scoring, relevance + dependents 2026-05-02 12:23:17 -07:00
test_adapter_hooks.py feat: compression extraction — Rust knob exposure, CCR hardening, traffic audits (#818) 2026-06-16 20:21:13 -07:00
test_adaptive_sizer.py fix(transforms/adaptive-sizer): honor max_k on small-input fast path (#2319) 2026-08-11 23:48:22 -05:00
test_adversarial_grid.py feat(evals): adversarial-input robustness grid for compressors (#918) 2026-06-13 10:47:54 -05:00
test_agent_savings.py fix(reporting): show net vs gross savings, real skip thresholds, and the effective profile (#3123) 2026-08-19 00:16:37 -07: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_buffered_sse.py fix(proxy/anthropic): stop answering a non-streaming turn with an event stream (#3142) 2026-08-19 20:45:38 -07:00
test_anthropic_ccr_workspace_unbound.py fix(proxy): hoist ccr_workspace_key default so /v1/messages survives CCR-inject off (#1096) 2026-07-09 17:29:40 -05:00
test_anthropic_compaction_transforms.py fix(tests): repair three main-branch test failures (#2306) 2026-07-16 09:21:41 -07:00
test_anthropic_pre_upstream_backpressure.py feat(proxy): self-limiting session state for the compression-cache registry (#3261) 2026-08-26 15:04:43 +05:30
test_anthropic_stage_timings.py fix: tool_search_tool_regex deferred and falsely resolved on direct-Anthropic path (#2971) 2026-08-13 21:15:37 -05:00
test_audit_codex.py fix: remove rtk and lean-ctx CLI context tools (#2677) 2026-07-30 22:59:41 -07:00
test_audit_reads.py feat: compression extraction — Rust knob exposure, CCR hardening, traffic audits (#818) 2026-06-16 20:21:13 -07:00
test_auth_mode.py fix(proxy/auth): match real Anthropic OAuth token prefix (sk-ant-oat) (#1672) 2026-07-02 14:26:19 -07:00
test_auth_policy.py feat(grok-build): add Grok Build wrap command and MCP integration (#1629) 2026-07-15 20:51:52 +00:00
test_azure_foundry_claude_compression.py feat(azure-foundry): derive upstream URL from ANTHROPIC_FOUNDRY_RESOURCE (#1138) 2026-06-22 15:49:14 -05:00
test_backend_anyllm.py fix(backends/anyllm): stream tool_use blocks and map finish_reason on the streaming path 2026-08-11 18:15:57 -07:00
test_backend_bugs.py fix(backends/litellm): drop oversized tool names before Bedrock Converse (#2129) 2026-07-13 19:53:49 -04:00
test_backend_nonstreaming_cache_metrics.py fix(proxy/anthropic): coerce present-null usage counters on the buffered backend path (#3084) 2026-08-17 20:21:09 -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_bash_search_lossless_fold.py feat(lossless): factor shared directory prefix in the grep search fold (#2547) 2026-07-24 20:40:49 -07:00
test_bedrock_prefix_tracker_wiring.py fix(proxy/bedrock): wire PrefixCacheTracker updates into Bedrock backend paths (#2196) 2026-07-15 18:18:20 +00:00
test_bedrock_region.py fix(proxy): pass through cross-region prefixed Bedrock model IDs directly (#2330) 2026-08-11 23:54:03 -05:00
test_bedrock_streaming_input_tokens.py fix(proxy): report real input tokens on streaming message_start (#1132) (#1305) 2026-06-23 12:53:15 -05:00
test_bedrock_tool_result_cache_and_streaming_stats.py fix(backend/bedrock): preserve system-prompt cache_control breakpoint (list form) (#2225) 2026-07-15 19:58:06 +00:00
test_beta_header_merge.py refactor(proxy): extract beta header merge policy (#1993) 2026-07-12 21:34:25 -07:00
test_beta_header_policy.py refactor(proxy): extract beta header policy (#1992) 2026-07-12 12:18:53 -04:00
test_binaries.py fix(security): address u9up assessment findings (WEB-01–07) (#2207) 2026-08-20 09:02:44 -05:00
test_buffered_ccr_accept_header.py fix(ccr): send Accept: application/json on a buffered stream:false turn (#3102) 2026-08-18 07:16:02 -07:00
test_buffered_ccr_grace_window.py fix(proxy): restore the buffered-CCR heartbeat behind a grace window (#3091) 2026-08-17 10:52:25 -07:00
test_buffered_ccr_salvage.py fix(ccr): relay a successful upstream turn when post-processing fails (#3094) 2026-08-17 18:06:59 -07:00
test_builtin_compressor_adapters.py feat(transforms): dispatch kompress/text via the compressor registry + forward question (#2411) 2026-07-18 22:03:53 -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_cache_aligner_prefix_stability.py fix(cache-aligner): hash the frozen conversation prefix so Claude Code cache invalidation is detected (#2085) (#2161) 2026-07-14 11:59:52 -04:00
test_cache_breakpoint_diagnostics.py fix(cache): mirror client cache_control positions instead of single-marker consolidation 2026-08-11 18:15:44 -07:00
test_cache_control_move_bust.py fix(proxy/anthropic): don't replay recorded prefix over live history (#3026) (#3052) 2026-08-17 15:02:18 -07:00
test_cache_control_ttl_order.py fix(cache): enforce Anthropic's 1h-before-5m cache_control ordering before forwarding (#2941) 2026-08-12 16:32:12 -05:00
test_cache_mode_cold_start.py fix(proxy): compress cache-mode cold starts and tag prefix-mismatch passthrough (#2365) 2026-08-11 23:55:11 -05:00
test_cache_mode_delta_marker.py feat(cache): provider-agnostic cache-mode delta + cc-agnostic prefix comparison (#1868) 2026-07-08 13:29:35 -07:00
test_cache_prefix_overlay.py fix(proxy/anthropic): don't replay recorded prefix over live history (#3026) (#3052) 2026-08-17 15:02:18 -07:00
test_cache_ttl_preserved.py fix(cache): preserve cache_control ttl when re-anchoring a breakpoint (#2651) 2026-07-29 09:16:41 -07:00
test_canonical_pipeline.py fix(transforms): gate tool string output from lossy compression (#1307) (#1387) 2026-06-25 13:43:53 -05:00
test_ccr.py fix(ccr): make headroom_retrieve a hash-only full-content lookup (#1532) 2026-06-28 10:32:43 -07:00
test_ccr_batch_processor.py Harden Anthropic prefix cache stability across proxy and batch paths 2026-04-04 13:45:37 -05:00
test_ccr_batch_store.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_ccr_buffered_stream_signed_thinking.py fix(proxy): scope the signed-thinking lock to blocks that actually changed (#3124) 2026-08-19 00:17:01 -07:00
test_ccr_context_tracker.py fix(ccr): skip compact summaries for proactive expansion (#2242) 2026-07-15 19:57:46 +00:00
test_ccr_feedback.py fix(cache/ccr): don't count a successful eviction as a retrieval (#2106) 2026-07-13 10:53:55 -04:00
test_ccr_golden_policy.py refactor(proxy): extract ccr golden replay policy (#2006) 2026-07-12 11:49:12 -04:00
test_ccr_inline_resolve_handlers.py fix(ccr): resolve <<ccr:...>> markers inline when no retrieve-tool path exists (#2512) 2026-08-12 00:18:43 -05:00
test_ccr_marker_policy.py fix(proxy): stop toggling headroom_retrieve in the Anthropic tools array (#2672) 2026-08-03 16:18:11 -07:00
test_ccr_marker_resolution.py fix(ccr): resolve <<ccr:...>> markers inline when no retrieve-tool path exists (#2512) 2026-08-12 00:18:43 -05:00
test_ccr_mcp_http.py feat(mcp): add streamable HTTP MCP transport (#1773) 2026-07-14 13:25:45 -04:00
test_ccr_mcp_server.py fix(mcp): reap orphaned mcp serve on client death (#2226) 2026-07-15 18:57:32 +00:00
test_ccr_response_handler.py fix(ccr): guard empty/malformed OpenAI choices in _extract_assistant_message (#2389) 2026-07-18 16:47:59 -07:00
test_ccr_response_handler_extra.py fix(ccr): make StreamingCCRHandler work on OpenAI streams (#3069) 2026-08-17 20:55:02 -07:00
test_ccr_response_handler_openai_responses.py feat(ccr): wire retrieve-tool interception into OpenAI Responses handler (#1898) 2026-07-09 09:41:06 -04:00
test_ccr_retrieve_history_repair.py fix(proxy/anthropic): repair headroom_retrieve history references the tools array cannot support (#2876) 2026-08-13 15:05:07 -05:00
test_ccr_row_drop_store_bridge.py feat(compress): reach the lossless provider seam on the general path and default /v1/compress to marker-free output (#2691) 2026-07-31 12:31:38 -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_session_tracker.py refactor(proxy): extract ccr session tracker (#2003) 2026-07-11 10:17:53 -05:00
test_ccr_sqlite_backend.py fix(ccr): honor workspace dir for sqlite store (#1564) 2026-07-01 20:25:14 -05:00
test_ccr_tag_placeholder_regression.py fix(transforms): stop compression garbling mixed subagent output (#3286) 2026-08-27 13:22:26 +05:30
test_ccr_tool_always_on.py fix(ccr): re-inject headroom_retrieve when history references it on the sessionless path (#2440) (#2533) 2026-08-13 11:45:51 -05:00
test_ccr_tool_calls.py fix(ccr): don't crash tool-call detection on a null function/functionCall (#2269) 2026-07-16 14:38:09 -07:00
test_ccr_tool_injection.py fix(ccr): verify a scanned marker's hash before advertising it (#2908) 2026-08-13 11:46:21 -05:00
test_claude_session_branch_compare.py Harden anthropic cache-mode replay stability 2026-04-05 16:11:39 -05:00
test_claude_session_mode_benchmark.py fix(tokenizers): price Claude against a real BPE (tiktoken o200k) not a char estimate (#2543) 2026-07-24 15:06:43 -07:00
test_cli_dashboard.py feat(cli): add headroom dashboard and surface the dashboard URL (#1277) (#1292) 2026-06-22 19:05:38 -05:00
test_cli_doctor.py fix(codex): detect ChatGPT auth from id_token claims so wrap/init emit requires_openai_auth (#3212) 2026-08-22 15:29:54 -07:00
test_cli_extension_seam.py feat(cli,pricing): add CLI extension seam and prompt-cache TTL pricing (#2802) 2026-08-05 12:24:49 -07:00
test_cli_inspect.py feat(cli): add headroom inspect to view original vs compressed content (#1595) 2026-07-15 19:58:38 +00:00
test_cli_learn.py fix(learn): surface Codex analysis failures (#3016) 2026-08-25 21:40:12 -05:00
test_cli_memory_index_sync.py fix(memory): sync FTS5 and vector indexes on CLI delete/edit/prune/purge 2026-08-11 14:25:36 -07:00
test_cli_perf_format.py perf(perf): skip rotated logs outside the requested window (#3081) 2026-08-17 20:20:56 -07:00
test_cli_proxy_embedding_server.py fix(cli): fall back gracefully when embedding-server sidecar is absent (#1206) 2026-06-23 07:47:51 -05:00
test_cli_proxy_env.py fix(proxy): dedupe Codex WS request logging for accurate mixed-provider dashboards (#2189) 2026-07-15 18:18:34 +00:00
test_cli_proxy_improvements.py fix(wrap): verify proxy deps before mutating Codex config (#1628) 2026-08-13 11:52:22 -05:00
test_cli_proxy_malloc_reexec_guard.py fix(cli): stop the macOS malloc re-exec replacing an embedder's process (#3064) 2026-08-16 17:56:10 -07:00
test_cli_tools.py test: apply linux ruff formatting 2026-04-23 08:49:50 -05:00
test_cli_update.py fix(cli/update): let install ownership win over bare /.dockerenv so venv installs self-update (#2830) 2026-08-11 17:23:29 -05:00
test_code_aware_brace_comment_regressions.py fix(code): stop TS export duplication + comment displacement (#1906) 2026-07-09 12:51:32 -05:00
test_code_aware_regressions.py fix: correct Go AST compression bugs and CODE_AWARE token accounting (#1668) 2026-07-07 11:36:49 -05:00
test_code_compressor_language_alias.py feat(code): add PHP support to CodeAwareCompressor (#2423) 2026-07-31 15:54:13 -07: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_client_stamp.py fix(proxy): stamp X-Client: codex on Responses endpoint for unidentified callers (#1036) 2026-06-17 11:45:20 -05:00
test_codex_live.py fix(proxy): route Codex Live voice through a dedicated /v1/live transport (#2709) 2026-08-02 13:15:47 -07: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_passthrough_bytes.py Wire OpenAI Responses output shaping (#1438) 2026-07-05 13:59:21 -07: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 fix(ci): prevent native detector from hanging test shards (#2996) 2026-08-13 20:47:55 -05:00
test_codex_ws_per_frame_memory.py fix(codex): rerun memory lookup on every response.create WS frame (#2113) 2026-07-13 14:42:27 -04:00
test_codex_ws_savings_deferral.py fix(proxy/openai): don't record Codex WS savings without input accounting (#2493) 2026-07-22 06:06:30 -07:00
test_cold_prefix.py fix: skip cross-turn dedup pointers on OpenAI chat streaming (#3191) 2026-08-21 15:51:05 -07:00
test_cold_start_fast_pass.py fix(cache): stable session identity and per-conversation prefix trackers under agentic clients (#2193) 2026-07-15 18:42:20 +00: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 feat(compress): expose frozen_message_count in library-mode compress() (#2178) 2026-07-14 16:07:21 -04:00
test_compress_failure.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_compress_passthrough.py feat(proxy): opt-in compression for catch-all passthrough routes (#1699) 2026-07-15 19:58:34 +00:00
test_compress_route_tokenizer_by_model.py fix(compress): resolve the /v1/compress tokenizer per model, and document the real contract (#2743) 2026-08-03 12:20:33 -07:00
test_compress_session_mode.py feat(proxy): unify proxy and sidecar compression on one session engine (#3271) 2026-08-26 15:57:31 +05:30
test_compression_batches.py fix(proxy): batch small Codex Responses tool outputs (#2239) 2026-07-15 19:57:50 +00:00
test_compression_cache.py fix(cache): bound compression cache bookkeeping 2026-08-11 09:52:27 -07:00
test_compression_cache_registry.py feat(proxy): unify proxy and sidecar compression on one session engine (#3271) 2026-08-26 15:57:31 +05:30
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_fidelity_regression.py test(evals): add offline fidelity regression gate (recall-based, zero-model) (#1187) 2026-06-22 22:53:59 -05:00
test_compression_observability.py feat(metrics): record per-extension token savings (#2371) 2026-07-17 21:58:18 -07:00
test_compression_policy.py fix(policy): price net-cost mutations with the 1h cache-write tier (#2780) 2026-08-16 15:09:50 -07: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(cache/ccr): don't evict a live entry on a duplicate store at capacity (#2082) 2026-07-13 09:46:24 -04:00
test_compression_strategy_outcomes.py refactor(cache): isolate compression strategy outcomes (#1938) 2026-07-10 19:21:47 -05:00
test_compression_summary.py Add compression summaries, multi-provider headers, Dockerfile fix 2026-02-18 16:54:20 -08:00
test_compression_summary_eval.py Add compression summaries, multi-provider headers, Dockerfile fix 2026-02-18 16:54:20 -08:00
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 fix(proxy): batch small Codex Responses tool outputs (#2239) 2026-07-15 19:57:50 +00:00
test_compressor_config_exposure.py feat: compression extraction — Rust knob exposure, CCR hardening, traffic audits (#818) 2026-06-16 20:21:13 -07:00
test_compressor_registry.py feat(transforms): add pluggable compressor registry + headroom.compressor entry point (#2370) 2026-07-17 21:55:16 -07:00
test_compressor_selection.py feat(transforms): make built-in compressors real Compressor implementations (adapters) (#2391) 2026-07-18 12:59:49 -07:00
test_config.py feat: attribute reread waste to over-compression via marker check (#901) 2026-06-13 10:43:35 -05:00
test_content_router_compact_json.py fix(router): compact JSON evades compression via whitespace token counting (#1857) 2026-07-14 06:54:01 -04:00
test_content_router_detection_dedup.py perf(content_router): dedupe content detection (#2419) 2026-07-19 08:50:46 -07:00
test_content_router_exclude_tools.py fix(content-router): protect_tool_results must not be weakened by profile-derived read_protection_window (#2105) 2026-07-13 14:01:18 -04:00
test_content_router_single_item_deadline.py fix(transforms): stop compression garbling mixed subagent output (#3286) 2026-08-27 13:22:26 +05:30
test_content_router_token_units.py fix(router): compare token quantities in one unit (#2759) 2026-08-03 22:49:47 -07:00
test_content_router_tool_role_reversibility.py fix(transforms): gate tool string output from lossy compression (#1307) (#1387) 2026-06-25 13:43:53 -05:00
test_content_router_user_blocks.py fix(proxy): compress Anthropic user text blocks when enabled (#1875) 2026-07-08 14:24:15 -07:00
test_context_tool_cleanup.py fix(install): consolidate Windows fallback and cleanup safety (#2980) 2026-08-13 15:05:45 -05:00
test_copilot_auth.py fix(copilot): honor corporate TLS for token refresh (#3246) 2026-08-25 21:37:12 -05:00
test_copilot_integration_id_hmac.py fix(copilot): bind the minted token to the integration ID we forward (#3164) 2026-08-20 22:11:42 -07: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_native_mode.py fix(copilot): preserve native enterprise model routing (#2998) 2026-08-25 21:46:31 -05:00
test_copilot_provider_label.py feat(proxy): label GitHub Copilot traffic as "copilot" in the outcome… (#2377) 2026-07-18 09:54:06 -07:00
test_copilot_quota.py fix(subscription/copilot): preserve remaining=0 for exhausted quota (#1997) 2026-07-12 18:48:22 -04:00
test_copilot_subscription_smoke.py fix: support Copilot Business subscription auth (#641) 2026-06-12 20:46:38 -05:00
test_copilot_vscode_completions_routing.py fix(copilot): bind the minted token to the integration ID we forward (#3164) 2026-08-20 22:11:42 -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_cortex_code_compression.py feat(providers): add Cortex Code (Snowflake CoCo) as a supported agent (#1190) 2026-06-21 22:18:47 -07:00
test_cost_budget_basis.py fix(proxy/cost): mark estimated-basis budget records and add an enforcement policy (#2713) (#2725) 2026-08-02 23:05:44 -07:00
test_cost_budget_total_prompt.py fix(cost): send litellm the total prompt so --budget stops seeing $0 (#2757) 2026-08-03 22:41:10 -07:00
test_cost_pricing_warning_dedup.py fix(proxy/cost): warn once per model when pricing lookup fails (#2504) (#2535) 2026-07-24 09:47:09 -07:00
test_cost_tracker_counterfactual.py fix(proxy): keep OpenAI tool observations mutable in cache mode (#1884) 2026-07-09 07:51:01 -07:00
test_cost_tracker_totals.py perf: cut hot-path latency 27% (token-count memo, startup preloads, JSON scan memo) (#2838) 2026-08-06 17:47:40 -07:00
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(ccr): make headroom_retrieve a hash-only full-content lookup (#1532) 2026-06-28 10:32:43 -07:00
test_cross_turn_cache_safety.py fix(proxy): freeze must forward cached (compressed) prefix byte-identical — stop token-mode cache busting (#1850) 2026-07-06 14:54:39 -07:00
test_cross_turn_dedup.py fix: skip cross-turn dedup pointers on OpenAI chat streaming (#3191) 2026-08-21 15:51:05 -07:00
test_custom_base_passthrough_telemetry.py fix(security): address u9up assessment findings (WEB-01–07) (#2207) 2026-08-20 09:02:44 -05:00
test_dashboard_agent_usage.py feat: add dashboard agent usage stats (#814) 2026-06-12 14:12:22 -05:00
test_dashboard_cache_lifetime_playwright.py fix: publish headroom-opencode in release workflow (#2372) 2026-08-11 23:56:40 -05:00
test_dashboard_cache_net_playwright.py fix(dashboard): serve tailwind/htmx/alpine locally instead of from CDNs (#2734) 2026-08-03 06:07:27 -07:00
test_dashboard_cache_ttl_playwright.py fix: publish headroom-opencode in release workflow (#2372) 2026-08-11 23:56:40 -05:00
test_dashboard_static_assets.py fix(dashboard): serve tailwind/htmx/alpine locally instead of from CDNs (#2734) 2026-08-03 06:07:27 -07:00
test_dashboard_static_mime_types.py fix(dashboard): pin MIME types for the vendored static assets (#3193) 2026-08-21 22:28:26 -07:00
test_dashboard_token_savings.py fix(dashboard): align token savings headline denominator (#1653) 2026-07-01 23:31:32 -05:00
test_dataset_recall_runner.py feat(evals): weekly HotpotQA answer-recall report on the prose path (#1188) 2026-07-15 21:40:55 +00:00
test_debug_dump_gating.py feat(security): pilot hardening — stateless guarantee, model pinning, CI security gate (#1515) 2026-06-27 17:44:10 -07:00
test_diagnostic_decode_policy.py Extract diagnostic decode policy (#1981) 2026-07-12 12:17:39 -04:00
test_docker_compose_persistence.py fix(docker): publish compose ports on loopback only (#3061) 2026-08-16 19:05:29 -07:00
test_error_detection.py fix(router): stop protecting passing build/test output as error traces (#1740) 2026-07-14 13:25:49 -04:00
test_evals_cjk_tokenization.py fix(evals): CJK-aware F1 tokenization + token estimation (#1527) 2026-06-30 14:27:25 -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_evals_multilingual.py feat(evals): register multilingual multi-wiki-qa (zh/ja/ko) dataset (#1530) 2026-07-14 13:25:10 -04:00
test_exceptions.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_extension_attribution.py feat(proxy): let extensions report cost savings and their own latency (#3051) 2026-08-16 10:25:47 -07:00
test_force_kompress_all.py feat(proxy): add --force-kompress-all to route all content through kompress-v2-base (#1613) 2026-06-30 15:30:22 -07:00
test_forwarded_headers.py feat(dashboard): persist lifetime proxy metrics (#2198) 2026-07-15 18:18:13 +00:00
test_forwarded_policy.py refactor(proxy): isolate forwarded header policy (#1942) 2026-07-10 17:41:38 -05:00
test_fsutil.py fix: remove rtk and lean-ctx CLI context tools (#2677) 2026-07-30 22:59:41 -07:00
test_garbled_compression_fixes.py fix(transforms): stop compression garbling mixed subagent output (#3286) 2026-08-27 13:22:26 +05:30
test_gateway_sidecar_ports.py feat(proxy): make /v1/compress usable as a gateway/Kong sidecar (#2458) 2026-07-21 00:27:52 -07:00
test_gemini_ccr_continuation_usage.py fix(cli): stop the macOS malloc re-exec replacing an embedder's process (#3064) 2026-08-16 17:56:10 -07:00
test_gemini_compression_offload.py fix(gemini): offload compression to the executor (#1382) 2026-06-26 12:25:15 -05:00
test_gemini_function_response_waste.py fix(proxy/gemini): tolerate malformed parts on the compression path (#2486) 2026-07-22 06:07:15 -07:00
test_gemini_nonjson_status.py feat(proxy): let extensions report cost savings and their own latency (#3051) 2026-08-16 10:25:47 -07:00
test_google_multimodal.py fix(proxy/gemini): preserve non-text content across the compression round-trip (#2079) 2026-07-13 09:46:35 -04:00
test_google_multimodal_e2e.py Add E2E tests for Google multimodal content preservation 2026-01-24 21:01:25 -08:00
test_graceful_shutdown.py test: repair three suite failures that are red on main (#3196) 2026-08-21 23:18:40 -07:00
test_graph.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_h2_stream_reset_retry.py fix(proxy): return 502, not 200, when upstream connect retries are exhausted (#3083) 2026-08-20 06:32:30 -07: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(security): address u9up assessment findings (WEB-01–07) (#2207) 2026-08-20 09:02:44 -05:00
test_hermes_passthrough_compression.py fix(proxy): compress Hermes scoped coding-agent passthrough (#1815) 2026-07-13 17:22:46 -05:00
test_hermes_tool_call_unwrap.py fix(proxy): unwrap Hermes tool_call bridge in tool name map (#2717) 2026-08-04 22:16:46 -05:00
test_hf_revision_pinning.py feat(security): pilot hardening — stateless guarantee, model pinning, CI security gate (#1515) 2026-06-27 17:44:10 -07:00
test_hnsw_only.py Add bounded memory support to HNSWVectorIndex with LRU eviction 2026-02-01 21:12:06 -08:00
test_hooks.py Add Compression Hooks — extension points for SaaS and advanced customization 2026-02-19 08:17:30 -08:00
test_huggingface_tokenizer_timeout.py fix(proxy): accept Codex websocket before upstream retries (#2203) 2026-07-15 18:18:06 +00:00
test_identity_resolution.py fix(security): address u9up assessment findings (WEB-01–07) (#2207) 2026-08-20 09:02:44 -05:00
test_image_compression.py Skip image tests when Pillow not installed (CI fix) 2026-04-09 16:24:15 -07:00
test_image_compression_decision.py refactor(proxy): MemoryRanker + ImageCompressionDecision + branch-aware version-sync 2026-05-19 12:13:09 -05:00
test_image_compression_isolation.py fix(proxy): isolate image compression in a subprocess so a native SIGSEGV can't take down the proxy (#2107) (#2162) 2026-07-14 11:52:20 -04:00
test_image_compression_offload.py fix(proxy): isolate image compression in a subprocess so a native SIGSEGV can't take down the proxy (#2107) (#2162) 2026-07-14 11:52:20 -04:00
test_image_compression_policy.py refactor(proxy): isolate image compression policy (#1958) 2026-07-11 10:25:15 -05:00
test_image_compressor.py fix: release image router models after compression 2026-04-29 01:45:27 -04:00
test_image_compressor_singleton_reuse.py fix(image): reuse image models instead of rebuilding them per request (#2513) (#2536) 2026-07-26 07:33:47 -07: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_image_types_torch_decoupling.py fix(image): decouple routing types from trained_router so importing the compressor doesn't import torch (#2513) (#2537) 2026-08-12 00:22:56 -05:00
test_internal_header_policy.py refactor(proxy): extract internal header policy (#1990) 2026-07-11 21:55:50 -05:00
test_issue_728_empty_tools_injection.py fix(proxy): keep PRE_SEND from reintroducing empty tool arrays (#2015) 2026-07-10 22:38:27 -05:00
test_issue_746_tool_search.py fix(proxy): keep prefixed core tools resident (#3046) 2026-08-15 14:10:44 -07:00
test_issue_1601_remote_control_gate.py fix(wrap): surface Claude Remote Control base-URL gate accurately (#1… (#1883) 2026-07-13 14:01:37 -04:00
test_issue_1779_remote_control_gate.py fix(claude): reject conflicting auth before proxy startup (#2993) 2026-08-13 23:01:59 -05:00
test_issue_2671_block_growth_cache.py fix(proxy/anthropic): don't replay recorded prefix over live history (#3026) (#3052) 2026-08-17 15:02:18 -07:00
test_kompress_download_backoff.py perf: cut hot-path latency 27% (token-count memo, startup preloads, JSON scan memo) (#2838) 2026-08-06 17:47:40 -07:00
test_kompress_failsafe.py fix(transforms): stop compression garbling mixed subagent output (#3286) 2026-08-27 13:22:26 +05:30
test_kompress_must_keep.py fix(transforms): stop compression garbling mixed subagent output (#3286) 2026-08-27 13:22:26 +05:30
test_kompress_preload_deferral.py fix(kompress): reject artifacts that fail at run, and prefetch model files at startup (#2740) 2026-08-03 10:42:48 -07:00
test_kompress_remote_endpoint.py fix(kompress): let orgs run Kompress on their own inference stack (#2736) 2026-08-03 07:26:06 -07:00
test_kompress_request_nonblocking.py fix(transforms): stop compression garbling mixed subagent output (#3286) 2026-08-27 13:22:26 +05:30
test_learn_grok_plugin.py fix(learn/grok): detect a Windows absolute project path (#2283) 2026-08-11 23:45:13 -05:00
test_litellm_callback.py test(litellm): remove unused pytest import 2026-07-09 20:59:12 -05:00
test_litellm_caller_key.py fix(litellm): don't forward a caller key the target cannot accept (#2883) 2026-08-09 20:12:41 -07:00
test_litellm_nonstream_cache_usage.py fix(backends): don't crash the OpenAI->Anthropic converter on empty choices (#2484) 2026-07-22 06:08:10 -07:00
test_litellm_openai_passthrough.py fix(litellm): forward chat_template_kwargs and other vendor top-level fields to OpenAI-compatible backends via extra_body (#2128) (#2163) 2026-07-14 12:00:19 -04:00
test_litellm_optional.py fix(deps): make litellm optional on Python 3.14 (#956) (#993) 2026-06-16 21:11:12 -05:00
test_litellm_upstream_timeout.py perf(proxy): bound upstream calls and hot-path costs (#2852) 2026-08-09 16:24:33 -07:00
test_local_backend_init_race.py fix(memory): singleflight LocalBackend init to stop cold-start races (#1691) 2026-07-02 16:00:55 -07:00
test_log_compressor.py fix: improve error handling and add comprehensive test coverage 2026-01-27 16:08:36 -08:00
test_loop_callback_failure_policy.py Extract loop callback failure policy (#1977) 2026-07-11 10:27:00 -05:00
test_lossless_diff_fold_guard.py fix(transforms): guard the lossless diff fold to diff-shaped content only (#2140) 2026-07-13 23:39:33 -04:00
test_lossless_excluded_compaction.py feat(transforms): pluggable lossless-compaction provider seam (#2433) 2026-07-20 10:44:42 -07:00
test_lossless_first_dispatch.py feat(compress): reach the lossless provider seam on the general path and default /v1/compress to marker-free output (#2691) 2026-07-31 12:31:38 -07:00
test_lossless_mode.py fix(content-router): token-measure lossless folds at the acceptance gate (#1772) 2026-07-03 15:04:07 -07:00
test_lossless_then_lossy.py fix(router): compact JSON evades compression via whitespace token counting (#1857) 2026-07-14 06:54:01 -04:00
test_malloc_tuning.py fix(cli): stop the macOS malloc re-exec replacing an embedder's process (#3064) 2026-08-16 17:56:10 -07:00
test_mcp_dependency_contract.py fix(mcp): restore SDK v1 compatibility cap (#2978) 2026-08-13 12:35:03 -05:00
test_mcp_registry_grok.py feat(wrap): add first-class Grok CLI support (#1823) 2026-07-15 18:51:38 +00:00
test_mcp_registry_opencode.py fix(opencode): use type=local + environment field for MCP config (#1380) (#1388) 2026-07-15 20:36:14 +00:00
test_mcp_stub.py fix(codex): stop pinning Codex memory MCP to one project db (#1269) 2026-06-23 07:49:07 -05:00
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 fix(ccr): skip Anthropic marker emission when tool injection is deferred (#1273) 2026-06-23 12:48:05 -05:00
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_decision_policy.py refactor(memory): isolate injection decision policy (#1952) 2026-07-10 23:45:44 -05:00
test_memory_eval.py fix(evals): default unparseable judge scores below pass threshold (#1892) 2026-07-08 19:31:25 -07:00
test_memory_golden_policy.py refactor(proxy): extract memory golden replay policy (#2007) 2026-07-12 12:19:46 -04:00
test_memory_handler_concurrent_init.py fix(ccr): skip Anthropic marker emission when tool injection is deferred (#1273) 2026-06-23 12:48:05 -05:00
test_memory_handler_native_ops.py fix(security): address u9up assessment findings (WEB-01–07) (#2207) 2026-08-20 09:02:44 -05:00
test_memory_handler_null_function.py fix(proxy/memory): don't crash memory tool-call detection on a null function (#2272) 2026-07-16 14:37:41 -07: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_injection_logging.py fix(memory): audit passive context injection (#2212) 2026-07-15 18:17:31 +00:00
test_memory_injection_mode_policy.py Extract memory injection mode policy (#1986) 2026-07-12 12:18:23 -04:00
test_memory_integration.py Add centralized ML model configuration 2026-02-01 23:47:42 -08:00
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_query_policy.py fix(memory): skip <system-reminder> blocks when building the retrieval query (#2195) (#2541) 2026-08-12 00:22:08 -05:00
test_memory_rank_policy.py refactor(proxy): isolate memory rank policy (#1960) 2026-07-10 23:51:51 -05:00
test_memory_ranker.py refactor(proxy): isolate memory rank policy (#1960) 2026-07-10 23:51:51 -05:00
test_memory_storage_router.py fix(memory): make explicit-project and user store keys collision-resistant (#2231) 2026-08-11 23:39:15 -05:00
test_memory_sync.py fix(memory/sync): don't clobber memories sharing a first line (#1976) 2026-07-10 11:47:31 -04:00
test_memory_system.py Fix CI: guard starlette imports, asyncio.run(), deprecate datetime.utcnow() 2026-02-19 11:03:24 -08:00
test_memory_tool_adapter_null_fields.py fix(proxy/memory): don't crash the memory tool adapter on a null function/arguments (#2270) 2026-07-16 14:37:27 -07:00
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 Add memory observability system (Phase 1) 2026-02-01 19:49:53 -08:00
test_memory_tracker_integration.py Add wrap commands for Codex/Cursor/Aider with rtk instructions, fix savings metrics 2026-03-13 22:02:47 -07:00
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 fix(memory): don't crash inline memory extraction on a non-object <memory> block (#2470) 2026-08-12 00:12:50 -05:00
test_mid_turn_steering.py fix(proxy): gate mid-turn message coalescing to Claude Code clients (#1643) 2026-08-11 23:36:39 -05:00
test_mixed_content_scan_cache.py perf: cut hot-path latency 27% (token-count memo, startup preloads, JSON scan memo) (#2838) 2026-08-06 17:47:40 -07:00
test_mixed_content_sections.py refactor(transforms): isolate mixed content parsing (#1939) 2026-07-10 19:28:21 -05:00
test_ml_model_registry_lifecycle.py feat: headroom wrap opencode / unwrap opencode CLI (#1105) 2026-06-22 11:07:12 -05:00
test_models.py fix(models): version-boundary longest-prefix match in ModelRegistry.get (#1658) 2026-07-10 23:07:31 -05:00
test_netcost_gate.py fix(policy): price net-cost mutations with the 1h cache-write tier (#2780) 2026-08-16 15:09:50 -07:00
test_netcost_suffix_image_tokens.py fix(router): stop counting an image's base64 payload as suffix tokens (#2778) 2026-08-04 11:31:52 -07:00
test_network_diff_capture.py feat: add differential network capture harness (#761) 2026-06-08 22:18:31 -07:00
test_no_ccr_disables_response_handling.py fix(ccr): make --no-ccr disable server-side response handling too (#3101) 2026-08-18 07:15:55 -07:00
test_no_ccr_lossy.py feat(content-router): lossless-first dispatch, cross-turn dedup, and A7 lossy-after-fold (#1818) 2026-07-06 08:32:06 -07:00
test_nonstream_sse_policy.py fix(proxy/anthropic): stop answering a non-streaming turn with an event stream (#3142) 2026-08-19 20:45:38 -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 Unify savings attribution across stats, perf, metrics, and dashboard (#2976) 2026-08-13 17:13:23 -07:00
test_observability_tracing.py feat(observability): add gen_ai.request.model to the compression span (#1667) 2026-07-11 11:04:54 -05:00
test_observed_wire_shapes.py feat(cache): provider-agnostic cache-mode delta + cc-agnostic prefix comparison (#1868) 2026-07-08 13:29:35 -07:00
test_onnx_dependency_contract.py fix(onnx): enforce Rust API-24 runtime compatibility (#2979) 2026-08-13 15:05:41 -05:00
test_onnx_runtime.py fix(onnx): stop ONNX thread pools from spinning idle cores (#2495) (#2540) 2026-08-08 01:33:57 -05: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_chat_dedup_recoverability.py fix: skip cross-turn dedup pointers on OpenAI chat streaming (#3191) 2026-08-21 15:51:05 -07:00
test_openai_chat_tool_desc_compaction.py fix(proxy/openai): run tool-description compaction on chat-completions (#2741) 2026-08-03 10:52:05 -07:00
test_openai_chat_turn_hooks.py fix(proxy/cost): record each request's savings exactly once (drop 3 double-counts) (#2545) 2026-07-24 20:40:44 -07:00
test_openai_codex_routing.py fix(proxy): complete stateless Responses and buffered CCR lifecycle (#2997) 2026-08-13 21:12:38 -05:00
test_openai_codex_ws_lifecycle.py fix(proxy): preserve Codex WebSocket model attribution (#3029) 2026-08-16 15:04:35 -07:00
test_openai_codex_ws_timings.py fix(proxy): skip Responses memory tools for ChatGPT auth (#1579) 2026-07-15 20:52:01 +00:00
test_openai_max_completion_tokens.py fix(proxy): skip max_tokens rename for backend-routed openai chat (#2401) 2026-07-18 16:47:10 -07:00
test_openai_model_table_resolution.py fix(providers): stop a shorter model family shadowing a longer one (#2762) 2026-08-04 00:34:38 -07:00
test_openai_pricing_resolution.py refactor(pricing): make LiteLLM the source of truth, not the hardcoded table (#2779) 2026-08-04 11:32:26 -07:00
test_openai_response_cache_key.py fix(proxy/openai): cache under looked-up messages (#2420) 2026-07-19 11:45:41 -07:00
test_openai_responses_additional_tools.py fix(proxy/responses): keep the Codex additional_tools carrier on the wire (#3194) 2026-08-21 22:54:03 -07:00
test_openai_responses_buffered_sse.py fix(proxy/openai): replay incremental events in buffered Responses SSE (#2410) (#2415) 2026-07-19 22:18:47 -07:00
test_openai_responses_compression_units.py fix(proxy): preserve content-part array structure in excluded-tool lossless fold write-back (#2261) 2026-07-16 13:51:34 -07:00
test_openai_responses_context_compaction.py fix(proxy): complete stateless Responses and buffered CCR lifecycle (#2997) 2026-08-13 21:12:38 -05:00
test_openai_responses_null_arguments.py fix(proxy/openai): don't crash the Responses memory tool loops on null arguments (#2273) 2026-08-11 23:44:54 -05:00
test_openai_responses_output_shaper.py feat: add deterministic runtime rollout controls (#1490) 2026-08-12 23:16:54 -05:00
test_openai_responses_read_protection.py fix(proxy): protect file reads from lossy compression on the Responses API path (Copilot view + HEADROOM_PROTECT_READS) (#3238) 2026-08-24 19:03:03 +08:00
test_openai_responses_t3_replay_regression.py Rename tool output compression parallelism env 2026-06-04 14:54:21 +10:00
test_openai_responses_traffic_learner.py fix(proxy/openai): feed Codex WS traffic into the traffic learner (#2334) 2026-08-11 23:54:41 -05:00
test_openai_streaming_backend.py fix(proxy): skip max_tokens rename for backend-routed openai chat (#2401) 2026-07-18 16:47:10 -07:00
test_openai_tool_search_deferral.py fix(proxy): keep prefixed core tools resident (#3046) 2026-08-15 14:10:44 -07:00
test_optional_dependencies.py fix(install): add orjson to [proxy] extra for LiteLLM provider backends (#2074) 2026-07-13 09:37:28 -04:00
test_org_scale_limits.py feat(compress): session-aware /v1/compress (sidecar mode) + /v1/usage relay (#3270) 2026-08-26 15:34:23 +05:30
test_outcome_dual_ruler_funnel.py fix(telemetry): stop mixing tokenizer scales in RequestOutcome, and fix the overhead framing (#2756) 2026-08-04 13:02:47 -07:00
test_outcome_records_5xx_as_failed.py fix(proxy): count exhausted upstream 5xx as failed across all providers (#1571) 2026-07-09 17:07:08 -05:00
test_outcome_token_scale.py fix(telemetry): stop mixing tokenizer scales in RequestOutcome, and fix the overhead framing (#2756) 2026-08-04 13:02:47 -07:00
test_output_effort_policy.py refactor(proxy): isolate output effort policy (#1961) 2026-07-10 23:53:00 -05:00
test_output_only_request_blocks.py fix: strip output-only fallback blocks from request messages (#1870) 2026-07-13 14:01:48 -04:00
test_output_savings.py fix(proxy): make output-savings flush atomic and keep it off the event loop (#3231) 2026-08-23 22:43:58 -07:00
test_output_savings_cli.py feat: output-token reduction — verbosity shaper, per-user learning, counterfactual savings (#965) 2026-06-16 21:06:43 -07:00
test_output_savings_policy.py refactor(output): isolate savings policy (#1947) 2026-07-10 23:42:11 -05:00
test_output_shaper.py fix(proxy/openai): apply output shaping on /v1/chat/completions (#2328) 2026-07-17 16:16:29 -07:00
test_output_shaper_responses.py fix: replace computer_call_output with apply_patch_call_output in output_shaper (#2250) 2026-07-15 21:33:25 +00:00
test_output_shaping_rollup.py feat(stats): per-bucket output-shaping savings in /stats-history (#1819) 2026-07-15 19:58:24 +00:00
test_output_steering.py fix(proxy/output-shaping): tolerate a non-string system block text in steering (#2435) 2026-07-22 06:16:20 -07:00
test_output_turn_policy.py refactor(proxy): isolate output turn policy (#1962) 2026-07-11 21:33:48 -05:00
test_output_verbosity_policy.py refactor(proxy): isolate output verbosity policy (#1963) 2026-07-12 21:35:09 -07:00
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(version): mark source-checkout builds as -dev (#2072) 2026-07-13 09:38:17 -04:00
test_parser.py fix(agno): tolerate streaming tool-call SDK objects in parser (#1312) (#1336) 2026-06-24 09:52:15 -05:00
test_paths.py fix: remove rtk and lean-ctx CLI context tools (#2677) 2026-07-30 22:59:41 -07:00
test_paths_backward_compat.py fix(wrap): track shared proxy clients with markers (#877) 2026-06-11 19:42:43 -05:00
test_per_model_tool_savings.py fix(metrics): attribute tool-schema savings per model, not just compression (#3155) 2026-08-20 11:54:02 -07:00
test_perl_scanner_safety.py fix(code): quarantine Perl parser from code-aware compression (#2204) 2026-07-14 20:18:51 -07:00
test_persistent_metrics.py feat(dashboard): persist lifetime proxy metrics (#2198) 2026-07-15 18:18:13 +00:00
test_persistent_metrics_integration.py feat(dashboard): persist lifetime proxy metrics (#2198) 2026-07-15 18:18:13 +00:00
test_persistent_metrics_persistence.py fix(proxy): repair main lint (ruff-format drift + mypy host_header) (#2268) 2026-07-15 23:18:50 -07:00
test_pid_alive.py fix: harden fd lifecycle and SystemError handling in runtime and proxy kill (#1556) 2026-07-16 13:51:03 -07:00
test_pipeline.py test: apply linux ruff formatting 2026-04-23 08:49:50 -05:00
test_platform_feature_matrix.py fix: harden persistent install startup (#1851) 2026-07-10 00:40:34 -04:00
test_platform_stabilization_functional.py fix(proxy): time-cap the compression timeout-debt quarantine (#2360) (#2412) 2026-08-12 00:05:56 -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 fix(ccr): make headroom_retrieve a hash-only full-content lookup (#1532) 2026-06-28 10:32:43 -07: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 feat(pricing): add DeepSeek V4 model pricing (deepseek-v4-flash, deepseek-v4-pro) (#1168) 2026-06-24 09:44:27 -05:00
test_pricing_cache_ttl.py feat(cli,pricing): add CLI extension seam and prompt-cache TTL pricing (#2802) 2026-08-05 12:24:49 -07:00
test_pricing_from_litellm.py refactor(pricing): make LiteLLM the source of truth, not the hardcoded table (#2779) 2026-08-04 11:32:26 -07:00
test_pricing_litellm.py fix(pricing): resolve MiniMax-M3 (provider prefix + pre-registration) (#1186) 2026-06-30 08:36:36 -05:00
test_pricing_litellm_model_resolution.py fix: Vertex model pricing shows $0.00 for versioned model names and vertex:anthropic provider (#2517) 2026-08-11 23:03:09 -05:00
test_probe_recorder.py feat: probe-based retention scoring of recorded compression events (#862) 2026-06-11 13:02:36 -05:00
test_project_name_policy.py Extract project name policy (#1974) 2026-07-11 10:26:20 -05:00
test_project_policy.py refactor(proxy): isolate project attribution policy (#1957) 2026-07-10 23:50:27 -05:00
test_prometheus_label_escaping.py fix(proxy/metrics): escape label values in the Prometheus export (#2463) 2026-08-12 00:11:06 -05:00
test_prometheus_obs_counters.py fix(proxy): return 502, not 200, when upstream connect retries are exhausted (#3083) 2026-08-20 06:32:30 -07: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_claude_vscode_config.py fix(vscode): persist compatible Claude modes and route Copilot CAPI (#2986) 2026-08-13 15:06:41 -05:00
test_provider_cloudcode_runtime.py refactor(providers): split proxy route adapters (#1934) 2026-07-12 16:27:45 -05:00
test_provider_codex_endpoints.py refactor(providers): split proxy route adapters (#1934) 2026-07-12 16:27:45 -05:00
test_provider_codex_headers.py refactor(providers): split proxy route adapters (#1934) 2026-07-12 16:27:45 -05:00
test_provider_codex_images.py refactor(providers): split proxy route adapters (#1934) 2026-07-12 16:27:45 -05:00
test_provider_codex_install.py fix(codex): detect ChatGPT auth from id_token claims so wrap/init emit requires_openai_auth (#3212) 2026-08-22 15:29:54 -07:00
test_provider_codex_model_metadata.py refactor(providers): split proxy route adapters (#1934) 2026-07-12 16:27:45 -05:00
test_provider_codex_responses.py refactor(providers): split proxy route adapters (#1934) 2026-07-12 16:27:45 -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_codex_threads.py fix(codex): discover updated Codex state stores (#1889) 2026-07-08 15:21:21 -07:00
test_provider_copilot_vscode_config.py fix(copilot): send VS Code inline completions to the host that serves them (#3112) 2026-08-18 15:21:22 -07:00
test_provider_copilot_wrap.py fix(wrap): honor Copilot OAuth wire-api override and model default (#2387) 2026-08-12 00:04:42 -05:00
test_provider_cortex_code.py feat(providers): add Cortex Code (Snowflake CoCo) as a supported agent (#1190) 2026-06-21 22:18:47 -07:00
test_provider_counter_content_blocks.py fix(providers): stop pricing modern content blocks at zero (#2760) 2026-08-03 22:40:38 -07: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_display_classification.py feat(proxy): show real upstream provider on dashboard for OpenAI-compatible endpoints (#1594) 2026-07-15 19:09:56 +00:00
test_provider_grok.py fix(grok): preserve business-seat auth while routing only inference (#2514) 2026-07-23 15:43:03 -07:00
test_provider_grok_build.py fix(wrap): set xAI upstream for grok-build proxy (#2772) 2026-08-16 15:04:59 -07:00
test_provider_model_fallback.py fix(providers): don't crash on a non-object HEADROOM_MODEL_LIMITS / models.json (#3089) 2026-08-17 20:18:58 -07:00
test_provider_model_metadata.py refactor(providers): split proxy route adapters (#1934) 2026-07-12 16:27:45 -05:00
test_provider_openai_images.py refactor(providers): split proxy route adapters (#1934) 2026-07-12 16:27:45 -05:00
test_provider_openai_responses.py fix(vscode): persist compatible Claude modes and route Copilot CAPI (#2986) 2026-08-13 15:06:41 -05:00
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 fix(security): validate caller-supplied upstreams on every resolution path (#3195) 2026-08-21 23:16:59 -07:00
test_provider_proxy_targets.py fix(security): validate caller-supplied upstreams on every resolution path (#3195) 2026-08-21 23:16:59 -07:00
test_provider_registry.py fix(providers): route Claude requests to Copilot when the OpenAI target is a Copilot host (#3258) 2026-08-26 22:43:11 +05:30
test_provider_registry_extended.py fix(security): validate caller-supplied upstreams on every resolution path (#3195) 2026-08-21 23:16:59 -07:00
test_provider_route_specs.py fix(vscode): persist compatible Claude modes and route Copilot CAPI (#2986) 2026-08-13 15:06:41 -05:00
test_provider_tokenizer_one_ruler.py fix(providers): give every model exactly one tokenizer (#2761) 2026-08-03 23:46:27 -07:00
test_provider_vertex_runtime.py refactor(providers): split proxy route adapters (#1934) 2026-07-12 16:27:45 -05:00
test_providers_opencode_config.py fix(opencode): keep Claude models off OpenAI provider 2026-08-11 09:46:03 -07:00
test_providers_opencode_install.py fix(opencode): write local MCP config (#1381) 2026-06-26 12:23:54 -05:00
test_providers_opencode_plugin_path.py fix(opencode): ship the transport hook-shim so wheel installs route Node child traffic 2026-08-11 09:10:38 -07:00
test_proxy_anthropic_cache_stability.py fix(ccr): verify a scanned marker's hash before advertising it (#2908) 2026-08-13 11:46:21 -05: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_anthropic_model_sanitization.py fix(proxy): strip 1m model suffix before upstream forwarding (#1840) 2026-07-06 08:33:45 -07:00
test_proxy_batch_integration.py Add multi-provider batch API support with CCR post-processing 2026-01-24 11:41:18 -08:00
test_proxy_byte_faithful_forwarding.py fix(proxy): stop a lone surrogate turning a thinking body into a 500 (#3134) 2026-08-19 13:58:21 -07:00
test_proxy_cache_telemetry.py feat(telemetry): record provider cache read/write/uncached tokens per request (#2450) 2026-07-20 11:02:57 -07:00
test_proxy_cache_ttl_metrics.py fix(proxy/cost): price cache savings by most-used model, not first-seen (#2023) 2026-07-13 09:37:58 -04:00
test_proxy_ccr.py fix(ccr): make headroom_retrieve a hash-only full-content lookup (#1532) 2026-06-28 10:32:43 -07:00
test_proxy_codex_route_aliases.py fix(proxy): stamp X-Client: codex on Responses endpoint for unidentified callers (#1036) 2026-06-17 11:45:20 -05:00
test_proxy_compress_endpoint.py feat(compress): session-aware /v1/compress (sidecar mode) + /v1/usage relay (#3270) 2026-08-26 15:34:23 +05:30
test_proxy_compression_executor.py fix(proxy): quarantine compression while timed-out workers run (#2292) 2026-07-16 14:30:06 -07:00
test_proxy_compression_headers.py fix(proxy): strip inbound Content-Encoding on messages/chat forward (#1970) 2026-07-10 11:45:58 -04:00
test_proxy_config_qdrant_port.py fix(proxy): fail soft on a bad HEADROOM_QDRANT_PORT during config construction (#2141) 2026-07-14 01:42:15 -04:00
test_proxy_config_rate_limit.py fix(proxy): reject rate_limit_requests_per_minute=0 when limiting is enabled (#2142) 2026-07-14 12:14:06 -04:00
test_proxy_copilot_auth_hooks.py fix(proxy): close the upstream stream when a streaming body is never consumed 2026-08-11 18:16:04 -07:00
test_proxy_cors.py fix(proxy): scope CORS to loopback + gate operator/content endpoints (#1226) 2026-06-21 00:50:55 -07:00
test_proxy_count_tokens_integration.py Add multi-provider batch API support with CCR post-processing 2026-01-24 11:41:18 -08:00
test_proxy_dashboard_stats_cache.py fix: remove rtk and lean-ctx CLI context tools (#2677) 2026-07-30 22:59:41 -07:00
test_proxy_debug_endpoints.py chore: release main (#2792) 2026-08-12 19:02:51 -05:00
test_proxy_disable_kompress.py feat: add --disable-kompress-fallback to restore legacy PASSTHROUGH fallback (#1185) 2026-06-22 22:51:55 -05:00
test_proxy_eager_preload_bind.py perf: cut hot-path latency 27% (token-count memo, startup preloads, JSON scan memo) (#2838) 2026-08-06 17:47:40 -07:00
test_proxy_extensions.py fix(proxy): one bad extension no longer aborts proxy startup (#2215) 2026-07-14 22:50:03 -07:00
test_proxy_favicon_route.py fix(proxy): serve /favicon.ico locally instead of tunneling upstream (#1787) (#1847) 2026-07-07 23:36:10 -05:00
test_proxy_gemini_integration.py fix(proxy): relocate stray system-role messages to the top-level system param (#765) (#1357) 2026-08-13 11:52:09 -05:00
test_proxy_gemini_native_integration.py fix(proxy): relocate stray system-role messages to the top-level system param (#765) (#1357) 2026-08-13 11:52:09 -05:00
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(proxy): align signed-thinking wire accounting (#3015) 2026-08-16 20:44:38 -07:00
test_proxy_handlers_batch.py feat(proxy): let extensions report cost savings and their own latency (#3051) 2026-08-16 10:25:47 -07:00
test_proxy_hardening.py feat(proxy): pilot hardening — inbound auth, security headers, audit log, air-gap switch (#1537) 2026-06-28 12:09:00 -07:00
test_proxy_health.py fix(health): label kompress as degraded/optional when not yet loaded (#2865) 2026-08-11 23:35:28 -05:00
test_proxy_healthchecks.py fix(docker): report source build version (#1862) 2026-07-08 13:32:04 -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_loop_exception_health.py fix(proxy): surface codex websocket loop failures in livez (#1727) 2026-07-03 13:33:55 -07:00
test_proxy_loopback_gating.py fix(proxy): guard feedback endpoints and add CSRF checks to loopback writes (#3060) 2026-08-16 18:23:27 -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 Rebrand proxy modes to token/cache and harden cache-mode stability 2026-04-04 14:32:07 -05:00
test_proxy_mode_policy.py refactor(proxy): isolate proxy mode policy (#1965) 2026-07-11 00:00:03 -05:00
test_proxy_modes.py Harden cache-mode immutability for OpenAI and fix stats mode reporting 2026-04-04 14:36:29 -05:00
test_proxy_openai.py Unify savings attribution across stats, perf, metrics, and dashboard (#2976) 2026-08-13 17:13:23 -07:00
test_proxy_openai_cache_key_integration.py fix(proxy): include system/tools/sampling in cache key (#1473) 2026-06-30 16:29:20 -05:00
test_proxy_openai_cache_stability.py fix(proxy/anthropic): don't replay recorded prefix over live history (#3026) (#3052) 2026-08-17 15:02:18 -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: remove rtk and lean-ctx CLI context tools (#2677) 2026-07-30 22:59:41 -07:00
test_proxy_openai_responses_stream_ccr.py fix(proxy): preserve chatgpt responses streaming (#2012) 2026-07-11 00:10:02 -05: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.py refactor(providers): split proxy route adapters (#1934) 2026-07-12 16:27:45 -05:00
test_proxy_passthrough_integration.py fix(proxy): allow HEAD method on catch-all passthrough route (#2035) 2026-07-12 13:54:58 -04:00
test_proxy_passthrough_transient_retry.py fix(proxy): retry passthrough on transient upstream connection close (#1513) 2026-07-06 18:35:39 -05:00
test_proxy_per_provider_kompress.py feat(proxy): per-provider Kompress enable/disable (#1119) 2026-06-22 15:07:10 -05:00
test_proxy_pipeline_lifecycle.py fix(proxy): cancel retry backoff on shutdown (#1834) 2026-07-06 06:24:47 -07:00
test_proxy_project_savings.py test: align savings schema assertions 2026-07-15 15:15:24 -05:00
test_proxy_request_scope.py refactor(providers): split proxy route adapters (#1934) 2026-07-12 16:27:45 -05:00
test_proxy_response_cache_replay.py fix(ccr): only buffer a stream when a marker is actually redeemable (#3092) 2026-08-17 11:19:26 -07:00
test_proxy_retry_429.py fix(proxy): cancel retry backoff on shutdown (#1834) 2026-07-06 06:24:47 -07:00
test_proxy_savings_history.py feat(code): add PHP support to CodeAwareCompressor (#2423) 2026-07-31 15:54:13 -07:00
test_proxy_scalability.py feat: add deterministic runtime rollout controls (#1490) 2026-08-12 23:16:54 -05:00
test_proxy_semantic_cache_key.py fix(proxy/cache): strip cache_control from messages in the semantic cache key (#3086) 2026-08-17 20:21:17 -07:00
test_proxy_semantic_cache_key_integration.py fix(proxy): include system/tools/sampling in cache key (#1473) 2026-06-30 16:29:20 -05:00
test_proxy_semantic_cache_key_policy.py fix(proxy/cache): strip cache_control from messages in the semantic cache key (#3086) 2026-08-17 20:21:17 -07:00
test_proxy_settings_endpoints.py fix(settings): accept documented HEADROOM_* env names as settings keys (#2833) 2026-08-11 17:22:27 -05:00
test_proxy_stats_recent_requests.py Unify savings attribution across stats, perf, metrics, and dashboard (#2976) 2026-08-13 17:13:23 -07:00
test_proxy_streaming_ratelimit_headers.py fix(proxy): close the upstream stream when a streaming body is never consumed 2026-08-11 18:16:04 -07:00
test_proxy_streaming_request_logger.py fix(stats): tag streamed output token source (#2214) 2026-07-15 18:17:24 +00: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 fix(proxy): cancel periodic TOIN task on shutdown 2026-08-11 09:49:07 -07:00
test_proxy_warmup.py fix: align docs and prune dead compatibility surfaces 2026-05-09 14:07:59 -07:00
test_python_forwarder_mode_policy.py Extract Python forwarder mode policy (#1987) 2026-07-11 00:06:37 -05:00
test_quality_retention.py feat(rust): SmartCrusher PR4 — lossless-first default + CCR-Dropped restoration 2026-04-27 16:30:22 -07:00
test_query_log_policy.py Extract query log policy (#1984) 2026-07-12 12:18:01 -04:00
test_quota_registry.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_rate_limit_policy.py refactor(proxy): isolate rate limit policy (#1954) 2026-07-10 23:47:33 -05:00
test_read_maturation.py feat(read-maturation): activity-based hold-back Read maturation (Mechanism B) (#1068) 2026-06-22 22:52:42 -05:00
test_read_maturation_handler_nobust.py feat: add deterministic runtime rollout controls (#1490) 2026-08-12 23:16:54 -05:00
test_realignment_live_multi_turn.py fix(proxy): relocate stray system-role messages to the top-level system param (#765) (#1357) 2026-08-13 11:52:09 -05:00
test_recursive_json.py feat(router): route embedded & nested JSON through the compressor dispatch (#2623) 2026-07-27 20:52:18 -07:00
test_release_version.py fix(windows): pin UTF-8 encoding on text-mode subprocess calls (#1311) 2026-06-23 12:52:49 -05:00
test_release_workflows.py test: repair three suite failures that are red on main (#3196) 2026-08-21 23:18:40 -07: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_relevance_split.py feat(content-router): lossless-first dispatch, cross-turn dedup, and A7 lossy-after-fold (#1818) 2026-07-06 08:32:06 -07:00
test_remote_kompress_dropin.py fix(transforms): stop compression garbling mixed subagent output (#3286) 2026-08-27 13:22:26 +05:30
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_limit_policy.py Extract request limit policy (#1982) 2026-07-10 23:55:11 -05:00
test_request_log_redaction_policy.py Extract request log redaction policy (#1968) 2026-07-10 06:43:04 -07:00
test_request_outcome.py fix(metrics): attribute tool-schema savings per model, not just compression (#3155) 2026-08-20 11:54:02 -07:00
test_request_scope_no_fastapi.py fix(proxy): allow request_scope import without fastapi (#2562) 2026-07-25 14:17:40 -07:00
test_reread_attribution.py feat: attribute reread waste to over-compression via marker check (#901) 2026-06-13 10:43:35 -05:00
test_responses_cross_turn_dedup.py fix(proxy): protect WebSearch/WebFetch tool results from lossy compression (#2115) 2026-07-14 11:52:26 -04: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_retry_preserve_upstream_status.py fix(proxy): preserve upstream 5xx status on retry exhaustion (#1570) 2026-07-09 17:07:26 -05:00
test_rollout.py feat: add deterministic runtime rollout controls (#1490) 2026-08-12 23:16:54 -05:00
test_route_advice.py Per-request backend selection for routing extensions (#2809) 2026-08-05 17:01:32 -07:00
test_router_external_dispatch.py feat(proxy): route selected external compressors through the content router (#2388) 2026-07-18 10:02:10 -07:00
test_router_registry_dispatch.py fix(router): compare token quantities in one unit (#2759) 2026-08-03 22:49:47 -07:00
test_router_registry_smartcrusher.py feat(transforms): dispatch kompress/text via the compressor registry + forward question (#2411) 2026-07-18 22:03:53 -07:00
test_runtime_env.py feat: add deterministic runtime rollout controls (#1490) 2026-08-12 23:16:54 -05:00
test_rust_core_smoke.py fix: A0 — fail-loud rust core deployment smoke test 2026-05-02 17:52:37 -07:00
test_savings_ledger.py fix(savings): don't bill free models at the $3/M fallback in the ledger (#2147) 2026-07-14 12:19:30 -04:00
test_savings_ledger_before_forwarded.py fix(observability): aggregate tool savings in OTEL (#2936) 2026-08-11 22:54:55 -07:00
test_savings_ledger_offload.py fix(proxy/metrics): move the savings-ledger append off the event loop (#2439) 2026-07-20 11:01:34 -07:00
test_savings_tool_search_aggregation.py feat(proxy/savings): aggregate tool-schema savings into Metrics + all reporting sinks (#2546) 2026-07-24 20:40:46 -07:00
test_savings_tracker_litellm_resolution_cache.py fix(proxy): cache litellm model resolution to stop repeated Provider List spam 2026-08-11 09:55:24 -07:00
test_savings_tracker_zero_price.py fix(savings): don't fabricate output savings for a free (zero-priced) model (#2298) 2026-07-16 14:35:57 -07:00
test_search_compressor.py fix: improve error handling and add comprehensive test coverage 2026-01-27 16:08:36 -08:00
test_search_compressor_cjk.py fix(search-compressor): CJK-aware relevance + harden Rust/Python parity (#1749) 2026-07-09 17:00:30 -05:00
test_security_validations.py Fix security vulnerabilities in memory and CCR systems 2026-02-04 12:05:50 -08:00
test_semantic_cache_key_policy.py refactor(proxy): isolate semantic cache key policy (#1964) 2026-07-11 21:35:52 -05:00
test_semantic_canonicalize.py feat(cache): provider-agnostic cache-mode delta + cc-agnostic prefix comparison (#1868) 2026-07-08 13:29:35 -07:00
test_session_engine.py feat(proxy): unify proxy and sidecar compression on one session engine (#3271) 2026-08-26 15:57:31 +05:30
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 fix(shared_context): don't evict an unrelated entry on an update at capacity (#2136) 2026-07-13 19:57:32 -04:00
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.py fix(compression): honor qualified CCR names across integrations (#2698) 2026-08-03 20:17:39 -07:00
test_smart_crusher_toin_attachment.py fix(smart-crusher): honor enable_ccr_marker on the opaque-blob path (#1130) 2026-06-22 11:11:46 -05:00
test_sqlite_graph_store.py fix(memory/graph): skip a corrupt row instead of aborting a whole graph scan (#3239) 2026-08-25 11:40:54 +05:30
test_sqlite_vector_index.py fix(memory): batch onnx embeddings and sqlite-vec ops 2026-04-24 09:49:28 +00:00
test_sse_byte_buffer_policy.py Extract SSE byte buffer policy (#1979) 2026-07-12 11:46:36 -04:00
test_sse_thinking_blocks.py fix(proxy/streaming): tolerate malformed content in _response_to_sse (#2481) 2026-07-22 06:11:00 -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(proxy): relocate stray system-role messages to the top-level system param (#765) (#1357) 2026-08-13 11:52:09 -05: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_stateless_toin.py feat(security): pilot hardening — stateless guarantee, model pinning, CI security gate (#1515) 2026-06-27 17:44:10 -07:00
test_stateless_writers.py feat(security): pilot hardening — stateless guarantee, model pinning, CI security gate (#1515) 2026-06-27 17:44:10 -07:00
test_stats_new_input_savings_rate.py feat(proxy): report new-content-relative input savings rate in /stats (#2058) 2026-07-12 18:48:19 -04:00
test_storage_backends.py test: apply linux ruff formatting 2026-04-23 08:49:50 -05:00
test_strands_tokenizer.py Count Strands reasoningContent, image, document, video tokens (#111 follow-up) 2026-04-08 17:31:00 -07:00
test_stream_output_tokens.py fix(proxy): count output tokens from the stream's text, not its wire size (#3163) 2026-08-20 22:11:55 -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_subprocess_encoding.py fix: remove rtk and lean-ctx CLI context tools (#2677) 2026-07-30 22:59:41 -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_contribution.py fix(subscription): keep efficiency_pct from exceeding 100% (#2121) 2026-07-14 11:53:13 -04:00
test_subscription_session_tracking.py fix(subscription): dedup transcript usage by message id (#2340 token inflation) (#2408) 2026-08-12 00:05:04 -05:00
test_subscription_tracker.py fix: remove rtk and lean-ctx CLI context tools (#2677) 2026-07-30 22:59:41 -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_system_compaction.py feat: 3-layer context compression pipeline (L1+L2+L3) (#1405) 2026-07-15 19:58:51 +00:00
test_tag_protection_integration.py Fix API integration test: use tool output not user message for tags 2026-03-26 11:46:55 -07:00
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 chore(telemetry): remove Supabase anonymous beacon; fix contact domain to headroomlabs.ai (#1526) 2026-06-27 22:48:26 -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 fix(telemetry): anonymous compression stats — no prompts, no data (#2728) 2026-08-03 05:43:25 -07:00
test_testing_harness.py test: add fluent Headroom harness (#2650) 2026-07-29 09:17:25 -07:00
test_text_compressors.py chore(transforms): retire dead text_compressor module (Phase 3e.3) 2026-04-29 21:14:36 -07:00
test_thinking_signature_scope_live.py test(proxy): pin down what Anthropic's thinking signature actually covers (#3135) 2026-08-19 14:13:26 -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(ccr): make headroom_retrieve a hash-only full-content lookup (#1532) 2026-06-28 10:32:43 -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(toin): publish skip compression recommendations (#1782) 2026-07-07 23:14:54 -05:00
test_toin_retention.py fix(toin): bound private query and pattern retention 2026-08-11 16:10:39 -07:00
test_token_count_cache.py perf: cut hot-path latency 27% (token-count memo, startup preloads, JSON scan memo) (#2838) 2026-08-06 17:47:40 -07:00
test_token_headroom_mode.py fix(cache): extract tool_result content from list-of-blocks format (#2092) 2026-07-13 23:51:01 -04:00
test_tokenizer.py fix(tokenizers): price Claude against a real BPE (tiktoken o200k) not a char estimate (#2543) 2026-07-24 15:06:43 -07:00
test_tokenizer_count_offload.py fix(proxy): preserve merged session and quarantine contracts (#2943) 2026-08-12 12:27:05 -05:00
test_tokenizer_encoding_resolution.py fix(tokenizers): resolve gpt-5 and mixed-case model names to the right encoding (#2776) 2026-08-04 11:31:16 -07:00
test_tokenizer_selection_coverage.py fix(tokenizers): count HuggingFace chat templates, and resolve gpt-5 / gateway-wrapped names (#2758) 2026-08-03 22:28:06 -07:00
test_tokenizers.py fix(tokenizers): price Claude against a real BPE (tiktoken o200k) not a char estimate (#2543) 2026-07-24 15:06:43 -07:00
test_tool_call_arguments_not_a_string.py fix(tokenizer): coerce non-string tool_call fields before counting (#2801) 2026-08-05 08:32:14 -07:00
test_tool_definition_serialization.py refactor(proxy): extract tool definition serialization (#1998) 2026-07-15 18:36:52 +00:00
test_tool_injection_config.py refactor(proxy): extract tool injection config (#2010) 2026-07-11 00:03:15 -05:00
test_tool_injection_logging.py refactor(proxy): extract tool injection logging (#2009) 2026-07-12 12:11:28 -04:00
test_tool_injection_policy.py refactor(proxy): extract tool injection policy (#1995) 2026-07-12 12:09:07 -04:00
test_tool_injection_tracker.py refactor(proxy): extract tool injection tracker (#2002) 2026-07-12 11:48:33 -04:00
test_tool_name_policy.py refactor(proxy): extract tool name policy (#2008) 2026-07-12 11:54:09 -04:00
test_tool_result_interceptors.py feat: add deterministic runtime rollout controls (#1490) 2026-08-12 23:16:54 -05:00
test_tool_schema_compaction.py feat: 3-layer context compression pipeline (L1+L2+L3) (#1405) 2026-07-15 19:58:51 +00:00
test_tool_schema_savings_policy.py fix(stats): report one "Tokens Saved" headline across every harness (#2737) 2026-08-03 09:03:54 -07:00
test_transforms_config_compressor.py feat(config): fold TOML array-of-tables to csv-schema via SmartCrusher (#1799) 2026-07-15 19:58:27 +00:00
test_transforms_content_detection.py fix(transforms): stop folding datetime-prefixed user messages as search results (#3221) 2026-08-23 11:53:17 -07:00
test_transforms_content_router.py fix(transforms): stop compression garbling mixed subagent output (#3286) 2026-08-27 13:22:26 +05:30
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_transforms_stack_traces.py feat(transforms): language-aware stack-trace collapse for Go/Rust/.NET/Java/Node (#1791) 2026-07-15 19:58:30 +00:00
test_transforms_tabular.py fix(transforms): pass through ragged tables instead of misaligning columns (#1713) 2026-07-07 12:45:46 -05:00
test_turn_hook_usage.py Unify savings attribution across stats, perf, metrics, and dashboard (#2976) 2026-08-13 17:13:23 -07:00
test_turn_hooks.py Unify savings attribution across stats, perf, metrics, and dashboard (#2976) 2026-08-13 17:13:23 -07:00
test_update_check.py feat(cli): add headroom update command and release banner (#1088) 2026-06-18 11:22:20 -05:00
test_update_helpers.py fix(cli/update): let install ownership win over bare /.dockerenv so venv installs self-update (#2830) 2026-08-11 17:23:29 -05:00
test_upstream_credential_scoping.py fix(security): address u9up assessment findings (WEB-01–07) (#2207) 2026-08-20 09:02:44 -05:00
test_upstream_guard.py fix(security): validate caller-supplied upstreams on every resolution path (#3195) 2026-08-21 23:16:59 -07:00
test_usage_reporter_snapshot.py fix(telemetry): only advance usage-report baseline after a 200 (#2149) 2026-07-14 12:19:43 -04:00
test_utils.py test: add missing type hints to FakeProvider in test_utils (#631) 2026-06-10 21:15:16 -05:00
test_uvicorn_log_level_env.py fix(proxy): return 502, not 200, when upstream connect retries are exhausted (#3083) 2026-08-20 06:32:30 -07:00
test_verbosity_controller.py feat: output-token reduction — verbosity shaper, per-user learning, counterfactual savings (#965) 2026-06-16 21:06:43 -07:00
test_verbosity_learn.py fix(learn): don't desync verbosity pairing on empty assistant turns (#2123) 2026-07-14 12:04:32 -04:00
test_vertex_claude_compression.py fix(proxy/vertex): route google-publisher requests to the request region (#2069) 2026-07-13 00:46:25 -04:00
test_websearch_tool_result_protection.py fix(proxy): protect WebSearch/WebFetch tool results from lossy compression (#2115) 2026-07-14 11:52:26 -04:00
test_wire_debug_format_policy.py Extract wire debug format policy (#1978) 2026-07-12 12:17:18 -04:00
test_wire_debug_redaction_policy.py Extract wire debug redaction policy (#1972) 2026-07-11 21:36:46 -05:00
test_wrap_code_memory.py fix(wrap/serena): stop creating serena_config.yml, unbricking Serena on fresh installs (#2676) 2026-07-30 20:55:47 -07:00
test_wrap_concurrent_settings.py fix(wrap): stop concurrent wrap sessions clobbering settings.local.json (#3232) 2026-08-23 22:36:17 -07:00
test_wrap_quiet_cli.py feat(wrap): reduce-at-source — SAFE quiet-CLI env defaults for the launched agent (#2548) 2026-07-24 20:40:52 -07:00
test_ws_http_fallback.py fix(proxy/openai): propagate provider usage on the Responses WS->HTTP fallback (#2988) 2026-08-16 15:04:39 -07: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