Changed — Phase A of MVP Gap Closure (Working Product Readiness initiative)
Ratified by the maintainer 2026-04-24. Closes three P0 gaps and establishes honest path-specific savings framing before any launch work opens. Details at internal docs.
P0-5 — path-specific savings framing (this is the big one): The fresh-install product audit surfaced that tokenpak on Claude Code traffic measures ~2% savings even with compression working correctly — because Anthropic's server-side cache already captures 95% of the reducible token pool. The ≥30% CI-pinned floor on the agent-style fixture is honest; the aggregate ~2% on cache-heavy real workloads is also honest; users evaluating on Claude Code alone concluded the claim was false.
Per the maintainer's canonical ruling: do NOT flatten into a single 30–50% claim. Use path-specific language.
README.md— headline rewritten from "Cut your LLM token spend by 30–50%" to "Up to 90%+ savings on direct API/CLI and other favorable uncached workloads". New "How we report savings" section explains the two paths explicitly: direct API / CLI / uncached workloads land in the 90%+ band; provider-cached flows show lower incremental gains because the cache already did the heavy lifting.- "What's included" — "50 built-in compression recipes" claim removed. Replaced with an honest description: deterministic compression pipeline + route-class policy presets + custom recipe authoring via
tokenpak recipe create/validate/test/benchmark. - Reproduction footer — reworded to "Reproduce the savings floor locally:
make benchmark-headline(asserts ≥30% reduction on a pinned agent-style fixture; the CI-enforced floor, not the ceiling)." The benchmark is honest; the prior phrasing implied a ceiling that wasn't the point.
P0-1 — recipes reality alignment: The recipes_oss/*.yaml catalog referenced in pyproject.toml package_data did not ship with v1.3.9 (verified absent from the installed wheel). Rather than resurrect an archived recipe pack, the shipped architecture is treated as source of truth.
pyproject.toml— removedrecipes_oss/*.yamlfrom package_data. Addedservices/policy_service/presets/*.yaml+agent/compression/slot_definitions.yamlwhich actually ship.tokenpak demo --list— no longer tells the user to reinstall (which wouldn't fix anything). New message explains: "TokenPak's compression is a deterministic pipeline, not a bag of YAML recipes," and points attokenpak demo(live compression),tokenpak recipe --help(custom recipes), andtokenpak status(see it running).- README — "50 recipes" claim dropped;
services/policy_service/presets/*.yamlcoverage (9 route-class presets) documented honestly.
P0-2 — setup command in quick help: tokenpak --help (first-run path) previously showed [start, demo, cost, status] — setup was registered in _COMMAND_GROUPS (A1, v1.3.8) but not in _QUICK_COMMANDS, so a first-time user seeing the quick help had no hint to run it. README's "One command to configure" promise was structurally invisible.
tokenpak/cli/_impl.py— prepended"setup"to_QUICK_COMMANDSso the first command a new user sees is the one the README promises.
Tests: no new tests added (the _QUICK_COMMANDS change is covered by the existing test_setup_registration.py smoke; the other two are packaging + copy). Conformance matrix 102/102 green; full suite green.