Heartwood doesn't cache custom COBs, so every board read replayed the
board's whole history, about 2.5 s for 3,000 ops. Evaluated boards are
now kept in `boards.db` next to radicle-artifact's cache, keyed by the
board's ref tips, so a read with nothing new takes a few milliseconds and
an op fetched from any peer still triggers a fresh evaluation.
The port lists, creates and renames boards, edits their columns, and
applies a batch of card moves and removals as one op, so a burst of
changes costs one update of the signed refs. Changes the board would
ignore are refused before writing and reported back, and boards are only
written on the test network or in private repositories for now.
Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
A board arranges a repository's issues and patches in columns and stores
only where each card sits, as `works.monadic.board` in its own crate so
other clients can reuse it. Moves follow the issue and patch access
rules, ops that fail them are ignored rather than rejected, and positions
are fractional keys so concurrent moves converge. ADR 0005 records the
decisions.
Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>