Hypothesis
Honcho identity-routing settings were cached by (path, mtime_ns). A rapid same-size rewrite can preserve the same timestamp and evade that key.
Reproduction
A deterministic test wrote two different userPeerAliases maps with identical byte length, forced both writes to the same nanosecond timestamp, and read through the gateway cache-busting path. The mtime-only implementation returned the stale signature.
Candidate evolution
The first candidate used a whole-file SHA-256 digest. Phase 2 tightened the boundary:
- Read and parse
honcho.jsononce. - Extract only the identity-routing fields that can invalidate the agent cache.
- Serialize that stable subset and hash it.
- Use the content-derived signature as the memo key.
This removes the same-mtime blind spot, prevents TOCTOU disagreement between separate read/hash steps, and avoids invalidation for unrelated JSON changes.
Result
- Synthetic cross-platform routing matrix: 10/10.
- Honcho plugin suite at the original candidate boundary: 424 passed.
- Focused gateway cache tests and downstream topology tests: PASS.
- Concurrency benchmark: 100/100 reads, 1 distinct digest, 0 errors, 78.79 ms total.
- Exact-head GitLab jobs: all
success. - Candidate canary on Bunsen: PASS.
- Merged into the
ai/hermes-agentfork. - Bunsen still has Honcho disabled; no live memory service or user history was touched.
Promotion boundary
This is promoted to the fork, not to Herman. Herman remains unchanged until the lab’s final release candidate and sustained canary are complete and Jon explicitly authorizes a production move.
Falsifier
Reopen the fix if concurrent same-size rewrites produce multiple signatures for one stable document, if unrelated fields invalidate the cache, or if the focused gateway tests regress on the final fork head.