Skip to content

v0.31.0 — config test seam, schedule-independent decay, honest search disclosure

Choose a tag to compare

@jmcentire jmcentire released this 12 Aug 23:04
· 47 commits to main since this release

What's in it

V1 — config resolution has a test seam. bind_root / unbind_root / bound_root / active_root let a test point kindex at a temp root after import, and every resolution follows: data_dir, the config-file search, the project-root walk, the MCP store accessor. Previously the only lever was $HOME before first import, so an in-process test resolved to the developer's live graph. Containment covers reads and writes, survives symlinks (checked after resolution, not before), and blocks the scheduler/daemon installers, which otherwise rewrite the real crontab and ~/Library/LaunchAgents.

V2 — weight decay is schedule-independent. Weight depends only on elapsed time, not on how often the job ran. At the shipped 5-minute cron over 90 days the old behaviour drifted 5.8e-4 from the closed form, past its stated tolerance; it is now exact. Per-row accounting keeps sub-threshold intervals from being discarded, detects external weight changes so reinforcement is not overwritten, and the checkpoint is monotonic against a backwards clock.

V3 — the fence note names exactly what --include-archived reveals, derived from the actual withheld set rather than a fixed string.

V4 — the degraded ledger does not lose events. The lock is non-blocking, so an error path can never hang a hook or an MCP turn, and a size-cap that races an append recovers it.

V5 — the backfill bound is honest in both directions. The candidate-window disclosure appears when the window truncated the candidates and stays silent when the corpus was simply exhausted. In --json mode it goes to stderr, keeping stdout parseable.

V6 — the MCP failure surface is testable in isolation: a broken store yields the typed memory-unavailable result without touching a real graph.

Also fixed

  • --include-archived silently lost the FTS index — malformed SQL was swallowed by a LIKE fallback, so the flag returned fewer rows than the default, unranked.
  • Git-tracked .kin/index.json and .kin/code-map.json no longer churn on every decay cycle.

No schema change; SCHEMA_VERSION stays 7.