Lossless Context Management for Hermes: hardens lossless replay and operator diagnostics while completing the WS5 engine decomposition.
Highlights
- Hardened lossless storage and replay boundaries for externalized payloads, persisted Hermes tool outputs, ignored-message drops, and redacted durable retries.
- Added stronger storage safety around lifecycle/DAG write serialization, monotonic frontiers, path-contained payloads, ReDoS-safe redaction, wrapped-base64 handling, summary spend limits, and future-schema rollback protection.
- Expanded operator surfaces with read-only
lcm_inspect, JSONL session export import, compression no-op status, compaction telemetry, and benchmark-backed preset validation. - Added steady-state hot-path benchmarking and CI-backed ruff linting so release validation catches performance/tooling regressions earlier.
- Completed and documented the WS5 behaviour-preserving engine decomposition into cohesive mixins and helper modules while keeping the public LCM surface stable.
Changes
- #295 Add benchmark-backed preset validation
- #298 Data-safety fixes: GC tombstone, ingest visibility, ignore-drop count, recall order
- #299 Memoize token counts and skip unchanged metadata commits
- #300 Serialize lifecycle/DAG writes and keep the frontier monotonic
- #301 Harden ingest protection: ReDoS-safe redaction, wrapped base64, path containment
- #302 Add a summary spend guard and a schema-too-new open guard
- #303 Add a steady-state per-turn hot-path benchmark
- #304 Reuse precomputed stored-row identities in the store-id map
- #305 Spike async compaction atomic publish
- #306 Add JSONL session export import
- #307 Add read-only LCM inspect tool
- #308 Recover persisted Hermes tool outputs losslessly
- #309 Expose compression no-op status
- #310 Bound ignored session context fallback
- #311 Hotfix: port missed PR 306 and 308 fixes
- #312 Use auxiliary usage for bypass checks
- #313 Fix strict persisted-output replay identity
- #314 Add a ruff lint configuration and CI gate
- #315 Harden JSONL import follow-up edge cases
- #316 Move metadata JSON read/write onto MessageStore
- #320 Add compaction telemetry (per-conversation snapshot)
- #322 Harden auxiliary lifecycle edge cases
- #323 Encapsulate MessageStore connection behind a public accessor
- #324 Move backup/rotate maintenance ops into maintenance.py (WS5 seam 3)
- #325 Extract active-context sanitizers into sanitize.py (WS5 seam 2)
- #326 Drive scalar env config from a declarative field spec (WS5.6)
- #327 Lift /lcm doctor session-stat scans into MessageStore (WS5.5)
- #328 Extract Codex OAuth route detection into codex_routing.py (WS5 seam)
- #329 Extract SQLite lock-contention helpers into sqlite_util.py (WS5 seam)
- #330 Extract plugin/git runtime-identity helpers into runtime_identity.py (WS5 seam)
- #331 Extract message tool-call/noise analysis into message_analysis.py (WS5 seam)
- #332 Extract active-engine registry into engine_registry.py (WS5 seam)
- #333 Extract placeholder-ledger bookkeeping into a mixin (WS5 Seam 1)
- #334 Extract the leaf-compaction pipeline into a mixin (WS5 Seam 6)
- #335 Extract ingest-cursor reconciliation into a mixin (WS5 Seam 4)
- #336 Document the WS5 engine decomposition and module layout
- #337 Extract auxiliary-session tracking into a mixin (WS5 Seam 5)
- #338 Prefer the host's explicit subagent signal over the call-stack frame walk (WS5.7)
- #339 Encapsulate DAG/lifecycle connections behind a public accessor (WS5.5)