Bug: handleMoveCard solo emitia board.invalidated. Dispatcher mapeaba a
update() (PUT summary/description/labels) NUNCA a transition(), asi que
mover una card en kanban no transicionaba su Jira issue de columna. Solo
los labels reflejaban el cambio.
Fix backend (handlers.go):
- handleMoveCard ahora lee column_id antes del MoveCard. Si la card crusa
columnas (prev != new) publica 'card.moved' antes de 'board.invalidated'.
El dispatcher reconoce 'card.moved' y ejecuta transition() -> Jira status
cambia + labels sincronizan.
- Reorder dentro de la misma columna sigue como antes: solo board.invalidated
para refetch del cliente sin tocar Jira.
- nuevo helper db.lookupCardColumnID(cardID).
UX frontend (JiraSyncIndicator):
- Polling adaptativo: 5s steady, 1s mientras inflight=true. El usuario VE
el yellow durante el sync.
- Listener de window CustomEvent 'kanban-card-moved' (cardId match) que
fuerza un refetch inmediato (~150ms) tras drop. App.tsx dispara el evento
tras api.moveCard resolve. Yellow visible casi instantaneo en lugar de
esperar al proximo tick steady.