Releases: hyturing/compose-pulse
Releases · hyturing/compose-pulse
Release list
cpulse v0.5.0
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 forcpulse record -- docker compose up [args]cpulse replay FILE— replay a recordedrun.jsonwithout Docker- Offline doctor —
cpulse doctor --file/--last/--runwith--json,--sarif,--fail-on high|medium|possible, and--annotatefor GitHub Actions - Diagnosis rule engine — high-confidence rules for config, ports, mounts, images, process exits, healthchecks, localhost-in-container,
depends_onraces, 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 baselinescpulse report --last --format markdown|json|html|sarif— shareable incident reports (markdown includesrule_id)cpulse test-startup— CI one-shot: recorddocker 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_yamlis never persisted - Fixture corpus under
testdata/runs/phase2/andtestdata/scenarios/for rule regression
Changed
- README documents the record / diagnose / CI workflow alongside the existing TUI
- Live TUI usage (
cpulse, livecpulse doctor) is unchanged in intent
Fixed
- No false
config.invalid_composeon healthy stacks with long-form Compose ports doctor --filepreserves effective config / invocation so rules likerace.depends_on_startedcan firecompare --last successful --db FILEparses correctlytest-startup --timeoutexits2on deadline exceeded (not3)
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
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 (
wherematchesWHERE/Where) - Substring highlight (only the match, not the whole line)
- Match counter (
4/36);Enter/Shift+Enterfor 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
Changelog
- 663f8d1 fix: show missing depends_on targets instead of crashing discovery
cpulse v0.4.0
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 exits1on 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_onchains 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;Enterruns 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).
degradedstate —⚠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 (
1–4) - Project: Doctor · Timeline · Graph (
1–3)
- Service: Logs · Stats · Deps · Health (
- Actions menu moved from
atox(restart, stop, start, rebuild, cascade, probe, exec). ffilter now cycles all → failed → waiting;bretired.d/tjump to Doctor / Timeline;Enterzooms (or jumps / runs probe);Escalways 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
a→xfor the actions menub(blocked-only filter) removed; usefto cycle into waiting- Inspector Overview tab replaced by Stats / Health / project Doctor tabs
Changelog
cpulse v0.3.0
v0.3.0
Added
- State explainer dashboard: services now show one of
healthy,starting,blocked,pending,completed,failed, orunhealthy— 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.
- Filters —
fisolates failed/unhealthy services,bisolates blocked ones,escclears; 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_successfullynow correctly requires the dependency to have exited0— 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 the1/2/3keys for inspector tabs. - Footer key hints updated to reflect tabs, filters, and help.
Changelog
cpulse v0.2.0
v0.2.0
Highlights
- Auto-discover all Compose stacks and standalone containers (no
--fileflag) - Split dashboard: services tree + live log preview + full-screen logs
- Lifecycle actions: restart, rebuild, exec (
a) depends_onconditions shown in the tree (blocked-by, effective state)
Breaking changes
- Removed
--file; runcpulsefrom 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