MingaAgent.Session.Persistence (Minga v0.1.0)

Copy Markdown View Source

Owns transcript save intent, timer correlation, and retry state.

Session performs each write synchronously, so a dirty flag is sufficient: no transcript change can overtake an in-flight write. Session owns timer and storage effects; this value only calculates bookkeeping transitions.

Summary

Types

t()

Focused transcript persistence bookkeeping.

A semantic timer token paired with the runtime timer reference.

Functions

Cancels bookkeeping for the current timer and returns its runtime effect handle.

Marks the transcript dirty and returns the timer Session must cancel.

Returns whether the transcript has unsaved changes.

Returns whether transcript persistence is enabled.

Records a failed write and returns the next retry delay.

Creates persistence bookkeeping for one Session.

Marks a restored transcript as already persisted.

Consumes a due save token or rejects stale timer delivery.

Records a successful synchronous write.

Installs a runtime timer under its semantic delivery token.

Types

t()

@type t() :: %MingaAgent.Session.Persistence{
  dirty?: boolean(),
  enabled?: boolean(),
  retry_count: non_neg_integer(),
  timer: timer() | nil
}

Focused transcript persistence bookkeeping.

timer()

@type timer() :: {token :: reference(), timer_ref :: reference()}

A semantic timer token paired with the runtime timer reference.

Functions

cancel(persistence)

@spec cancel(t()) :: {t(), timer() | nil}

Cancels bookkeeping for the current timer and returns its runtime effect handle.

changed(persistence)

@spec changed(t()) :: {t(), timer() | nil}

Marks the transcript dirty and returns the timer Session must cancel.

dirty?(persistence)

@spec dirty?(t()) :: boolean()

Returns whether the transcript has unsaved changes.

enabled?(persistence)

@spec enabled?(t()) :: boolean()

Returns whether transcript persistence is enabled.

failed(persistence)

@spec failed(t()) :: {t(), pos_integer()}

Records a failed write and returns the next retry delay.

new(enabled?)

@spec new(boolean()) :: t()

Creates persistence bookkeeping for one Session.

restored(persistence)

@spec restored(t()) :: {t(), timer() | nil}

Marks a restored transcript as already persisted.

save_due(persistence, token)

@spec save_due(t(), reference()) :: {:save, t()} | :stale

Consumes a due save token or rejects stale timer delivery.

saved(persistence)

@spec saved(t()) :: t()

Records a successful synchronous write.

scheduled(persistence, token, timer_ref)

@spec scheduled(t(), reference(), reference()) :: t()

Installs a runtime timer under its semantic delivery token.