Repository navigation
fix(agent): sdk-core 0.3.6, fala do turno em curso nao duplica no history depois do loadOlder (#140) - #141
Conversation
…tory depois do loadOlder (#140) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
/gandalf |
|
Gandalf, análise 1 · commit Pega-rápido
Insights
Forma
Score: 8,91/10. Confiança: alta no achado, sustentado pelo fluxo determinístico e pelo contrato local; a validação de código foi estática, com CI verde. Decisão: não aprovaria até corrigir o major. Aqui o meu check é obrigatório: depois de um push, comente |
|
Gandalf, análise 1 · commit Pega-rápido Insights Forma da implementação Findings
Confiança e CI Decisão: Não aprovaria até corrigir o ponto major descrito acima. Aqui o meu check é obrigatório: depois de um push, comente |
…no log das linhas (#140) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
/gandalf |
gandalf-the-grey-bot
left a comment
There was a problem hiding this comment.
Nenhum comentário de linha nesta rodada.
|
Gandalf, análise 2 · commit Desde a análise 1: os dois achados major foram corrigidos (ponto 1, ponto 2); não encontrei achado novo. As duas conversas ainda aparecem abertas no GitHub e precisam ser resolvidas para liberar a regra de resolução de threads. Decisão: mergeável depois de resolver as duas conversas corrigidas. Aqui o meu check é obrigatório: depois de um push, comente |
Prova na dev (box viva)Script
A queda do socket com reconcile não duplica em nenhuma das duas versões. O que duplica na 0.3.5 é a sessão que carrega o history com o turno já rodando, como descrito na issue. Regressão curta na dev
A primeira rodada do close2 deu 11/17 nas duas versões, com as mesmas falhas: a box Codex do usuário de teste tinha sido aberta por uma task de outro teste, e a trava do script não deixou matá-la. O dono liberou a box, e a segunda rodada deu 29/29 nas duas. |
Fecha #140.
O que muda
Toda conexão com a box traz de novo o
stepStartdo turno que roda, com a sequência original e oclientMessageIdda fala (osendStatedo sidecar). Uma sessão que carrega o history enquanto esse turno roda (F5, outra aba, ou o app reabrindo a sessão depois de o canal cair de vez) recebe a página mais nova, que num turno longo começa depois da fala. OliveQuestionnão achava a fala peloclientMessageIde criavalive:user:<id>no fim; oloadOlderdepois trazia a linha original, e a fala ficava duas vezes.Agora o
liveQuestionnão cria a fala cuja sequência fica antes da linha mais antiga que o history tem, quando o servidor ainda tem linhas mais antigas (hasOlder). Ela é uma dessas linhas e entra peloloadOlder, no lugar dela, então o history fica igual ao do servidor. Duas exceções mantêm o comportamento de antes:sentTexts);hellocomlastSequencemenor que o fim do history marca que as sequências não são mais comparáveis com as linhas (a mesma regra que o canal usa para pedir o replay do zero). Essa marca volta a valer a cadareplaceHistory.Mudança em
liveQuestion,replaceHistory,handleEvent(casehello) ebeforeLoadedRows(src/agentSession.ts).Causa confirmada
ecdf5e92...tinha 121 linhas depois da faladfa3f96e...até 20:48 UTC, então a página de 100 do reload não a contém.reconcilePersistedTurnsozinho não duplica: com o turno em curso na sessão, ostepStartrepetido cai emrepeatsTheRunningTurnantes doliveQuestion(testado). O que duplica é a sessão que carrega o history com o turno já rodando, onde esse filtro não vale porque a sessão ainda não segue turno nenhum. O bug existe na 0.3.5.Mudança de comportamento
loadOlder. Antes doloadOlderela não aparece, como no servidor, porque está numa página de trás.Release
sdk-core 0.3.6, com o corpus
contracts/v0.3.6(mesmos casos da 0.3.5) ecurrentno manifest. O #139 também está marcado como 0.3.6: quem mergear primeiro fica com o número. Publicação fica com o Joao.Testes
npm run checkverde: 739 de 739 (16 arquivos),format:check,lint,typecheck,build,check:exports,check:contracts,pack:checkesmoke:package. Testes novos emagentSession.test.ts("a turn whose question is older than the loaded page"):taskIdcom página que começa depois da fala ehasOlder,hellodo mesmo log,stepStartrepetido do turno: o history não ganha a fala no fim; depois doloadOlderela aparece uma vez, antes das linhas do turno. Falha sem a correção (live:user:cm-qno fim).hellode um log que recomeçou estepStartde sequência baixa: a fala aparece ao vivo, como antes.A prova na dev por tarball contra a box viva vai nos comentários.
🤖 Generated with Claude Code