73f68362b3
Flip the state.db retention defaults per Teknium's decision on #54189: - sessions.auto_prune: false -> true. A stock install now prunes ENDED sessions inactive for retention_days at CLI/gateway/cron startup (at most once per min_interval_hours). Open, pinned and mid-turn sessions are never deleted; the only open rows touched are stale automation sessions (#100903 sweep), which are closed, not deleted, and aged a further full window before removal. - sessions.retention_days stays 90 (already the default; verified). - Auto-VACUUM is now additionally gated on the reclaimable fraction of the file: PRAGMA freelist_count / page_count must exceed 25% (AUTO_VACUUM_MIN_FREELIST_RATIO) on top of the existing min_vacuum_interval_days throttle. Pruning a few small sessions on a dense multi-GB DB no longer rewrites the whole file to reclaim a few MB. Unknown ratio (pragma read failure) falls back to the time throttle. Existing installs that explicitly set any sessions.* key keep their values (load_config deep-merges DEFAULT_CONFIG under user YAML); only unset keys pick up the new defaults. No _config_version bump needed. cli-config.yaml.example documents the section commented-out so installers that copy it verbatim never pin these as explicit settings. Tests: ratio gate (below/above/at-threshold/unknown/override), real-DB freelist ratio, default assertions, fresh-config startup hook reaches the prune call, explicit opt-out respected, template-does-not-pin-keys.