User guide / Diagnostics and logging

What is recorded, and what never is

Development reference · View source

Recorded:

  • process startup, version, role, workspace identity, and orderly shutdown;
  • session publication, idle retirement, signal termination, and forced termination;
  • client attachment, detachment, refusal, closure, a client that stops reading, and malformed or truncated frames;
  • language servers becoming ready, restarting, and stopping;
  • terminal sessions that fail to start, and children that exit;
  • Git failures already converted into typed results;
  • background services whose channel closes;
  • panics, with the thread, location, message, and a backtrace when enabled.

Not yet recorded, though surrounding events are: file-watcher lifecycle beyond its channel closing, and a host restart as distinct from a start followed by a stop.

Never recorded: routine keystrokes, rendered frames, successful commands, buffer edits, and complete language-server request or response bodies. No level ever records buffer text, selections, clipboard contents, typed or pasted text, terminal contents, credentials, environment-variable values, unrestricted subprocess output, or full LSP JSON.

Deliberately thinner records:

  • A failed Git operation records the refusal and exit status, but not the argument vector or Git’s stderr, because a failing commit’s arguments hold the message just typed.
  • A stopped language server records the language, but not the composed reason, because a server closed by its own process carries its stderr tail there.
  • Both are available in full through :notifications, :lsp-status, and the interaction line.

Records do contain local paths and process metadata, because those identify a failing local operation. Review a log before sharing it.