store

package
v0.12.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 22, 2026 License: MIT Imports: 9 Imported by: 0

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

Constants

This section is empty.

Variables

View Source
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.

View Source
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

type PlaybookRevision struct {
	ID        string
	Revision  int
	Data      string
	CreatedAt time.Time
}

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 Open

func Open(path string) (*Store, error)

Open opens (creating if needed) the database at path and applies migrations.

func (*Store) AllNodeRuns added in v0.11.0

func (s *Store) AllNodeRuns() ([]NodeRun, error)

AllNodeRuns returns every node_run row grouped by run (the board's checkpoint-summary source, spec 033).

func (*Store) AppendEvent

func (s *Store) AppendEvent(e Event) (int64, error)

AppendEvent appends an event (append-only) and returns its id.

func (*Store) CheckInvite added in v0.6.0

func (s *Store) CheckInvite(codeHash string, now time.Time) error

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) Close

func (s *Store) Close() error

Close closes the database.

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

func (s *Store) CreateInvite(codeHash string, expires time.Time) error

CreateInvite records a hashed single-use invite code.

func (*Store) CreateRun

func (s *Store) CreateRun(r Run) error

CreateRun inserts a new run.

func (*Store) DeleteBacklogItem added in v0.7.0

func (s *Store) DeleteBacklogItem(id string) error

DeleteBacklogItem removes an item (called after it is dispatched or discarded).

func (*Store) Events

func (s *Store) Events(runID string) ([]Event, error)

Events returns all events for a run, in insertion order.

func (*Store) EventsSince

func (s *Store) EventsSince(cursor int64) ([]Event, error)

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) GetRun

func (s *Store) GetRun(id string) (Run, error)

GetRun returns a run 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) ListRuns

func (s *Store) ListRuns() ([]Run, error)

ListRuns returns all runs, newest first.

func (*Store) MarkInviteUsed added in v0.6.0

func (s *Store) MarkInviteUsed(codeHash string, now time.Time) error

MarkInviteUsed consumes the invite. The WHERE used_at IS NULL guard makes consumption single-use even under concurrent joins.

func (*Store) NodeRuns

func (s *Store) NodeRuns(runID string) ([]NodeRun, error)

NodeRuns returns the node runs for a run, in creation order.

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

func (s *Store) UpdateBacklogAgent(id, agent string) error

UpdateBacklogAgent reassigns an item to an agent ("" clears the pin, spec 033).

func (*Store) UpdateRunStatus

func (s *Store) UpdateRunStatus(id, status string, exitCode int, errMsg string) error

UpdateRunStatus updates a run's terminal fields.

func (*Store) UpsertNodeRun

func (s *Store) UpsertNodeRun(n NodeRun) error

UpsertNodeRun inserts or updates a node run (keyed by id = runID:nodeID).

func (*Store) WaitingGates

func (s *Store) WaitingGates() ([]NodeRun, error)

WaitingGates returns every gate node currently awaiting a human decision, across all runs (the gate-inbox source).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL