fester/CHANGELOG.md

135 lines
6.1 KiB
Markdown

# Changelog
All notable changes to Fester are documented here.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- Documentation: README.md, quickstart.md, CONTRIBUTING.md, CHANGELOG.md
- Tooling: bootstrap.sh, run.sh, pyproject.toml, .gitignore
- Docker support (Dockerfile)
- Screenshots for all 8 UI pages
## [0.3.0] — 2026-06-28
### Added — Storage layer
- SQLite-backed persistence for builds, sessions, events, and node states
- Btrfs CoW reflink snapshots (`backend/storage/btrfs_cas.py`)
- QCOW2 workspace freezing with real mount + rsync (`backend/storage/qcow2_freeze.py`)
- tmpfs workspace acceleration
- Storage status + config + freeze + reflink + snapshots endpoints
### Added — tmux integration (E9)
- TmuxManager with session create/list/inspect/capture-output/kill
- `runtime: "tmux"` action runtime — runs actions in detached tmux sessions
- Live output viewer in Sessions page UI
- `/api/actions/active`, `/api/actions/{name}/tmux/output`, `/tmux/kill` endpoints
### Added — mosh/ssh shell attach (E10)
- MoshManager with command builder (mosh-via-SSH-bootstrap)
- `/api/nodes/{name}/shell` GET + POST endpoints
- "⌘ Shell" button on Dashboard node rows (copies command to clipboard)
### Added — Real engine wiring
- BuildRunner wraps PipelineEngine with build lifecycle + persistence
- Real DAG execution with proper cwd + env passing
- Failure propagation: skipped actions on failed deps
- Critical path computation + tagging in events
- Debugger pause/resume/step actually controls running engines
### Added — Cause graph + blast radius
- `/api/propagation/{action}` — forward blast radius computation
- `/api/cause/explain/{node}` — causal chain for a node
- Blast Radius panel in Cause Graph UI page
- Failure autopsy with proper session ID correlation
### Added — Storage + target catalog
- `/api/targets` reads from `backend/targets/catalog.py` (6 systems: Gentoo, Buildroot, OpenWrt, ALFS, SourceMage, Lunar)
- `/api/targets/arches` + `/api/targets/runtimes` endpoints
### Added — Health + metrics
- `/api/health` endpoint (version, bus_subscribers, ws_clients, builds_known, timeline_events)
- Live health indicator in topbar (all pages)
- Prometheus metrics aligned with grafana config names (`fester_node_cpu`, `fester_pipeline_actions_total`, etc.)
- Pipeline action counters + cache hit counters wired via bus subscriber
### Added — UI enhancements
- New Timeline page (per-node event drill-down)
- Node policy dropdowns (preferred/avoid/neutral) on Dashboard
- Per-node "Probe" buttons + "Probe All" button
- Build cancel + replay buttons on Sessions page
- Event filter chips on Dashboard (toggle by event type)
### Added — CLI overhaul
- 35+ subcommands (was 11)
- Nested subcommands: `node {list,set-policy,probe,probe-all}`, `cause {explain,trace,events}`, `replay {start,step,reset}`, `debugger {state,pause,resume,step}`
- New: `build`, `builds`, `build-info`, `cancel`, `release`, `targets`, `toggle-target`, `blast`, `timeline`, `rewind`, `autopsy`, `policy-list`, `health`
- `--watch` flag on `build` command (streams events via WebSocket)
### Fixed — Critical backend bugs
- `api/api.py` order bug (`bus.subscribe()` before `bus = EventBus()`)
- 7 broken `_endpoint` symbol imports
- `cause_graph.attach_bus` + `emit_debug` defined at module scope (zero indentation)
- Three missing files: `timeline_store.py`, `failure_autopsy.py`, `failure_propagation.py`
- Two Python module/package name collisions (`scheduler.py` vs `scheduler/`, `nodes.py` vs `nodes/`, `cache.py` vs `cache/`)
- `execute_action` passing empty `{}` as cwd → `TypeError`
- Build env never reaching subprocess
- Debugger/pipeline-control `_ENGINE` always `None`
- `failure_propagation` looking for `event.data.deps` (legacy shape)
- Autopsy session ID mismatch
- `/api/release` was a pure stub
- `/api/policy/set` didn't persist
- `/ws-debugger` returned canned data, ignored commands
- `forgejo.on_push_event` wrong PipelineEngine arity
- `pipeline/feedback.py` PolicyEngine() with no args
### Fixed — Standardization
- ~20 bare imports converted to `backend.*` prefix
- Two parallel event taxonomies unified (`types.py` re-exports from `schema.py`)
- `MinioCache.__init__` made lazy (was crashing on import if MinIO unreachable)
- `cache.py` graceful fallback for non-writable paths
- `roles_store.py` graceful fallback for non-writable `/etc/fester/`
- `FesterEvent` made `node`/`action`/`state` truly optional (had `Optional[str]` type but no default)
## [0.2.0] — 2026-06-27
### Added — Real FastAPI backend
- `backend/main.py` — FastAPI app with 50+ routes
- All routers wired: replay, autopsy, timeline, debugger, pipeline_control, nodes, metrics, cause
- WebSocket hub with `/ws`, `/ws-targets`, `/ws-debugger`
- Ambient loop for node probing + drift
- SQLite storage layer (`backend/storage/sqlite_db.py`)
- Node probe module (`backend/nodes/probe.py`)
- BuildRunner (`backend/pipeline/runner.py`)
### Added — UI overhaul (7 pages)
- Dashboard (`index.html`) — 3-column layout with cluster stats, live stream, quick actions
- Live DAG (`ui/live_dag.html`) — layered Sugiyama-lite layout, SVG edges, click-to-inspect
- Replay (`ui/replay.html`) — timeline scrubber, play/pause/step, structured inspector
- Sessions (`ui/sessions.html`) — build history + replay links
- Metrics (`ui/metrics.html`) — live charts + per-node cards
- Cause Graph (`ui/cause.html`) — radial graph visualization
- Debugger (`ui/debugger.html`) — step-through execution control
### Added — Shared infrastructure
- `style.css` — full design system (dark theme tokens, panels, badges, buttons, scrollbars)
- `ui/app.js` — shared shell (WS auto-reconnect, FesterTargets global, toasts, topbar nav)
- `cockpit/fester-module/targets.js` — fixed to expose `FesterTargets` global
### Fixed
- `live_dag.html` was broken (referenced undefined `FesterTargets`)
- `style.css` was 0 bytes
- `index.html` was a 30-line throwaway
## [0.1.0] — Initial commit
### Added
- Basic project structure
- Backend modules (many stubbed)
- Cockpit module
- Install scripts
- CHEATSHEET.md