Skip to content

Fix Claude .mcp.json format and align init-generated MCP config#26532

Merged
pelikhan merged 7 commits intomainfrom
copilot/aw-fix-github-api-consumption-report
Apr 16, 2026
Merged

Fix Claude .mcp.json format and align init-generated MCP config#26532
pelikhan merged 7 commits intomainfrom
copilot/aw-fix-github-api-consumption-report

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 16, 2026

The GitHub API Consumption Report Agent failed because Claude loaded a repo-local .mcp.json that did not match Claude’s MCP schema, producing config validation errors during execution.

  • Root cause addressed

    • Updated the repository-root .mcp.json to Claude-compatible syntax by using mcpServers (instead of servers).
    • Updated the init MCP config generator (gh aw init) to write Claude-compatible .mcp.json with mcpServers.
    • Kept backward-compatible parsing support for existing legacy .mcp.json files that still use servers.
  • Behavioral impact

    • Prevents Claude from rejecting project-level MCP config due to schema mismatch.
    • Ensures newly generated MCP config from gh aw init matches Claude Code expectations.
    • Preserves compatibility when reading older configs.
  • Additional updates

    • Updated CLI tests for MCP config generation/parsing (new key + legacy key handling).
    • Updated MCP config documentation example to use mcpServers.
- "servers": { ... }
+ "mcpServers": { ... }

> [!WARNING]
>
>

@github-actions
Copy link
Copy Markdown
Contributor

Hey @Copilot 👋 — thanks for picking up this bug investigation on the GitHub API Consumption Report Agent (workflow run 24483789500)! The checklist-driven approach is a great structure for tracking progress on the fix.

A couple of things to address before this is ready for review:

  • No code changes yet — the diff is currently empty. The checklist shows the investigation steps are checked off, but the implementation, tests, and validation steps are still pending. Time to implement the fix!
  • Tests needed — once the fix is in place, make sure to add or update tests covering the changed behavior (as noted in the checklist itself).
  • Run make agent-finish — the checklist item for full validation is still unchecked; this is a required gate before the final commit.

If you'd like a hand completing the implementation, here's a ready-to-use prompt:

Continue work on PR #26532 — Fix GitHub API Consumption Report Agent failure.
1. Identify the root cause from the GitHub Actions logs for workflow run 24483789500.
2. Implement the smallest possible fix in the relevant repository files.
3. Add or update focused tests for the changed behavior.
4. Run `make agent-finish` and address any findings.
5. Commit and push the changes to the `copilot/aw-fix-github-api-consumption-report` branch.

Generated by Contribution Check · ● 1.5M ·

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/5f57f095-1b2e-444f-82bd-1e2b7fd6066b

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix GitHub API Consumption Report Agent failure Remove invalid repository-level Claude MCP config that breaks api-consumption-report runs Apr 16, 2026
Copilot AI requested a review from pelikhan April 16, 2026 01:31
@pelikhan
Copy link
Copy Markdown
Collaborator

@copilot fix the .mcp.json file format to match Claude code syntax. Fix init command that generates this file as well.

Copilot AI and others added 4 commits April 16, 2026 01:58
Agent-Logs-Url: https://github.com/github/gh-aw/sessions/5a922218-3dfb-40cd-b1b5-b260b7f9df72

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Agent-Logs-Url: https://github.com/github/gh-aw/sessions/5a922218-3dfb-40cd-b1b5-b260b7f9df72

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Agent-Logs-Url: https://github.com/github/gh-aw/sessions/5a922218-3dfb-40cd-b1b5-b260b7f9df72

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 16, 2026

@copilot fix the .mcp.json file format to match Claude code syntax. Fix init command that generates this file as well.

Updated. .mcp.json and gh aw init now use Claude-compatible mcpServers syntax, with legacy servers key still supported for reads only. I also updated tests to validate both new and legacy behavior. Addressed in commit 3bb6c07.

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 /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw rg/x/text@v0.36.rev-parse ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile /usr/bin/git 3987648572 GO111MODULE .cfg git (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw --check ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel go /usr/bin/git -json GO111MODULE /opt/hostedtoolc--show-toplevel 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 d 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 on&#39; --ignore-patGOINSECURE GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json b 64/bin/go GOINSECURE GOMOD GOMODCACHE go (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 go /usr/bin/git successfully&#34; fer.go 64/pkg/tool/linu--show-toplevel git rev-�� --show-toplevel 64/pkg/tool/linuremote /usr/bin/git 11/001/test-frongit GO111MODULE 64/pkg/tool/linu--show-toplevel 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 -dirty&#34; -o gh-awgit GO111MODULE 64/bin/go git rev-�� --show-toplevel go /usr/bin/git -json GO111MODULE 64/bin/go /usr/bin/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 :latest /tmp/go-build1684107263/b235/embedcfg /usr/bin/git -json GO111MODULE 64/bin/go git -C /tmp/TestGuardPolicyBlockedUsersApprovalLabelsCompiledOutput903531142/001 config om/owner/repo.git remote.origin.urgit GO111MODULE 64/bin/go git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv -bool -buildtags /usr/bin/git -errorsas -ifaceassert -nilfunc git -C /tmp/TestGuardPolicyTrustedUsersExpressionCompiledOutput1464060021/001 l /usr/bin/git -json GO111MODULE 64/bin/go git (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 y_only_defaults_repo4149378471/001 34i--fWCy ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile GOINSECURE pproxy GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile env sRemoteWithRealGitmain_branch2595345537/001 sRemoteWithRealGitmain_branch2595345537/002/work 1/x64/bin/node GOINSECURE e/rtcov GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linuInitial commit (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel 64/pkg/tool/linuother /usr/bin/git 3827949547/.githgit GO111MODULE 64/pkg/tool/linu--show-toplevel git rev-�� --show-toplevel 64/pkg/tool/linux_amd64/vet /usr/bin/git AsxZxLib9 GO111MODULE ache/go/1.25.8/x--show-toplevel 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 (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 --show-toplevel ache/go/1.25.8/x64/pkg/tool/linuremote.origin.url /usr/bin/git Vj4_j9D8T rg/x/text@v0.36.rev-parse eutil.test git rev-�� --show-toplevel eutil.test /usr/bin/git 4107263/b252/_pkgit rg/x/text@v0.36.rev-parse ache/go/1.25.8/x--show-toplevel 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 64/pkg/tool/linux_amd64/vet /usr/bin/git npx prettier --cgit GOPROXY x_amd64/vet git rev-�� --show-toplevel x_amd64/vet /usr/bin/git &#34;prettier&#34; --chegit /bin/sh cfg 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 -goversion go1.25.8 -c=4 -nolocalimports -importcfg /tmp/go-build1684107263/b215/importcfg -pack env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE x_amd64/asm GOINSECURE GOMOD GOMODCACHE x_amd64/asm (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --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)
  • 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 /tmp/gh-aw-test-runs/20260416-020121-32390/test-3987648572 rev-parse /usr/bin/git @{u} GO111MODULE 64/bin/go git rev-�� --show-toplevel r_wasm.s /usr/bin/git 7/001 GO111MODULE 64/pkg/tool/linu--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv Secret: ${{ secrets.TOKEN }} JylrId8olNWA /usr/bin/git matter-with-nestgit GO111MODULE 5326d21f71d17a5c--show-toplevel git rev-�� --show-toplevel go /usr/bin/git 346 GO111MODULE 64/bin/go 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 --show-toplevel x_amd64/compile /usr/bin/git -json GO111MODULE 64/bin/go git rev-�� --show-toplevel go /usr/bin/git y.md GO111MODULE 64/pkg/tool/linu--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --git-dir go /usr/bin/git matter-with-nestgit GO111MODULE 64/bin/go git rev-�� heckout/git/ref/tags/v5 go bject.type] | @tsv -json GO111MODULE 64/bin/go 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 -instructions-test-2706125618/.github/workflows -trimpath /usr/lib/git-core/git-receive-pack -p github.com/githuconfig -lang=go1.25 git-receive-pack^remote\..*\.gh-resolved$ /tmp�� -aw/git/ref/tags/v3.0.0 -goversion bject.type] | @tsv -c=4 -nolocalimports -importcfg git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv -json l /usr/lib/git-core/git GOINSECURE GOMOD GOMODCACHE /usr/lib/git-core/git 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 (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 /tmp/gh-aw-test-runs/20260416-020121-32390/test-3987648572 status /usr/bin/git .github/workflowgit o x_amd64/compile git rev-�� --show-toplevel x_amd64/compile /usr/bin/git 50/001 GO111MODULE x_amd64/compile 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 -json GO111MODULE 64/bin/go git rev-�� --show-toplevel go /usr/bin/git -json GO111MODULE x_amd64/link 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 -test.paniconexit0 3898802/b435/_testmain.go /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/link -test.timeout=10git -test.run=^Test -test.short=true--show-toplevel /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/link -o /tmp/go-build2443898802/b435/sliceutil.test (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 runs/20260416-021356-50898/test-1879057313 GOPROXY kflows/test-expires.lock.yml GOSUMDB GOWORK 64/bin/go git-receive-pack /tmp�� GOMODCACHE go ache/node/24.14.1/x64/bin/node json&#39; --ignore-pgit GO111MODULE 64/bin/go ache/node/24.14.1/x64/bin/node (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 /tmp/go-build2443898802/b406/console.test 3898802/b438/_testmain.go /bin/sh -s -w -buildmode=exe /bin/sh -c git-upload-pack &#39;/tmp/TestParseDefaultBranchFromLsRemoteWithRealremote.origin.url git-upload-pack &#39;/tmp/TestParseDefaultBranchFromLsRemoteWithRealGitbranch_with_hyphen2448559079/rev-parse /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 runs/20260416-021356-50898/test-1879057313/.github/workflows GOPROXY /usr/bin/git l GOWORK 64/bin/go git push�� origin master /usr/bin/git json&#39; --ignore-pgit GO111MODULE 64/bin/go git (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 4107263/b235/embedcfg /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -p crypto/internal/rev-parse -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -o licyBlockedUsersApprovalLabelsCompiledOutput903531142/001 -trimpath t l net/http/httptrarev-parse -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh run download 1 --dir test-logs/run-1 -trimpath sv -p crypto/internal/rev-parse -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet -ato�� tructions-test-661996527/.github/workflows -buildtags 64/pkg/tool/linux_amd64/compile l -ifaceassert -nilfunc 64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/1/artifacts --jq .artifacts[].name GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE sh -c &#34;prettier&#34; --check &#39;**/*.cjs&#39; &#39;**/*.ts&#39; &#39;**/*.json&#39; --ignore-patGOINSECURE GOPROXY ache/go/1.25.8/x64/bin/go GOSUMDB GOWORK run-script/lib/nlist go (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 -trimpath /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -p crypto/internal/rev-parse -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -o runs/20260416-020121-32390/test-2282755830/.github/workflows -trimpath /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet -p crypto/ed25519 -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh run download 12345 --dir test-logs/run-12345 k/gh-aw/gh-aw/pkg/semverutil/semverutil.go 3898802/b454=&gt; -p b/gh-aw/pkg/typerev-parse -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -o bwyS/9k48_J27DlSaZ6QobwyS -trimpath /usr/lib/git-core/git -p github.com/githurev-parse -lang=go1.25 3898802/b454/importcfg (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/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet -c npx prettier --check &#39;**/*.cjs&#39; &#39;**/*.ts&#39; &#39;**/*.json&#39; --ignore-pGOINSECURE GOPROXY 64/pkg/tool/linux_amd64/vet GOSUMDB GOWORK 64/bin/go 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 -trimpath 3898802/b417/vet.cfg -p encoding/base64 -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -o /tmp/go-build1684107263/b206/_pkg_.a -trimpath ache/node/24.14.1/x64/bin/node -p crypto/internal/rev-parse -lang=go1.25 ache/node/24.14.1/x64/bin/node (http block)
    • Triggering command: /usr/bin/gh gh run download 12346 --dir test-logs/run-12346 4107263/b250/embedcfg /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -p crypto/internal/rev-parse -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linuTest User -o licyMinIntegrityOnlymin-integrity_with_repos=public_503766788/001 -trimpath /tmp/go-build2443898802/b415/fileutil.test -p archive/tar -lang=go1.25 /tmp/go-build2443898802/b415/fileutil.test (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/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet -c npx prettier --check &#39;**/*.cjs&#39; &#39;**/*.ts&#39; &#39;**/*.--thin GOPROXY 1/x64/bin/node GOSUMDB GOWORK 64/bin/go sh (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 -trimpath ache/node/24.14.1/x64/bin/node -p crypto/internal/rev-parse -lang=go1.25 3898802/b424/importcfg t-23�� k/gh-aw/gh-aw/.github/workflows/architecture-guardian.md -trimpath /usr/bin/git -p net/http/internarun -lang=go1.25 git (http block)
    • Triggering command: /usr/bin/gh gh run download 2 --dir test-logs/run-2 resolved$ /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile sions.md fmt -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -o /tmp/go-build2443898802/b070/_pkg_.a -trimpath .git -p main -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/2/artifacts --jq .artifacts[].name GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE sh -c api-consumption-report.md GOPROXY ache/go/1.25.8/x64/bin/go GOSUMDB GOWORK 64/bin/go go (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 3898802/b113/vet.cfg /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -p crypto/internal/rev-parse -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linuTest User -o licyBlockedUsersApprovalLabelsCompiledOutput903531142/001 -trimpath /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -p net/http -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh run download 3 --dir test-logs/run-3 -trimpath /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet ntent.md github.com/goccyrev-parse -lang=go1.21 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet -ato�� -bool -buildtags 64/pkg/tool/linux_amd64/vet -errorsas -ifaceassert -nilfunc 64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/3/artifacts --jq .artifacts[].name GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE sh -c t2353223217/.github/workflows GOPROXY ache/go/1.25.8/x64/bin/go GOSUMDB GOWORK 64/bin/go git (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 3898802/b111/vet.cfg /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -p crypto/internal/rev-parse -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -o licyBlockedUsersExpressionCompiledOutput3909969050/001 -trimpath ache/node/24.14.1/x64/bin/node -p golang.org/x/oaurev-parse -lang=go1.24 ache/node/24.14.1/x64/bin/node (http block)
    • Triggering command: /usr/bin/gh gh run download 4 --dir test-logs/run-4 -trimpath 3898802/b424/vet.cfg -p github.com/segmerev-parse -lang=go1.23 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -o tructions-test-661996527/.github/workflows -trimpath 64/pkg/tool/linux_amd64/link -p main -lang=go1.25 64/pkg/tool/linux_amd64/link (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/4/artifacts --jq .artifacts[].name GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE sh -c approach-validator.md GOPROXY .yml GOSUMDB GOWORK 64/bin/go git (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 3898802/b112/vet.cfg /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -p crypto/internal/rev-parse -lang=go1.25 3898802/b428/importcfg -o k/gh-aw/gh-aw/pkg/repoutil/repoutil.go k/gh-aw/gh-aw/pkg/repoutil/repoutil_test.go /usr/bin/git -p golang.org/x/oaurev-parse -lang=go1.24 git (http block)
    • Triggering command: /usr/bin/gh gh run download 5 --dir test-logs/run-5 -trimpath ache/node/24.14.1/x64/bin/node -p crypto/aes -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/link t-40�� k/gh-aw/gh-aw/.github/workflows/artifacts-summary.md -importcfg /bin/sh -s -w -buildmode=exe /bin/sh (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/5/artifacts --jq .artifacts[].name GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE sh -c /ref/tags/v9 GOPROXY 1/x64/bin/node GOSUMDB GOWORK 64/bin/go git (http block)
  • https://api.github.com/repos/github/gh-aw/actions/workflows
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path with-tools.md 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 run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --workflow nonexistent-workflow-12345 --limit 100 GOMOD GOMODCACHE x_amd64/asm env -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (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 /tmp/go-build168rev-parse -I ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet 4107�� /tmp/go-build1684107263/b144/_pkg_.a pkg/mod/golang.org/x/text@v0.36.0/internal/language/common.go /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -p github.com/segmerev-parse -lang=go1.17 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile (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 go /usr/bin/git edOutput94492454git VGplouFzy ache/go/1.25.8/x--show-toplevel git rev-�� 4 -type d -name bin 2&gt;/dev/null | tr &#39;\n&#39; &#39;:&#39;)$PATH&#34;; [ -n &#34;$GOROOT&#34; ] &amp;&amp; export PATH=&#34;$GOROOT/git ache/go/1.25.8/x64/pkg/tool/linuremote.origin.url /usr/bin/git ortcfg GO111MODULE ache/go/1.25.8/x64/pkg/tool/linu/repos/actions/github-script/git/ref/tags/v9 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 xterm-color gh-aw.opt.wasm gh-aw.wasm; \ AFTER=$(wc -c &lt; g /usr/bin/git -json GO111MODULE x_amd64/link git rev-�� --show-toplevel x_amd64/link /usr/bin/git prettier --check 1/x64/bin/node 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 mLsRemoteWithRealGitmaster_branch3186968145/001&#39; mLsRemoteWithRealGitmaster_branch3186968145/001&#39; 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile env LsRemoteWithRealGitbranch_with_hyphen2448559079/001&#39; LsRemoteWithRealGitbranch_with_hyphen2448559079/001&#39; 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 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 mLsRemoteWithRealGitcustom_branch4021136171/001&#39; mLsRemoteWithRealGitcustom_branch4021136171/001&#39; 64/bin/go GOINSECURE GOMOD erignore go env y_with_explicit_repo2214499333/001 GO111MODULE 64/pkg/tool/linux_amd64/link GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linuTest User (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 -json GO111MODULE x_amd64/asm GOINSECURE GOMOD GOMODCACHE V8DPkJF/oj4Si4pLremote.origin.url env -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE SqAYBLY/t9jI7Mg6remote.origin.url (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 ache/go/1.25.8/x-buildmode=exe GOINSECURE GOMOD GOMODCACHE go env b92b4216a3c0fbe039f7ce6c9216c86aGOINSECURE GO111MODULE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linushow (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 -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env ned-imports-enabled-with-body-content.md 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/v2.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env ned-imports-enabled-with-env-template-expressions-in-body.md 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/v2.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env ty-test.md GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (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 -json GO111MODULE x_amd64/compile GOINSECURE ZH/0qJlVinSMD07Nrev-parse GOMODCACHE x_amd64/compile env ned-imports-enabled-with-env-template-expressions-in-body.md 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 tions-lock.json pkg/actionpins/data/action_pins.json; \ echo &#34;��� Action pins synced successfulgit GO111MODULE ules/.bin/node GOINSECURE GOMOD GOMODCACHE go tion�� -json GO111MODULE 64/bin/go 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 g_.a GO111MODULE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile env erate-action-metadata/main.go qtyQmI_fS 64/pkg/tool/linux_amd64/link GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/link (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 rt 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 -p golang.org/x/texrev-parse -lang=go1.25 /usr/lib/git-core/git main�� k/gh-aw/gh-aw/.github/workflows --auto /opt/hostedtoolcache/node/24.14.1/x64/bin/node --detach -c=4 -nolocalimports node (http block)
    • Triggering command: /usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion GOSUMDB GOWORK 64/bin/go git cat-�� --end-of-options blob cfg prettier --write 64/bin/go go (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 -nolocalimports -importcfg /tmp/go-build2443898802/b425/importcfg -pack /tmp/go-build2443898802/b425/_testmain.go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo 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 workflow list --json name,state,path --repo owner/repo x_amd64/compile N files are not go GOMOD GOMODCACHE x_amd64/compile env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/owner/repo/contents/file.md
    • Triggering command: /tmp/go-build2443898802/b400/cli.test /tmp/go-build2443898802/b400/cli.test -test.testlogfile=/tmp/go-build2443898802/b400/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true -nolocalimports -importcfg /tmp/go-build1684107263/b189/importcfg -pack env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /tmp/go-build567906304/b400/cli.test /tmp/go-build567906304/b400/cli.test -test.testlogfile=/tmp/go-build567906304/b400/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true GOINSECURE GOMOD GOMODCACHE go env 50e2618cf2bee068GOINSECURE GO111MODULE x_amd64/compile N files are not go GOMOD GOMODCACHE x_amd64/compile (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 -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 on&#39; --ignore-patGOINSECURE GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE oFiles,IgnoredOtGOMODCACHE GOINSECURE GOMOD GOMODCACHE go (http block)

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

Copilot AI changed the title Remove invalid repository-level Claude MCP config that breaks api-consumption-report runs Fix Claude .mcp.json format and align init-generated MCP config Apr 16, 2026
@pelikhan pelikhan marked this pull request as ready for review April 16, 2026 02:40
Copilot AI review requested due to automatic review settings April 16, 2026 02:40
@pelikhan pelikhan merged commit d6bcb66 into main Apr 16, 2026
49 of 51 checks passed
@pelikhan pelikhan deleted the copilot/aw-fix-github-api-consumption-report branch April 16, 2026 02:40
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

Aligns repository and init-generated .mcp.json with Claude Code’s expected MCP config schema by switching from the legacy servers key to mcpServers, while retaining legacy parsing support.

Changes:

  • Updated .mcp.json schema to use mcpServers and adjusted CLI generation logic accordingly.
  • Added/updated tests to validate mcpServers output and legacy servers parsing behavior.
  • Updated documentation examples to reference mcpServers.
Show a summary per file
File Description
pkg/cli/mcp_config_file.go Writes new configs using mcpServers, keeps legacy servers field for reads, updates user instructions text.
pkg/cli/mcp_config_file_test.go Updates ensure/parse/marshal tests for mcpServers and adds a legacy-key parse case.
pkg/cli/init_mcp_test.go Updates init tests to assert mcpServers output.
docs/src/content/docs/reference/gh-aw-as-mcp-server.md Updates .mcp.json example to use mcpServers.
.mcp.json Switches repo-local config key from servers to mcpServers.

Copilot's findings

Tip

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

Comments suppressed due to low confidence (1)

pkg/cli/mcp_config_file.go:103

  • The rendered instructions always tell users to edit the "mcpServers" section. For repos that already have a legacy .mcp.json using "servers", following these instructions may still leave the file invalid for Claude if the schema rejects unknown keys (i.e., the legacy "servers" key remains). Consider updating the messaging to explicitly instruct renaming/removing "servers" (or to migrate the config) when a legacy config is detected.
	fmt.Fprintln(os.Stderr, "To enable GitHub Copilot Agent MCP server integration, please add the following")
	fmt.Fprintln(os.Stderr, "to the \"mcpServers\" section of your .mcp.json file:")
  • Files reviewed: 5/5 changed files
  • Comments generated: 2

Comment on lines 49 to +56
// Parse existing config
var config MCPConfig
if err := json.Unmarshal(data, &config); err != nil {
return fmt.Errorf("failed to parse existing mcp.json: %w", err)
}

// Check if the server is already configured correctly
if existingConfig, exists := config.Servers[ghAwServerName]; exists {
if existingConfig, exists := config.MCPServers[ghAwServerName]; exists {
Copy link

Copilot AI Apr 16, 2026

Choose a reason for hiding this comment

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

ensureMCPConfig only checks config.MCPServers when deciding whether the gh-aw server is already configured. If an existing .mcp.json uses the legacy servers key, the config will unmarshal into config.Servers and this logic will always fall through to rendering update instructions, even when the gh-aw server is already present/configured. Consider detecting the legacy case (e.g., config.MCPServers == nil && len(config.Servers) > 0) and tailoring behavior/message accordingly (and/or treating Servers as an alias for MCPServers for the purpose of the identical-config check).

This issue also appears on line 102 of the same file.

Copilot uses AI. Check for mistakes.
Comment on lines 255 to 265
if !tt.wantErr && tt.wantValid {
if config.Servers == nil {
t.Error("Expected servers map to be initialized")
if tt.name == "legacy config key" {
if config.Servers == nil {
t.Error("Expected legacy servers map to be initialized")
}
if config.MCPServers != nil {
t.Error("Expected mcpServers map to be nil for legacy-only config")
}
} else if config.MCPServers == nil {
t.Error("Expected mcpServers map to be initialized")
}
Copy link

Copilot AI Apr 16, 2026

Choose a reason for hiding this comment

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

This test branches on tt.name == "legacy config key" to decide which assertions to run. That makes the test fragile (renaming the case can silently change behavior). Consider adding an explicit boolean/enum field on the table (e.g., isLegacyKey) to drive the assertions instead of string-matching the test name.

Copilot uses AI. Check for mistakes.
@github-actions github-actions bot mentioned this pull request Apr 16, 2026
@github-actions
Copy link
Copy Markdown
Contributor

🧪 Test Quality Sentinel Report

Test Quality Score: 84/100

Excellent

Metric Value
New/modified tests analyzed 5
✅ Design tests (behavioral contracts) 5 (100%)
⚠️ Implementation tests (low value) 0 (0%)
Tests with error/edge cases 4 (80%)
Duplicate test clusters 0
Test inflation detected Yes (43 test lines added vs 8 production lines in mcp_config_file_test.go)
🚨 Coding-guideline violations None

Test Classification Details

View all 5 modified test functions
Test File Classification Notes
TestInitRepository_WithMCP pkg/cli/init_mcp_test.go ✅ Design End-to-end init flow; verifies .mcp.json JSON structure, server name, command, and args
TestEnsureMCPConfig_RendersInstructions pkg/cli/init_mcp_test.go ✅ Design Verifies non-destructive contract: existing configs with other servers are not modified
TestEnsureMCPConfig (4 table rows) pkg/cli/mcp_config_file_test.go ✅ Design Table-driven; covers new config, existing+other server, identical config (idempotent), and differing settings
TestMCPConfigParsing (5 table rows, +1 new) pkg/cli/mcp_config_file_test.go ✅ Design Covers valid JSON, cwd field, invalid JSON (error case), empty config, and new legacy servers key backward-compat case
TestMCPConfigJSONMarshaling pkg/cli/mcp_config_file_test.go ✅ Design Round-trip marshal/unmarshal of MCPServers field; happy path only

Score Breakdown

Component Calculation Points
Behavioral Coverage (40 pts) 5/5 design tests = 100% 40
Error/Edge Case Coverage (30 pts) 4/5 tests with edge cases = 80% 24
Low Duplication (20 pts) 0 duplicate clusters 20
Proportional Growth (10 pts) Inflation detected (43 test lines vs 8 production lines >2:1) 0
Total 84/100

Note on Test Inflation

The test-to-production lines ratio in mcp_config_file_test.go is 43:8 (>2:1), triggering the inflation penalty. In this PR's context the discrepancy is largely explained by:

  • Most additions are field renames (ServersMCPServers) across many test table rows, which are mechanical
  • One genuinely new test case: the "legacy config key" scenario in TestMCPConfigParsing, which tests backward compatibility of the servers key — a valuable behavioral contract

The inflation is not a concern from a quality standpoint, though it is noted per the rubric.


Language Support

Tests analyzed:

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

Verdict

Check passed. 0% of new tests are implementation tests (threshold: 30%). All 5 modified test functions verify observable behavioral contracts. The new "legacy config key" test case specifically enforces backward-compatible JSON deserialization, which is a meaningful addition beyond the field-rename alignment.


📖 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: §24489092411

🧪 Test quality analysis by Test Quality Sentinel · ● 1.4M ·

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: 84/100. Test quality is excellent — 0% of new tests are implementation tests (threshold: 30%). All 5 modified test functions verify behavioral contracts, including a new backward-compatibility test for the legacy servers JSON key.

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.

[aw] GitHub API Consumption Report Agent failed

3 participants