Visão geral
Arrastar cartão entre colunas é a parte fácil. O difícil de um Kanban colaborativo é o que acontece quando duas pessoas mexem no mesmo lugar no mesmo segundo. O Quadro foi construído em cima desse problema.
Como funciona
Posição: em vez de 1, 2, 3 (que obriga a renumerar a coluna a cada movimento), a posição é um texto que se ordena sozinho. Entre "a" e "b" sempre cabe "aV". Mover grava só o cartão movido. Quando muita inserção no mesmo ponto deixa a posição comprida, a coluna é rebalanceada na hora, sem mexer na versão de ninguém.
Ordem: cada quadro tem uma fila de uma operação por vez. Toda operação ganha um número de sequência sem buraco, é gravada no banco e só então vai pra todo mundo, na mesma ordem. Quem cai e volta recebe só o que perdeu.
Conflito: todo comando leva a versão do cartão que a pessoa viu. Se outra pessoa salvou no meio, vem um aviso em vez de sobrescrever. Testando com duas pessoas no navegador apareceu um caso que os testes de unidade não pegavam: salvar de novo depois do aviso apagaria em silêncio o que a outra pessoa escreveu. Agora o app junta as duas edições campo a campo e só pergunta quando as duas mexeram no mesmo campo.
Kanban de verdade: limite de cartões em andamento por coluna (WIP), quem está online, atividade ao vivo e alternativa ao arrastar pra teclado e celular.
Testes
41 testes automatizados. Os de integração sobem o servidor de verdade e conectam clientes SignalR reais: duas pessoas movendo o mesmo cartão ao mesmo tempo (uma ganha, a outra recebe conflito), 40 cartões criados em paralelo por 4 pessoas (sequência contínua, posições únicas), reconexão recebendo só o que perdeu, e o quadro sobrevivendo a derrubar e subir o app de novo.
Stack
C# 12, .NET 8, Blazor Server, ASP.NET Core SignalR, Entity Framework Core com SQLite, xUnit.