whiteducksoftware / whiteducksoftware/flock
🧭 [SPEC] [DAPR] Dapr blackboard atomicity and concurrency hardening
Open
@tilman-sattler is already working on this.
Since Jul 17, 2026.
enhancement
- Dominant language
- Python
- Stars
- 120
- Forks
- 14
- Avg merge
- 19h 32m
- Merged PRs (30d)
- 8
Description
Why
PR #414 can ship an initial Dapr-backed blackboard store after the public API blockers are fixed, but the deeper distributed-write semantics need a separate hardening pass. Artifact/index atomicity, TTL exceptions, encrypted backend fallbacks, and ETag conflict retries should be explicit before users rely on Dapr as a shared blackboard backend.
Scope
- Define a Dapr blackboard guarantee matrix for transactional, TTL, encrypted, and non-transactional modes.
- Decide when artifact data and index updates can be committed in one
execute_state_transaction. - Document and test the weaker TTL path where artifact metadata forces a separate
save_state. - Implement ETag conflict retries by re-reading current state before retrying.
- Add failure-injection tests for partial writes, transaction failures, ETag conflict success/exhaustion, and reconciliation behavior.
- Update docs and examples so durability claims match implementation.
OpenSpec
- Change:
openspec/changes/harden-dapr-blackboard-atomicity/ - Related initial PR: #414
Out of Scope
DaprStateSessionStore- Dapr Pub/Sub, workflows, actors, bindings, or service invocation
- Broad replacement of the BlackboardStore contract
Acceptance Criteria
- Dapr docs include a clear guarantee matrix.
- Transactional no-TTL publish can commit artifact and indexes atomically, or the design documents why not.
- TTL/encrypted/non-transactional paths have tested and documented reconciliation semantics.
- ETag retry behavior is wired into real read-modify-write paths and tested for success and exhaustion.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.