v2.14.0
[2.14.0] - 2026-07-31
New user-visible feature release — the mnemos_workflow MCP tool + workflow_status entity + state machine (mnemos #96), the workflow lifecycle layer. Separates mutable workflow state from the append-only tag classification. New MCP tool + entity + REST + CLI = MINOR bump per SemVer.
Added
workflow_statusentity + state machine (mnemos #96) — a mutable lifecycle layer for a memory, distinct from the append-only tag classification. Six states (open,in-progress,blocked,resolved,done,withdrawn) with a server-enforced state machine:blocked → doneis forbidden (a stuck dependency must go throughresolvedfirst — blocked → resolved → done);done/withdrawnare terminal (no outgoing edges);openhas no edge toblocked(a memory must enterin-progressbefore it can be blocked). Backed by a SQLite migration (memory_workflow_statusprojection +memory_workflow_historyaudit table). Implemented inMemoryManager.workflow_set/workflow_get/workflow_historywith five guardrails: G1 audit log (rejected transitions write no audit row — the log records state changes, not attempts), G2 stale-lock auto-release (default24h), G3 idempotent transitions (same-status is a no-op, no write, no audit row), G4 force-unlock (requiresreason), G5 per-memory rate limit (default30/min — per-memory, not per-actor: churn on one memory is throttled regardless of which actor drives it). Phase 1 ships weak identity —actoris a free-form string with NO authn/authz; the guardrails are the only protection until a future phase bindsactorto an authenticated principal.mnemos_workflowMCP tool (#96) — grouped lifecycle tool via anaction: enum [set, get, history]dispatch, reusing theaction: enumpattern proven bymnemos_tags(#97, ArchCom 2026-07-18 session 2).action="set"transitions the status (requiresmemory_id,to,actor);action="get"returns the current status + lock owner;action="history"returns the audit trail. Thin wrapper over the manager — the state machine and guardrails CANNOT be bypassed from the MCP layer.- Nested REST endpoints (#96) —
GET/POST/DELETE /api/v1/memories/{memory_id}/workflow(nested under the memory, not a top-level/status— per ArchCom 2026-07-18 session 2).POSTreturns409on a guardrail violation;GETreturns404if the memory is missing.DELETEis a cancel / withdraw (terminalwithdrawn, irreversible) — it is not a lock-release-to-resumable; the state machine has no edge back toopen. - CLI
workflowsubcommand (#96) —mnemos workflow get|set|historythin wrappers over the manager;ValueError(guardrail / state-machine violation) surfaces as a red error line + exit 1, mirroring the MCP / REST surfacing. - Docs (EN + RU) — full
mnemos_workflowreference inmcp-tools.md(states diagram, input/output tables, guardrail table, lock semantics, REST equivalent, Phase 1 weak-identity note).
Install: pip install mnemos==2.14.0 · Container: ghcr.io/korrnals/mnemos:2.14.0
Branch chain (git-workflow-mnemos): feat/96-workflow-status → dev-workflow-status (squash) → release/2.14.0 → main (merge-commit + tag v2.14.0)
Full changelog: see CHANGELOG.md