Require attachment reads to resolve through an actor-visible item in the requested board space. Record authoritative attachment provenance so forged comment or transition refs cannot grant blob access, while preserving legacy refs through an atomic one-time migration.
BREAKING CHANGE: BoardDialect.attachment and the /v1/board/attachment endpoint now require a board space.
Worker delivery is now a read-time feed over its slice (assigned ∪ filed) — send-backs, comment answers, reassignments, cancels, and acceptance all arrive through one relation; per-event recipient addressing retired.
Reassignment delivers before interest ends; a new assignee replays the item's story. Detail pane gains Add a note (never changes state); external pending/consume become space-scoped feed calls.
Blobs live in state-dir attachments/ (sha256-named); the log carries only attachment:// refs on a normal comment event.
Attach authority = comment authority; images-only allowlist with magic-byte check, 10MB cap; in-app tool + API + CLI + MCP.
Worker list_items was slice-only, so an unassigned external worker saw an empty board — a pull queue nobody can see.
Open+unassigned items are now visible to workers while claims are open; hidden again under lead-only.
ocw board/journal verbs with server auto-discovery (remote-first; direct SQLite only headless).
ocw board mcp serves the role-scoped toolset to external harnesses; 21 tests incl. both dialects over the real app.