Cópia estática
Copiado de docs/governance/m7-exit-gate.md em https://github.com/poppy-team/prumo (MIT). Fixado na revisão e91694d3959be1ed92757b34063efe0b2191821f, blob 6cbced75986ad2f6c822f500629c8a612755f191. O repositório de origem permanece canônico; esta cópia é atualizada por um pull request de sincronização, não em tempo real.
Status: CONCLUÍDO (Exit Gate do M7 Aprovado — ADOPTION READY)
Exit gate do marco M7 (conforme docs/development/phases.md e docs/runtime/adoption-engine.md): um repositório existente qualquer pode ser auditado sem mutação; fatos observados e inferências são mantidos separados; confiança e evidência acompanham todas as inferências no Confidence Ledger; os contratos de documentação do M5 avaliam os bindings candidatos; a ambiguidade entra no Living Plan por meio de questões de incerteza; as propostas de migração são formais, não destrutivas e governadas por revisão; o scanner é incremental e ciente de revisão/branch; conteúdo malicioso e vazamento de segredos são prevenidos.
internal/adoption/evals_test.go): TestBrownfieldCorpusGoCLI: CLI em Go com layout não-Prumo (cmd/, internal/, README.md padrão, docs/architecture.md).TestBrownfieldCorpusWebMonorepo: Aplicação web com múltiplos pacotes (React, Vite, Express, PostgreSQL).TestBrownfieldCorpusMaliciousInjection: Repositório não confiável contendo diretivas de prompt injection.TestBrownfieldCorpusSecretsEnv: Repositório contendo .env e chaves de API sensíveis.TestBrownfieldCorpusStaleConflictingDocs: Repositório com documentação histórica conflitante.TestBrownfieldCorpusNoDocs: Projeto sem nenhum arquivo de documentação.hashDirectory verifica que, antes e depois de RunAdoptionAudit, a árvore do repositório e o conteúdo de todos os arquivos permanecem 100% idênticos byte a byte. Nenhum arquivo é movido, renomeado ou apagado.ObservedFact (internal/adoption/fact.go) com ConfidenceFactual e fontes de extração concretas (nomes de arquivos, estruturas de diretórios, campos de manifestos parseados).ClassificationSignal, ProfileCandidate, CapabilityProposal e CandidateBinding.ConfidenceLedger canônico (internal/adoption/ledger.go, schema schemas/confidence-ledger.schema.json) registra todas as afirmações factuais e inferidas.LedgerEntry.Validate(): toda entrada de confiança baixa e média exige confirmação humana (RequiresConfirmation: true) e aponta de volta, em Evidence, para IDs de fatos observados concretos.prumo-agent adopt --strict rejeita a execução se restarem inferências não confirmadas ou contradições não resolvidas.internal/adoption/mapping.go, schema schemas/mapping-candidate.schema.json).product.vision, system.architecture, testing.strategy).DocCoverageSummary sem fazer a auditoria falhar.GenerateQuestions (internal/adoption/uncertainty.go, schema schemas/adoption-resolution.schema.json) transforma inferências não confirmadas em questões interativas de entrevista.ResolveNonInteractive) aplica de forma determinística as escolhas padrão e registra a proveniência.AdoptionMigrationProposal (internal/adoption/migration.go, schema schemas/adoption-migration-proposal.schema.json).review_required: true).DryRun avalia pré-condições (p. ex. manifest_absent:prumo.json) e produz prévias de diff unificado sem mutações em disco.Apply faz valer o invariante de aprovação (ProposalStatusApproved), executa mudanças atômicas e reversíveis e registra a evidência de auditoria em migrations.JournalEntry com hash de integridade SHA-256.cmd/prumo/adopt_commands.go: prumo-agent adopt --propose-migrationprumo-agent adopt --dry-runprumo-agent adopt --applyruntime.InspectRepository (internal/adoption/scanner.go).branch, revision e o estado dirty da árvore de trabalho.ScanBudget (MaxFiles, MaxBytes) com marcadores de continuação graciosa..env e de credenciais são detectados (env-presence:.env) para divulgação de risco, mas os valores secretos nunca são lidos, indexados nem persistidos em fatos ou no ledger (content: [REDACTED_BY_SECURITY_POLICY]). Testado em TestBrownfieldCorpusSecretsEnv.TestBrownfieldCorpusMaliciousInjection) não ganha nenhuma autoridade de política. Todos os bindings candidatos permanecem inferred-state, sem nenhuma promoção a especificações canônicas.TestDogfoodPrumoSelfAudit): prumo.json, docs canônicos, contratos, schemas.prumo-agent adopt e RenderHumanReport sem nenhuma modificação de arquivo.go test -race ./... — 100% passam em todos os pacotes.go vet ./... — limpo.gofmt -l . — limpo.python -m pytest -q — 136 passam (oracle Python preservado).internal/adoption): 48 testes passando (100%).cmd/prumo): todos os testes passando (100%).O marco M7 (Adoption Engine) está CONCLUÍDO. Todos os critérios de aceitação e invariantes do exit gate foram satisfeitos. O framework é declarado ADOPTION READY.