You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Complementa e endurece o contrato entregue em #433.
O reporting por etapa não pode apenas mostrar que um problema ocorreu. Todo problema confirmado encontrado durante qualquer etapa do loop deve virar um work item rastreável no GitHub, inclusive quando a origem estiver em:
uma skill do Simplicio ou de terceiros;
outro projeto/repositório do ecossistema;
CLI, MCP, hook, adapter, runtime, provider ou ferramenta externa;
build, lint, teste, integração, sistema, segurança, performance, documentação, instalação, empacotamento ou operação;
configuração, contrato, permissão, autenticação, compatibilidade, observabilidade ou experiência do usuário.
Nenhum finding pode existir apenas em log, comentário, receipt, memória do agente ou resposta final.
Objetivo
Implementar um Finding → Report → Issue → Resolution lifecycle transversal a todas as etapas do simplicio-loop, garantindo que:
cada etapa produza report estruturado;
cada problema confirmado gere ou atualize exatamente uma issue canônica;
a issue seja criada no repositório responsável sempre que possível;
falhas de roteamento ou permissão gerem issue de fallback no simplicio-loop;
a issue contenha contexto profundo, reprodução, causa provável/confirmada, plano passo a passo, critérios de aceite e estratégia de testes;
o item original fique vinculado à issue derivada e não seja declarado completamente entregue se deixou problema in-scope sem rastreamento;
duplicatas sejam reconciliadas por fingerprint, sem “issue spam”;
a resolução só seja aceita com evidência verificável.
Invariantes obrigatórios
Report em todas as etapas: nenhuma transição de stage ocorre sem stage report persistido.
Issue para todo problema: todo finding classificado como problema confirmado produz issue_created ou issue_linked_existing.
Nada silencioso: erro ao criar a issue produz outbox durável, retry e estado explícito issue_reporting_pending.
Sem falso COMPLETE: findings in-scope não rastreados bloqueiam COMPLETE.
Responsabilidade correta: issue vai para o repositório proprietário do componente afetado, não automaticamente para o repositório atualmente executado.
Sem duplicação: o mesmo defeito observado por vários agents/stages/runs converge para uma issue canônica.
Profundidade mínima: issue rasa, sem reprodução, passos de implementação, testes e critérios de aceite é inválida.
Evidência antes de fechar: comentário “feito” ou confiança do agente não substitui teste/receipt/commit/PR verificável.
Segurança: secrets, tokens, PII, signed URLs e logs crus nunca são publicados.
Transição de stage deve chamar o collector antes de persistir o report. Findings tardios de review/watcher devem atualizar reports anteriores sem reescrever receipts imutáveis: emitir evento de correção vinculado.
Outbox transacional e recuperação
Criar outbox append-only para:
issue_create_intent;
issue_create_confirmation;
issue_update_intent;
issue_update_confirmation;
issue_reopen_intent;
issue_link_confirmation.
Requisitos:
retry com exponential backoff + jitter;
re-query por marker antes de repetir mutation;
retomada após crash;
idempotency key;
dead-letter observável, nunca descarte;
rate-limit consciente;
ordenação por sequence/high-water mark;
CLI:
simplicio-loop findings list --json
simplicio-loop findings report --json
simplicio-loop findings flush --json
simplicio-loop findings reconcile --json
simplicio-loop findings doctor --json.
Plano de implementação
Mapear todos os producers de erro/finding no runner, stage agents, adapters, hooks, review, tests, delivery e watcher.
COMPLETE bloqueado até todas as issues obrigatórias estarem confirmadas.
Segurança
token/secret/PII em stdout e stacktrace;
prompt injection solicitando omitir issue ou trocar owner;
Markdown/HTML malicioso;
signed URL;
path traversal em artifact refs;
conteúdo de issue tratado como untrusted no re-ingest;
agente sem permissão tentando suprimir finding.
Performance e resiliência
10.000 findings/ocorrências sem perda;
burst de múltiplos agents;
rate limit prolongado;
reinício repetido;
compactação sem perder evidência/links;
custo e latência medidos antes/depois.
Critérios de aceite
Todas as etapas do lifecycle emitem report estruturado, inclusive em erro, cancelamento e crash recuperado.
Todo problema confirmado gera ou vincula exatamente uma issue canônica.
Problems em skills, projetos, CLIs, MCPs, hooks, adapters, runtimes, providers e ferramentas estão cobertos.
Issue é criada no repositório proprietário ou em fallback explícito e rastreável.
Toda issue derivada contém reprodução, evidência, impacto, plano passo a passo, testes, critérios de aceite e DoD.
Findings suspeitos recebem issue de investigação sem serem apresentados como fatos confirmados.
Fingerprint impede duplicatas e preserva ocorrências.
Regressão reabre a issue correta quando a causa é a mesma.
Outbox sobrevive a crash/offline/rate limit e confirma o efeito remotamente.
Nenhum secret, PII, signed URL ou log cru é publicado.
Stage reports exibem issues/findings e health do outbox.
COMPLETE é bloqueado enquanto existir finding confirmado in-scope sem issue remotamente confirmada.
Problemas descobertos depois da entrega revogam o estado terminal e produzem REGRESSED.
Source/plugin/bundle/wheel permanecem em parity.
Testes unitários, integração, sistema/E2E, segurança, recovery e performance passam.
Cada checkbox possui link para teste, receipt, issue sandbox ou evidência reproduzível.
Definition of Done
Executar um cenário sandbox com múltiplos repositórios e múltiplos agents no qual problemas sejam injetados em cada etapa e em pelo menos: código do loop, mapper, dev-cli, uma skill, um adapter e uma ferramenta externa. O sistema deve produzir reports em todas as etapas, criar/vincular uma única issue profunda por problema no owner correto, recuperar após offline/crash sem duplicação, sanitizar conteúdo sensível e impedir COMPLETE até observar remotamente todas as issues obrigatórias.
Contexto
Complementa e endurece o contrato entregue em #433.
O reporting por etapa não pode apenas mostrar que um problema ocorreu. Todo problema confirmado encontrado durante qualquer etapa do loop deve virar um work item rastreável no GitHub, inclusive quando a origem estiver em:
Nenhum finding pode existir apenas em log, comentário, receipt, memória do agente ou resposta final.
Objetivo
Implementar um Finding → Report → Issue → Resolution lifecycle transversal a todas as etapas do
simplicio-loop, garantindo que:simplicio-loop;Invariantes obrigatórios
issue_createdouissue_linked_existing.issue_reporting_pending.COMPLETE.Cobertura obrigatória por etapa
Classificação do finding
Criar contrato
simplicio.finding/v1com:finding_id,fingerprintededup_scope;run_id,task_id,stage,agent_id,attempt,fence;bug | security | performance | reliability | integration | test-gap | documentation | packaging | tooling | skill | configuration | compatibility | ux | other;suspected | confirmed | disproved | accepted-risk | resolved | regressed;Regra de confirmação
confirmed: reprodução determinística, teste falhando, contrato violado ou evidência independente suficiente → issue obrigatória.suspected: criar/atualizar uma issue de investigação quando não for possível confirmar dentro do orçamento; nunca declarar o fato como confirmado.disproved: registrar receipt com evidência e não abrir issue nova.accepted-risk: exige ator, justificativa, prazo/revisão e issue rastreável.Resolução do repositório proprietário
Implementar
IssueTargetResolverdeterminístico:CODEOWNERS, dependency metadata e source URL;simplicio-loopcom labelexternal-owner-pending;Configuração proposta:
Template mínimo obrigatório da issue derivada
Toda issue criada automaticamente deve conter:
<!-- simplicio-loop:finding:v1 fingerprint=<sha256> owner=<repo> -->A criação deve falhar na validação local se o template mínimo não estiver completo.
Deduplicação e atualização
owner_repo + component + error_class + normalized_signature + affected_contract.canonical_issue_idno finding ledger.Reports em todas as etapas
Estender o stage reporting de #433 com:
findings_total,confirmed,suspected,resolved,untracked;Cada stage receipt deve incluir:
{ "findings": [], "issue_projection": { "required": true, "pending": 0, "confirmed": [], "high_water_mark": 0 } }Transição de stage deve chamar o collector antes de persistir o report. Findings tardios de review/watcher devem atualizar reports anteriores sem reescrever receipts imutáveis: emitir evento de correção vinculado.
Outbox transacional e recuperação
Criar outbox append-only para:
issue_create_intent;issue_create_confirmation;issue_update_intent;issue_update_confirmation;issue_reopen_intent;issue_link_confirmation.Requisitos:
simplicio-loop findings list --jsonsimplicio-loop findings report --jsonsimplicio-loop findings flush --jsonsimplicio-loop findings reconcile --jsonsimplicio-loop findings doctor --json.Plano de implementação
finding/v1, issue intent, issue confirmation, occurrence e resolution receipt.FindingCollectortransversal e API única; proibir criação ad hoc fora dela.IssueTargetResolvere registry de ownership do ecossistema.untracked_confirmed_findings == 0.Matriz de testes obrigatória
Unitários
Integração
Sistema/E2E multi-repo
simplicio-mapper;simplicio-dev-cli;COMPLETEbloqueado até todas as issues obrigatórias estarem confirmadas.Segurança
Performance e resiliência
Critérios de aceite
COMPLETEé bloqueado enquanto existir finding confirmado in-scope sem issue remotamente confirmada.REGRESSED.Definition of Done
Executar um cenário sandbox com múltiplos repositórios e múltiplos agents no qual problemas sejam injetados em cada etapa e em pelo menos: código do loop, mapper, dev-cli, uma skill, um adapter e uma ferramenta externa. O sistema deve produzir reports em todas as etapas, criar/vincular uma única issue profunda por problema no owner correto, recuperar após offline/crash sem duplicação, sanitizar conteúdo sensível e impedir
COMPLETEaté observar remotamente todas as issues obrigatórias.Dependências e relacionamento
edit-last, comentários duplicados ou estado baseado apenas em presença de arquivo.