Pular para conteúdo

AUR-535 — Política central na Action direta e prova completa da contenção

O que foi medido antes

  • action.yml repassa policy_path ao CLI por AURUMCODE_POLICY, e scripts/action-entrypoint.sh executa o CLI com cd "$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 e docs/configuration.md mandavam 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.
  • TestAUR518ValidatePolicyOutsideReviewedTree não cobria symlink: trocar filepath.EvalSymlinks por 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, mv para $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: reproduz github/workspace (diretório de trabalho) e github/home e roda o runPRReview real contra API GitHub falsa e o modelo offline.
  • internal/config/central_test.go: teste de symlink.
  • tests/acceptance/AUR-535.sh: seletores all, 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 em github/home/aurumcode-policy aplicada (o head desliga analysis/hardcoded-secret, o achado e o aviso de override chegam à review publicada); a mesma política em github/workspace é recusada sem chamada ao modelo e sem publicação. O seletor também confere docs e action.yml. Última linha: AUR-535/AC-001/pass.
  • AC-002 (TestAUR535PRPolicyInsideReviewedTreeFailsClosed): no --pr, política dentro da árvore (absoluta, relativa policy e 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 para tree/policy e para a própria tree é recusado. Última linha: AUR-535/AC-003/pass.
  • MUT-001: a checagem de contenção do review_pr_inputs.go vira false && 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 all continua AUR-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.