Skip to content

feat(journal): v0.6.25 — durable workflow_journal backend (JournalClient + event-sink)#292

Merged
Shooksie merged 3 commits into
mainfrom
feat/journal-client
Jun 30, 2026
Merged

feat(journal): v0.6.25 — durable workflow_journal backend (JournalClient + event-sink)#292
Shooksie merged 3 commits into
mainfrom
feat/journal-client

Conversation

@Shooksie

Copy link
Copy Markdown
Contributor

What

Adds a JournalClient (InTree | Plugin) behind WorkflowStateManager so run-state + checkpoints can persist to an optional workflow_journal plugin (e.g. animus-journal-postgres) instead of only local SQLite — durable across restarts/redeploys.

  • No-plugin path = byte-identical to today (SQLite). Plugin resolved once per root via discover_by_kind("workflow_journal"); kill-switch ANIMUS_DISABLE_WORKFLOW_JOURNAL_PLUGIN=1.
  • Mirrors config_source_client (resident host, death-aware respawn, run_blocking sync↔async bridge). All WorkflowStateManager methods routed via guard-at-top; readers (history/cost/status) too, so plugin mode doesn't read a stale local table.
  • RequiredRole::WorkflowJournal is optional — presence reported, never blocks boot.
  • BU-3 event-sink: tees phase transitions → journal/record (fire-and-forget, no-op on SQLite).
  • BU-4 (boot-reconcile resume-vs-cancel) intentionally NOT included — separate careful pass.

Merges current main (v0.6.24: subject --query, chat-search perf) — no journal-file conflicts.

Verification

346 orchestrator-core tests pass (existing unchanged + 4 new journal_client); workspace only the 2 pre-existing decision_gate::workflow_* fail. clippy/fmt clean. codex P1-clear (one P2 deferred: approximate plugin checkpoint-prune needs a checkpoint_delete wire method; SQLite path exact).

🤖 Generated with Claude Code

Shooksie added 3 commits June 29, 2026 17:03
…ASK-125b BU-1/BU-3)

BU-1: resolve a workflow_journal backend ONCE at WorkflowStateManager::new —
SQLite by default (byte-identical to today), or an installed workflow_journal
plugin (Postgres, ...) when present. Route every WorkflowStateManager public
method (save/load/list/list_active/list_all/query_ids/delete, save_checkpoint/
load_checkpoint/list_checkpoints/prune_checkpoints, set/load_workflow_actor,
prune_runs/delete_run, cleanup_terminal_workflows) plus the free-function
summary/index readers (active/failed/history/ref-index) through the resolved
backend. New journal_client.rs mirrors config_source_client (resident host per
root, death-aware respawn, sync<->async run_blocking bridge). Pin
animus-journal-protocol v0.1.26. Register workflow_journal as an OPTIONAL
RequiredRole (never in daemon_default; absence never blocks boot).

BU-3: tee phase/run lifecycle events from WorkflowEventBroadcaster::emit into
journal/record (fire-and-forget, no-op when no plugin installed). Daemon enables
the sink at startup and reaps the resident journal host on shutdown.

No-plugin path is byte-identical: every existing workflow test passes unchanged.
@vercel

vercel Bot commented Jun 29, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
animus-docs Ready Ready Preview, Comment Jun 29, 2026 11:58pm

Request Review

@Shooksie
Shooksie merged commit 988e281 into main Jun 30, 2026
12 of 13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant