Skip to content

fix: add regression tests for protected-files object form compilation#28341

Merged
pelikhan merged 2 commits intomainfrom
copilot/fix-protected-files-compilation-issue
Apr 24, 2026
Merged

fix: add regression tests for protected-files object form compilation#28341
pelikhan merged 2 commits intomainfrom
copilot/fix-protected-files-compilation-issue

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 24, 2026

The protected-files field on create-pull-request and push-to-pull-request-branch rejects the documented object form {policy, exclude} with expected string or null, got object. The schema had oneOf: [string, null] where it should be oneOf: [string, object] — the fix was already applied to the schema, but there were no tests to prevent regression.

Changes

  • pkg/parser/schema_test.go — Two new regression tests:
    • TestValidateMainWorkflowFrontmatterWithSchemaAndLocation_ProtectedFilesObjectForm: end-to-end schema validation covering all object-form variants (policy+exclude, exclude-only, policy-only) and confirming unknown fields are still rejected
    • TestMainWorkflowSchema_ProtectedFilesObjectFormStructure: structural assertion that the schema defines protected-files as oneOf: [string, object] (not [string, null]) for both handlers, with policy, exclude, and additionalProperties: false in the object branch
# Previously rejected at compile time — now correctly accepted
safe-outputs:
  create-pull-request:
    protected-files:
      policy: fallback-to-issue
      exclude:
        - AGENTS.md
        - .agents/

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • https://api.github.com/graphql
    • Triggering command: /usr/bin/gh gh repo view --json owner,name --jq .owner.login + "/" + .name /home/REDACTED/go/--limit (http block)
    • Triggering command: /usr/bin/gh gh repo view owner/repo /tmp�� snXfTi5m6PTb91cEaXfS/snXfTi5m6PTb91cEaXfS -goversion ache/node/24.14.1/x64/bin/node -c=4 -nolocalimports -importcfg ache/node/24.14.1/x64/bin/node 8622�� uts.version rev-parse /usr/bin/git with-tools.md l d3ceeb86c66903d8--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh repo view owner/repo pack�� --all-progress-implied --revs ache/node/24.14.1/x64/bin/node --thin --delta-base-offrev-parse -q ache/node/24.14.1/x64/bin/node 9036�� uts.branch rev-parse /usr/bin/git ion_sha_validatigit ivation_checkoutrev-parse /usr/bin/head git (http block)
  • https://api.github.com/orgs/test-owner/actions/secrets
    • Triggering command: /usr/bin/gh gh api /orgs/test-owner/actions/secrets --jq .secrets[].name -bool -buildtags bash -errorsas -ifaceassert -nilfunc bash --no�� --noprofile -tests ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /orgs/test-owner/actions/secrets --jq .secrets[].name -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /orgs/test-owner/actions/secrets --jq .secrets[].name -json GO111MODULE (http block)
  • https://api.github.com/repos/actions/ai-inference/git/ref/tags/v1
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git --show-toplevel x_amd64/compile 86_64/bash git rev-�� --show-toplevel git /usr/bin/git --show-toplevel 0Ji0fapdNGIB /usr/bin/git git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv --paginate repos/{owner}/{repo}/actions/runs/12345/artifacts /usr/bin/git .artifacts[].namgit GO111MODULE 64/pkg/tool/linu--show-toplevel git rev-�� --show-toplevel 64/pkg/tool/linutest@example.com /usr/bin/git _.a GO111MODULE 64/pkg/tool/linuinstall git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git -json GO111MODULE ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel go /usr/bin/git 41079243/001 GO111MODULE 64/pkg/tool/linuinstall git (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv /tmp/gh-aw-test-runs/20260424-211553-16374/test-1279684422 remote /usr/bin/git 01 -lname g_.a git rev-�� --show-toplevel hxn81x0jB6z4f/gKinitial commit /usr/bin/infocmp runs/20260424-21git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv k/gh-aw/gh-aw/.github/workflows/architecture-guardian.md config /usr/bin/git remote.origin.urgit GO111MODULE 64/bin/go git rev-�� --show-toplevel go /usr/lib/git-core/git -json GO111MODULE x_amd64/asm /usr/lib/git-core/git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv /tmp/compile-all-instructions-test-1842469362 show /usr/bin/infocmp -json GO111MODULE 64/bin/go infocmp -1 xterm-color go clusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle -json GO111MODULE 64/bin/go infocmp (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v5
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv 77/001/test-frontmatter-with-nested-objects.md x_amd64/compile /usr/bin/git get --local 64/pkg/tool/linu--show-toplevel git rev-�� ithub/workflows 64/pkg/tool/linux_amd64/vet x_amd64/compile --local fg 64/pkg/tool/linu--show-toplevel x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git sRemoteWithRealGtr sRemoteWithRealG\n ache/go/1.25.8/x: git rev-�� --show-toplevel git /usr/bin/git 1553-16374/test-git 64/pkg/tool/linurev-parse bash git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel VWw7VJguVlRAx/jNQYSQDdMsvnnTZDbyx2/zg1-jwF1IRoPasY5xy3c/9ezsDU_Vremote.origin.url /usr/bin/git ry=1 --initial-branchrev-parse che/go-build/e9/--show-toplevel git rev-�� --show-toplevel git /usr/bin/git /tmp/gh-aw-test-git remote /usr/bin/git git (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv --get remote.origin.url /usr/bin/git 1257-14497/test-git -buildtags ache/go/1.25.8/x--show-toplevel git init�� -nilfunc bash /usr/bin/git ted-objects.md |TestCompile|Tesrev-parse /usr/local/sbin/--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv --show-toplevel -tests ache/node/24.14.1/x64/bin/node 80553310/001' 80553310/001' 64/bin/go git t-15�� k/gh-aw/gh-aw/.github/workflows/archie.md go ache/node/24.14.1/x64/bin/node -json GO111MODULE 64/bin/go ache/node/24.14.1/x64/bin/node (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv :latest -tests /usr/bin/git -json GO111MODULE 64/bin/go git rev-�� runs/20260424-212505-66928/test-3736896344 go /usr/bin/git s/test.md GO111MODULE 64/bin/go git (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v8
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv --get-regexp ^remote\..*\.gh-resolved$ /usr/bin/git Onlyrepos_only_wgit .go ache/go/1.25.8/x-m git rev-�� --show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet /usr/bin/git 1553-16374/test-git ache/go/1.25.8/xrev-parse xpires.lock.yml git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv --show-toplevel ache/go/1.25.8/x64/pkg/tool/linuupstream /usr/bin/git Onlyrepos_only_wgit g/gitutil/gituticommit ache/go/1.25.8/x-m git rev-�� --show-toplevel ache/go/1.25.8/xsh /usr/bin/git 2116-42434/test-git 7Ps3/Xuna8G_bMUXrev-parse xpires.lock.yml git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git Imports17564350/git GO111MODULE 1/x64/bin/node git rev-�� --show-toplevel go /usr/bin/git ithub/workflows/git GO111MODULE e/git-receive-pa--show-toplevel git (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v9
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv --get-regexp --global x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv get --local x_amd64/vet http.https://gitbash (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv get --local x_amd64/vet credential.helpebash (http block)
  • https://api.github.com/repos/actions/setup-go/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv import sys, json, re line = sys-s (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel x_amd64/link /usr/bin/git --get remote.origin.urrev-parse 86_64/bash git rev-�� --show-toplevel KD/D3ANYFpeOG4pM6cK_-fl/UrWG3i_hremote /usr/bin/git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --git-dir x_amd64/compile /usr/bin/git -json GO111MODULE 64/pkg/tool/linu--show-toplevel git rev-�� --show-toplevel 64/pkg/tool/linuconfig /usr/bin/git -json GO111MODULE 64/pkg/tool/linu--show-toplevel git (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv GH_AW_SAFE_OUTPUTS_HANDLER_CONFI-p (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv image:v1.0.0 /opt/hostedtoolcREDACTED /usr/bin/git 1257-14497/test-git rk ache/go/1.25.8/x--show-toplevel git remo�� -nilfunc ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet /usr/bin/infocmp --noprofile -tests /usr/sbin/iptablxterm-color infocmp (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel x_amd64/compile /usr/bin/git testing.testBinagit -extld=gcc /tmp/go-build262--show-toplevel git rev-�� --show-toplevel /tmp/go-build2627883682/b449/ttyrev-parse /usr/bin/git -test.paniconexigit -test.timeout=10rev-parse 64/bin/bash git (http block)
  • https://api.github.com/repos/actions/upload-artifact/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv se 471449/b111/vet.cfg /usr/bin/git 1257-14497/test-infocmp -buildtags 64/pkg/tool/linuxterm-color git -C /tmp/gh-aw-test-runs/20260424-211553-16374/test-3500116908/.github/workflows rev-parse /usr/bin/git kflow.test -importcfg ortcfg.link git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv . l /usr/bin/git go1.25.8 -c=4 -nolocalimports git -C 38277157/001 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv /tmp/TestParseDefaultBranchFromLtest-logs/run-12345 /tmp/TestParseDefaultBranchFromLsRemoteWithRealGitmain_branch4263212968/002/work /usr/bin/git -json GO111MODULE 64/bin/go git -C /tmp/gh-aw-test-runs/20260424-212505-66928/test-4254974971/.github/workflows remote /usr/bin/git ted-objects.md GO111MODULE 64/bin/go git (http block)
  • https://api.github.com/repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv user.email ings.cjs odules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin/git cjs st/suppress-warn-o 64/bin/node forks.js rev-�� HEAD st/suppress-warnmain _modules/.bin/gi-lang=go1.25 HEAD -aw/aw-test-owne--experimental-import-meta-resolve k/gh-aw/gh-aw/ac--require st/dist/workers//home/REDACTED/work/gh-aw/gh-aw/actions/setup/js/node_modules/vitest/suppress-warnings.cjs (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv . tions/setup/js/node_modules/vite--stdout $name) { hasDiscussionsEnabled } } d git tions/setup/node-m git init�� -q (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv . tions/setup/js/node_modules/vite--stdout bin/git HEAD l ode-gyp-bin/git BjxtYz4/EnQ5uU4Y/home/REDACTED/work/gh-aw/gh-aw/actions/setup/js/node_modules/vitest/suppress-warnings.cjs init�� -q st/suppress-warn--conditions k/node_modules/.development est-change ode_modules/viteapi n-dir/git st/dist/workers/-f (http block)
  • https://api.github.com/repos/github/gh-aw
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw --jq .default_branch user.email tions/setup/js/node_modules/viteowner=github 64/pkg/tool/linux_amd64/link odules/npm/node_git git bin/git 64/pkg/tool/linuconfig bran�� -M t-patch-utils-1ERYvY/.diffsize.tmp repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } --is-ancestor k/gh-aw/gh-aw/ac-C es/.bin/git git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw --jq .default_branch ithub/workflows k/gh-aw/gh-aw/actions/setup/js/node_modules/vitest/suppress-warnings.cjs /opt/hostedtoolcache/node/24.14.1/x64/bin/node r/work/gh-aw/gh-git /home/REDACTED/wor-C run-script/lib/n/home/REDACTED/work/gh-aw/gh-aw k/gh-aw/gh-aw/acshow 0669�� ithub/workflows test-67Syum/error.go /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/link node --conditions ed } } /opt/hostedtoolcconfig (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v0.1.2
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv 66087060/001 x_amd64/compile /usr/bin/git ub/workflows 7883682/b449/_terev-parse /opt/hostedtoolc--show-toplevel git init�� x_amd64/vet /opt/hostedtoolcremote /usr/bin/git mLsRemoteWithReagit mLsRemoteWithRearev-parse /usr/bin/git git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv user.name Test User /opt/hostedtoolcache/node/24.14.1/x64/bin/node ub/workflows GO111MODULE 64/pkg/tool/linu--show-toplevel /opt/hostedtoolcache/node/24.14.1/x64/bin/node /tmp�� No expressions here 64/pkg/tool/linux_amd64/compile /usr/bin/git _.a poll/fd.go 64/pkg/tool/linu--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git th .prettierignogit GO111MODULE 64/bin/go git rev-�� --show-toplevel go /usr/bin/git 14/001/test-frongit GO111MODULE 86_64/sh git (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv git-upload-pack '/tmp/TestParseDefaultBranchFromLsRemoteWithRealGitbranch_with_hyphen1337309915/git l (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv . l /usr/bin/git go1.25.8 -c=4 -nolocalimports git -C s/test.md rev-parse /opt/hostedtoolcache/node/24.14.1/x64/bin/node -json GO111MODULE 64/bin/go node (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv for-each-ref --format=%(objectname) /usr/bin/git -json GO111MODULE 64/bin/go git rev-�� --show-toplevel go /usr/bin/git yphen3374541092/git yphen3374541092/rev-parse 64/bin/go git (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.2.3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv ry=1 --initial-branch=my-default che/go-build/c8/c8d057fd589ad315fef2cfe920f76d987707c59f4b2d2a4d81721b3c99f8cec0-d on_test.go _test.go .cfg /opt/hostedtoolcconfig -o /tmp/go-build657remote.origin.url -importcfg /usr/bin/git -s -w -buildmode=exe git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv git-upload-pack '/tmp/TestParseDefaultBranchFromLsRemoteWithRealGitbranch_with_hyphen908054317/0git l /usr/bin/git go1.25.8 -c=4 -nolocalimports git -C runs/20260424-212116-42434/test-3840616699 s/12345/artifacts /usr/bin/git -json GO111MODULE 64/bin/go git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv git-upload-pack '/tmp/TestParseDefaultBranchFromLsRemoteWithRealGitmain_branch4263212968/001' (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/1/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/1/artifacts --jq .artifacts[].name x_amd64/vet At,event,headBranch,headSha,displayTitle se 87111/b094/vet.crev-parse ache/go/1.25.8/x--show-toplevel e/git estP�� --show-toplevel tname) /opt/pipx_bin/bash se 87111/b115/vet.crev-parse /opt/hostedtoolc--show-toplevel bash (http block)
    • Triggering command: /usr/bin/gh gh run download 1 --dir test-logs/run-1 ache/go/1.25.8/x64/pkg/tool/linu-extld=gcc (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/1/artifacts --jq .artifacts[].name rotocol/go-sdk@v1.5.0/internal/xcontext/xcontext.go 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile env _.a dtNyzpRaw ache/go/1.25.8/x64/pkg/tool/linux_amd64/asm GOINSECURE v3 GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linuTest User (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/12345/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12345/artifacts --jq .artifacts[].name ache/go/1.25.8/x64/pkg/tool/linuconfig /usr/bin/git se 87111/b051/vet.crev-parse fg git rev-�� FieldEnforcement1723093207/001 ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/link se 87111/b214/vet.crev-parse 64/bin/bash /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/link (http block)
    • Triggering command: /usr/bin/gh gh run download 12345 --dir test-logs/run-12345 xf9qL--/YcBrNqCWBFU4hJRv0Iid /usr/bin/git se 87111/b140/vet.crev-parse utputs\|TestProt--show-toplevel git rev-�� '/tmp/TestParseDefaultBranchFromLsRemoteWithRealGitmain_branch15--repo '/tmp/TestParseDefaultBranchFromLsRemoteWithRealGitmain_branch15owner/repo /snap/bin/bash ithub/workflows 87111/b240/vet.crev-parse x_amd64/compile bash (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12345/artifacts --jq .artifacts[].name GO111MODULE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linutest@example.com env _.a GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE .o 64/src/runtime/i--git-dir 64/pkg/tool/linux_amd64/vet (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/12346/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12346/artifacts --jq .artifacts[].name ache/go/1.25.8/x64/pkg/tool/linuremote ache/go/1.25.8/x64/pkg/tool/linux_amd64/link se stProtectedFilesrev-parse fg ache/go/1.25.8/x64/pkg/tool/linux_amd64/link rev-�� FieldEnforcement1723093207/001 ache/go/1.25.8/x64/pkg/tool/linuremote.origin.url 1/x64/bin/node se 87111/b215/vet.crev-parse 1/x64/bin/bash jX-1PWzdY5nrQ/FuQBat1TqtOugs5kA4FK/4S-KjLZhAbqjP68Vh2dK/cACoDFtjrev-parse (http block)
    • Triggering command: /usr/bin/gh gh run download 12346 --dir test-logs/run-12346 NKQxPfr/feDwSjXStImIOC-NY5wN /usr/bin/git se 87111/b066/vet.crev-parse 64/bin/bash git rev-�� /v2.0.0 ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet sv se 87111/b237/vet.crev-parse x_amd64/compile bash (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12346/artifacts --jq .artifacts[].name GO111MODULE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linuTest User env 83/001/test-complex-frontmatter-with-tools.md GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE wasm.o 64/src/runtime/a--show-toplevel 64/pkg/tool/linux_amd64/vet (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/2/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/2/artifacts --jq .artifacts[].name x_amd64/compile 64/pkg/tool/linux_amd64/vet se 87111/b098/vet.crev-parse ache/go/1.25.8/x--show-toplevel 64/pkg/tool/linux_amd64/vet faul�� --show-toplevel cfg 1/x64/bin/node 2722195729 87111/b176/vet.crev-parse x_amd64/link 1/x64/bin/node (http block)
    • Triggering command: /usr/bin/gh gh run download 2 --dir test-logs/run-2 ache/go/1.25.8/x64/pkg/tool/linu-goversion e/git 4202057154/.githgit log ner_pin_test.go e/git rev-�� mplied tion_test.go 1/x64/bin/node (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/2/artifacts --jq .artifacts[].name emplate/v3@v3.0.2/compile.go 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile env _.a dAR9m3zY_ ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linutest@example.com (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/3/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/3/artifacts --jq .artifacts[].name Vgol9MA/jtMHmSR1PwQ4sKWnT8ry e/git se 87111/b088/vet.crev-parse ache/go/1.25.8/x--show-toplevel e/git rev-�� mplied 7I/p67f43WHEJUTs4-oiIa1/9KqfPfOC-buildtags /opt/hostedtoolcache/node/24.14.1/x64/bin/bash 2722195729 set ndor/bin/bash bash (http block)
    • Triggering command: /usr/bin/gh gh run download 3 --dir test-logs/run-3 ache/go/1.25.8/x64/pkg/tool/linuremote e/git-upload-pack m0s 87111/b119/vet.crev-parse (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/3/artifacts --jq .artifacts[].name _56Gjvce9 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile env _.a dq87ptaK6 ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile GOINSECURE go-sdk/jsonrpc GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/4/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/4/artifacts --jq .artifacts[].name x_amd64/compile e/git se 87111/b092/vet.crev-parse ache/go/1.25.8/x--show-toplevel e/git rev-�� 3 ache/go/1.25.8/x64/pkg/tool/linu-buildtags /snap/bin/bash --noprofile (http block)
    • Triggering command: /usr/bin/gh gh run download 4 --dir test-logs/run-4 ache/go/1.25.8/x/home/REDACTED/work/gh-aw/gh-aw/pkg/typeutil/convert_test.go 42bbe21eaa7e184625f7589c84fea4478daa1d752bac088089e7477cfb11b2c7-d 3520556282/.githgit 87111/b179/vet.crev-parse ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel ache/go/1.25.8/x64/pkg/tool/linu-trimpath 471449/b392/vet.cfg 3872046316/001 (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/4/artifacts --jq .artifacts[].name SUy_HbpQE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile env _.a InX8DV7o_ ache/go/1.25.8/x64/pkg/tool/linux_amd64/asm GOINSECURE GOMOD GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/asm (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/5/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/5/artifacts --jq .artifacts[].name x_amd64/link e/git (http block)
    • Triggering command: /usr/bin/gh gh run download 5 --dir test-logs/run-5 ache/go/1.25.8/x64/pkg/tool/linurev-parse sv 4202057154/.githgit 87111/b120/vet.crev-parse ner_pin_test.go e/git api /repos/actions/github-script/git/ref/tags/v9 --jq 1/x64/bin/node =receive (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/5/artifacts --jq .artifacts[].name 0/internal/tag/tag.go At,event,headBranch,headSha,displayTitle GOINSECURE GOMOD bis 64/pkg/tool/linuTest User env 3624355507/.github/workflows GO111MODULE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile GOINSECURE age GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile (http block)
  • https://api.github.com/repos/github/gh-aw/actions/workflows
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path 61 -buildtags (http block)
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --workflow nonexistent-workflow-12345 --limit 100 (http block)
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --workflow nonexistent-workflow-12345 --limit 6 pkg/parser/schemrev-parse x_amd64/compile git t-ha�� SameOutput2358776405/001/stability-test.md x_amd64/compile 1/x64/bin/node (.*\)$/\2/p (http block)
  • https://api.github.com/repos/github/gh-aw/contents/.github/workflows/shared/reporting.md
    • Triggering command: /tmp/go-build657471449/b404/cli.test /tmp/go-build657471449/b404/cli.test -test.testlogfile=/tmp/go-build657471449/b404/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true (http block)
    • Triggering command: /tmp/go-build1670911947/b404/cli.test /tmp/go-build1670911947/b404/cli.test -test.testlogfile=/tmp/go-build1670911947/b404/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true -nolocalimports -importcfg /tmp/go-build374259468/b181/importcfg -pack env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /tmp/go-build3650652408/b404/cli.test /tmp/go-build3650652408/b404/cli.test -test.testlogfile=/tmp/go-build3650652408/b404/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v0.47.4
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq [.object.sha, .object.type] | @tsv --show-toplevel integration_test.go /usr/bin/git on_test.go _test.go cfg git rev-�� WorkflowFiles_TransitiveImports2105692076/001 git /usr/bin/git CompiledOutput34ls 64/pkg/tool/linu-lh /usr/bin/git /usr/bin/git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq [.object.sha, .object.type] | @tsv --show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile /usr/bin/git sRemoteWithRealGgit sRemoteWithRealGrev-parse ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel ache/go/1.25.8/x^remote\..*\.gh-resolved$ /usr/bin/git 3840616699 137W/naKzboKCQcy-lh ache/go/1.25.8/x/tmp/gh-aw/aw-feature-branch.patch git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq [.object.sha, .object.type] | @tsv ref/tags/v1.0.0 go sv -json GO111MODULE ache/node/24.14.--show-toplevel git rev-�� --show-toplevel go /usr/bin/git -json GO111MODULE /opt/hostedtoolc/tmp/gh-aw/aw-feature-branch.patch git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv le-frontmatter.md (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv _.a @v1.1.3/cpu/arm64/arm64.go 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile env 83/001/test-empty-frontmatter.md GO111MODULE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD bis 64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env LsRemoteWithRealGitbranch_with_hyphen3374541092/001' LsRemoteWithRealGitbranch_with_hyphen3374541092/001' n-dir/sh GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.2.3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv 7883682/b425/repoutil.test stmain.go ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env gh-aw.wasm ./cmremote.origin.url GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v2.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq [.object.sha, .object.type] | @tsv ithub-script/git/ref/tags/v9 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq [.object.sha, .object.type] | @tsv g/timeutil/spec_test.go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq [.object.sha, .object.type] | @tsv 500 (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v3.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v3.0.0 --jq [.object.sha, .object.type] | @tsv --noprofile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v3.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v3.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE ode_modules/.bin/node GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/nonexistent/action/git/ref/tags/v999.999.999
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv /tmp config 64ca36bd1cc31b773c03c6fbda634aca-d remote.origin.urgit (http block)
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv -json t.go 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE klg-Z-L/GrfD7RF01uelJB2BqWrF env edOutput1940834363/001 GO111MODULE 7707c59f4b2d2a4d81721b3c99f8cec0-d GOINSECURE o 64/src/sync/atom--show-toplevel go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env 9377/001/stability-test.md GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/nonexistent/repo/actions/runs/12345
    • Triggering command: /usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion GH_AW_SAFE_OUTPUgit (http block)
    • Triggering command: /usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion GOINSECURE GOMOD GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linutest@example.com env rtcfg _wTXDDAYc 64/pkg/tool/linux_amd64/vet GOINSECURE 259468/b021/ GOMODCACHE 64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion GOINSECURE GOMOD GOMODCACHE go env (http block)
  • https://api.github.com/repos/owner/repo/actions/workflows
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo sv -errorsas -ifaceassert -nilfunc /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/asm -V=f�� -stringintconv -tests /usr/bin/cat (http block)
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo sh -errorsas -ifaceassert -nilfunc /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -o /tmp/go-build2060329315/b357/_pkg_.a -trimpath /usr/bin/git -p github.com/githurev-parse -lang=go1.25 git (http block)
    • Triggering command: /usr/bin/gh gh workflow list --repo owner/repo --json name,path,state /opt/hostedtoolcache/node/24.14.1/x64/bin/node -unreachable=falgit /tmp/go-build885rev-parse 64/pkg/tool/linu--show-toplevel node /tmp�� /tmp/TestHashConsistency_GoAndJavaScript3396837777/001/test-frontmatter-with-nested-objects.md 64/pkg/tool/linux_amd64/compile /usr/bin/git g_.a -trimpath ache/go/1.25.8/x--show-toplevel git (http block)
  • https://api.github.com/repos/test-owner/test-repo/actions/secrets
    • Triggering command: /usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name 382035818/001 -buildtags nfig/composer/vendor/bin/bash -errorsas -ifaceassert -nilfunc bash --no�� --noprofile -tests /snap/bin/bash (http block)
    • Triggering command: /usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name with-tools.md GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/test/repo
    • Triggering command: /usr/bin/gh gh api /repos/test/repo --jq .default_branch n-dir/git 7883682/b403/constants.test /usr/bin/git t0 m0s inWorkflow|TestC--show-toplevel git remo�� k/_temp/uv-pythogit-upload-pack '/tmp/TestParseDefaultBranchFromLsRemoteWithRealGitcustom_branchgit bash om/owner/repo.git runs/20260424-21git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/test/repo --jq .default_branch ithub/workflows/approach-validator.md -trimpath ache/node/24.14.1/x64/bin/node -p internal/saferiorev-parse -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile t-20�� bility_SameInputSameOutput2781844293/001/stability-test.md -trimpath /usr/bin/git -p github.com/githurev-parse -lang=go1.25 git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/test/repo --jq .default_branch --symref origin om/testowner/testrepo.git -json GO111MODULE 64/bin/go git -C /tmp/gh-aw-test-runs/20260424-212505-66928/test-3329272867/.github/workflows (http block)
  • invalid.example.invalid
    • Triggering command: /usr/lib/git-core/git-remote-https /usr/lib/git-core/git-remote-https origin https://invalid.example.invalid/nonexistent-repo.git e/git init�� ndor/bin/git git ode_modules/.bin/git =receive test@example.com--git-dir=/tmp/bare-incremental-fGX0YG /git (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

@github-actions

This comment has been minimized.

@github-actions
Copy link
Copy Markdown
Contributor

Hey @Copilot 👋 — great to see work being picked up on the protected-files object-form compilation bug! This is a well-scoped, clearly described fix targeting a real doc/implementation mismatch.

A few things to address before this is ready for review:

  • No diff yet — the PR is still a draft with no changed files. Once the fix lands, please make sure the schema update and compiler logic are both included.
  • Add tests — the bug has a clear reproduction case (YAML with protected-files as an object). A unit/integration test covering the object-form (policy + exclude) compilation path would prevent regressions.
  • Update PR description — once implementation is complete, update the body to summarize what was changed.

If you'd like a hand finishing this up, assign the following prompt to your coding agent:

Fix the compilation error for the `protected-files` object form in the safe-outputs schema.

1. Find the schema definition for `protected-files` under `create-pull-request` safe-outputs and extend it to accept either:
   - A string (`blocked`, `fallback-to-issue`, `allowed`) or null (existing behavior)
   - An object with `policy` (string enum) and optional `exclude` (array of strings)

2. Update the compiler validation logic to handle both forms correctly.

3. Add a test case that compiles a workflow frontmatter using the object form.

4. Run `make test-unit` and `make lint-errors` to verify all checks pass.

Generated by Contribution Check · ● 2.2M ·

Adds regression tests that verify the protected-files field on
create-pull-request and push-to-pull-request-branch accepts the
documented object form {policy, exclude}.

The bug was that users got "expected string or null, got object" when
using the documented object form. The JSON schema already has the fix
(oneOf: [string, object]) but there were no tests to prevent regression.

- TestValidateMainWorkflowFrontmatterWithSchemaAndLocation_ProtectedFilesObjectForm:
  validates schema acceptance of the object form for both handlers
- TestMainWorkflowSchema_ProtectedFilesObjectFormStructure: verifies the
  schema uses oneOf [string, object] (not [string, null]) for protected-files

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/6f7df4d0-923a-41dc-94a2-1e27f4f1b7e1

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix compilation error for protected-files object form fix: add regression tests for protected-files object form compilation Apr 24, 2026
Copilot AI requested a review from pelikhan April 24, 2026 21:27
@pelikhan pelikhan marked this pull request as ready for review April 24, 2026 21:38
Copilot AI review requested due to automatic review settings April 24, 2026 21:38
@pelikhan pelikhan merged commit 9c675c3 into main Apr 24, 2026
20 checks passed
@pelikhan pelikhan deleted the copilot/fix-protected-files-compilation-issue branch April 24, 2026 21:39
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds regression coverage to ensure the protected-files field in safe-outputs continues to accept the documented object form ({policy, exclude}) for both create-pull-request and push-to-pull-request-branch, preventing the prior schema regression where only string|null was allowed.

Changes:

  • Add end-to-end schema validation tests covering protected-files string form and object form variants, including rejection of unknown object fields.
  • Add structural assertions over schemas/main_workflow_schema.json to ensure protected-files is oneOf: [string, object] (and not [string, null]) and that the object branch has policy, exclude, and additionalProperties: false.
Show a summary per file
File Description
pkg/parser/schema_test.go Adds regression tests validating protected-files object form support and schema structure guarantees.

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 1/1 changed files
  • Comments generated: 0

@github-actions
Copy link
Copy Markdown
Contributor

🧪 Test Quality Sentinel Report

Test Quality Score: 80/100

Excellent

Metric Value
New/modified tests analyzed 2
✅ Design tests (behavioral contracts) 2 (100%)
⚠️ Implementation tests (low value) 0 (0%)
Tests with error/edge cases 2 (100%)
Duplicate test clusters 0
Test inflation detected Yes (test-only PR: 242 lines added to test file, 0 to production file)
🚨 Coding-guideline violations None

Test Classification Details

Test File Classification Notes
TestValidateMainWorkflowFrontmatterWithSchemaAndLocation_ProtectedFilesObjectForm pkg/parser/schema_test.go:765 ✅ Design Table-driven (7 cases); covers both handlers, string/object forms, and invalid extra fields
TestMainWorkflowSchema_ProtectedFilesObjectFormStructure pkg/parser/schema_test.go:886 ✅ Design Regression guard — verifies schema has oneOf[string, object], not oneOf[string, null]

Test Analysis

TestValidateMainWorkflowFrontmatterWithSchemaAndLocation_ProtectedFilesObjectForm (pkg/parser/schema_test.go:765)

Classification: Design test
Design invariant enforced: protected-files accepts both the string form ("fallback-to-issue") and the object form ({policy, exclude}) for both create-pull-request and push-to-pull-request-branch, and rejects unknown properties.
Value if deleted: High — a regression back to the null-branch schema would immediately allow previously-failing object-form inputs to pass, and this test would catch it. The wantErr: true row for unknown-prop ensures the schema remains strict.
Coverage: 7 table rows including 1 error case, 4 valid object-form variants, and 2 string-form variants — good breadth.

TestMainWorkflowSchema_ProtectedFilesObjectFormStructure (pkg/parser/schema_test.go:886)

Classification: Design test
Design invariant enforced: The JSON schema must define protected-files as oneOf[string, object] (not oneOf[string, null]). This is the structural guarantee that prevents the original bug from silently re-appearing in a future schema edit.
Value if deleted: High — someone could accidentally reintroduce the null-branch schema and no end-to-end test would immediately catch the structural regression. This is a deliberate regression guard.
Coverage: Checks both create-pull-request and push-to-pull-request-branch handlers; verifies policy and exclude sub-fields exist; verifies additionalProperties: false.


Score Breakdown

Component Points Earned Notes
Behavioral Coverage (40 pts) 40 2/2 tests are behavioral contracts
Error/Edge Case Coverage (30 pts) 30 Both tests include error paths
Low Duplication (20 pts) 20 No duplicate clusters detected
Proportional Growth (10 pts) 0 242 test lines added, 0 production lines (test-only PR)

i️ The 10-point inflation penalty is expected for a pure regression-test PR. The production fix lives in the JSON schema file (schemas/main_workflow_schema.json), which is not a .go file tracked by this metric.


Language Support

Tests analyzed:

  • 🐹 Go (*_test.go): 2 tests — unit (//go:build !integration)
  • 🟨 JavaScript (*.test.cjs, *.test.js): 0 tests

Verdict

Check passed. 0% of new tests are implementation tests (threshold: 30%). Both new tests enforce clear behavioral contracts and include error/edge-case coverage. Build tags are present and no mock libraries were used.


📖 Understanding Test Classifications

Design Tests (High Value) verify what the system does:

  • Assert on observable outputs, return values, or state changes
  • Cover error paths and boundary conditions
  • Would catch a behavioral regression if deleted
  • Remain valid even after internal refactoring

Implementation Tests (Low Value) verify how the system does it:

  • Assert on internal function calls (mocking internals)
  • Only test the happy path with typical inputs
  • Break during legitimate refactoring even when behavior is correct
  • Give false assurance: they pass even when the system is wrong

Goal: Shift toward tests that describe the system's behavioral contract — the promises it makes to its users and collaborators.

References: §24913089154

🧪 Test quality analysis by Test Quality Sentinel · ● 643.5K ·

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Test Quality Sentinel: 80/100. Test quality is excellent — 0% of new tests are implementation tests (threshold: 30%). Both new tests enforce behavioral contracts with full error/edge-case coverage.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] protected-files object form fails compilation despite being documented

3 participants