store

package
v0.7.0 Latest Latest
Warning

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

Go to latest
Published: Jul 6, 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.

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

func (s *Store) RouteDecisions(taskID string) ([]RouteDecision, error)

RouteDecisions returns the decisions recorded for a task, oldest first.

func (*Store) SaveRouteDecision

func (s *Store) SaveRouteDecision(d RouteDecision) error

SaveRouteDecision persists a routing decision.

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