v0.35.5
Released Jul 21, 2026. Part of the OpenKnowledge changelog.
Patch Changes
- Bug-report bundles now capture why the server died and what the MCP server was doing. A fatal server crash (uncaught exception or unhandled rejection) writes a synchronous
last-server-crash.jsonrecord — timestamp, error name/message/stack, pid, uptime — under.ok/local/plus a final fatal line in the server log, both collected intook bug-reportandok diagnose bundleoutput; previously a hard crash lost the async log sink's tail and bundles could only say "server not running". The global MCP stdio server's[mcp]stderr diagnostics are now also mirrored to~/.ok/logs/mcp.<date>.log(pruned at each startup by a 7-day age window and an aggregate size cap), so bundles include the agent-ingress diagnostics that previously landed only in the MCP host's own log folder. - The
execMCP tool's post-command mutation safety sweep is now scoped to the paths the command can actually touch (its own path operands), instead of statting up to 1000 files across the whole knowledge base twice on every call. Path-scoped commands likecat notes/a.mdorgrep -rn oauth articles/now sweep only those paths, making exec noticeably cheaper on large knowledge bases. When the sweep does cover the whole tree (barels,find, recursivegrepwith no directory) and the corpus exceeds the 1000-file scan cap, the response now carries an explicit warning that mutation detection was partial, instead of silently presenting a capped sweep as full coverage. - The sidebar's page directory no longer storms the server during bulk agent writes. File-change pushes now coalesce into a single trailing refetch (~300 ms window) instead of refiring the full page-list and document-list walk on every push, so an agent writing many files per second no longer triggers ~10 full corpus refetches and index rebuilds per second. The initial load and manual refreshes stay immediate.
- New operational metrics for cloud/server operators (all zero-overhead when telemetry is disabled): event-loop delay percentiles (
ok.server.event_loop.delay_ms), CPU utilization (ok.server.cpu.utilization), extended memory sections (external,array_buffers) onok.server.memory.usage_megabytes, a loaded-documents gauge (ok.server.docs.loaded), and write-spine queue depths (ok.persistence.queue.depth,ok.bridge.drain_backlog). Error responses now stamp their correlation UUID on the active trace span (ok.error.instance) so a client-reported error can be joined against its trace. The standardOTEL_TRACES_SAMPLER/OTEL_TRACES_SAMPLER_ARGsampling contract is now pinned by tests and documented, including its interaction with the local bug-bundle span sink.