Repository navigation
v1.6.0 — the audit is closed in full, and the bytes are the caller's
Ships DECISIONS §54, §55, §56 and §57. max_audit.md had been declared closed twice while findings were open; this release carries the work that actually closed it, plus one defect found afterwards by pointing an MCP client at this repository's own source.
⚠️ The one change that can break a startup
An unrecognized TOKENDAMPER_* enum value is now a hard error instead of being silently ignored.
Nothing that worked stops working — the setting never took effect — but a stale or typo'd TOKENDAMPER_LOG_LEVEL=verbose that used to fall back to the default now fails at startup. Accepted values are named in the error. The affected variables are TOKENDAMPER_APP_MODE, TOKENDAMPER_PLANNER_MODE, TOKENDAMPER_TRACE_OUTPUT and TOKENDAMPER_LOG_LEVEL.
Fixed
The Gateway forwards the caller's bytes (§54, audit M7). When an elision fired, the proxy rebuilt the request with JSON.stringify and rewrote fields it had never touched:
| client sent | provider received |
|---|---|
"temperature": 1.0 |
"temperature":1 |
"top_p": 1e3 |
"top_p":1000 |
"seed": 12345678901234567890 |
"seed":12345678901234567000 |
The first two are cosmetic. The third is a different number — an integer past 2^53 does not survive JSON.parse → JSON.stringify — so a provider was asked for a seed the caller never chose. Elided content is now spliced into the original bytes and everything else is left alone. Savings are measured on the bytes forwarded rather than on a bundle render (48.5% claimed against 47.1% actual, now 46.3% against 46.5%), and a forwarded body can no longer be larger than the one that arrived.
A file that documents the placeholder format is not a corrupted placeholder (§57). The corruption scan matched <BLOCK_HASH:([^>]+)> — any text up to the next > — so prose describing the legacy format was read as a hash, found missing from the store, and failed the whole run. src/core/elision/regions.ts reduced 29.60% on the CLI and 0% on MCP for this reason. 22 files in this repo carry such a string, and every one was unoptimizable over MCP, as is any documentation quoting the format.
A Python function whose body starts after a blank line is optimizable again (§55, audit L7). The body indent was read off the line after def without checking whether it was blank, so the region began at column 0 and the validator rejected the marker. Measured: 434 → 96 bytes without the blank line, 436 → 436 with it.
Line numbers survive a string line continuation (§55, audit L8). The TypeScript validator skipped escaped characters without counting an escaped newline, so every reported position after one read a line short.
Changed
Gateway savings measure the wire rather than the bundle render. Three dead metric fields removed. Three LOW findings (L4, L5, L9) are recorded at their sites with the reason they are acceptable rather than correct, and L6's "Branch & Bound" comment now names the 1/2-approximation guard the code actually implements.
Notes
max_audit.md is closed in full — every severity band. Getting there required two corrections to the claim that it was already closed: M7 sat behind a resolved conditional and entered no wave table, and the entire nine-row LOW table was never scheduled either. Both are recorded rather than quietly fixed, because an item that is in no table reads as done exactly like a check that never ran reads as a pass.
Also included: §56, the measured precondition for widening elision beyond TypeScript/JavaScript/Python. No behaviour change — it corrects a sequencing warning that was wrong in the dangerous direction and would have produced silent unmeasured elision.
Numbering. Per §53 the roadmap reserves no version numbers; a number is a fact about what shipped, assigned at ship time. Minor rather than patch because the same command over the same input emits different bytes; minor rather than major because nothing that worked stopped working.
677 tests, typecheck, lint and build green.
Full changelog: v1.5.0...v1.6.0