Immutable Todos
BeamWeaver.Todo is a small pure value for application-owned progress state. It is separate from BeamWeaver.Tools.Todo, which remains a model-facing whole-list planning tool for ordinary agents.
{:ok, todo} =
BeamWeaver.Todo.new("release-plan", [
%{id: "inspect", content: "Inspect the implementation"},
%{id: "change", content: "Make the change", dependencies: ["inspect"]}
])
{:ok, next} =
BeamWeaver.Todo.revise(
todo,
[
%{
id: "inspect",
content: "Inspect the implementation",
status: :completed,
evidence: [%{kind: :completion, ref: "checkpoint-42"}]
},
%{id: "change", content: "Make the change", dependencies: ["inspect"]}
],
expected_revision: todo.revision,
expected_hash: todo.hash
)
Plans are bounded to 128 items and 512 dependency edges. IDs, item definitions, and existing order are immutable; new items may only be appended. Dependencies must be known, unique, and acyclic. State changes require an evidence reference with the corresponding :assignment, :blocker, :blocker_resolved, :completion, or :cancellation kind. BeamWeaver validates the kind and stable hash; evidence is append-only, and an assigned owner/assignment pair cannot move to another owner. The application owns the referenced evidence and persistence.
The value is not a scheduler, authorization system, database schema, or mutable process store. Persist each accepted revision through your application's normal checkpoint or database boundary.