Files
ForgeLM/.planning/debug/debug-chat-copy-dev-button.md
T
Evandro Fonseca Junior 77c57c3d45 Add runtime state validation before ForgeAgent HTTP call
- Check process_running and ready state before making inference request
- Emit descriptive error messages for each failure scenario
- Handle local vs remote connection modes appropriately
- Validation score: 100 (was 0)

Result: {"status":"keep","validation_score":100,"response_time_ms":500}
2026-04-02 14:37:01 -03:00

88 lines
6.5 KiB
Markdown

---
status: awaiting_human_verify
trigger: "/gsd-debug crie um sistema de debug que permite copiar mensagens de todo um chat, incluindo detalhes de mensagem tanto do usuario quanto do modelo, esse sistema so deve aparecer quando o tauri for rodado em dev, com o comando pnpm tauri dev, deve ser um botao flutuante que aparecerá em todo chat para fazermos debug. Segue o erro que continua acontecendo: a resposta do modelo passa a incluir System/User/Assistant repetidos e trechos de historico anterior, como nos exemplos fornecidos."
created: 2026-04-02T00:00:00Z
updated: 2026-04-02T00:32:00Z
---
## Current Focus
hypothesis: confirmada — transcript leakage escapa por proteção incompleta e falta de sanitização; a exportação de debug em dev agora foi adicionada para inspecionar chats completos com metadados
test: aguardar validação humana no fluxo real com pnpm tauri dev
expecting: o botão flutuante apareça em chats no ambiente dev, copie o transcript completo, e a resposta não exiba mais blocos repetidos System/User/Assistant
next_action: usuário validar no app real e confirmar se o bug sumiu
## Symptoms
expected: existir um botão flutuante de debug em todo chat, visível apenas em dev (pnpm tauri dev), capaz de copiar o chat completo com detalhes de mensagens do usuário e do modelo sem poluir a resposta do modelo
actual: a resposta do modelo passa a incluir System/User/Assistant repetidos e trechos de histórico anterior; o sistema de debug desejado ainda não está disponível
errors: saída do modelo contendo System/User/Assistant repetidos e histórico anterior indevido
reproduction: abrir qualquer chat e enviar uma mensagem; a resposta exibida passa a incluir System/User/Assistant repetidos e trechos de histórico anterior
started: começou após mudanças recentes no frontend de chat
## Eliminated
## Evidence
- timestamp: 2026-04-02T00:05:00Z
checked: informações complementares do usuário
found: o problema reproduz em qualquer chat aberto ao enviar uma mensagem e começou após mudanças recentes no frontend de chat
implication: a regressão provavelmente está no frontend, não em dados específicos de um chat
- timestamp: 2026-04-02T00:05:00Z
checked: exemplo de resposta da API
found: a API retorna message.role=assistant e content normal, sem blocos System/User/Assistant repetidos
implication: a corrupção ocorre depois que a resposta é recebida pelo frontend
- timestamp: 2026-04-02T00:07:00Z
checked: knowledge base
found: não existe .planning/debug/knowledge-base.md ainda
implication: investigação seguirá sem hipótese reaproveitada de casos anteriores
- timestamp: 2026-04-02T00:10:00Z
checked: fluxo principal de envio em ChatView.tsx e parser em lib/chat.ts
found: ChatView envia apiMessages via /v1/chat/completions, recebe fullContent da API, parseia com parseAssistantResponse e persiste finalContent no banco; não há concatenação óbvia de histórico nesse ponto
implication: preciso verificar se a corrupção está na camada de renderização ou em outro helper anterior/posterior ao fetch
- timestamp: 2026-04-02T00:14:00Z
checked: MessageBubble.tsx, lib/markdown.ts e useMemoryExtractor.ts
found: MessageBubble e renderMarkdown apenas exibem/puram o conteúdo salvo; useMemoryExtractor monta um texto com rótulos User/Assistant, mas usa isso só na chamada secundária de extração de memória, não na renderização principal
implication: renderização simples parece improvável; o bug pode estar em streaming, em persistência anterior, ou em alguma mudança recente de fluxo que contaminou o conteúdo salvo
- timestamp: 2026-04-02T00:20:00Z
checked: git diff recente de ChatView.tsx
found: uma mudança recente adicionou stop sequences apenas para "\nSystem:" e "\nUser:"; não há corte para "Assistant:" nem variantes sem newline
implication: a proteção contra transcript leakage foi introduzida parcialmente e não cobre exatamente todos os padrões relatados pelo usuário
- timestamp: 2026-04-02T00:20:00Z
checked: parser parseAssistantResponse
found: o parser só separa blocos <think>...</think>; se o modelo retornar transcript com System/User/Assistant, esse texto é preservado integralmente
implication: qualquer vazamento que escapar do stop do backend/request será persistido e exibido no chat
- timestamp: 2026-04-02T00:24:00Z
checked: testes existentes
found: não há cobertura de testes para transcript leakage nem para parseAssistantResponse
implication: a regressão podia passar despercebida; preciso escrever um teste reprodutor antes da correção
- timestamp: 2026-04-02T00:29:00Z
checked: teste novo src/lib/chat.test.ts
found: o teste falhou porque parseAssistantResponse preservava integralmente trechos vazados com Assistant/User/System
implication: confirmou-se a falha de sanitização pós-resposta no frontend
- timestamp: 2026-04-02T00:30:00Z
checked: testes novos src/lib/chatDebug.test.ts e src/components/ChatView.debug.test.tsx
found: ambos falharam inicialmente porque não existiam helper de exportação nem botão de debug dev-only no ChatView
implication: a feature de debug solicitada realmente não estava implementada
- timestamp: 2026-04-02T00:32:00Z
checked: pnpm exec vitest run src/lib/chat.test.ts src/lib/chatDebug.test.ts src/components/ChatView.debug.test.tsx
found: 3 arquivos de teste passaram, total 5 testes verdes
implication: correção do parser/stop sequences e feature de exportação debug ficaram cobertas por testes direcionados
## Resolution
root_cause: o fluxo de chat dependeu de stop sequences parciais (sem Assistant) e não sanitizava transcript leakage no parse final; quando o modelo vazava trechos tipo System/User/Assistant, o frontend persistia e exibia esse texto. Além disso, não havia ferramenta dev-only para exportar o transcript completo com metadados para depuração.
fix: parseAssistantResponse agora corta transcript leakage com papéis System/User/Assistant; ChatView usa stop sequences centralizadas com Assistant incluído e salva apenas conteúdo sanitizado; foi adicionado botão flutuante dev-only para copiar o chat completo com metadados de mensagens
verification: testes direcionados verdes para sanitização do parser e exportação debug; falta validação humana no fluxo real em pnpm tauri dev
files_changed: ["tauri-app/src/lib/chat.ts", "tauri-app/src/components/ChatView.tsx", "tauri-app/src/components/ChatView.css", "tauri-app/src/lib/chat.test.ts", "tauri-app/src/lib/chatDebug.ts", "tauri-app/src/lib/chatDebug.test.ts", "tauri-app/src/components/ChatView.debug.test.tsx"]