8.9 KiB
Executable File
8.9 KiB
Executable File
Changelog
All notable changes to Fester are documented here.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
Added
- BTC 0.4.0 multi-arch cross-compilation support —
backend/toolchain/btc.pyprobe_btc()now loads BTC manifest JSON sidecars for structured metadata (target_id, arch, clib, triple, cross_mode, target_march)btc_build_env()supportstargetparameter to select specific cross-compiler golden images when multiple are installed on a nodelist_btc_targets()enumerates all available BTC golden images with parsed SYS_LABEL and manifest data — usable by the Fester API- ISA flag table (
_ISA_FLAGS) for AVX512, AVX2, SSE4_2, NEON, MIPS32, TILE - SSE4_2 ISA tier added for Intel Atom and AMD APU targets that lack AVX support
- 19 cross-compilation targets: Intel HEDT/Server (5), AMD Ryzen/EPYC (4), AMD APU (4: apu-zn1 through apu-zn4), Intel Atom (4: silvermont, goldmont, tremont, sierraforest), embedded (mipselr2, armv7, tilegx)
- SYS_LABEL parser updated for BTC 0.4.0 cross format:
DCOSNET-{FAMILY}-{TARGET_ID}-{ISA}-CROSS - Per-node BTC target selection via
node_config.btc.target - New env vars:
BTC_TARGET_ID,BTC_CROSS,BTC_CLIB,BTC_TARGET_TRIPLE
- Shared Content-Addressable Store (CAS) API —
backend/storage/cas_api.pyPUT /api/cas/{sha256}— store an artifact (SHA-256 verified server-side)GET /api/cas/{sha256}— retrieve an artifact (streamed file download)HEAD /api/cas/{sha256}— check existence (returns metadata JSON)DELETE /api/cas/{sha256}— remove an artifactGET /api/cas/— list all artifacts (paginated, filterable by target)GET /api/cas/stats— cache statistics (hits, misses, utilization %)- SQLite-backed index for fast listing, LRU eviction, and cross-query filtering
- btrfs reflink support for zero-copy artifact storage
- DAG-aware cache integration in PipelineEngine — checks CAS before each action
- BTC.sh toolchain integration —
backend/toolchain/btc.pyprobe_btc()— detect BTC golden images, parse SYS_LABELbtc_build_env()— return BTC-aware CC/CXX/CFLAGS/LDFLAGSverify_btc_stamp()— read .note.BTC ELF note + xattr stampsapply_btc_stamp()— inject forensic stamps via assembly + objcopy + xattrmerge_compiler_env()— overlay BTC on ccache/distcc env- Cross-project compatible: pipe-delimited .note.BTC format, type=1 (NT_VERSION), bare hex hash
- Podman integration —
backend/integrations/podman.py(full PodmanManager) - Firecracker integration —
backend/integrations/firecracker.py(full FirecrackerManager) - Podman/Firecracker executor adapters —
backend/executor/adapters.py(run_podman, run_firecracker) - Runtime router updated —
backend/executor/runtime_router.pyroutes podman and firecracker runtimes - 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/killendpoints
Added — mosh/ssh shell attach (E10)
- MoshManager with command builder (mosh-via-SSH-bootstrap)
/api/nodes/{name}/shellGET + 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/targetsreads frombackend/targets/catalog.py(6 systems: Gentoo, Buildroot, OpenWrt, ALFS, SourceMage, Lunar)/api/targets/arches+/api/targets/runtimesendpoints
Added — Health + metrics
/api/healthendpoint (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 --watchflag onbuildcommand (streams events via WebSocket)
Fixed — Critical backend bugs
api/api.pyorder bug (bus.subscribe()beforebus = EventBus())- 7 broken
_endpointsymbol imports cause_graph.attach_bus+emit_debugdefined at module scope (zero indentation)- Three missing files:
timeline_store.py,failure_autopsy.py,failure_propagation.py - Two Python module/package name collisions (
scheduler.pyvsscheduler/,nodes.pyvsnodes/,cache.pyvscache/) execute_actionpassing empty{}as cwd →TypeError- Build env never reaching subprocess
- Debugger/pipeline-control
_ENGINEalwaysNone failure_propagationlooking forevent.data.deps(legacy shape)- Autopsy session ID mismatch
/api/releasewas a pure stub/api/policy/setdidn't persist/ws-debuggerreturned canned data, ignored commandsforgejo.on_push_eventwrong PipelineEngine aritypipeline/feedback.pyPolicyEngine() with no args
Fixed — Standardization
- ~20 bare imports converted to
backend.*prefix - Two parallel event taxonomies unified (
types.pyre-exports fromschema.py) MinioCache.__init__made lazy (was crashing on import if MinIO unreachable)cache.pygraceful fallback for non-writable pathsroles_store.pygraceful fallback for non-writable/etc/fester/FesterEventmadenode/action/statetruly optional (hadOptional[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 exposeFesterTargetsglobal
Fixed
live_dag.htmlwas broken (referenced undefinedFesterTargets)style.csswas 0 bytesindex.htmlwas a 30-line throwaway
[0.1.0] — Initial commit
Added
- Basic project structure
- Backend modules (many stubbed)
- Cockpit module
- Install scripts
- CHEATSHEET.md