v0.30.0 — reliability batch
Reliability batch — four defects that were silently degrading kindex, each found by audit and verified by an independently-authored acceptance suite.
Fixed
End-of-session capture actually runs. The installed Stop hook passed --text "Session ended", which preempted the hook envelope on stdin — so kin compact-hook extracted knowledge from a 13-character literal instead of your session transcript, and could spend an LLM call doing it. Stdin envelopes now take precedence, kin setup installs the Stop entry without --text, and re-running setup migrates broken entries.
Memory failure degrades the turn instead of crashing it. Hook commands tracebacked with a nonzero exit on any store failure, visible only in transient hook stderr — sessions silently started blind. They now emit a shaped degraded output, exit 0, and append one JSON event per failed invocation to degraded.jsonl in the base data directory (a plain file append that works when SQLite is what broke). kin status and kin doctor surface the 7-day count. Every MCP tool returns Error: memory unavailable (…) instead of a protocol error.
Archived and superseded nodes stay out of retrieval. Search fenced only superseded nodes, so archived content remained a first-class candidate in FTS, vector, and hybrid results, in context formatters, and in topicless MCP pulls. All default paths now fence both; --include-archived restores the old behavior, and a short result set tells you how many results were fenced. hybrid_search backfills after drop-filtering instead of quietly returning fewer results than requested.
Weight decay is cadence-independent. Each cron pass re-applied a factor computed from a node's full age to its already-decayed weight, so the effective half-life depended on how often cron ran — at a five-minute cadence, weights collapsed roughly fifty times faster than the documented 90 days. Decay now folds only the interval since the last recorded run.
Changed
The mcp extra is pinned to mcp[cli]>=1.26.0,<2.0. The unbounded pin resolved to mcp 2.0.0, which the MCP server module cannot run against — fresh pip install kindex[mcp] installs were producing a server that would not start.
Provenance
Built with the Validator/Coder/Tester discipline: the tests were authored by a lane that never saw the implementation, and failed against the unfixed code before passing against the fix. Signed specifications, review dispositions, incidents, and declared gaps are in .factory/runs/batch0/.