AUR-535 — Política central na Action direta e prova completa da contenção
O que foi medido antes
action.ymlrepassapolicy_pathao CLI porAURUMCODE_POLICY, escripts/action-entrypoint.shexecuta o CLI comcd "$GITHUB_WORKSPACE". A contenção (config.ValidatePolicyOutsideReviewedTree) recusa toda política que resolva para dentro do diretório de trabalho. A descrição do input edocs/configuration.mdmandavam colocar a política "no workspace do runner": seguindo a documentação, toda política era recusada.- A recusa de política dentro da árvore revisada só tinha teste no caminho
local (
TestAUR518PolicyInsideReviewedTreeFailsClosed); o caminho--pr(prReview.loadPolicy) não tinha. TestAUR518ValidatePolicyOutsideReviewedTreenão cobria symlink: trocarfilepath.EvalSymlinkspor nada não reprovava teste algum.
O que mudou
Opção escolhida: manter o input policy_path e documentar o único local
fora da árvore revisada que um container de Action enxerga, /github/home
(montado de $RUNNER_TEMP/_github_home). Nenhuma mudança de produto em Go
nem no shell: o CLI já aceita esse caminho e a contenção continua igual (a
PR revisada nunca escolhe a própria política).
action.yml: descrição do input diz caminho absoluto em/github/home, e que/github/workspaceé sempre recusado; comentário explica o porquê.docs/configuration.md: receita da Action direta (checkout da política,mvpara$RUNNER_TEMP/_github_home,policy_path: /github/home/...), recusa de caminho relativo e de symlink; a afirmação antiga "já no workspace" saiu da seção e da tabela de inputs.docs/tutorials/politica-central.md: a nota sobre a Action direta aponta para/github/home.cmd/aurumcode/aur535_test.go: reproduzgithub/workspace(diretório de trabalho) egithub/homee roda orunPRReviewreal contra API GitHub falsa e o modelo offline.internal/config/central_test.go: teste de symlink.tests/acceptance/AUR-535.sh: seletoresall,AC-001..003,MUT-001,MUT-002; seletor desconhecido sai com 64.
Prova
Comando: bash tests/acceptance/AUR-535.sh <seletor> dentro do container Go.
- AC-001 (
TestAUR535ActionPolicyFromGithubHomeApplies): política emgithub/home/aurumcode-policyaplicada (o head desligaanalysis/hardcoded-secret, o achado e o aviso de override chegam à review publicada); a mesma política emgithub/workspaceé recusada sem chamada ao modelo e sem publicação. O seletor também confere docs eaction.yml. Última linha:AUR-535/AC-001/pass. - AC-002 (
TestAUR535PRPolicyInsideReviewedTreeFailsClosed): no--pr, política dentro da árvore (absoluta, relativapolicye a própria raiz) sai não zero com "inside the reviewed repository", sem prompt capturado e sem POST. Última linha:AUR-535/AC-002/pass. - AC-003 (
TestAUR535PolicySymlinkIntoReviewedTreeRefused): symlink fora da árvore apontando paratree/policye para a própriatreeé recusado. Última linha:AUR-535/AC-003/pass. - MUT-001: a checagem de contenção do
review_pr_inputs.govirafalse && err != nil; AC-002 fica vermelho por comportamento (aur535_test.go: expected a non-zero exit for a policy inside the reviewed tree). Última linha:AUR-535/MUT-001/pass (mutation produced RED). - MUT-002: a resolução de symlink em
resolvePathBestEfforté desligada; AC-003 fica vermelho (... (inside the reviewed tree) was accepted as a policy). Última linha:AUR-535/MUT-002/pass (mutation produced RED). all:AUR-535/all/pass.AUR-518.sh allcontinuaAUR-518/all/pass.
Fora do escopo
Precedência da política e o workflow reutilizável não mudaram. A receita não foi executada num runner real do GitHub; o teste reproduz o layout de diretórios do container.