SysDeck/web/mini-services/fester/README.md

50 lines
2.3 KiB
Markdown

# Fester — distributed DAG build orchestration
Fester is developed upstream as an **independent repository**. This copy is
the vendored snapshot **pre-integrated** into the SysDeck master tarball —
SysDeck ships with Fester wired in, no separate checkout required.
- Version: **0.2.1** (versioned independently from SysDeck 0.2.0)
- Runtime: Bun — `bun install && bun run dev` (hot reload)
- Transport: REST + raw WebSocket on **port 3010**
- Storage: SQLite timeline (`fester.db`, created and seeded on first boot)
## Architecture
| File | Role |
|---|---|
| `engine.ts` | PipelineEngine — DAG execution in topological waves, retries, CAS cache, BTC stamps, pause/step debugger |
| `scheduler.ts` | Weighted node scoring (cpu / temp / policy / instability) |
| `nodes.ts` | NodeStateRegistry + synthetic drift + the real local node |
| `events.ts` | EventBus + FesterEvent schema |
| `store.ts` | SQLite storage: builds / sessions / events / node states |
| `autopsy.ts` | Failure autopsy + propagation analysis |
| `cause.ts` | Causal graph builder |
| `api.ts` | REST surface (mirrors the upstream route table) |
| `clock.ts` | Engine tick loop |
| `targets.ts` | Project/target catalog |
| `seed.ts` | First-boot synthetic history (powers the replay views) |
## REST surface (abbreviated)
- `GET /api/health` — service status
- `GET /api/builds`, `GET /api/builds/{id}` — build list / detail
- `POST /api/build` — start a build `{project, targets[], noCache?, retries?}`
- `POST /api/builds/{id}/cancel`
- `GET /api/targets` · `/api/nodes` · `/api/metrics` · `/api/policy`
- `GET /api/timeline[/{id}]` · `POST/GET /api/sessions`
- `GET /api/autopsy/{build}/{action}` · `/api/cause/{build}` · `/api/debugger/{build}`
WebSocket: connect to `ws://host:3010/` (or through a gateway at
`/?XTransformPort=3010`). Full broadcast by default;
`{"type":"subscribe","buildId":…}` for a single-build stream;
`{"type":"debugger","buildId":…,"command":"pause|resume|step"}` for the
interactive debugger.
## Integration points
- **SysDeck Web Edition** — server-side proxy `src/app/api/fester/route.ts`
plus the Fester sub-app (`src/components/sysdeck/panels/festerPanel.tsx`).
- **SysDeck Cockpit Edition** — bridge helper `bridge/fester.py` talks to
this service over REST (see the cockpit tree in the master tarball).