Skip to content

v0.22.0

Choose a tag to compare

@github-actions github-actions released this 07 Jul 01:03
· 414 commits to main since this release
Immutable release. Only release title and notes can be modified.
1a984c1

What's Changed

  • refactor(llm): delegate gemini ApiError to map_error_response; docs(config): CandleConfig doc comment by @bug-ops in #4880
  • refactor(memory): remove ScoredCandidate wrapper and fix entered() span in tiered_retrieval by @bug-ops in #4881
  • fix(experiments): correct EvalReport total_tokens overcounting and improve evaluator tests by @bug-ops in #4888
  • refactor(llm): extract generation_params() helper and fix context_window fallback in OpenAiProvider by @bug-ops in #4889
  • perf(context),refactor(llm): add fidelity tracing spans and extract response body helper by @bug-ops in #4891
  • refactor(acp): bump agent-client-protocol to 0.14.0 by @bug-ops in #4893
  • feat(index): add embedding_provider config field and fix double provider construction by @bug-ops in #4894
  • refactor(subagent): add tracing span to resume and remove utc_now_pub by @bug-ops in #4895
  • fix(llm): add config-driven override for CompletionTokens resolution by @bug-ops in #4898
  • refactor(sanitizer,mcp): add guardrail tracing spans and fix mcp client span naming by @bug-ops in #4907
  • refactor(subagent): split manager.rs monolith into focused modules by @bug-ops in #4906
  • fix(acp): use thread::Builder with 8 MiB stack for agent connection thread by @bug-ops in #4908
  • refactor(config): replace stringly-typed fields with typed enums by @bug-ops in #4909
  • fix(acp,gateway): fix stdio stack overflow and sanitize webhook body by @bug-ops in #4911
  • fix(a2a): add TTL eviction to TaskManager and replace now_rfc3339 with chrono by @bug-ops in #4910
  • refactor(agent-feedback,scheduler): expose judge rate limit via config and add CronExpr newtype by @bug-ops in #4913
  • refactor(config): split migrate/mod.rs monolith into subsystem submodules by @bug-ops in #4914
  • refactor(config): split providers.rs monolith into per-family submodules by @bug-ops in #4915
  • refactor(llm): split router/mod.rs monolith into focused submodules by @bug-ops in #4920
  • refactor(core): split agent/persistence.rs into focused submodules by @bug-ops in #4921
  • refactor(config): split memory.rs monolith into per-concern submodules by @bug-ops in #4922
  • refactor(plugins): split manager.rs monolith into per-concern submodules by @bug-ops in #4927
  • refactor: extract inline test blocks to dedicated tests modules by @bug-ops in #4932
  • refactor(mcp): split manager.rs monolith into focused submodules by @bug-ops in #4931
  • refactor(core): split agent/mod.rs monolith into focused submodules by @bug-ops in #4933
  • chore(config,core,llm): post-split code-quality cleanup (#4926, #4928, #4929, #4930) by @bug-ops in #4934
  • refactor(tui): split app/mod.rs monolith into focused submodules by @bug-ops in #4938
  • refactor(config): dedup unit-interval validators and complete must_use sweep by @bug-ops in #4939
  • perf(acp): offload list_directory and find_path fs walks to spawn_blocking by @bug-ops in #4940
  • refactor(acp): extract session-usage and llm-providers clusters from agent/mod.rs by @bug-ops in #4942
  • docs(spec-064): refresh stale references after monolith splits by @bug-ops in #4959
  • feat(durable): scaffold zeph-durable crate, core newtypes, journal schema by @bug-ops in #4965
  • fix(db): restore postgres backend compile and sqlite/postgres parity by @bug-ops in #4966
  • feat(durable): payload AEAD cipher, AAD binding, max-payload fail-closed (#4945) by @bug-ops in #4967
  • feat(durable): journal writer actor, sealed backend, local durable.db backend (#4946) by @bug-ops in #4968
  • docs(agents): track all AGENTS.md guides and refresh review instructions by @bug-ops in #4969
  • feat(durable): durable step, &self context, and replay divergence guard by @bug-ops in #4970
  • feat(durable): durable promises, timers, and retention/compaction by @bug-ops in #4971
  • feat(durable): zeph durable CLI, config wiring, init wizard, migrate-config, TUI view by @bug-ops in #4972
  • refactor: add #[must_use] to public validate/scan functions across workspace by @bug-ops in #4974
  • feat(core): durable agent tool-loop steps with crash-resume (#4951) by @bug-ops in #4975
  • fix(subagent): offload blocking FS IO to spawn_blocking by @bug-ops in #4979
  • feat(tui,experiments): reverse search backward nav and subject error tolerance by @bug-ops in #4976
  • docs/refactor: fix acp intra-doc links and extract DRY helpers by @bug-ops in #4980
  • feat(durable): --json flag for durable CLI, remove dead TUI consts, degraded metric by @bug-ops in #4986
  • fix(init,config): sanitize provider env vars, fix embedding and eval_model prompts by @bug-ops in #4991
  • fix(init): align default config output path with runtime search order by @bug-ops in #4992
  • feat(durable,subagent): criterion benchmarks + durable subagent promise adapter by @bug-ops in #4994
  • refactor(experiments,init): rename eval_model → eval_provider, add XDG parity test by @bug-ops in #4999
  • fix(skills): use compact skill catalog when embedding matcher is unavailable by @bug-ops in #4998
  • feat(durable): P2+P3 durable adapters — replan budget restore and exactly-once scheduler fires by @bug-ops in #5001
  • fix(tui): add transcript scroll in Insert mode (PageUp/PageDown + mouse wheel) by @bug-ops in #4996
  • fix(durable): use AtomicU32 counter in append benchmarks to avoid UNIQUE violation by @bug-ops in #5002
  • refactor(tui) + docs(spec-063): scroll-step constant and panic=abort Drop limitation by @bug-ops in #5005
  • feat(skills): add built-in caveman ultra-compressed output mode by @bug-ops in #5008
  • spec(deep-link-scheme): add zeph:// URI scheme specification by @bug-ops in #5009
  • spec(knowledge-ingest): add specification for zeph knowledge ingest (spec-067) by @bug-ops in #5025
  • fix(orchestration): remove INV-1 violating deps and track durable writer handle by @bug-ops in #5028
  • fix(llm): apply restored reasoning_effort to active provider (Phase 2) by @bug-ops in #5031
  • feat(commands): add /undo and /redo slash commands with checkpoint stack by @bug-ops in #5029
  • fix(tools): checkpoint_undo(0) misleading message and has_traversal backslash bypass by @bug-ops in #5036
  • fix(core,config): de-dup CAVEMAN_DIRECTIVE injection and add migration tests by @bug-ops in #5034
  • test(context): add fidelity provider wiring assertions in apply_session_config by @bug-ops in #5038
  • feat(knowledge): add knowledge ingest CLI, ledger, and notes sink (#5016, #5017, #5018) by @bug-ops in #5040
  • test(core): add fidelity provider wiring tests for #5037 and #5039 by @bug-ops in #5042
  • feat(deep-link): Phase 1 — parser, config, cwd validation by @bug-ops in #5041
  • feat(memory): add provenance columns to graph tables + recall isolation flag by @bug-ops in #5044
  • feat(knowledge): wire IngestProgress channel in knowledge ingest (FR-014) by @bug-ops in #5049
  • fix(deep-link): add #[non_exhaustive] to DeepLinkError and gate DeepLinkConfig behind feature flag by @bug-ops in #5050
  • fix(llm): delegate context_window, supports_vision, last_reasoning_tokens in CompatibleProvider by @bug-ops in #5051
  • feat(knowledge): implement rollback command and TUI palette by @bug-ops in #5053
  • feat(deep-link): Phase 2 — CLI dispatch, bootstrap integration, TUI notification, --init wizard by @bug-ops in #5052
  • fix(knowledge): make rollback atomic across all three tables by @bug-ops in #5055
  • feat(memory): add graph batch extraction API (ingest_documents) by @bug-ops in #5056
  • research(knowledge): Phase 2 measurement spike + kill-criterion (#5022) by @bug-ops in #5058
  • feat(deep-link): Phase 3 — OS registration tests and playbook (spec-066) by @bug-ops in #5061
  • feat(deep-link): macOS .app bundle registration and stale url-scheme detection by @bug-ops in #5062
  • feat(acp): stateless POST /deep-link endpoint for zeph:// URI dispatch (spec-066 TASK-15, #5059) by @bug-ops in #5066
  • feat(knowledge): graph go-live for --source subagents + sanitizer on write path by @bug-ops in #5069
  • feat(tools): add policy_provider to PolicyConfig and utility_window hard-stop by @bug-ops in #5068
  • feat(knowledge): add external Claude Code / Codex transcript import (spec-067 Phase 3) by @bug-ops in #5070
  • fix(knowledge): validator bypass, graph_origin mismatch, blocking fs I/O by @bug-ops in #5112
  • fix(tools): resolve policy_provider by name in adversarial policy gate by @bug-ops in #5111
  • fix(config): surface config load errors and improve init wizard by @bug-ops in #5115
  • fix(tui): use display width instead of char count for CJK and emoji by @bug-ops in #5119
  • fix(config): scope step 63 idempotency check to [memory.graph] section by @bug-ops in #5120
  • test(init): add missing build_config tests for policy_provider and utility_window by @bug-ops in #5124
  • fix(tui): uniform ToolDensity matrix and unicode-aware table/wrap widths by @bug-ops in #5122
  • fix(memory,subagent): eliminate blocking sync I/O on async runtime threads (#5107, #5108) by @bug-ops in #5125
  • fix(core): eliminate blocking sync I/O and Mutex-across-await in agent commands by @bug-ops in #5155
  • fix(vault): wrap blocking I/O in spawn_blocking, use std RwLock, add tracing spans by @bug-ops in #5153
  • fix(acp): eliminate blocking I/O on async threads in permission and session handlers by @bug-ops in #5161
  • fix(durable): eliminate async violations in ReplayCursor and DurableHandle by @bug-ops in #5160
  • feat(tui): theme system 2.0 — semantic palette, presets, color-mode downgrade by @bug-ops in #5159
  • fix(db): wrap blocking I/O in spawn_blocking in connect_sqlite by @bug-ops in #5165
  • fix(llm,orchestration,mcp): eliminate blocking I/O on async threads by @bug-ops in #5174
  • fix(deep-link): add missing stale-detection tests and CI feature coverage by @bug-ops in #5175
  • refactor(channels): extract StreamingSend trait and migrate telegram spawns to TaskSupervisor by @bug-ops in #5184
  • fix(subagent,memory): eliminate async violations in SubAgentManager and RetrievalFailureLogger by @bug-ops in #5187
  • fix(tracing): add missing instrument spans to a2a, orchestration, and agent-context by @bug-ops in #5192
  • fix(tui): add expand/collapse affordance to grouped tool summary line by @bug-ops in #5193
  • fix(acp): advisory injection detection, async canonicalize, span instrumentation by @bug-ops in #5194
  • fix(channels,llm,core): wire TaskSupervisor into TelegramChannel and add embed_batch tracing spans by @bug-ops in #5197
  • feat(skills,commands): surface skill load failures and enrich /model+/provider help by @bug-ops in #5234
  • refactor(spawn): migrate direct tokio::spawn sites to TaskSupervisor by @bug-ops in #5240
  • feat(tui): theme switching, borderless UI, and dashboard restyle by @bug-ops in #5242
  • fix(index): eliminate async violations in zeph-index by @bug-ops in #5241
  • fix(runner): replace sync span guards and blocking fs I/O in async fn by @bug-ops in #5247
  • fix(async): eliminate blocking std::fs calls on async threads by @bug-ops in #5248
  • test(tui): add unit tests for /theme parsing and insta snapshots for rounded modals by @bug-ops in #5249
  • refactor(channels,core): migrate raw tokio::spawn to TaskSupervisor (#5146, #5147) by @bug-ops in #5250
  • refactor(spawn): migrate core, tools, and subagent tokio::spawn sites to supervised tasks by @bug-ops in #5253
  • fix(core): route lsp_hooks and notifications spawns through BackgroundSupervisor by @bug-ops in #5254
  • fix(async): eliminate blocking std::fs calls on async threads by @bug-ops in #5255
  • feat(tui): breeze spinner, human-voice status verbs, and splash wordmark by @bug-ops in #5256
  • refactor(channels): fix DiscordChannel dead supervisor field and remove SlackChannel::with_supervisor no-op by @bug-ops in #5257
  • fix(spawn): migrate skills/mcp/llm raw spawns to supervised tasks by @bug-ops in #5259
  • feat(memory): add tracing instrumentation to facade, graph store, and embedding store by @bug-ops in #5261
  • refactor(spawn): migrate remaining tokio::spawn sites to supervised tasks (#5149, #5150) by @bug-ops in #5260
  • fix(async): eliminate span.entered() across .await and blocking fs::read in async callers by @bug-ops in #5264
  • feat(tui): sidebar collapse, extended syntax highlighting, code block presentation by @bug-ops in #5263
  • feat(tracing): add instrument spans to llm router async fns by @bug-ops in #5262
  • refactor(agent-context, knowledge): eliminate two DRY violations by @bug-ops in #5265
  • feat(tracing): instrument hot-path async fns in subagent and agent-context by @bug-ops in #5267
  • feat(scheduler): add tracing instrumentation to scheduler and store hot paths by @bug-ops in #5266
  • feat(tracing): instrument hot-path async fns in zeph-core agent module (#5181, #5182, #5183) by @bug-ops in #5268
  • feat(config): migration step 66 — tui.theme active defaults (#5091) by @bug-ops in #5269
  • feat(durable): add tracing instrumentation to hot-path async fns by @bug-ops in #5270
  • feat(tui): status bar pressure abbreviation and live wave animation (#5101, #5096) by @bug-ops in #5271
  • feat(tracing): instrument hot-path async fns in learning, agent-context, and skills by @bug-ops in #5272
  • feat(tracing): add missing instrument spans in experiments, gateway, and index by @bug-ops in #5273
  • fix(ci): add full bundle check and fix compile errors under --features full by @bug-ops in #5274
  • feat(tracing): instrument hot-path async fns in zeph-memory qdrant/embed-registry/graph-retrieval by @bug-ops in #5275
  • feat(tui): dashboard restyle and tracing instrumentation (#5093, #5233) by @bug-ops in #5276
  • feat(tui): micro-delights — stream metrics, toasts, completion flash, smooth scroll, splash shimmer by @bug-ops in #5278
  • fix(memory): replace .entered() guard with .instrument(span) in ingest_documents by @bug-ops in #5280
  • feat(tracing): add tracing instrumentation to sanitizer, a2a, and candle crates by @bug-ops in #5282
  • fix(memory): fix .entered() span guard across .await and add tracing to trust/cache by @bug-ops in #5281
  • refactor(tracing): add instrument spans to memory and skills hot paths by @bug-ops in #5284
  • feat(tracing): instrument hot-path async fns in zeph-mcp, zeph-channels, zeph-vault by @bug-ops in #5285
  • feat(deep-link): add 30s timeout to lsregister in url-scheme commands by @bug-ops in #5283
  • feat(tui): reducer/action decomposition and opt-in mouse mode (#5076, #5103) by @bug-ops in #5294
  • refactor(skills): extract embed_skills_with_timeout and add tracing spans by @bug-ops in #5295
  • refactor(llm): extract ASI coherence helper and replace cascade expect() with Result by @bug-ops in #5299
  • fix(index): add embed_batch timeout and ensure_collection tracing span by @bug-ops in #5300
  • fix(tui): remove keys.rs DRY violation and route spawn_blocking through supervisor (#5296, #5297) by @bug-ops in #5319
  • fix(config): correct SchedulerConfig doc-comment and add cron/run_at validation by @bug-ops in #5317
  • fix(tui,worktree): offload blocking std::fs I/O to spawn_blocking by @bug-ops in #5320
  • feat(llm): add profiling tracing spans to private async fns in claude/openai/ollama backends by @bug-ops in #5324
  • fix(core,plugins): remove match_same_arms and enforce PluginName at deserialization by @bug-ops in #5326
  • refactor(bench): extract write_atomic, add tracing spans to tau2_bench driver and envs by @bug-ops in #5327
  • feat(tracing): add instrument spans to zeph-llm, zeph-subagent, zeph-plugins by @bug-ops in #5329
  • refactor(tui): migrate 27 TuiCommand variants from execute_command into reducer by @bug-ops in #5330
  • fix(channels,tracing): annotate guest proxy spawn + instrument runner startup fns by @bug-ops in #5331
  • feat(tracing): add missing instrument spans to scheduler, worktree, and commands by @bug-ops in #5332
  • feat(tracing): instrument async fns in zeph-mcp manager/ and zeph-context summarization by @bug-ops in #5333
  • fix(llm): remove profiling feature gate from candle tracing spans by @bug-ops in #5335
  • test(tui): add regression tests for poll_pending_theme and apply_theme async dispatch by @bug-ops in #5334
  • docs(cocoon): add threat IDs, attestation monitoring checklist, and spec gap fixes by @bug-ops in #5340
  • feat(hooks): add conditional if filter and agent context to hook payloads by @bug-ops in #5341
  • spec(068-session-persistence): session persistence, event log replay, and zeph serve mode by @bug-ops in #5344
  • fix(llm): make tracing instrument spans unconditional in zeph-llm backends and router by @bug-ops in #5345
  • feat(security): MATRA threat model spec + NetworkScope/AssetSensitivity in orchestration by @bug-ops in #5342
  • feat(tui): TUI design polish — status bar redesign and input prompt glyph update by @bug-ops in #5346
  • chore(deps): update dependency telethon to >=1.44.0 by @bug-ops in #5353
  • chore(deps): update debian:bookworm-slim docker digest to 60eac75 by @bug-ops in #5347
  • chore(deps): update ghcr.io/bug-ops/zeph:latest docker digest to aaea3b9 by @bug-ops in #5348
  • chore(deps): update github-actions by @bug-ops in #5349
  • chore(deps): update ollama/ollama:latest docker digest to c484b70 by @bug-ops in #5350
  • chore(deps): update rust:1.96-slim docker digest to c37af73 by @bug-ops in #5351
  • chore(deps): update qdrant/qdrant docker tag to v1.18.2 by @bug-ops in #5352
  • chore(deps): update grafana/grafana docker tag to v13.1.0 by @bug-ops in #5354
  • chore(deps): update rust crate tower-http to 0.7.0 by @bug-ops in #5355
  • chore(deps): update rust-minor-patch by @bug-ops in #5356
  • chore(deps): update github-actions (major) by @bug-ops in #5357
  • chore: bump MSRV to 1.96 and migrate to assert_matches! by @bug-ops in #5360
  • chore(deps): refresh cargo lock file by @bug-ops in #5359
  • build(db): upgrade sqlx 0.8.6 to 0.9.0 by @bug-ops in #5363
  • refactor(acp)!: migrate zeph-acp to agent-client-protocol 1.0.1 by @bug-ops in #5369
  • feat(mcp)!: migrate to rmcp 2.0 and render full ContentBlock union by @bug-ops in #5371
  • test(mcp): add in-process duplex-transport MCP integration test by @bug-ops in #5372
  • feat(acp): add model_config temperature option and cancel_request bridge by @bug-ops in #5375
  • fix(db,memory,index): add Postgres runtime coverage for dynamic-SQL paths by @bug-ops in #5376
  • test(acp): cover store-backed resume_session reconstruction path by @bug-ops in #5378
  • fix(acp): load resolved config in model-config show, inherit session-config on fork/resume by @bug-ops in #5383
  • fix(knowledge): create Qdrant documents collection before ingest by @bug-ops in #5385
  • test(ci): wire zeph-memory/zeph-index postgres integration tests into CI by @bug-ops in #5386
  • fix(a2a): close SSRF DNS-rebinding TOCTOU and redirect bypass, replace boolean-blind with_security by @bug-ops in #5389
  • test(memory): add Postgres coverage for acp session_config round-trip by @bug-ops in #5390
  • fix(knowledge): bound embed-provider calls with a timeout in ingest path by @bug-ops in #5391
  • refactor(memory,index): extract shared probe+ensure_collection helper by @bug-ops in #5392
  • refactor(memory): finish probe-then-ensure_collection dedup by @bug-ops in #5400
  • fix(orchestration): stop populating verify_predicate when the gate is disabled by @bug-ops in #5405
  • fix(orchestration): raise recursion limit to fix release build overflow by @bug-ops in #5407
  • fix(worktree): drop stale handle when branch prune fails after remove by @bug-ops in #5411
  • fix: prevent stack overflow crash in zeph --daemon startup by @bug-ops in #5406
  • fix: expand ~ in file-tool paths, allow durable --reveal without key by @bug-ops in #5413
  • fix(knowledge): thread --provider through notes-sink ingest and accept batch-id prefixes in rollback by @bug-ops in #5416
  • fix(acp): add recursion_limit to zeph-acp test crate root; add release-build CI gate by @bug-ops in #5417
  • fix(plugins): enforce dependency and skill-path validation parity in auto-update by @bug-ops in #5423
  • fix(tools): expand leading ~ in diagnostics, cwd, and search-code path arguments by @bug-ops in #5424
  • ci: run release-build check only on main pushes by @bug-ops in #5430
  • fix(durable): attach AEAD cipher on write paths when encrypt_payload=true by @bug-ops in #5436
  • feat(session)!: implement session persistence, event log replay, and zeph serve mode by @bug-ops in #5446
  • fix(session): route default CLI continuation through hydrate_and_condense by @bug-ops in #5454
  • fix(gateway,sanitizer): classify webhook input as ExternalUntrusted before agent ingestion by @bug-ops in #5459
  • fix(llm): load classifier.bias in candle PII NER head by @bug-ops in #5461
  • fix(knowledge): stop destructive Qdrant recreate and zero-truncated graph extraction in ingest by @bug-ops in #5462
  • fix(session): guard against store-query errors and hydration-retry narrowing in init_session_sink by @bug-ops in #5468
  • fix(channels,core): classify channel-adapter input as ExternalUntrusted before agent ingestion by @bug-ops in #5473
  • fix(session): pair tool-result events correctly in session replay by @bug-ops in #5476
  • fix(core): wire durable agent_turns/subagent and parameter_reformat_provider by @bug-ops in #5477
  • refactor(mcp): extract shared rmcp Tool -> McpTool conversion helper by @bug-ops in #5485
  • fix(orchestration): correct timestamp corruption and pipeline duplication by @bug-ops in #5483
  • fix(context): guard assembler memory fetchers with timeouts, dedupe budget loop by @bug-ops in #5489
  • fix(memory): guard Qdrant gRPC calls with timeout, dedupe EmbeddingStore payload logic by @bug-ops in #5499
  • fix(memory): route all raw and mis-numbered SQL through sql!() for Postgres by @bug-ops in #5505
  • fix(core): wire ShadowSentinel Postgres SQL and cross-session detection by @bug-ops in #5516
  • fix(session): serialize SessionEventLog writes and stop silent seq collisions by @bug-ops in #5517
  • fix(db): parse SQLite ?N placeholders correctly in sql!() for Postgres by @bug-ops in #5521
  • fix(memory): route agent_sessions.rs and unixepoch() sites through dialect-aware SQL for Postgres by @bug-ops in #5528
  • fix(llm): resolve candle_pii NER test defect and broken doc link by @bug-ops in #5529
  • fix(security): wire PAAC secret masking and SONAR NLI injection detection by @bug-ops in #5532
  • fix(memory): route datetime('now') and NUMERIC/TIMESTAMPTZ sites through dialect-aware SQL for Postgres by @bug-ops in #5537
  • fix(core): stop cancelled tool_calls from corrupting message history by @bug-ops in #5541
  • fix(memory): three independent P2 gaps in zeph-memory (timeouts + metadata restoration) by @bug-ops in #5542
  • fix(memory): document RL admission strategy fallback warning (#5543) by @bug-ops in #5554
  • fix(durable): namespace durable.db journal per-database to stop ExecutionId collisions by @bug-ops in #5557
  • fix(testing): mitigate orphaned postgres testcontainers with no ryuk reaper by @bug-ops in #5558
  • fix(core): gate shutdown LLM calls behind --bare and fix ACP model-switch lag by @bug-ops in #5559
  • fix(serve): sanitize zeph serve HTTP prompt bodies as ExternalUntrusted by @bug-ops in #5562
  • fix(acp): wire provider_names into build_agent_state so providers/list is no longer empty by @bug-ops in #5563
  • fix(memory): reactivate three dormant write paths in zeph-memory by @bug-ops in #5568
  • fix(db,memory): route compacted_at Postgres writes through to_timestamp by @bug-ops in #5570
  • fix(memory): sweep TIMESTAMPTZ->String decode defect across zeph-memory by @bug-ops in #5560
  • fix(tools): wire diagnostics tool and bound search_code recursion by @bug-ops in #5574
  • fix(sanitizer): harden PII detection across entry points and free-text names by @bug-ops in #5582
  • fix(memory): decode remaining Postgres INTEGER columns as i32 not i64 by @bug-ops in #5583
  • fix(serve,daemon): wire debug dumper into serve-sessions and daemon paths by @bug-ops in #5585
  • fix(memory): graph-extraction cancellation and hot-path write timeouts by @bug-ops in #5587
  • fix(tools): wire search_code into daemon and fix symlink walk safety by @bug-ops in #5589
  • fix(tools,core): stop live turn stall when Qdrant is unreachable by @bug-ops in #5590
  • fix(llm): add gonkagate live smoke test for unreachable gonka URLs by @bug-ops in #5592
  • test(memory): pin the SkillVersionTuple Postgres INTEGER decode fix by @bug-ops in #5593
  • fix(skills): bound SkillGenerator LLM calls with a timeout by @bug-ops in #5594
  • fix(tui): differentiate daemon palette command messages by @bug-ops in #5598
  • fix(db): cache postgres sql! macro rewrite per call site instead of leaking on every call by @bug-ops in #5597
  • fix(scheduler): construct test_pool via DbConfig::connect for postgres compatibility by @bug-ops in #5599
  • fix(core): wire provider_pool into ACP/serve/daemon agent construction by @bug-ops in #5604
  • fix(config): sum migrate-config summary counts across all migration passes by @bug-ops in #5605
  • fix(db): resolve postgres feature E0308 errors and widen CI coverage by @bug-ops in #5606
  • fix: postgres in-memory backend runtime failures and provider fallback masking by @bug-ops in #5607
  • fix(tools): require confirmation for unconfigured tools in Supervised mode by @bug-ops in #5609
  • fix(core,channels): correct misleading /image path-rejection message by @bug-ops in #5612
  • fix(scheduler,orchestration,subagent): gate remaining :memory: test-pool sites behind sqlite-only cfg by @bug-ops in #5613
  • fix(ci): widen nextest leak-timeout for zeph-index spawn_blocking tests by @bug-ops in #5616
  • fix(memory): surface folded-message count in live /compact command by @bug-ops in #5614
  • perf(memory): batch entity-name resolution in graph_recall_beam by @bug-ops in #5618
  • fix(tools,acp): enforce quarantine trust gate across full ACP/daemon executor tree by @bug-ops in #5621
  • refactor(memory): extract duplicated dedup helpers in skills/recall paths by @bug-ops in #5619
  • fix(acp,daemon): wire PolicyGateExecutor and AdversarialPolicyGateExecutor into ACP and daemon by @bug-ops in #5624
  • fix(memory): anchor tech-doc extraction on specific artifacts to reduce hub-degree skew (#5467) by @bug-ops in #5626
  • fix(serve,acp): surface session-lock degradation via metric and notification by @bug-ops in #5622
  • test(tui): add dedicated unit tests for detect_unicode_capable by @bug-ops in #5630
  • fix(db): restore sqlite/postgres compile-time mutual exclusivity by @bug-ops in #5633
  • fix(core): satisfy non-exhaustive AcpTransport match without acp-http by @bug-ops in #5628
  • feat(memory): wire Qdrant gRPC timeout through to configuration by @bug-ops in #5634
  • refactor(memory): deduplicate graph/store/mod.rs batch constants and edge/BFS/community logic by @bug-ops in #5635
  • fix(memory): close three async/DB hygiene gaps in zeph-memory by @bug-ops in #5637
  • feat(serve,acp): run ACP transport in-process with zeph serve-sessions --acp by @bug-ops in #5638
  • refactor(memory): dedupe sweep clustering, admission gate, and bg-embed logic by @bug-ops in #5636
  • refactor(memory): deduplicate router classification and SemanticMemory constructors by @bug-ops in #5639
  • refactor(core): split rebuild_system_prompt and fix agent hot-path blocking I/O by @bug-ops in #5641
  • refactor(agent-context): deduplicate graph-strategy dispatch and three minor DRY shapes by @bug-ops in #5642
  • refactor(cargo): split default feature arrays and simplify postgres cfg guards by @bug-ops in #5643
  • refactor(memory): deduplicate SQLite-datetime, ingest doc building, and LLM-judge/embed fail-open helpers by @bug-ops in #5644
  • fix(agent-context): rebuild skill registry off-lock in prepare_context by @bug-ops in #5645
  • refactor(core): extract shared provider-pool and debug-dumper wiring helpers by @bug-ops in #5648
  • fix(tools): stop utility gate from vetoing direct-action tool calls by @bug-ops in #5658
  • fix(agent): repair orphaned tool_calls after process-kill-and-resume by @bug-ops in #5674
  • fix(channels): recognize exit/quit commands in JsonCliChannel::try_recv by @bug-ops in #5675
  • fix(config): stop condense_provider defaulting to unresolvable "fast" by @bug-ops in #5682
  • fix(llm): retry chat_with_tools and classify 429/503 correctly in send_with_retry by @bug-ops in #5695
  • fix(core): enforce atomic daemon single-instance guard via flock by @bug-ops in #5697
  • fix(core): timeout, provider-match, and tool_call_id fixes by @bug-ops in #5704
  • fix(llm): provider robustness — Cocoon retry, supports_tool_use default, embed_batch timeout by @bug-ops in #5703
  • fix(llm): add SHA-256 integrity verification to Candle model loaders by @bug-ops in #5705
  • fix(llm): add tool-support escalation to TriageRouter::chat_with_tools by @bug-ops in #5706
  • fix(llm): fix CandleNerClassifier bias-tensor bug and dedupe Claude retry logic by @bug-ops in #5708
  • fix(tools): close utility gate mcp_* stall with opt-in high_gain_tools by @bug-ops in #5711
  • refactor(core): dedup digest pipeline, cancellation handling, fix blocking git call by @bug-ops in #5715
  • fix(sanitizer,core): scrub PII before spotlight-wrapping tool output by @bug-ops in #5710
  • fix(skills): treat missing skill trust-map entry as Trusted, not Quarantined by @bug-ops in #5718
  • fix(skills): stamp stable proactive_domain marker to close has_knowledge() idempotency gate by @bug-ops in #5726
  • fix(core): offload benchmark file load to spawn_blocking by @bug-ops in #5727
  • fix(tools,core): honor mandated-retry contract in utility gate, fix MCP id matching and cancel ordering by @bug-ops in #5730
  • fix(tools,skills): name active skill set in quarantine-denial message by @bug-ops in #5737
  • fix(sanitizer,llm): gate CandleNerClassifier BIO spans on confidence threshold by @bug-ops in #5735
  • fix(core,tools,mcp): identify MCP tools via ToolDef.server_id, not name prefix by @bug-ops in #5738
  • fix(core): preserve calls/tool_calls index alignment on tafc strip failure by @bug-ops in #5739
  • fix(memory): scope Key Facts recall to conversation_id by @bug-ops in #5741
  • fix(tools): make ShadowProbeExecutor short-circuit quarantined tool calls by @bug-ops in #5745
  • fix(index): throttle full-repo indexing to stop blocking interactive turns by @bug-ops in #5746
  • fix(core,tools,tui): detect MCP tool origin via ToolDef.is_mcp_tool, not name prefix by @bug-ops in #5748
  • test(core): add regression coverage for MCP cross-boundary server id resolution by @bug-ops in #5751
  • fix(core,tools): refresh TrustGateExecutor MCP tool-id registry after startup by @bug-ops in #5752
  • fix(memory): disambiguate conversation_id across databases sharing one Qdrant instance by @bug-ops in #5753
  • fix(llm): add explicit supports_tool_use() override to CandleProvider by @bug-ops in #5754
  • fix(core): decouple ShadowSentinel probe engagement from keyword risk tiering by @bug-ops in #5756
  • fix(core,tui): thread MCP tool origin through ToolStartEvent to TUI classification by @bug-ops in #5757
  • refactor(common,memory,mcp,context,llm,core): dedup truncation, similarity, and JSON extraction by @bug-ops in #5758
  • refactor(memory,core): dedup graph edge-fold, count-sync, and sanitize logic by @bug-ops in #5759
  • refactor(core): dedup call_non_streaming, LayerContext, and spawn_oneshot dispatch by @bug-ops in #5760
  • fix(core): unify cocoon client gating and dedup correction-signal logging by @bug-ops in #5761
  • refactor(commands,core,skills): dedup command-output silence, skill version-activation, and prompt-template branches by @bug-ops in #5762
  • refactor(core): dedup conversation reset, graph lookup, and sentinel persist logic by @bug-ops in #5763
  • refactor(experiments): remove dead code and dedup generator constants by @bug-ops in #5767
  • refactor(core,common,context,agent-context,mcp,memory,index): dedup spawn_oneshot, ChatJsonError conversion, and context-budget resolution by @bug-ops in #5768
  • fix(llm): thread Cocoon STT status_tx and demote timed-out router providers by @bug-ops in #5772
  • test(core): close coverage gaps in graph queries, conversation reset, and shadow sentinel by @bug-ops in #5769
  • fix(core): dedup test-shim invariant drift and remove dead adapter code by @bug-ops in #5771
  • fix(llm): send flat reasoning_effort field to OpenAI Chat Completions by @bug-ops in #5776
  • refactor(core): dedup trust rollout, hover line-parsing, and graph-timeout helper by @bug-ops in #5777
  • fix(core,agent-context): set compaction_last_at_ms on all compaction paths by @bug-ops in #5778
  • fix(core): break unbreakable utility-gate Retrieve/memory_search retry loop by @bug-ops in #5787
  • fix(tui): route slash-command autocomplete and typed submission through Action::Dispatch by @bug-ops in #5788
  • fix(tui): humanize status bar busy label and use breeze spinner by @bug-ops in #5791
  • fix(llm): surface actionable error for reasoning_effort + tools on Chat Completions by @bug-ops in #5795
  • fix(memory): HELA timeout budgets and turn_index provenance gaps by @bug-ops in #5794
  • fix(skills): make symlinked SKILL.md discoverable and traversal warning reachable by @bug-ops in #5792
  • fix(tui): treat space/colon/hyphen as equivalent in command fuzzy matcher by @bug-ops in #5797
  • fix(db): restore cfg guards dropped by #5633, fixing --all-features doc build by @bug-ops in #5798
  • refactor(common,core,scheduler): consolidate flock pid-file guard into zeph-common by @bug-ops in #5799
  • refactor(channels): extract shared ConfirmLoop trait for confirm() dedup by @bug-ops in #5800
  • fix(skills): implement Qdrant vector retrieval for RL rerank by @bug-ops in #5804
  • fix(memory): dedup snapshot timestamp helper, add missing test coverage by @bug-ops in #5802
  • refactor(durable): deduplicate notify-or-poll wait loop by @bug-ops in #5807
  • ci: fix change-detection gaps and dedup integration test runs by @bug-ops in #5806
  • fix(orchestration,mcp): qualify ON CONFLICT self-references for Postgres by @bug-ops in #5808
  • fix(llm): router falls back on model capability mismatches, add CandleProvider vision override by @bug-ops in #5810
  • fix(skills): normalize in-memory skill embeddings to unit length by @bug-ops in #5812
  • fix(skills): scope unused-lint allow to qdrant-off build in refresh_skill_embeddings by @bug-ops in #5814
  • fix(memory): use locally-authoritative entity id for graph edge FK targets by @bug-ops in #5815
  • fix(core): apply semantic_scan config at initial agent construction by @bug-ops in #5817
  • fix(llm): preserve last provider error in embed/embed_batch fallback loops by @bug-ops in #5820
  • fix(acp,server,skills): wire config.skills.* into ACP/serve agent construction by @bug-ops in #5823
  • test(memory): close low-severity test-coverage gaps from #5815 FK-violation fix by @bug-ops in #5822
  • refactor(memory): consolidate SqliteStore naming, remove WriteBuffer dead code by @bug-ops in #5824
  • fix(llm): preserve last provider error in chat/chat_stream fallback loops by @bug-ops in #5825
  • fix(subagent): route WorktreeCleanupGuard cleanup through TaskSupervisor by @bug-ops in #5828
  • fix(llm): preserve last provider error in cascade_chat fallback exhaustion by @bug-ops in #5829
  • test(core): add build_agent test seam for startup wiring regressions by @bug-ops in #5831
  • fix(acp,server,skills): wire with_semantic_scan into ACP/serve agent construction by @bug-ops in #5830
  • fix(skills,core): dedupe SKILL.md frontmatter-patching logic, fix missing newline by @bug-ops in #5832
  • refactor(a2a): deduplicate processor-drain and artifact-finalization logic by @bug-ops in #5833
  • ci: harden release-build gating and bump nextest leak-timeout by @bug-ops in #5835
  • test(core): add build_daemon_agent test seam for daemon startup wiring by @bug-ops in #5836
  • fix(orchestration): forward zeph-memory sqlite/postgres features explicitly by @bug-ops in #5837
  • fix(orchestration): gate llm-planning test sites and cover postgres feature in CI by @bug-ops in #5842
  • docs(sanitizer): fix shadow_memory wiring doc comment and spec-040 layer table by @bug-ops in #5843
  • perf(session): bound replay memory via chunked event-log read by @bug-ops in #5844
  • feat(core): log RL re-rank success path for cross-backend parity verification by @bug-ops in #5847
  • test(session): cover chunked-replay torn-tail and up_to boundary paths by @bug-ops in #5848
  • test(core): add real-Agent NFR-P7 idle-session memory bench by @bug-ops in #5849
  • fix(skills): close RL rerank warmup TOCTOU and add test coverage by @bug-ops in #5850
  • release: v0.22.0 by @bug-ops in #5853

Full Changelog: v0.21.4...v0.22.0