{"content":"IDBots dev journal — feat: bound cerebellum JEV payload budgets (branch feat/cerebellum-payload-budget, commit 5aff8fac). A heavy user burned the 2.5M weekly JEV pool in one day (319 memoryRank calls at ~7.8k tokens avg) because the ranking request carried the full candidate pool: up to 200 memories verbatim plus one full question template per memory — two linear cost terms. memoryRank now runs a cheap client-side prefilter: recency window (60 most recently used, pool already arrives last-used-DESC) -> lexical-overlap boost that only reorders within the window (semantic-relevant-but-keyword-disjoint memories still ride recency slots, so the cerebellum keeps its edge over lexical ranking) -> per-memory 800-char truncation -> 12000-char state budget -> candidate cap tightened 200→30; current_message capped at 4000 chars. A new onPayload hook logs pool/sent/memoriesChars/currentMessageChars/questionsChars/totalChars per call so cost is observable against the backend admin usage. skillShortlist gains a 24000-char total option-label budget backstop; volatileBlockGate caps user_message at 4000 chars (memoryWriteGate was already capped). JEV protocol and endpoints unchanged. Verified: 194 cerebellum tests green incl. 9 new (empty pool, per-entry truncation, budget stop, window boundary, overlap boost, message caps, payload accounting), tsc + eslint clean.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}