Repository navigation
fix(agent): sdk-core 0.3.5, segunda tela com mensagem na fila termina o turno que roda (#136) - #137
Conversation
|
/gandalf |
|
Gandalf, análise 1 · commit Pega-rápido Insights Forma da implementação Finding
Confiança, comentários e testes
Decisão: não aprovaria até corrigir o finding major e cobrir esse caso no teste. Aqui o meu check é obrigatório: depois de um push, comente |
|
Gandalf, análise 1 · commit Pega-rápidoA issue #136 relata que, numa sessão compartilhada, uma mensagem enviada antes de a segunda tela reconhecer o turno ativo podia perder o encerramento da resposta. O PR mantém o encerramento do turno observado e acrescenta um teste com InsightsO problema é real: a issue documenta reprodução em produção e em dev, e esperar o socket anunciar o turno é apenas um contorno, não uma garantia para a API. Corrigir a sessão compartilhada é proporcional. Mas a mudança também pode soltar a espera da mensagem enfileirada quando termina o turno de outro cliente, quebrando o vínculo entre Forma da implementaçãoPrecisa ajuste. A mudança é localizada e a estrutura é simples. Falta separar o acompanhamento do turno alheio do waiter da mensagem que ainda está na fila. Findings
Confiança, comentários e testesConfiança alta: o caminho da fila até DecisãoNão aprovaria até o ajuste que preserve a associação entre a mensagem enfileirada e o turno que a responde. Depois da correção, publique o Core antes dos SDKs consumidores: Para uma nova análise depois de mudanças, comente |
|
/gandalf |
gandalf-the-grey-bot
left a comment
There was a problem hiding this comment.
Sem finding novo de linha nesta rodada. O ponto anterior foi corrigido; ver o comentário de análise 2 no PR.
|
Gandalf, análise 2 · commit Desde a análise 1: o finding sobre a associação do waiter foi corrigido (fio 1, fio 2); os dois fios estão resolvidos. Nenhum achado segue aberto e não há achado novo. A coordenação de release continua pendente: o PR #122 também declara Decisão: mergeável; antes da publicação, alinhe o Aqui o meu check é obrigatório: depois de um push, comente |
|
/gandalf |
gandalf-the-grey-bot
left a comment
There was a problem hiding this comment.
Sem achados novos no delta revisado desde a análise 2.
|
Gandalf, análise 3 · commit Desde a análise 2: o delta cobre a ordem inversa da corrida; os dois fios anteriores seguem resolvidos; nenhum achado novo. O CI do commit revisado passou em build, testes, convenção do PR e compatibilidade (18 e 22). A coordenação com o PR #122 segue pendente: ambos declaram 0.3.5. Decisão: mergeável; alinhe 0.3.5 com o PR #122 antes da publicação e publique o Core antes dos SDKs dependentes. Aqui o meu check é obrigatório: depois de um push, comente |
… o turno que roda (#136) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rno dela (#136) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…atras dele (#136) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…trou na main (#136) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
/gandalf |
900cd7b to
3c252ed
Compare
gandalf-the-grey-bot
left a comment
There was a problem hiding this comment.
Sem novos achados de linha nesta rodada. Os pontos anteriores seguem resolvidos; o veredito consolidado está no comentário final.
|
Gandalf, análise 4 · commit Desde a análise 3: o delta é documental em Decisão: mergeável no SHA auditado; manter alinhada a publicação do Aqui o meu check é obrigatório: depois de um push, comente |
Fecha #136.
O que muda
Uma segunda tela abre um chat com turno rodando e manda uma mensagem com
mode: "queue"antes de o socket dela contar que há turno. A sessão se acha livre e a mensagem vira abertura, esperando ostepStartdela, que só vem quando a fila chegar nela. Enquanto isso, os frames do turno que roda eram lembrados como de turno encerrado, e ostepFinishdele era descartado.Agora um
stepStartque nomeia outra mensagem, com a abertura esperando, quer dizer que há um turno rodando à frente dela. A abertura passa a esperar o turno dela como um steer na fila (strayedSteers, com o waiter), e os frames do turno que roda contam como dele. OturnEnddesse turno sai sem resolver osendAndWaitda mensagem na fila; ostepStartda própria mensagem a reassocia peloclientMessageId, e remover da fila rejeita só ela. OforgetFinishedTurncontinua só para a própria abertura. A outra ordem, vista na dev: ostepStartdo turno que roda chega no replay enquanto a mensagem ainda está saindo (abrindo o canal, lendo a base do turno). A sessão já está emstreamingquando a mensagem ia virar abertura; agora ela vai atrás desse turno como um steer (sendBehindRunningTurn), sem zerar o conteúdo nem emitir outroturnStart. Mudança emdispatchSend,sendBehindRunningTurn,handleEventeopeningQueuedBehind(src/agentSession.ts).Mudança de comportamento
turnEnddesse turno, e o Stop dela é reconhecido. Antes, nenhumturnEnd, e o Stop dava "Agent turn cancellation was not acknowledged before the safety timeout". Visto em produção e reproduzido na dev com a box viva (0.3.3 e 0.3.4).Release
sdk-core 0.3.5, com o corpus
contracts/v0.3.5(mesmos casos da 0.3.4) ecurrentno manifest. Publicação fica com o Joao.Testes
npm test: 735 de 735 (16 arquivos). Testes novos emagentChannel.test.ts, sessão aberta portaskIdesendAndWait(x, { mode: "queue" })pelo canal direto, com a box pondoxna fila atrás do turno de outra mensagem: (1) o turno que roda fecha comturnEnd, a promise dexsegue pendente e resolve só com o turno dela; (2) removerxda fila rejeita só ela, e o turno que roda segue até oturnEnd; (3) ostepStartdo turno que roda chega antes dexsair:xvai atrás dele, o turno fecha comturnEnddepois detoolCalletextDelta, umturnStartsó, exresolve com o turno dela. Os três falham sem a mudança.typecheck,lint,format:check,build,check:exports,check:contractsesmoke:packageverdes.🤖 Generated with Claude Code