Board sync
Nexus has its own internal board and is the authority. External boards
(Taiga first, Jira later) are projections kept in sync through the
BoardProvider trait.
Nexus Board Item
↓
Taiga User Story
Status mapping
| Nexus status | Taiga status |
|---|---|
planned | New |
ready_for_agent | Ready |
running | In progress |
waiting_human | Ready for test |
blocked | Blocked |
done | Done |
How sync works
- Core mutates an internal
board_itemas tasks/runs change. - It emits
nexus.board.sync.requested. - The worker's Taiga sync consumer reads the event and calls the
TaigaBoardProvider(create_item,update_status,add_comment). - The mapping internal ↔ external is stored in
board_links. - Taiga webhooks notify Nexus of external changes; the worker reconciles them back into the internal board.
Rate limits and resilience
Taiga has no fixed documented per-minute cap, but the nexus-board-taiga crate
applies client-side rate limiting (governor, default 60 requests/min) and
backoff so bursts of board updates stay well-behaved. Webhook payloads are
verified with HMAC-SHA1 (X-TAIGA-WEBHOOK-SIGNATURE).
Why a projection, not a dependency
Keeping Nexus authoritative means:
- The platform works with the internal board only (no Taiga required).
- Swapping Taiga for Jira is implementing one trait.
- An outage in the external board never blocks agent execution — sync catches up via replayable events.