Repository navigation
security(mcp): aplicar auth e isolamento deny-by-default - #37
Conversation
Checkpoint de revisão Fase 4Este PR foi revisado na base empilhada exata e permanece draft/mergeável, sem review humano ou thread pendente. A pilha combinada termina em CI combinada: Python 3.10/3.12 e dependency audit/SBOM verdes no run https://github.com/MHX-Digital/agent-architecture-kit/actions/runs/30477544972. Validação local final: 123/123, secret scan 0 matches, compileall/diff check verdes. Correções foram mantidas no PR que introduziu o comportamento: binding explícito do golden corpus ao commit no #32; fronteira autenticada sanitizada do corpus no #37. Nenhum gate foi relaxado. Estado: implementado/testado; aguardando revisão humana; não integrado; não implantado. Rollback por revert dos commits da unidade, sem mutação de índice ou ambiente externo. |
Integração ordenada concluída — 2026-07-30 UTC
O #40 já havia sido empilhado no #38; portanto seu conteúdo chegou a Validação no SHA finalRun manual exato: https://github.com/MHX-Digital/agent-architecture-kit/actions/runs/30570028307
Artefatos novos, vinculados somente ao SHA final
Os artefatos da RC anterior não foram reutilizados ou reatribuídos. Estado: integrado e validado localmente/na CI; não implantado; canário não executado. Próximo gate: autorização humana explícita para o canário sanitizado. |
…s added since PR #42 PRs #37 (auth) and #32/#36 (index freshness) merged into main after this test file was written. The mcp_repo fixture now inits a real git repo and commits it so ARCHITECTURE_MAP.json's sourceSha can match HEAD, and every tool call passes expectedCommit accordingly. get_adr()'s return shape also changed to a trust-wrapped dict; updated the two assertions that relied on the old plain-string return.
Resultado
Implementa o limite deny-by-default da LexNotify-Web #792, empilhado sobre o PR #36 (#793).
Ordem dos controles
authn → authz projeto/tenant/tool → input/path → freshness → execução read-only → redaction/limite → auditoria metadata-only.Um chamador não autorizado não recebe SHA, contagem ou freshness.
Implementado
kid, expiração, JTI, revogação e rotação;avancard-fenix;Compatibilidade
Os sete nomes de tools permanecem. Parâmetros de auth/tenant são opcionais no schema para clientes antigos conseguirem interpretar o contrato, mas sua omissão falha fechada.
get_adragora retorna envelope estruturado em vez de texto cru.Evidência
git diff --check: limpo;Cobertura: credencial ausente/inválida/expirada/revogada, rotação, projeto/tenant/tool incorretos, ordem auth-before-freshness, rate limit, traversal, absoluto, NUL, Unicode, symlink, prompt injection armazenada, segredo simulado, response limit e auditoria.
Fora de escopo
Transporte remoto/TLS, identidade corporativa, credenciais reais, deploy/rollout, timeout/carga distribuída (#795), novas tools (#794).
Rollback
Reverter este PR. Transporte remoto permanece desabilitado; não há migration, dado ou produção afetados.