Skip to main content

v2.7.0

Release notes for orun v2.7.0.

Highlights

  • Cockpit UX: orun status, orun get runs, orun logs, orun status --watch, and orun tui all render through one shared layer. The CLI is the TUI compressed to a single frame; the TUI is the CLI with navigation.
  • New internal/cockpit/* packages: style, viewmodel, render, surface, bridge, watch.
  • Shared palette (Linear/Claude Code violet #7c3aed / #a78bfa) and glyph set across CLI and TUI — one file to reskin Orun.
  • Live watch loop unified: orun status --watch and TUI panes now subscribe to the same poll stream with the same terminal-state semantics.

The cockpit bridge

.orun/  ──▶  cockpit/bridge  ──▶  cockpit/viewmodel  ──▶  cockpit/render
│ │
└──▶ cockpit/watch (live updates) ─────────────┤

cockpit/surface → stdout / TUI
  • cockpit/style — design tokens (palette, glyphs, separators). Consumed by internal/ui (ANSI) and internal/tui/theme (lipgloss adaptive colours).
  • cockpit/viewmodel — pure value objects (RunView, RunListView, LogsView) built from .orun state.
  • cockpit/render — surface-agnostic formatters (brand wedge, status legend, progress bar, component tree, grouped logs with … N more lines truncation).
  • cockpit/bridge — one Source interface over either a local state.Store or a remote statebackend.Backend.
  • cockpit/watch — polling stream emitting Update{View, Err, Terminal}. Shared by orun status --watch and the TUI's LiveOrunService.WatchRunView.

New stdout frame

▲ orun multi-environment-platform
Plan: sha256-ad6ce · Run: gh-26563885741-... · State: completed · Duration: 0ms
Scope: 1 component · 1 job
Status: ✓ 1 succeeded · ◐ 0 running · ○ 0 queued
Progress: ▓▓▓▓▓▓▓ 100%
● api-edge-worker
│ └─ ✓ verify-deploy 19.0s

NO_COLOR strips colour while keeping glyphs. Glyph legend on the orun status reference.

Improvements

  • orun logs now prints a cockpit frame with grouped log blocks per job/step and … N more lines truncation (default 8 lines; --raw prints everything).
  • orun status --watch produces byte-identical frames to non-watch orun status — no more divergent rendering between the two paths.
  • TUI internal/tui/theme is now a thin lipgloss wrapper over cockpit/style.Palette. Changing a colour is a one-file edit that ripples to both CLI and TUI automatically.

Compatibility

  • All existing flags retained on orun status, orun logs, and orun get runs. Output is visually new but the data shape is unchanged; --json (on the get path) continues to emit the same schema.
  • Legacy renderers retained as *Legacy helpers in cmd/orun/ during the migration. They will be removed in v2.8 once the remote-state path and orun run runtime presenter are also ported.
  • NO_COLOR, CLICOLOR_FORCE, and GITHUB_ACTIONS detection unchanged.

What's next (v2.8)

  • Port orun run runtime presenter through cockpit.
  • Remote-state path of orun status through cockpit end-to-end.
  • JSONSurface exposed via --output=json on every get verb.
  • GHA renderer migrated to cockpit/surface.GHASurface.
  • TUI run pane rendering directly from viewmodel.RunView (behind a --cockpit flag while we validate parity).

References