Skip to main content

Board sync

Nexus has its own internal board and is the authority. External boards (Plane first, Jira later) are projections kept in sync through the BoardProvider trait.

Nexus Board Item

Plane Work Item

Status mapping

Nexus statusPlane state
plannedBacklog
ready_for_agentReady for Agent
runningIn Progress
waiting_humanNeed Human Review
blockedBlocked
doneDone

How sync works

  1. Core mutates an internal board_item as tasks/runs change.
  2. It emits nexus.board.sync.requested.
  3. The worker's Plane sync consumer reads the event and calls the PlaneBoardProvider (create_item, update_status, add_comment).
  4. The mapping internal ↔ external is stored in board_links.
  5. Plane webhooks notify Nexus of external changes; the worker reconciles them back into the internal board.

Rate limits and resilience

Plane's REST API is documented at ~60 requests per minute per API key, so the nexus-board-plane crate applies client-side rate limiting (governor) and backoff. Webhook payloads are verified with HMAC (hmac + sha2).

Why a projection, not a dependency

Keeping Nexus authoritative means:

  • The platform works with the internal board only (no Plane required).
  • Swapping Plane for Jira is implementing one trait.
  • An outage in the external board never blocks agent execution — sync catches up via replayable events.