# TokenOven compaction in the P6 receipts: descriptive figures (2026-09-24)

**Status:** descriptive, secondary to the frozen P6 plan. None of these figures was a planned endpoint, so they are reported as ranges and medians with no significance test. Source for the Neurolese claim `to.compaction.latency-and-ratio`.

Authority: parent SPEC §5 (`to_bm25_compactor`, `to_log_pruning`, `to_cache_invariant` rows) and the P6 report `docs/reports/REPORT_TT_TO_P6_Confirmatory_2026-09-24.md`, including its Correction section.

## Inputs

| Item | Value |
|---|---|
| Receipts | `outputs/campaigns/g3-20260924g/p6c_receipts.jsonl`, sha256 `71e7fce7045c5ced54a6d4e05b53adc7b9009510f77ed3065b9163f312a89a56` (same file as P6) |
| Script | `scripts/campaign/tt_to_p6_compaction_descriptive.py` |
| Output | `outputs/campaigns/g3-20260924g/p6c_compaction_descriptive.json`, sha256 `c1792c185cb75cbdba366aaaaf520b62bad832845b40f94c5e5dd47bf9c8cdfc` |
| Stack and model | as P6: TokenOven `b5754f8`, TokenTumbler `d433676`, Verdict gateway `4c261a3b42`; `verdict-4-35b-toolterse-v5-mlx`, local, temperature 0 |

Reproduce:

```bash
.venv/bin/python scripts/campaign/tt_to_p6_compaction_descriptive.py --receipts outputs/campaigns/g3-20260924g/p6c_receipts.jsonl --out outputs/campaigns/g3-20260924g/p6c_compaction_descriptive.json
```

Token counts are the model server's own prompt-token counts (`usage.upstream_prompt_tokens`). TokenOven's own estimates are quarantined and not read.

## Results

**How often it applied.** TokenOven changed the prompt in 9 of 39 treatment requests, all in three families: `doc_needle`, `lc_multi_needle` and `log_triage`. The other 30 were bypassed, either because the prompt was under the 4,000-token threshold or because no mechanism found anything to remove. That includes 24 requests from tasks built to exercise a mechanism.

**Time spent compressing** (TokenTumbler's measured round trip to TokenOven, per request):

| Requests | n | min | median | max |
|---|---|---|---|---|
| Treatment, applied | 9 | 6 ms | 9 ms | 10 ms |
| Treatment, bypassed | 30 | 2 ms | 7 ms | 33 ms |
| Baseline (features off) | 39 | 2 ms | 4 ms | 9 ms |

For comparison, the model call on these requests took seconds, not milliseconds.

**Prompt tokens where it applied** (paired with the same task, features off; all 9 pairs were single-inference, so no retries are involved):

| Task | Off | On | Reduction | Mechanisms applied |
|---|---|---|---|---|
| doc_needle@i1 | 7,469 | 4,484 | 40.0% | extractive spans, cache-friendly ordering |
| doc_needle@i2 | 7,617 | 4,359 | 42.8% | extractive spans, cache-friendly ordering |
| doc_needle@i3 | 7,484 | 3,855 | 48.5% | extractive spans, cache-friendly ordering |
| lc_multi_needle@i1 | 7,903 | 235 | 97.0% | extractive spans, cache-friendly ordering |
| lc_multi_needle@i2 | 7,888 | 235 | 97.0% | extractive spans, cache-friendly ordering |
| lc_multi_needle@i3 | 7,802 | 237 | 97.0% | extractive spans, cache-friendly ordering |
| log_triage@i1 | 12,292 | 1,921 | 84.4% | log pruning, cache-friendly ordering |
| log_triage@i2 | 12,334 | 1,945 | 84.2% | log pruning, cache-friendly ordering |
| log_triage@i3 | 12,307 | 1,478 | 88.0% | log pruning, cache-friendly ordering |

Range 40.0% to 97.0%, median 84.4%. The pass/fail result was the same in both arms for all 9 pairs.

## Limits

- Nine requests in three synthetic families on one local model. These are ranges from this run, not expected values for any workload.
- Mechanisms ran together, so the table does not credit one mechanism alone.
- Compress time is TokenTumbler's round trip to a local TokenOven on the same machine; a networked deployment adds transport time.
- Descriptive only: the P6 plan did not name these endpoints before the run.
