Skip to content

Shipyard v1.9.0

Choose a tag to compare

@defremont defremont released this 09 Jul 22:03

Cards do Trello em ordem útil, copiar/colar funcionando no Claude CLI, MCP com cobertura total do sistema e um app bem mais leve.

Sincronização com o Trello

O Trello só ordena uma lista por data de criação ou alfabeticamente — e o agente MCP cria as tarefas de uma milestone inteira no mesmo segundo, então a ordem de criação não dizia nada. Agora o Shipyard controla a posição de cada card e a reescreve a cada push:

  • Done — concluídas mais recentes no topo
  • In Progress — iniciadas mais recentes no topo
  • To Do / Backlog — a ordem do kanban (prioridade, depois ordem manual)

Cards concluídos passam a exibir a data de conclusão como selo no próprio card. O board abre já organizado, sem precisar mudar nenhuma configuração de ordenação — o que o torna apresentável para um cliente.

O push também ficou muito mais barato: antes era um PUT sequencial por tarefa; agora ele compara com um snapshot do board e envia apenas os campos que mudaram, em paralelo e com backoff em caso de rate limit. Um push sem mudanças não faz nenhuma escrita. Uma edição feita direto no Trello não é sobrescrita.

MCP

Correção importante: nenhuma mutação via MCP disparava o auto-sync. Tarefas criadas ou concluídas pelo agente só chegavam ao Trello/ClickUp quando alguém mexia na interface.

De 16 para 24 ferramentas:

  • Milestones completos: create_milestone, update_milestone, delete_milestone, e list_milestones com contagem por status
  • Operações em lote: create_tasks, bulk_update_tasks, bulk_delete_tasks, reorder_tasks
  • update_task move tarefas entre milestones
  • get_git_diff, update_project
  • Controle de sync: list_sync_integrations, sync_push, sync_pull

Ferramentas somente-leitura e destrutivas agora são anotadas conforme a spec do MCP.

Terminal integrado

Colar em uma sessão do Claude CLI estava quebrado por dois motivos somados. O texto ia cru pelo WebSocket, sem os marcadores de bracketed paste, então o CLI lia cada quebra de linha como Enter e submetia linha por linha. E o servidor fatiava o texto em blocos de 256 caracteres, cortando emoji e sequências de escape ao meio — um marcador de fim de colagem partido deixava o CLI travado.

  • Colagem via term.paste(): as quebras de linha viram \r e o texto é enviado como uma única colagem
  • O fatiamento nunca quebra pares substitutos nem sequências de escape
  • Toda escrita no PTY passa por uma fila por sessão, então uma tecla digitada não cai mais no meio de uma colagem
  • Botão direito copia a seleção ou cola; botão do meio cola

Sobre a fluidez: o renderer WebGL substituiu o DOM (com queda automática se o WebGL não estiver disponível), e a saída do PTY é agrupada em quadros de ~8 ms em vez de uma mensagem por pedaço — o Claude CLI repinta a tela constantemente e gerava centenas de mensagens por redesenho.

Performance

Boot: 735 KB → 182 KB de JavaScript comprimido (−75%). CodeMirror, xterm e react-markdown saíram do caminho crítico.

Servidor:

  • syncStore serve leituras da memória — uma única mutação de tarefa relia e reparseava o JSON inteiro de 8 a 15 vezes
  • O caminho de leitura do taskStore não escreve mais em disco, e getAllTasks lê os projetos em paralelo
  • O poll de git de 15 s caiu de 4 para 2 subprocessos por projeto e reusa a fila por repositório
  • Escritas de log são bufferizadas em vez de uma syscall por linha

Cliente:

  • ['tasks','all'] — a consulta mais cara — deixou de ser refeita a cada 5 s em todas as páginas por causa da busca global sempre montada
  • Cartões de tarefa memoizados
  • O auto-pull só invalida as consultas quando algo realmente mudou

Nota

Sub-repositórios agora são detectados no refresh completo do projeto, e não a cada 15 s. Se você rodar git init numa subpasta, atualize o projeto para ele aparecer. Um .git na raiz continua sendo detectado automaticamente.

Esta release não traz instaladores. Use pnpm dist:win, dist:mac ou dist:linux para gerá-los.

Full Changelog: v1.8.0...v1.9.0