Architecture
NullBoiler is composed of an HTTP API surface, persistent store, scheduler engine, and dispatch subsystem.
Runtime Components
src/api.zig: routing, auth checks, request validation, response shapingsrc/store.zig: SQLite persistence for workers/runs/steps/events/artifacts and advanced statesrc/engine.zig: scheduler loop and step lifecycle transitionssrc/dispatch.zig: worker selection + protocol-specific request/response handlingsrc/main.zig: startup, config loading, worker seeding, server + engine lifecycle
Request To Execution Flow
- API validates incoming request (for example
POST /runs). - Run and steps are persisted in SQLite.
- Engine polls active runs and promotes eligible steps.
- Dispatch selects worker by status, capacity, and tag overlap.
- Worker result is parsed and persisted as step output/events.
- Engine continues until terminal run status.
Data Model
From src/migrations/001_init.sql + 002_advanced_steps.sql:
- core:
workers,runs,steps,step_deps,events,artifacts - advanced:
cycle_state,chat_messages,saga_state
Engine-Heavy Step Families
wait, loop, sub_workflow, debate, group_chat, and saga require engine-specific progression logic beyond simple task dispatch.
Operational Implication
When runs look stuck, inspect in this order:
GET /runs/{id}GET /runs/{id}/stepsGET /runs/{id}/eventsGET /workers