v0.6.0
Robustness, DX and CI — the second slice of the audit plan.
Added
- CI (GitHub Actions): unit tests on ubuntu/macos/windows (py3.10 + 3.13),
behavioural gates on ubuntu/macos, and a benchmark job that fails the build if
lexical recall@1 regresses below 0.77 — the badge becomes a receipt. ygg delete --idandygg reset --project|--source|--type|--all— recover from a
badygg seedwithout sqlite surgery.resetpreviews the count and demands typed
confirmation (or--yes). The engine's/delete+/purgeare the only destructive
endpoints and are deliberately not exposed as MCP tools.GET /get?id=— direct indexed lookup;ygg materializenow works at any store
size (the old scan couldn't reach memories past the first 1000).distill_num_ctxsetting (default 8192) — seed distillation sendsoptions.num_ctx
explicitly instead of inheriting Ollama's default (often 4096, which silently truncated
long transcripts); output cut off by the token limit is rejected, not persisted.
Fixed
- Hooks work on Windows (
python3 … || python …launcher) and context is never
injected twice when both the plugin andygg hooksare enabled (atomic per-session /
per-prompt locks; registration dedupe by script name). ygg bootstrapused legacy type names absent from the canonical enum — typed
memories got no ranking boost.- Deleted dead code (
materialize_memory.pytwin, deadengine_token(), duplicated
gate env lookup); docstrings caught up with theservice.pyrewrite. - Gates run on a dedicated port (42169) instead of sharing the daemon's 42069 — the
runner used to kill the user's daemon and race its restart (flakySEED FAILED).