Documentation
¶
Overview ¶
Package store is Fort's SQLite state store (backlog AO-016, spec §6.6): run, node_run, route_decision, and an append-only event log. The event log is the source the fort-ui live feed replays from.
Index ¶
- Variables
- type BacklogItem
- type Event
- type NodeRun
- type PlaybookRevision
- type RouteDecision
- type Run
- type Store
- func (s *Store) AllNodeRuns() ([]NodeRun, error)
- func (s *Store) AppendEvent(e Event) (int64, error)
- func (s *Store) CheckInvite(codeHash string, now time.Time) error
- func (s *Store) Close() error
- func (s *Store) CreateBacklogItem(b BacklogItem) error
- func (s *Store) CreateInvite(codeHash string, expires time.Time) error
- func (s *Store) CreateRun(r Run) error
- func (s *Store) DeleteBacklogItem(id string) error
- func (s *Store) Events(runID string) ([]Event, error)
- func (s *Store) EventsSince(cursor int64) ([]Event, error)
- func (s *Store) GetBacklogItem(id string) (BacklogItem, error)
- func (s *Store) GetRun(id string) (Run, error)
- func (s *Store) LatestPlaybookRevisions() ([]PlaybookRevision, error)
- func (s *Store) ListBacklog() ([]BacklogItem, error)
- func (s *Store) ListRuns() ([]Run, error)
- func (s *Store) MarkInviteUsed(codeHash string, now time.Time) error
- func (s *Store) NodeRuns(runID string) ([]NodeRun, error)
- func (s *Store) PlaybookRevision(id string, revision int) (PlaybookRevision, error)
- func (s *Store) RouteDecisions(taskID string) ([]RouteDecision, error)
- func (s *Store) SavePlaybookRevision(id, data string) (PlaybookRevision, error)
- func (s *Store) SavePlaybookRevisionIfLatest(id string, expected int, data string) (PlaybookRevision, error)
- func (s *Store) SaveRouteDecision(d RouteDecision) error
- func (s *Store) SeedPlaybookRevisions(revisions []PlaybookRevision) error
- func (s *Store) UpdateBacklogAgent(id, agent string) error
- func (s *Store) UpdateRunStatus(id, status string, exitCode int, errMsg string) error
- func (s *Store) UpsertNodeRun(n NodeRun) error
- func (s *Store) WaitingGates() ([]NodeRun, error)
Constants ¶
This section is empty.
Variables ¶
var ( ErrInviteInvalid = errors.New("store: invite invalid or already used") ErrInviteExpired = errors.New("store: invite expired") )
Invite errors distinguish the join responses (spec 024): 401 vs 410.
var ErrPlaybookRevisionStale = errors.New("store: stale playbook revision")
ErrPlaybookRevisionStale identifies a failed compare-and-append. Callers can map it to a conflict without depending on SQLite or matching error text.
Functions ¶
This section is empty.
Types ¶
type BacklogItem ¶ added in v0.7.0
type BacklogItem struct {
ID string
Title string
Body string
Agent string // optional forced agent
Machine string // optional pinned host
Labels []string
Source string // "user" | "agent"
CreatedAt time.Time
}
BacklogItem is a task queued for later dispatch (spec 025). It becomes a run only when dispatched (dragged onto the board / the Run action).
type Event ¶
type Event struct {
ID int64
RunID string
NodeID string // DAG step this event came from (spec 027); "" for run-level/single-run events
Type string
Data string
Code int
CreatedAt time.Time
}
Event is one append-only event row.
type NodeRun ¶
type NodeRun struct {
ID string // runID:nodeID
RunID string
NodeID string
Type string
Status string
Input string
Output string
Attempts int
CreatedAt time.Time
UpdatedAt time.Time
}
NodeRun is a persisted DAG node execution (Phase 2).
type PlaybookRevision ¶ added in v0.12.0
PlaybookRevision stores one opaque, immutable definition revision. The core store owns durability while the bounded control adapter owns validation and JSON interpretation (spec 036).
type RouteDecision ¶
type RouteDecision struct {
ID string
TaskID string
Route string
MatchedRule string
IsDefault bool
Reason string
CreatedAt time.Time
}
RouteDecision is a persisted routing outcome.
type Run ¶
type Run struct {
ID string
Title string
Body string // markdown body from a multiline compose (spec 031); "" if title-only
Agent string
Status string
MatchedRule string
Machine string // resolved target host (spec 022); "" = local/single-machine
FlowID string
ExitCode int
Error string
CreatedAt time.Time
UpdatedAt time.Time
}
Run is a persisted execution (a routed task or a flow run).
type Store ¶
type Store struct {
// contains filtered or unexported fields
}
Store wraps the SQLite database.
func (*Store) AllNodeRuns ¶ added in v0.11.0
AllNodeRuns returns every node_run row grouped by run (the board's checkpoint-summary source, spec 033).
func (*Store) AppendEvent ¶
AppendEvent appends an event (append-only) and returns its id.
func (*Store) CheckInvite ¶ added in v0.6.0
CheckInvite verifies codeHash names an unused, unexpired invite. It does not consume it — the join flow persists the registry first and only then calls MarkInviteUsed (spec 024 ordering).
func (*Store) CreateBacklogItem ¶ added in v0.7.0
func (s *Store) CreateBacklogItem(b BacklogItem) error
CreateBacklogItem inserts a pending item.
func (*Store) CreateInvite ¶ added in v0.6.0
CreateInvite records a hashed single-use invite code.
func (*Store) DeleteBacklogItem ¶ added in v0.7.0
DeleteBacklogItem removes an item (called after it is dispatched or discarded).
func (*Store) EventsSince ¶
EventsSince returns events with id greater than the cursor (the UI feed tail).
func (*Store) GetBacklogItem ¶ added in v0.7.0
func (s *Store) GetBacklogItem(id string) (BacklogItem, error)
GetBacklogItem returns one item by id.
func (*Store) LatestPlaybookRevisions ¶ added in v0.12.0
func (s *Store) LatestPlaybookRevisions() ([]PlaybookRevision, error)
LatestPlaybookRevisions returns the newest immutable revision for every id, ordered deterministically by id.
func (*Store) ListBacklog ¶ added in v0.7.0
func (s *Store) ListBacklog() ([]BacklogItem, error)
ListBacklog returns pending items, newest first.
func (*Store) MarkInviteUsed ¶ added in v0.6.0
MarkInviteUsed consumes the invite. The WHERE used_at IS NULL guard makes consumption single-use even under concurrent joins.
func (*Store) PlaybookRevision ¶ added in v0.12.0
func (s *Store) PlaybookRevision(id string, revision int) (PlaybookRevision, error)
PlaybookRevision returns exactly revision; edits never rewrite old rows.
func (*Store) RouteDecisions ¶
func (s *Store) RouteDecisions(taskID string) ([]RouteDecision, error)
RouteDecisions returns the decisions recorded for a task, oldest first.
func (*Store) SavePlaybookRevision ¶ added in v0.12.0
func (s *Store) SavePlaybookRevision(id, data string) (PlaybookRevision, error)
SavePlaybookRevision appends the next immutable revision for id.
func (*Store) SavePlaybookRevisionIfLatest ¶ added in v0.12.0
func (s *Store) SavePlaybookRevisionIfLatest(id string, expected int, data string) (PlaybookRevision, error)
SavePlaybookRevisionIfLatest appends only when expected is still the latest revision (zero means the id does not exist). The compare and insert share one transaction, preventing stale whole-document edits from becoming revisions.
func (*Store) SaveRouteDecision ¶
func (s *Store) SaveRouteDecision(d RouteDecision) error
SaveRouteDecision persists a routing decision.
func (*Store) SeedPlaybookRevisions ¶ added in v0.12.0
func (s *Store) SeedPlaybookRevisions(revisions []PlaybookRevision) error
SeedPlaybookRevisions atomically installs an initial catalog when the table is empty. Existing catalogs are left untouched, so startup is idempotent and a crash can never expose a partially seeded set.
func (*Store) UpdateBacklogAgent ¶ added in v0.11.0
UpdateBacklogAgent reassigns an item to an agent ("" clears the pin, spec 033).
func (*Store) UpdateRunStatus ¶
UpdateRunStatus updates a run's terminal fields.
func (*Store) UpsertNodeRun ¶
UpsertNodeRun inserts or updates a node run (keyed by id = runID:nodeID).
func (*Store) WaitingGates ¶
WaitingGates returns every gate node currently awaiting a human decision, across all runs (the gate-inbox source).