Skip to content

    Release 1.32.0

    News ·

    archied — EDA: playbook action ids, and a dispatch idempotency ledger

    • Action ids (J1). Every action a later action references must now carry an id. Ids are validated at load – unique and stable-identifier-shaped – and a when/args expression naming an unknown actions.<id> is a load failure, not a runtime miss, the same reject-at-load rule already applied to a binding collision.
    • Reference classification is strict at load. A map-index reference (actions[expr]), a non-literal index, and a reference to an unknown prior id are all rejected when the playbook loads; references are classified by identifier versus static access, and the when-compilation helper is shared between the load-time and runtime paths.
    • Dispatch idempotency ledger. A playbook_dispatches row records a dispatch against (playbook_id, playbook_version, event_id, action_id), written with INSERT OR IGNORE and surfaced through the shared store.ErrAlreadyDispatched sentinel. Module, channel and forge action positions are therefore at-most-once, which is what unblocks the side-effecting positions that were previously rejected at load.
    • The ledger is wired into production. stateStoreDeps constructs Deps.PlaybookDispatcher, so the ledger RPCs no longer answer Unavailable in a running daemon. This defect was found by the pre-release review of this change rather than by its tests.

    Behaviour change: a playbook whose actions reference actions.<id> without declaring that id, declare a duplicate id, or index actions with a non-literal value now fails to load instead of failing at dispatch time.

    archie-agent

    The sandboxed runtime links storecontract and staterpc, so it carries the dispatch-ledger contract alongside archied:

    • The shared store.ErrAlreadyDispatched sentinel now describes both dedup ledgers – binding_dispatches per (binding_id, capture_id), and playbook_dispatches per (playbook_id, playbook_version, event_id, action_id). Each is an at-most-once guarantee.
    • RecordPlaybookDispatch is part of the store contract the runtime builds against.

    archied and archie-agent move together in this release.