Sticky lifecycle validation

September 18, 2026 · View on GitHub

Evidence: 2026-09-18 UTC / 2026-09-17 São Paulo. The two final studies are now registered as current v12 evidence in the consolidated report; the v11 matrix remains historical and separate. Machine-readable results and provenance retain all 21 trials, including invalid development runs and failures. Raw traces remain private under .yoshi/runs/.

The implementation now freezes first-forwarded keep/omit decisions, adds paired completion results and action chronology to the judge, preserves human instructions and assistant notes, gates new work at 50,000 estimated tokens, and never automatically opts the caller into dropping reasoning. The historical snapshot lifecycle is explicit. No retroactive break-even heuristic is enabled: neither future request count nor the value of opaque reasoning can be known by the proxy.

Strict Fable evidence diagnostic

Real Claude Code, claude-fable-5-1, high effort; one trial per arm, eight serial source reads. The sticky gate is deliberately disabled (0), because this small task is below the default gate. Native clearing uses a diagnostic 1,000-token trigger, keeps two tool uses and clears at least 1,000 tokens. This is not a tuned native production policy.

ArmExact answerRequests / repeated callsAccumulated inputPeak inputCache writesSecondsJev calls / failures
baselinepass9 / 0115,45523,78723,75539.770 / 0
jev-stickypass9 / 075,75013,92412,610210.54301 / 3
nativepass14 / 2108,91410,16776,14263.090 / 0

Sticky reduced accumulated provider input by 34.39%, peak input by 41.46%, and cache-write tokens by 46.92% against this baseline. Both produced the exact expected answer; sticky made eight tool calls with no repeated identical calls. It applied 895 span occurrences across nine requests (repeated forwarding counts the same omission again; this is not 895 unique spans).

The structural audit checked 92 unchanged-prefix message comparisons, with 36 changed block occurrences authorized by recorded Jev verdicts and no retroactive prefix changes. Signed-block counts in successive sticky requests were 0, 1, 1, 2, 3, 5, 6, 8, 9. Every request used prefix_mismatch_behavior=error, actual omissions were replayed alongside signed blocks, all provider responses were successful, and no thinking_dropped transformation was reported. This establishes transport compatibility for this run, not that the model used its preserved reasoning.

The downside is substantial: wall time rose from 39.77 to 210.54 seconds. Three failed/deadline-limited Jev calls froze unfinished spans as retained. Their missing usage makes the combined provider-plus-judge cost unknown. Claude Code's own provider estimate fell from $0.63969 to $0.39440, but it excludes Jev and is not an invoice or a validated combined saving. Fable list pricing remains unestimated in the results.

Native clearing produced the correct answer in 63.10 seconds with a smaller 10,167-token peak, but used 14 provider requests, 13 tool calls, two repeated identical calls, and 76,142 cache-write tokens. Its client-reported provider estimate was $1.74326. These observations describe this deliberately aggressive single trial, not native editing in general.

Mixed live session at the default gate

Real Claude Code, claude-sonnet-5, low effort; four fixture reads alternating with four real local archive writes, separate output directories per arm. This uses the default 50,000-token heuristic gate and a native 50,000-token trigger. A disclosed 190,000-character synthetic system archive makes the context large; it is not a natural long engineering task. Sticky's small-candidate floor is set to zero in this diagnostic arm, so this is not every default option unchanged.

ArmExact answerRequests / repeated callsAccumulated inputPeak inputCache writesSecondsJev calls / failures
baselinepass9 / 0693,24182,85878,13935.140 / 0
jev-stickypass9 / 0693,46182,90878,189171.99142 / 3
nativepass9 / 0664,64075,70783,59428.010 / 0

All three exact answers passed. Sticky approved no omissions and incurred three Jev failures: there is no savings result here. Its 92 stable-prefix comparisons are vacuous for omission replay. This negative result is retained; growing the context alone does not guarantee useful pruning or justify judge cost. Native clearing lowered context in this trial, with higher cache writes than baseline. Sonnet provider list-cost estimates use the benchmark's historical price basis; sticky combined cost remains unknown because Jev usage is missing.

Development history and limits

  • sticky-v12-session-sonnet and sticky-v12-session-fable: invalid comparisons. A shared archive output directory made later arms hit existing files. The harness now creates an independent destination for every trial; no failing output was deleted.
  • sticky-v12-session-sonnet-isolated, sticky-v12-session-long, and sticky-v12-session-fable-isolated: intermediate classifier state repeated some task/passage fields. It was simplified to keep the existing Atomic state shape plus chronology. These runs had no omissions and are not promoted as final performance evidence. The earlier long native trial attempted a disallowed discovery command and failed; that failure remains in the dataset.
  • Final studies: sticky-v12-evidence-fable and sticky-v12-final-long. Their manifests freeze runtime and benchmark source hashes; audit hashes are in the public dataset. Later Responses-only identity hardening and test changes do not change the measured Messages path.
  • 43 canonical tests pass, along with TypeScript and lint. The existing suite covers new tails, persisted replay, human follow-ups, telemetry/cache-marker changes, concurrent retries, failure/gate retention, dry run, atomic result rules, paired results, byte-budget fallback and opaque Responses identity without exposing ciphertext to Jev. Model doubles are confined to external I/O. The real CLI runs and structural audits provide the final Messages integration evidence. Responses was tested over the local HTTP proxy; no new live Codex provider benchmark was run.
  • These are one trial per arm, not statistically reliable rankings. Some runs overlapped and provider latency varied. Missing costs remain missing. No quality, future-task recovery or reasoning-utilization guarantee follows from exact answers and transport acceptance.
  • Session continuity depends on the persisted decision store and unchanged policy/prefix. Its seven-day lifetime and 10,000-entry bound remain POC limitations; expiry, eviction, lost state, or client-side prefix edits can restore originals and invalidate provider caches/reasoning. See configuration.

Reproduction

Use the commands in benchmark instructions. Run bun run bench:audit <run-directory> after each complete trial matrix. The README figures now show both final v12 studies and all three arms, including the no-savings result. Historical v11 figures/data remain separately labeled. Run bun run bench:report and bun run bench:screenshots to regenerate the report and images from registered evidence.