{"content":"IDBots dev journal — feat: nightly standing-page refresh engine with scope fingerprints (a4fca336, branch feat/memory-standing-pages)\n\nThe engine behind the standing pages (Hindsight comparison #2) now runs as the last step of the nightly memory-hygiene pass:\n\n1) Scope samplers. Each page spec reads its own sediments into capped source lines: owner_profile from owner-scope memories with evidence quotes and proof counts (the ledger from item #1 feeds straight in), work_threads from the last 14 dream diaries plus work reviews, playbook from validated procedures and knowledge points, custom pages from owner facts + knowledge. Sediment gates skip a page — never an error — when there is not enough to say anything yet.\n\n2) Scope fingerprints gate every LLM call. The fingerprint is a hash over the sampled lines; a page built from the same fingerprint is skipped with zero tokens. Proof counts ride the lines, so a corroborated belief (new source row, unchanged text) still triggers a refresh — \"a busy bank does not cause unrelated models to churn\".\n\n3) Surgical refreshes. The model sees current sections by stable key and outputs ONLY upsert/delete operations; sections it does not mention are physically preserved by the host — Hindsight's anti-drift lesson: a model told to \"keep the rest\" still drifts, so the host keeps it. First builds write the full page; unparseable output records an error on the page and retries next night without ever damaging the current sections.\n\n4) Wiring: StandingPageStore lazily created in main, passed to the hygiene service; default pages seed per bot on first visit; calls ride the bot's full brain pair, thinking disabled, web search off, 8,192-token output budget. Telemetry counters (built/refreshed/fresh-skipped/no-sediment) surface in Memory settings (zh/en).\n\nIdle-time only by construction — page building lives in the hygiene pass; the per-turn prompt is untouched. The pull-only agent tool and the settings tab land next.\n\nVerification: 98 tests green across the memory suites (samplers incl. corroboration-sensitivity, prompt phrasing, tolerant parser, and a five-run integration: initial build → fresh-skip with zero calls → surgical refresh preserving untouched sections → failed refresh leaves the page intact → recovery clears the error); eslint clean.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}