v0.11.0
0.11.0
Stable promotion of beta v0.11.0-beta.9.
Aggregated changes since previous stable:
0.11.0-beta.0
Minor Changes
-
ok startnow has a clean, legible terminal. DiagnosticINFOlogs are routed to the on-disk log file (still captured for bug reports) instead of flooding stdout, so the startup banner — Editor + API URLs plus a "Next steps" hint — is front and center. The skill/MCP/launch-json reclaim sweeps no longer print routine JSON to the terminal (only genuine failures surface), and invalid frontmattertagsentries (e.g. comma-joined Obsidian-style values) are dropped silently instead of warning once per file. To restore the full log stream, setLOG_LEVEL=infoor pass--log-level <level>(which now takes effect — previously it was parsed but ignored).Two reliability fixes ride along: the HEAD watcher falls back to chokidar when
@parcel/watcheris unavailable (packaged builds ship without the native addon), so git branch-switch detection keeps working instead of silently degrading; and pressing Ctrl+C now prints an immediate "stopping…" notice explaining that pending changes are being saved and the server lock released.
0.11.0-beta.1
Patch Changes
-
The document Properties panel now reflows to a vertical layout when the editor pane is narrow. Each property's value drops below its name and spans the full width of the pane, instead of being squeezed into a thin column beside a fixed-width label.
Previously the panel always used a two-column layout with a fixed label column, so on a narrow pane (side panels open, split view, or a small window) long values like a title or description wrapped into a tall sliver with most of the row left empty. The panel now switches to the stacked layout based on its own width, so it adapts whether the whole window is small or just the editor column is narrow. Wide panes keep the original side-by-side layout.
0.11.0-beta.2
Patch Changes
- The
html previewcode block now surfaces a friendly, dismissible notice when its security policy blocks a network request, instead of silently rendering a broken embed. The preview iframe reports blocked requests (for example plainhttp://resources, or code that useseval) back to the editor, which lists what was blocked and why. This is especially helpful inside the desktop preview, where the browser console is out of reach. The preview's Content Security Policy is unchanged.- @inkeep/open-knowledge-core@0.10.1-beta.0
- @inkeep/open-knowledge-server@0.10.1-beta.0
0.11.0-beta.3
Patch Changes
- Fix stale-editor content resurrection (PRD-6955b). An editor whose Y→PM apply path had stopped (a "wedged" collaboration binding) could silently re-publish its frozen, minutes-old copy of a document wholesale over newer collaborative state on the next click or keystroke — erasing remote fixes. A new client-side binding staleness guard now detects the wedge the moment an external update goes unapplied, refuses to publish the stale replica (both the transaction channel and the binding's write-back seam are gated), and transparently recycles the editor so it remounts from current document state. Healthy editors are unaffected; recovery is rate-capped per document to prevent recycle loops under a persistent fault.
0.11.0-beta.4
Patch Changes
- Fixed a document-corruption bug where reopening a doc the server had unloaded and re-read from disk (an external delete + recreate — e.g. a
git pullor checkout rewriting files — a rename, or any other server-side unload) could merge the browser's cached copy into the fresh document as a second materialization: every block appeared twice, and content deleted on disk resurrected. The server now stamps each loaded document with a lineage epoch; browsers record the epoch they synced and present it when rejoining, and a stale rejoin is rejected up front — the client clears its cached copy and reloads the document cleanly instead of corrupting it. The same fence covers the deferred cache-attach window during boot, so a cache learned to be stale after sync is discarded rather than merged. Also fixes a separate, pre-existing cleanup gap the fence depends on: clearing the browser cache of a renamed or deleted doc was silently skipped in tabs that had not yet observed a branch, leaving stale rows that could re-merge on a later open.
0.11.0-beta.5
Patch Changes
- Parse-error fallback blocks now preserve the source bytes they replace. When a block degrades to a fallback and its position carries only line/column information (no character offsets), the editor now resolves those against the document and shows the block's real content. When the position is genuinely unresolvable (missing, out of bounds, or inverted), the fallback degrades to empty content instead of substituting the mdast node-type name for the block's content — fabricated text that could previously be persisted back over the user's document on interaction (users observed this on an earlier build as a block collapsing to a literal word such as
tableorlist).
0.11.0-beta.6
Patch Changes
- The git credential helper (
ok auth git-credential get, invoked by git on every sync) now records a diagnostic line to~/.ok/logs/cli.*.logon every credential lookup: the host, the active storage backend, and the outcome —found,absent(no credential stored), orread-error(the keychain read failed, e.g. locked keychain or access denied). Hits log atdebug(silent at the default level); misses log atwarn. Previously these only went to stderr, which git swallows, so a vanished credential left no trace. The log is flushed before the helper exits so the record reliably lands. Token values are never logged.
0.11.0-beta.7
Patch Changes
- Fix the sync status dialog and recovery when a GitHub credential is missing. Previously a credential-less fetch/push was misclassified as a retryable network error, so the popover showed "Offline" with a raw
could not read Username … Device not configuredstderr blob and "Sync now" / "Retry" buttons that could never succeed — and the one useful action, reconnecting GitHub, was never offered. Now this is classified as an auth error (auth-no-credential): the dialog reads "Reconnect required" with a clear one-line message ("GitHub sign-in is missing or expired. Reconnect to resume syncing.") and a single "Connect GitHub" button. Reconnecting resumes sync without an app restart, and the auth-error state no longer persists across restarts. The server also setsGIT_TERMINAL_PROMPT=0so git fails fast instead of attempting a no-TTY prompt.
0.11.0-beta.8
Patch Changes
ok startstays responsive while indexing large content directories. The boot-time index scans (backlink graph, tags, asset basenames, and the file-watcher's seed walk) previously used synchronous recursive directory reads, so on a vault with thousands of files the server's event loop was blocked for several seconds — Ctrl+C produced no feedback and editor/API connections couldn't be served until indexing finished. The walks now use async filesystem calls that yield to the event loop, so shutdown signals and incoming connections are handled while indexing proceeds. The same fix shortens the window where the desktop app's editor is slow to connect on large projects, since the desktop spawns the same server boot path.
0.11.0-beta.9
Minor Changes
- Lifecycle commands (
ok start,stop,status,clean,ui,mcp,preview, and bareok) now work from any subdirectory of an initialized project. The CLI walks up to the nearest enclosing.ok/config.yml— the same resolution the MCP server uses, so both always agree on which project (and whichserver.lock) a directory belongs to — and boots with that root's config instead of failing with "This directory isn't set up yet." When the resolved root differs from your current directory, the CLI prints[ok] Using Open Knowledge project at <root>so the project scope is always visible. Nested projects compose: the walk stops at the closest ancestor, so a subtree you've separately runok initin keeps its own root. Directories with no enclosing project still get the "runok initfirst" message, and scaffolding commands (ok init,seed,clone) keep their existing current-directory semantics.