headroom/tests
Abhay Singh 7ff842da17
fix(proxy/openai): thread savings-profile kwargs into chat completions (#1606)
## Description

OpenAI-compatible `/v1/chat/completions` requests didn't receive the
same proxy
savings/profile kwargs as the other compression paths. The live chat
handler
(`handle_openai_chat` in `headroom/proxy/handlers/openai.py`) called
`openai_pipeline.apply()` with only `model_limit` / `context` /
`frozen_message_count` / `biases` / `compression_policy` — it never
passed
`proxy_pipeline_kwargs(self.config)`.

So when the proxy runs with `HEADROOM_SAVINGS_PROFILE=agent-90`, the
effective
config reports user/system-message compression and `target_ratio=0.10`,
but the
real chat path silently dropped all of it. OpenAI-compatible clients
such as
OpenCode kept protecting user messages and missed the configured
profile.

For contrast, `handlers/anthropic.py` passes
`**proxy_pipeline_kwargs(self.config)`
to every `apply()` call, and so does the dedicated OpenAI compress
endpoint in
this same module — only the two chat-completions `apply()` sites were
missing it.

Closes #1534

## Fix

Add `**proxy_pipeline_kwargs(self.config)` to both chat-path `apply()`
calls (the
token-mode branch and the non-token branch):

```python
lambda: self.openai_pipeline.apply(
    messages=messages,
    model=model,
    model_limit=context_limit,
    context=extract_user_query(messages),
    frozen_message_count=openai_frozen_count,
    biases=_hook_biases,
    compression_policy=compression_policy,
    **proxy_pipeline_kwargs(self.config),   # ← added
)
```

`proxy_pipeline_kwargs` is already imported in the module and is the
exact
helper the Anthropic handler and the OpenAI compress endpoint use, so
the chat
path now matches them.

## Type of Change

- [x] Bug fix (non-breaking change that fixes an issue)

## Changes Made

- `headroom/proxy/handlers/openai.py`: pass
`**proxy_pipeline_kwargs(self.config)` on both `apply()` call sites in
`handle_openai_chat` (token-mode and non-token branches).
- `tests/test_proxy/test_openai_chat_savings_profile.py`: new regression
test driving the chat handler with `savings_profile="agent-90"` and
asserting the profile knobs reach `apply()`.
- `CHANGELOG.md`: Bug Fixes entry under Unreleased.

## Testing

- [x] Unit tests pass (`pytest`)
- [x] Linting passes (`ruff check .`)
- [ ] Type checking passes (`mypy headroom`)
- [x] New tests added for new functionality
- [x] Manual testing performed

### Test Output

The new test drives the real chat handler through the `create_app` +
`TestClient`
harness with a recording `apply()` stub. Before the fix it captures
exactly the
five kwargs the issue describes (no profile knobs); after the fix the
profile
knobs are present:

```text
# before the fix (openai.py reverted, test kept)
E   AssertionError: assert None is True
E    +  where None = {...}.get('compress_user_messages')
# captured kwargs were: biases, compression_policy, messages, model,
# model_limit, context, frozen_message_count  — no profile knobs
FAILED tests/test_proxy/test_openai_chat_savings_profile.py::test_chat_completions_threads_savings_profile_kwargs_into_apply

# after the fix
tests\test_proxy\test_openai_chat_savings_profile.py .
======================== 1 passed, 1 warning in 39.44s ========================
```

No regression in the existing chat backend-path suite:

```text
$ uv run pytest tests/test_proxy/test_openai_backend_path.py
======================== 5 passed, 1 warning in 15.78s ========================
$ uv run ruff check headroom/proxy/handlers/openai.py tests/test_proxy/test_openai_chat_savings_profile.py
All checks passed!
```

## Real Behavior Proof

- Environment: Windows 11, Python 3.12.11, headroom built from this
branch (`uv sync --extra dev`), proxy config
`savings_profile="agent-90"`, `optimize=True`, `backend="anyllm"` with a
mocked OpenAI upstream.
- Exact command / steps: started the app with `create_app(config)`,
replaced `proxy.openai_pipeline.apply` with a recording stub, and POSTed
a real `/v1/chat/completions` request with a large user message so the
compression decision fires. Inspected the kwargs the handler actually
passed to `apply()`.
- Observed result: before the fix the recorded `apply()` kwargs were
`{biases, compression_policy, messages, model, model_limit, context,
frozen_message_count}` — no profile knobs. After the fix the same call
also carries `compress_user_messages=True`,
`compress_system_messages=True`, `target_ratio=0.10`,
`min_tokens_to_compress=120` (the agent-90 profile), matching the
issue's "Expected".
- Not tested: did not stand up a real OpenAI/OpenCode upstream
end-to-end (no live key in this environment); the upstream is mocked and
the assertion is on the kwargs the proxy threads into the compression
pipeline, which is exactly what the bug was about. Did not run the full
`mypy headroom` pass (two-line kwarg addition, no new types).

## Review Readiness

- [x] I have performed a self-review
- [x] This PR is ready for human review

## Checklist

- [x] My code follows the project's style guidelines
- [x] I have performed a self-review of my code
- [x] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [x] I have updated the CHANGELOG.md if applicable

## Additional Notes

- Two-line change plus comments; no new dependencies. Reuses the
existing `proxy_pipeline_kwargs` helper, so behavior is consistent
across Anthropic, the OpenAI compress endpoint, and now the OpenAI chat
path.
- @chopratejas flagging you for review — this aligns the OpenAI chat
path with the savings-profile handling the other providers already had.

Co-authored-by: JD Davis <mxjerrett@gmail.com>
2026-07-07 11:27:54 -05:00
..
cli Add Click-based CLI with memory management commands 2026-01-29 21:30:21 -08:00
fixtures test(evals): add offline fidelity regression gate (recall-based, zero-model) (#1187) 2026-06-22 22:53:59 -05:00
integrations/test_strands feat: Add AWS Strands Agents SDK integration 2026-01-31 00:31:37 -08:00
parity perf(compression): take large cold-start contexts off the synchronous kompress path (#1171) (#1298) 2026-06-23 10:48:06 -05:00
test_backends fix(bedrock): fail fast when session-token auth lacks botocore (#1553) 2026-07-01 21:02:15 -05:00
test_cache feat(cache): attribute prompt-cache misses to TTL lapse vs prefix change (#1313) (#1343) 2026-06-24 09:50:34 -05:00
test_cli fix: detect and clear stale ANTHROPIC_BASE_URL from crashed wrap sessions (#1768) (#1837) 2026-07-06 08:35:40 -07:00
test_compression fix(compression): repair entropy preservation + JSON-safe truncation fallback (#1536) 2026-06-28 10:39:02 -07: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 fix(install): close parent log fd in start_detached_agent (#1576) 2026-07-01 23:07:01 -05:00
test_integrations fix(agno): tolerate streaming tool-call SDK objects in parser (#1312) (#1336) 2026-06-24 09:52:15 -05:00
test_learn fix(learn): honor CLAUDE_CONFIG_DIR when locating Claude logs and memory (#1642) 2026-07-01 23:22:16 -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(io): use UTF-8 with locale fallback and preserve line endings on config/text I/O (#1498) 2026-06-28 13:18:47 -07:00
test_memory fix(memory): cap local embedder CPU thread oversubscription (#198) (#1559) 2026-07-01 17:12:02 -05:00
test_providers fix(proxy): strip 1m model suffix before upstream forwarding (#1840) 2026-07-06 08:33:45 -07:00
test_proxy fix(proxy/openai): thread savings-profile kwargs into chat completions (#1606) 2026-07-07 11:27: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_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(build): enable Intel macOS pip installs via ort-load-dynamic (#1538) 2026-07-06 18:33:34 -05:00
__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
_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(tests): reset whole headroom logger subtree so caplog stays deterministic (#1117) 2026-06-26 12:05:26 -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_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 Diversity-aware SmartCrusher: keep unique items, compress text within 2026-03-25 23:57:24 -07: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 feat(agent-savings): land coding + general workload personas on main (#1732) 2026-07-03 07:28:19 -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_pre_upstream_backpressure.py fix(proxy): include system/tools/sampling in cache key (#1473) 2026-06-30 16:29:20 -05:00
test_anthropic_stage_timings.py fix: preserve anthropic passthrough tool order (#1427) 2026-06-30 08:38:51 -05:00
test_audit_codex.py feat: compression extraction — Rust knob exposure, CCR hardening, traffic audits (#818) 2026-06-16 20:21:13 -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_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(anyllm): forward openai api_base/api_key to the any-llm backend (#942) (#954) 2026-06-15 11:07:43 -05: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_bash_search_lossless_fold.py feat(content-router): lossless-excluded compaction (grep/log/json) + enable in coding/general personas (#1762) 2026-07-03 12:09:05 -07:00
test_bedrock_region.py fix(bedrock): route ARNs via converse, named AWS profiles, and au. re… (#1456) 2026-07-02 22:51:05 -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_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_cache_control_move_bust.py fix(proxy): keep cache_control bounded + stable so the freeze overlay stops busting (#1852) 2026-07-06 17:05:34 -07:00
test_cache_prefix_overlay.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_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_context_tracker.py fix(ccr): make headroom_retrieve a hash-only full-content lookup (#1532) 2026-06-28 10:32:43 -07:00
test_ccr_feedback.py fix(ccr): make headroom_retrieve a hash-only full-content lookup (#1532) 2026-06-28 10:32:43 -07:00
test_ccr_mcp_server.py fix(mcp): show lifetime totals and label rolling session scope in headroom_stats (#1428) 2026-06-30 08:39:34 -05:00
test_ccr_response_handler.py fix(ccr): make headroom_retrieve a hash-only full-content lookup (#1532) 2026-06-28 10:32:43 -07:00
test_ccr_response_handler_extra.py fix(ccr): make headroom_retrieve a hash-only full-content lookup (#1532) 2026-06-28 10:32:43 -07:00
test_ccr_row_drop_store_bridge.py fix(proxy): gate CCR retrieve/compress endpoints to loopback (#1338) 2026-06-24 09:45:20 -05: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_sqlite_backend.py fix(ccr): honor workspace dir for sqlite store (#1564) 2026-07-01 20:25:14 -05:00
test_ccr_tool_always_on.py fix(ccr): make headroom_retrieve a hash-only full-content lookup (#1532) 2026-06-28 10:32:43 -07:00
test_ccr_tool_injection.py fix(ccr): make headroom_retrieve a hash-only full-content lookup (#1532) 2026-06-28 10:32:43 -07: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 Harden cache validation reporting and TTL analysis 2026-04-06 20:11:21 -05: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(claude): surface Remote Control proxy incompatibility (#1610) 2026-07-01 23:19:25 -05:00
test_cli_learn.py fix(learn): aggregate verbosity baselines across projects instead of overwriting (#1288) 2026-06-30 08:37:37 -05:00
test_cli_perf_format.py feat: measure and surface token throughput (tokens/sec) through the proxy (#983) 2026-06-17 09:42:38 -05: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 feat(content-router): lossless-first dispatch, cross-turn dedup, and A7 lossy-after-fold (#1818) 2026-07-06 08:32:06 -07:00
test_cli_proxy_improvements.py feat(proxy): add provider-only HTTP proxy (#1807) 2026-07-05 15:56:59 -07:00
test_cli_tools.py test: apply linux ruff formatting 2026-04-23 08:49:50 -05:00
test_cli_update.py feat(cli): add headroom update command and release banner (#1088) 2026-06-18 11:22:20 -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_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_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 perf(proxy): cap compression workers to CPU count (#1803) 2026-07-05 14:01:23 -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 refactor: DRY cache logic, add thread safety, fix Bash exclusion (#704) 2026-06-16 14:50:04 -05: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_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 chore(telemetry): remove Supabase anonymous beacon; fix contact domain to headroomlabs.ai (#1526) 2026-06-27 22:48:26 -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 headroom_retrieve a hash-only full-content lookup (#1532) 2026-06-28 10:32:43 -07: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(compression): reject lossy unmarked tool output in unit router path (#1479) 2026-06-30 16:30:12 -05: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_config.py feat: attribute reread waste to over-compression via marker check (#901) 2026-06-13 10:43:35 -05:00
test_content_router_exclude_tools.py fix(proxy): add --protect-tool-results to prevent lossy compression of exact-output Bash results (#1374) 2026-06-26 12:22:04 -05: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_copilot_auth.py fix(copilot): normalize subscription routing host (#1836) 2026-07-06 06:23:48 -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_quota.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_copilot_subscription_smoke.py fix: support Copilot Business subscription auth (#641) 2026-06-12 20:46:38 -05: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_tracker_counterfactual.py fix(proxy): make budget enforcement actually work (#885) 2026-06-15 10:22:27 -05: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 feat(content-router): lossless-first dispatch, cross-turn dedup, and A7 lossy-after-fold (#1818) 2026-07-06 08:32:06 -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_net_playwright.py feat(dashboard): surface compression-vs-cache net impact in Prefix Cache panel (#913) 2026-06-12 23:43:49 -05:00
test_dashboard_cache_ttl_playwright.py fix(dashboard): derive per-project setup URL from live origin (#1511) 2026-06-30 14:24:00 -05:00
test_dashboard_token_savings.py fix(dashboard): align token savings headline denominator (#1653) 2026-07-01 23:31:32 -05: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_docker_compose_persistence.py fix(docker): persist headroom workspace in compose (#1839) 2026-07-06 08:35:06 -07: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_exceptions.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02: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 fix(proxy): F4 — trust X-Forwarded-* only behind allow-listed gateway 2026-05-06 14:37:09 -07:00
test_fsutil.py fix(io): use UTF-8 with locale fallback and preserve line endings on config/text I/O (#1498) 2026-06-28 13:18:47 -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(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 Add E2E tests for Google multimodal content preservation 2026-01-24 21:01:25 -08:00
test_graph.py chore: renormalize line endings to LF 2026-04-24 15:33:30 +02:00
test_graph_tokensave.py feat(wrap): make tokensave the primary coding-task compressor, Serena the backup (#1230) 2026-06-25 16:55:37 -05: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_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_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_offload.py perf(proxy): offload image compression off event loop (#1612) 2026-07-02 23:17:47 -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(proxy): preserve byte-faithful Anthropic tool forwarding (#1222) 2026-06-21 10:07:29 -07: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_issue_1601_remote_control_gate.py fix(claude): surface Remote Control proxy incompatibility (#1610) 2026-07-01 23:19:25 -05:00
test_kompress_must_keep.py fix(kompress): hard override keeps must-keep tokens regardless of model score (#1400) 2026-06-26 14:15:37 -05: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_kompress_request_nonblocking.py fix(proxy): fail open when kompress saturation would exhaust pre-upstream budget (#1430) 2026-06-30 13:41:22 -05:00
test_lean_ctx_installer.py feat: add lean-ctx context tool support 2026-05-11 17:54:17 -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_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_lossless_excluded_compaction.py feat(content-router): lossless-excluded compaction (grep/log/json) + enable in coding/general personas (#1762) 2026-07-03 12:09:05 -07:00
test_lossless_first_dispatch.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_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 feat(content-router): lossless-first dispatch, cross-turn dedup, and A7 lossy-after-fold (#1818) 2026-07-06 08:32:06 -07:00
test_mcp_registry_opencode.py fix(opencode): write local MCP config (#1381) 2026-06-26 12:23:54 -05: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_eval.py Add hierarchical memory system with graph + vector storage 2026-01-26 21:58:47 -08: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(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 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_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(memory): use ONNX embedder for wrap --memory sync (#1092) (#1262) 2026-06-21 20:08:12 -07: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_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 test: apply linux ruff formatting 2026-04-23 08:49:50 -05:00
test_mid_turn_steering.py fix(proxy): queue mid-turn user messages on non-Bedrock streaming path (#1377) 2026-06-26 12:22:48 -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(gemini): resolve Google model capabilities through ModelRegistry (#1276) 2026-06-26 23:31:56 -05:00
test_netcost_gate.py feat(policy): decay P_alive from idle time near cache TTL (#856 P3b) (#1028) 2026-06-18 11:15:40 -05:00
test_network_diff_capture.py feat: add differential network capture harness (#761) 2026-06-08 22:18:31 -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_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 feat: add OTEL observability core 2026-04-09 21:20:34 -05:00
test_observability_tracing.py feat: add OTEL observability core 2026-04-09 21:20:34 -05:00
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 fix(proxy): strip Codex lite header on the HTTP /responses path (#1663) 2026-07-01 23:54:09 -05:00
test_openai_codex_ws_lifecycle.py fix(opencode): use local MCP config (#1383) 2026-07-06 06:22:15 -07: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 feat(content-router): lossless-excluded compaction (grep/log/json) + enable in coding/general personas (#1762) 2026-07-03 12:09:05 -07:00
test_openai_responses_context_compaction.py fix(proxy): preserve Responses memory continuations with store=false (#1103) 2026-06-22 22:56:30 -05:00
test_openai_responses_output_shaper.py Wire OpenAI Responses output shaping (#1438) 2026-07-05 13:59:21 -07: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 Commit message: 2026-03-13 16:49:18 -07:00
test_output_savings.py Wire OpenAI Responses output shaping (#1438) 2026-07-05 13:59:21 -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_shaper.py fix(opencode): use local MCP config (#1383) 2026-07-06 06:22:15 -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 Pin ORT dylib on Windows; init Python logging (#1010) 2026-06-23 07:46:24 -05: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 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_perf_cli_filtering.py fix(perf): surface RTK/CLI context-tool savings in perf and the session card (#1433) 2026-06-25 21:13:36 -07:00
test_pid_alive.py fix(install): use Windows-safe PID liveness probe in runtime_status (#1544) (#1560) 2026-07-01 17:13:11 -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 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_litellm.py fix(pricing): resolve MiniMax-M3 (provider prefix + pre-registration) (#1186) 2026-06-30 08:36:36 -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_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_codex_threads.py fix(codex): retag thread providers so history menu stays whole across the proxy boundary (#1034) 2026-06-16 15:13:21 -05:00
test_provider_copilot_wrap.py fix: respect COPILOT_PROVIDER_TYPE env var when provider_type is auto (#549) 2026-06-26 12:04:09 -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_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 feat(anthropic): add Claude 5 family pricing & align current rates (#1767) 2026-07-03 12:09:35 -07: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(proxy): add versionless Vertex AI routes for Claude Code compatibility (#1321) 2026-06-26 12:16:39 -05:00
test_provider_registry.py fix(bedrock): route ARNs via converse, named AWS profiles, and au. re… (#1456) 2026-07-02 22:51:05 -05:00
test_provider_registry_extended.py fix(bedrock): route ARNs via converse, named AWS profiles, and au. re… (#1456) 2026-07-02 22:51:05 -05:00
test_providers_opencode_config.py fix(opencode): expose headroom/* models in injected provider config (#1716) 2026-07-03 15:20:14 -07:00
test_providers_opencode_install.py fix(opencode): write local MCP config (#1381) 2026-06-26 12:23:54 -05:00
test_proxy_anthropic_cache_stability.py fix: preserve anthropic passthrough tool order (#1427) 2026-06-30 08:38:51 -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): preserve Responses passthrough bytes (#1598) 2026-06-30 14:37:47 -05:00
test_proxy_cache_ttl_metrics.py fix(proxy): expose persistent savings metrics (#1647) 2026-07-01 23:28:12 -05: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 fix(proxy): offload /v1/compress to the compression executor to stop blocking the loop (#1501) 2026-06-28 13:14:20 -07:00
test_proxy_compression_executor.py perf(proxy): cap compression workers to CPU count (#1803) 2026-07-05 14:01:23 -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_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(dashboard): deduplicate repeated savings metrics (#1804) 2026-07-05 16:00:25 -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 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 fix(proxy): bind before eager preload so a hung compressor load can't block startup (#1500) 2026-06-28 13:15:50 -07:00
test_proxy_gemini_integration.py Add multi-provider batch API support with CCR post-processing 2026-01-24 11:41:18 -08:00
test_proxy_gemini_native_integration.py Add multi-provider batch API support with CCR post-processing 2026-01-24 11:41:18 -08: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): freeze must forward cached (compressed) prefix byte-identical — stop token-mode cache busting (#1850) 2026-07-06 14:54:39 -07: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_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_healthchecks.py fix(proxy): scope CORS to loopback + gate operator/content endpoints (#1226) 2026-06-21 00:50:55 -07: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 test(proxy): assert CCR hash route guard blocks valid hashes (#1480) 2026-06-26 15:29:33 -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_modes.py Harden cache-mode immutability for OpenAI and fix stats mode reporting 2026-04-04 14:36:29 -05: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): freeze must forward cached (compressed) prefix byte-identical — stop token-mode cache busting (#1850) 2026-07-06 14:54:39 -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_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 fix(wrap): percent-encode non-ASCII cwd names in X-Headroom-Project header (#1071) 2026-06-18 11:19:43 -05: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 perf(savings): batch tracker persistence off the request hot path (#1817) 2026-07-05 15:58:58 -07:00
test_proxy_scalability.py feat(proxy): add provider-only HTTP proxy (#1807) 2026-07-05 15:56:59 -07:00
test_proxy_semantic_cache_key.py fix(proxy): include system/tools/sampling in cache key (#1473) 2026-06-30 16:29:20 -05: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_stats_recent_requests.py fix(proxy): scope CORS to loopback + gate operator/content endpoints (#1226) 2026-06-21 00:50:55 -07:00
test_proxy_streaming_ratelimit_headers.py fix(proxy): forward request-id headers on the streaming path (#1100) (#1258) 2026-06-23 07:48:34 -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 chore(telemetry): remove Supabase anonymous beacon; fix contact domain to headroomlabs.ai (#1526) 2026-06-27 22:48:26 -07:00
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_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(read-maturation): activity-based hold-back Read maturation (Mechanism B) (#1068) 2026-06-22 22:52:42 -05: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 fix(windows): pin UTF-8 encoding on text-mode subprocess calls (#1311) 2026-06-23 12:52:49 -05:00
test_release_workflows.py fix(build): enable Intel macOS pip installs via ort-load-dynamic (#1538) 2026-07-06 18:33:34 -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_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_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 fix(proxy): make budget enforcement actually work (#885) 2026-06-15 10:22:27 -05: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_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 chore: bump RTK from v0.28.2 to v0.42.4 (#1362) 2026-06-26 12:39:48 -05:00
test_rtk_session_savings.py fix(perf): surface RTK/CLI context-tool savings in perf and the session card (#1433) 2026-06-25 21:13:36 -07:00
test_runtime_env.py feat(proxy): hot-reload live env knobs so a reused proxy picks them up without a restart (#1090) 2026-06-18 09:50:50 -07: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 feat(savings): durable savings ledger + headroom savings command (#1127) 2026-06-22 18:47:57 -05:00
test_search_compressor.py fix: improve error handling and add comprehensive test coverage 2026-01-27 16:08:36 -08:00
test_security_validations.py Fix security vulnerabilities in memory and CCR systems 2026-02-04 12:05:50 -08:00
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 Add SharedContext for multi-agent, rewrite README, fix proxy cleanup 2026-03-17 16:31:04 -07: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_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 Add SQLiteGraphStore for bounded, persistent graph storage 2026-02-01 20:48:57 -08:00
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(proxy): handle streaming CCR retrieval (#1451) 2026-06-30 13:46:34 -05: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(tls): add HEADROOM_TLS_STRICT=0 toggle for corporate SSL inspection (#1308) (#1341) 2026-06-24 09:51:30 -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_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_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): only reset 5h contribution on real rollover, not API jitter (#1255) 2026-06-26 14:13:44 -05:00
test_subscription_tracker_rtk_wired.py fix(proxy): read RTK gain stats globally by default (#957) 2026-06-13 21:21:38 -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 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 chore(telemetry): remove Supabase anonymous beacon; fix contact domain to headroomlabs.ai (#1526) 2026-06-27 22:48:26 -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_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: 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(tokenizers): estimate oversized tool blobs instead of json.dumps on the loop (#1270) 2026-06-23 09:46:44 -05:00
test_tool_result_interceptors.py fix(proxy): register interceptor in explicit transforms list when HEADROOM_INTERCEPT_ENABLED (#1376) 2026-06-24 20:58:02 -05: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(transforms/content-router): route grep/log output away from HTML extractor (#1719) 2026-07-02 16:22:31 -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_transforms_tabular.py feat(transforms): tabular + spreadsheet (.xlsx/.xls) compression (#1128) 2026-06-19 11:30:20 -05: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 feat(cli): add headroom update command and release banner (#1088) 2026-06-18 11:22:20 -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_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 feat: output-token reduction — verbosity shaper, per-user learning, counterfactual savings (#965) 2026-06-16 21:06:43 -07:00
test_vertex_claude_compression.py fix(bedrock): route ARNs via converse, named AWS profiles, and au. re… (#1456) 2026-07-02 22:51:05 -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