Skip to content

Releases: hyturing/compose-pulse

cpulse v0.5.0

Choose a tag to compare

@github-actions github-actions released this 21 Jul 23:21
77d84cf

cpulse is now a flight recorder and root-cause debugger for Docker Compose, not just a live TUI. Record a startup, diagnose offline with evidence-backed rules, probe dependencies, compare critical paths, emit shareable reports, and fail CI with stable exit codes.

Added

  • cpulse record -- <cmd> — wrap any Compose invocation; capture events, inspect, logs, and effective config into SQLite (.cpulse/cpulse.db) with optional JSON export (--output)
  • cpulse up [args] — alias for cpulse record -- docker compose up [args]
  • cpulse replay FILE — replay a recorded run.json without Docker
  • Offline doctorcpulse doctor --file / --last / --run with --json, --sarif, --fail-on high|medium|possible, and --annotate for GitHub Actions
  • Diagnosis rule engine — high-confidence rules for config, ports, mounts, images, process exits, healthchecks, localhost-in-container, depends_on races, OOM, restart loops, and TCP refused
  • cpulse probe <svc> <host:port> — DNS → TCP → optional TLS/HTTP from inside a service's network (--tls, --http)
  • cpulse compare --last successful — critical-path compare against previous successful baselines
  • cpulse report --last --format markdown|json|html|sarif — shareable incident reports (markdown includes rule_id)
  • cpulse test-startup — CI one-shot: record docker compose up --wait, diagnose, exit with a stable code contract
  • GitHub Action (action.yml) — record + diagnose in PRs; optional HTML artifact upload; smoke workflow included
  • Secret redaction — env/message redaction before the first SQLite write; effective_config.raw_yaml is never persisted
  • Fixture corpus under testdata/runs/phase2/ and testdata/scenarios/ for rule regression

Changed

  • README documents the record / diagnose / CI workflow alongside the existing TUI
  • Live TUI usage (cpulse, live cpulse doctor) is unchanged in intent

Fixed

  • No false config.invalid_compose on healthy stacks with long-form Compose ports
  • doctor --file preserves effective config / invocation so rules like race.depends_on_started can fire
  • compare --last successful --db FILE parses correctly
  • test-startup --timeout exits 2 on deadline exceeded (not 3)

Exit codes (test-startup / CI)

Code Meaning
0 Healthy / no findings at or above --fail-on
1 Confirmed failure(s) at or above threshold
2 Timeout
3 Compose failed to launch / record error
4 Usage error

Changelog

  • e31b691 feat: add flight recorder, offline doctor, probes, reports, and CI action

cpulse v0.4.2

Choose a tag to compare

@github-actions github-actions released this 14 Jul 23:51

Log UX upgrade: find-in-logs, select/copy, and scrollbar scrubbing.

Added

  • Find box on the Logs status bar (and zoom footer): click or Ctrl+F, type to search
  • Case-insensitive matching (where matches WHERE / Where)
  • Substring highlight (only the match, not the whole line)
  • Match counter (4/36); Enter / Shift+Enter for next/prev; all lines stay visible
  • In-TUI drag selection of log lines (panel-scoped, not full terminal)
  • Ctrl+C copies the selection (Control, not Cmd on macOS); quit remains q
  • Scrollbar click + drag (track jump + thumb drag)
  • Selection works while a find query is active (find input unfocuses on drag; query/highlights stay)

Changed

  • Removed the old / log filter that hid non-matching lines
  • Mouse wheel and ↑/↓/PgUp/PgDn still scroll during find

Notes

  • iTerm’s right-click Copy stays disabled for in-app selection (terminal-owned menu); use Ctrl+C
  • Install/upgrade: brew update && brew upgrade cpulse

Changelog

  • a36cf2a feat: log find bar, in-TUI selection/copy, and scrollbar drag

cpulse v0.4.1

Choose a tag to compare

@github-actions github-actions released this 13 Jul 12:55

Changelog

  • 663f8d1 fix: show missing depends_on targets instead of crashing discovery

cpulse v0.4.0

Choose a tag to compare

@github-actions github-actions released this 12 Jul 21:21

v0.4.0

cpulse is now a startup debugger, not just a state viewer. It names the root cause, runs health probes inside containers, draws a scaled startup timeline, and presents everything in a lazydocker-style shell.

Added

  • cpulse doctor — headless diagnosis that prints root cause + findings and exits 1 on any critical finding. Filter with --project NAME.
  • Doctor engine — twelve rules covering blocked-by-unhealthy, failed/unhealthy services, init failures, missing healthchecks, restart loops, OOM kills, slow startup, and common healthcheck/network misconfigurations.
  • Root-cause analysis — walks unsatisfied depends_on chains to the broken endpoint and surfaces the critical path plus a useful log line per culprit.
  • Health probes — Health tab (4) inspects the compose healthcheck; Enter runs it inside the container (binary check, one-shot run, port listening, URL host analysis).
  • Startup timeline — project Timeline tab (2 / t) with a scaled Gantt of display-state transitions (staggered bars, labeled axis).
  • Graph tab — roomy pstree with edge conditions (needs postgres:healthy ✕).
  • CPU/MEM stats — live columns in the service list and sparklines on the Stats tab (2s ticker; 500ms Docker poll unchanged).
  • degraded state when a running container has restarted 3+ times.
  • Waiting-since hints — blocked services show how long they've been waiting (≥5s).

Changed

  • Lazydocker-style UI — left column (project + nested dependency tree), right main panel with context-sensitive tabs:
    • Service: Logs · Stats · Deps · Health (14)
    • Project: Doctor · Timeline · Graph (13)
  • Actions menu moved from a to x (restart, stop, start, rebuild, cascade, probe, exec).
  • f filter now cycles all → failed → waiting; b retired.
  • d / t jump to Doctor / Timeline; Enter zooms (or jumps / runs probe); Esc always goes back and never quits.
  • Deps tab now includes impact: direct dependents, transitive dependents, and suggested restart order.
  • README updated for the doctor CLI and new keybindings.

Fixed

  • GoReleaser Homebrew formula path pointed at the tap's Formula/ directory.

Breaking / keybinding changes from v0.3.0

  • ax for the actions menu
  • b (blocked-only filter) removed; use f to cycle into waiting
  • Inspector Overview tab replaced by Stats / Health / project Doctor tabs

Changelog

  • 34591eb feat: startup debugger with doctor, probes, timeline, and improved UI
  • a1f6d60 fix: point GoReleaser homebrew formula at the tap's Formula/ directory

cpulse v0.3.0

Choose a tag to compare

@github-actions github-actions released this 07 Jul 12:27
d4dceff

v0.3.0

Added

  • State explainer dashboard: services now show one of healthy, starting, blocked, pending, completed, failed, or unhealthy — derived from container state, exit code, and dependency conditions, not just raw Docker status. A migration container that exits 0 now looks nothing like one that crashed.
  • Tabbed inspector panel — Overview (status, exit code, image, ports, created time, blockers, last logs), Logs (unchanged log viewer, now full-height), and Deps (waiting-on, full dependency list, direct dependents), switchable with 1/2/3.
  • Summary bar — live per-state service counts and "updated Ns ago" freshness indicator at the top of the dashboard.
  • Filtersf isolates failed/unhealthy services, b isolates blocked ones, esc clears; cursor position is preserved across toggles.
  • Help overlay? opens a key reference (Navigation/Views/Filters/Actions).
  • testdata/demo-broken/docker-compose.yml — a demo stack exercising every state at once, used in the new README GIF.

Fixed

  • service_completed_successfully now correctly requires the dependency to have exited 0 — previously a crashed init container satisfied dependents anyway.
  • Fixed the dashboard always rendering 2 rows taller than the actual terminal height, which clipped the top of the screen (summary bar / panel border) in every terminal.

Changed

  • Left/right panel titles simplified ("[1] Services""Services", "[2] Details""<service> · <state>") to free up the 1/2/3 keys for inspector tabs.
  • Footer key hints updated to reflect tabs, filters, and help.

Changelog

  • 82a48b1 ci: automate Homebrew formula updates via GoReleaser
  • 8bf0686 feat: state-explainer dashboard with inspector tabs, filters, and help overlay

cpulse v0.2.0

Choose a tag to compare

@github-actions github-actions released this 06 Jul 11:27
cab7d1c

v0.2.0

Highlights

  • Auto-discover all Compose stacks and standalone containers (no --file flag)
  • Split dashboard: services tree + live log preview + full-screen logs
  • Lifecycle actions: restart, rebuild, exec (a)
  • depends_on conditions shown in the tree (blocked-by, effective state)

Breaking changes

  • Removed --file; run cpulse from anywhere

Fixes

  • Dashboard layout with tab-separated container logs
  • Log stream stays on the selected service after topology changes

Changelog

  • 7342d57 feat: daemon-wide discovery and split dashboard for cpulse

cpulse v0.1.0

Choose a tag to compare

@github-actions github-actions released this 26 Jun 12:19

Changelog

  • 57778fd ci: bump actions to node24, add golangci-lint config
  • 9d7853d feat: scaffold project with Compose parser, DAG engine, Docker monitor, Bubble Tea TUI, CI/tooling, and comprehensive test coverage.