Skip to content

v0.5.179

Choose a tag to compare

@lcsmas lcsmas released this 27 Jul 14:30

What's new

Richer diagnostic logging — catch bugs that previously left no trace.

Orchestra had ~163 log lines across 39k LOC, no persistent renderer logging at
all, and 53 silent catch {} sites. The hardest bugs to diagnose were exactly
the ones leaving zero evidence behind. This release instruments them.

Turn it up when you need it

ORCHESTRA_LOG_LEVEL=trace   # or debug — no rebuild needed

Five levels (trace|debug|info|warn|error), default info, so normal runs stay
quiet. The startup banner names the active level — an absent line now means
"not recorded at this level" rather than "it never happened".

Greppable by subsystem

Every line carries a scope tag — [pty] [spool] [store] [git] [sdk] [ipc] [activity], plus [renderer] for UI-side lines:

grep '\[spool\]' orchestra.log     # one subsystem's story
grep 'SLOW' orchestra.log          # IPC calls over 250ms

The renderer now logs at all

Previously nothing in the UI reached the log file — React errors and failed IPC
calls died with the window. Now renderer lines land in the same file as
main-process lines, interleaved in causal order. Unhandled errors and promise
rejections are captured automatically, and a new error boundary records the
React component stack and shows a readable message instead of the blank
window a render throw used to produce.

Silent failures that now speak up

  • A corrupt store.json used to silently reset all workspaces, repos and
    accounts to defaults. It now logs an error and preserves the file as
    store.json.corrupt-<timestamp> so the data is recoverable.
  • Terminal output dropped when the renderer can't receive it (the cause of
    "scattered word" garble) — previously invisible.
  • Spool read/parse failures and unhandled agent events, both of which surface as
    a stuck status dot with no other clue.
  • The events-dir startup wipe, whose file count is the fingerprint of the
    multi-instance stuck-dot bug.
  • Git fallbacks that manufacture confident-looking neutral answers (no merge
    pill, empty branch list) out of real failures.
  • Startup fetches in the UI that render a failed backend call as a
    legitimately-empty section.

Errors now also carry the detail that .stack omits: errno fields
(code/syscall/path) and cause chains.

Full Changelog: v0.5.178...v0.5.179