From 8752c53900e7cd6b2127ab107a2ee7880b209bba Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 21 May 2026 18:27:30 +0000 Subject: [PATCH 1/2] chore: plan progressive disclosure changes to ready_for_review workflows Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/workflows/issue-monster.lock.yml | 106 +++++++++++++++-------- 1 file changed, 69 insertions(+), 37 deletions(-) diff --git a/.github/workflows/issue-monster.lock.yml b/.github/workflows/issue-monster.lock.yml index e3a302dfb5d..6d1b4254db5 100644 --- a/.github/workflows/issue-monster.lock.yml +++ b/.github/workflows/issue-monster.lock.yml @@ -1,5 +1,5 @@ -# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"9feecc373d1636141e0e7cd86a7ee88cacbaf82fe11c4198034ac302b88c77b3","compiler_version":"v0.74.8","strict":true,"agent_id":"copilot","agent_model":"claude-haiku-4.5"} -# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_AGENT_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e","version":"v6.4.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"v0.74.8","version":"v0.74.8"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.49"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.3.9","digest":"sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.3.9@sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388"},{"image":"ghcr.io/github/github-mcp-server:v1.0.4"},{"image":"node:lts-alpine","digest":"sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f","pinned_image":"node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f"}]} +# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"9feecc373d1636141e0e7cd86a7ee88cacbaf82fe11c4198034ac302b88c77b3","strict":true,"agent_id":"copilot","agent_model":"claude-haiku-4.5"} +# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_AGENT_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e","version":"v6.4.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.50"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.50"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.25.50"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.3.16","digest":"sha256:8001e4bfa52d45abd05c45a8f855ce62bc893eb66e4807bb487bf2ff07fc1473","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.3.16@sha256:8001e4bfa52d45abd05c45a8f855ce62bc893eb66e4807bb487bf2ff07fc1473"},{"image":"ghcr.io/github/github-mcp-server:v1.0.4"},{"image":"node:lts-alpine","digest":"sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f","pinned_image":"node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f"}]} # ___ _ _ # / _ \ | | (_) # | |_| | __ _ ___ _ __ | |_ _ ___ @@ -14,7 +14,7 @@ # \ /\ / (_) | | | | ( | | | | (_) \ V V /\__ \ # \/ \/ \___/|_| |_|\_\|_| |_|\___/ \_/\_/ |___/ # -# This file was automatically generated by gh-aw (v0.74.8). DO NOT EDIT. +# This file was automatically generated by gh-aw. DO NOT EDIT. # # To update this file, edit the corresponding .md file and run: # gh aw compile @@ -48,14 +48,13 @@ # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 (source v9) # - actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 # - actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 -# - github/gh-aw-actions/setup@v0.74.8 # # Container images used: -# - ghcr.io/github/gh-aw-firewall/agent:0.25.49 -# - ghcr.io/github/gh-aw-firewall/api-proxy:0.25.49 -# - ghcr.io/github/gh-aw-firewall/cli-proxy:0.25.49 -# - ghcr.io/github/gh-aw-firewall/squid:0.25.49 -# - ghcr.io/github/gh-aw-mcpg:v0.3.9@sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388 +# - ghcr.io/github/gh-aw-firewall/agent:0.25.50 +# - ghcr.io/github/gh-aw-firewall/api-proxy:0.25.50 +# - ghcr.io/github/gh-aw-firewall/cli-proxy:0.25.50 +# - ghcr.io/github/gh-aw-firewall/squid:0.25.50 +# - ghcr.io/github/gh-aw-mcpg:v0.3.16@sha256:8001e4bfa52d45abd05c45a8f855ce62bc893eb66e4807bb487bf2ff07fc1473 # - ghcr.io/github/github-mcp-server:v1.0.4 # - node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f @@ -489,9 +488,16 @@ jobs: setup-trace-id: ${{ steps.setup.outputs.trace-id }} stale_lock_file_failed: ${{ steps.check-lock-file.outputs.stale_lock_file_failed == 'true' }} steps: + - name: Checkout actions folder + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + repository: github/gh-aw + sparse-checkout: | + actions + persist-credentials: false - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@v0.74.8 + uses: ./actions/setup with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} @@ -512,14 +518,13 @@ jobs: GH_AW_INFO_MODEL: "claude-haiku-4.5" GH_AW_INFO_VERSION: "1.0.48" GH_AW_INFO_AGENT_VERSION: "1.0.48" - GH_AW_INFO_CLI_VERSION: "v0.74.8" GH_AW_INFO_WORKFLOW_NAME: "Issue Monster" GH_AW_INFO_EXPERIMENTAL: "false" GH_AW_INFO_SUPPORTS_TOOLS_ALLOWLIST: "true" GH_AW_INFO_STAGED: "false" GH_AW_INFO_ALLOWED_DOMAINS: '["*.grafana.net","*.sentry.io","defaults"]' GH_AW_INFO_FIREWALL_ENABLED: "true" - GH_AW_INFO_AWF_VERSION: "v0.25.49" + GH_AW_INFO_AWF_VERSION: "v0.25.50" GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ‘พ" @@ -543,6 +548,7 @@ jobs: sparse-checkout: | .github .agents + actions/setup .claude .codex .crush @@ -569,16 +575,6 @@ jobs: setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_workflow_timestamp_api.cjs'); await main(); - - name: Check compile-agentic version - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 - env: - GH_AW_COMPILED_VERSION: "v0.74.8" - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io, getOctokit); - const { main } = require('${{ runner.temp }}/gh-aw/actions/check_version_updates.cjs'); - await main(); - name: Create prompt with built-in context env: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt @@ -769,9 +765,16 @@ jobs: setup-span-id: ${{ steps.setup.outputs.span-id }} setup-trace-id: ${{ steps.setup.outputs.trace-id }} steps: + - name: Checkout actions folder + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + repository: github/gh-aw + sparse-checkout: | + actions + persist-credentials: false - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@v0.74.8 + uses: ./actions/setup with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} @@ -834,7 +837,7 @@ jobs: env: GH_HOST: github.com - name: Install AWF binary - run: bash "${RUNNER_TEMP}/gh-aw/actions/install_awf_binary.sh" v0.25.49 + run: bash "${RUNNER_TEMP}/gh-aw/actions/install_awf_binary.sh" v0.25.50 - name: Parse integrity filter lists id: parse-guard-vars env: @@ -860,7 +863,7 @@ jobs: GH_AW_SUB_AGENT_EXT: ".agent.md" run: bash "${RUNNER_TEMP}/gh-aw/actions/restore_inline_sub_agents.sh" - name: Download container images - run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/gh-aw-firewall/agent:0.25.49 ghcr.io/github/gh-aw-firewall/api-proxy:0.25.49 ghcr.io/github/gh-aw-firewall/cli-proxy:0.25.49 ghcr.io/github/gh-aw-firewall/squid:0.25.49 ghcr.io/github/gh-aw-mcpg:v0.3.9@sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388 ghcr.io/github/github-mcp-server:v1.0.4 node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f + run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/gh-aw-firewall/agent:0.25.50 ghcr.io/github/gh-aw-firewall/api-proxy:0.25.50 ghcr.io/github/gh-aw-firewall/cli-proxy:0.25.50 ghcr.io/github/gh-aw-firewall/squid:0.25.50 ghcr.io/github/gh-aw-mcpg:v0.3.16@sha256:8001e4bfa52d45abd05c45a8f855ce62bc893eb66e4807bb487bf2ff07fc1473 ghcr.io/github/github-mcp-server:v1.0.4 node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f - name: Generate Safe Outputs Config run: | mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs" @@ -1083,7 +1086,7 @@ jobs: * ) DOCKER_SOCK_PATH=/var/run/docker.sock ;; esac DOCKER_SOCK_GID=$(stat -c '%g' "$DOCKER_SOCK_PATH" 2>/dev/null || echo '0') - export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host --add-host host.docker.internal:127.0.0.1 --user '"${MCP_GATEWAY_UID}"':'"${MCP_GATEWAY_GID}"' --group-add '"${DOCKER_SOCK_GID}"' -v '"${DOCKER_SOCK_PATH}"':/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DOCKER_HOST=unix:///var/run/docker.sock -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -e GITHUB_AW_OTEL_TRACE_ID -e GITHUB_AW_OTEL_PARENT_SPAN_ID -e OTEL_EXPORTER_OTLP_HEADERS -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.3.9' + export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host --add-host host.docker.internal:127.0.0.1 --user '"${MCP_GATEWAY_UID}"':'"${MCP_GATEWAY_GID}"' --group-add '"${DOCKER_SOCK_GID}"' -v '"${DOCKER_SOCK_PATH}"':/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DOCKER_HOST=unix:///var/run/docker.sock -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -e GITHUB_AW_OTEL_TRACE_ID -e GITHUB_AW_OTEL_PARENT_SPAN_ID -e OTEL_EXPORTER_OTLP_HEADERS -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.3.16' mkdir -p /home/runner/.copilot GH_AW_NODE=$(which node 2>/dev/null || command -v node 2>/dev/null || echo node) @@ -1144,7 +1147,7 @@ jobs: GH_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} GITHUB_SERVER_URL: ${{ github.server_url }} CLI_PROXY_POLICY: '{"allow-only":{"min-integrity":"approved","repos":"all"}}' - CLI_PROXY_IMAGE: 'ghcr.io/github/gh-aw-mcpg:v0.3.9' + CLI_PROXY_IMAGE: 'ghcr.io/github/gh-aw-mcpg:v0.3.16' run: | bash "${RUNNER_TEMP}/gh-aw/actions/start_cli_proxy.sh" - name: Execute GitHub Copilot CLI @@ -1159,7 +1162,7 @@ jobs: export GH_AW_NODE_BIN export COPILOT_API_KEY="$COPILOT_DUMMY_BYOK" (umask 177 && touch /tmp/gh-aw/agent-stdio.log) - printf '%s\n' '{"$schema":"https://github.com/github/gh-aw-firewall/releases/download/v0.25.49/awf-config.schema.json","network":{"allowDomains":["*.grafana.net","*.sentry.io","api.business.githubcopilot.com","api.enterprise.githubcopilot.com","api.github.com","api.githubcopilot.com","api.individual.githubcopilot.com","api.snapcraft.io","archive.ubuntu.com","azure.archive.ubuntu.com","crl.geotrust.com","crl.globalsign.com","crl.identrust.com","crl.sectigo.com","crl.thawte.com","crl.usertrust.com","crl.verisign.com","crl3.digicert.com","crl4.digicert.com","crls.ssl.com","github.com","host.docker.internal","json-schema.org","json.schemastore.org","keyserver.ubuntu.com","ocsp.digicert.com","ocsp.geotrust.com","ocsp.globalsign.com","ocsp.identrust.com","ocsp.sectigo.com","ocsp.ssl.com","ocsp.thawte.com","ocsp.usertrust.com","ocsp.verisign.com","packagecloud.io","packages.cloud.google.com","packages.microsoft.com","ppa.launchpad.net","raw.githubusercontent.com","registry.npmjs.org","s.symcb.com","s.symcd.com","security.ubuntu.com","telemetry.enterprise.githubcopilot.com","ts-crl.ws.symantec.com","ts-ocsp.ws.symantec.com","www.googleapis.com"]},"apiProxy":{"enabled":true,"enableTokenSteering":true,"maxRuns":500,"maxEffectiveTokens":25000000,"models":{"agent":["sonnet-6x","gpt-5.4","gpt-5","gemini-pro","haiku","any"],"any":["copilot/*","anthropic/*","openai/*","google/*","gemini/*"],"auto":["large"],"claude":["agent","sonnet-6x","haiku","any"],"codex":["agent","gpt-5-codex","gpt-5","any"],"coding":["copilot/gpt-5*codex*","openai/gpt-5*codex*","gpt-5-codex"],"copilot":["agent","gpt-5.4","sonnet","gpt-5","any"],"deep-research":["copilot/deep-research*","copilot/o3-deep-research*","copilot/o4-mini-deep-research*","google/deep-research*","gemini/deep-research*","openai/o3-deep-research*","openai/o4-mini-deep-research*"],"gemini":["agent","gemini-pro","gemini-flash","any"],"gemini-flash":["copilot/gemini-*flash*","google/gemini-*flash*","gemini/gemini-*flash*"],"gemini-flash-lite":["copilot/gemini-*flash*lite*","google/gemini-*flash*lite*","gemini/gemini-*flash*lite*"],"gemini-pro":["copilot/gemini-*pro*","google/gemini-*pro*","gemini/gemini-*pro*"],"gemma":["copilot/gemma*","google/gemma*","gemini/gemma*"],"gpt-4.1":["copilot/gpt-4.1*","openai/gpt-4.1*"],"gpt-5":["copilot/gpt-5*","openai/gpt-5*"],"gpt-5-codex":["copilot/gpt-5*codex*","openai/gpt-5*codex*"],"gpt-5-mini":["copilot/gpt-5*mini*","openai/gpt-5*mini*"],"gpt-5-nano":["copilot/gpt-5*nano*","openai/gpt-5*nano*"],"gpt-5-pro":["copilot/gpt-5*pro*","openai/gpt-5*pro*"],"haiku":["copilot/*haiku*","anthropic/*haiku*"],"large":["sonnet","gpt-5-pro","gpt-5","gemini-pro"],"mini":["haiku","gpt-5-mini","gpt-5-nano","gemini-flash-lite","copilot/raptor*mini*"],"opus":["copilot/*opus*","anthropic/*opus*"],"reasoning":["copilot/o1*","copilot/o3*","copilot/o4*","openai/o1*","openai/o3*","openai/o4*"],"small":["mini"],"sonnet":["copilot/*sonnet*","anthropic/*sonnet*"],"sonnet-6x":["copilot/*sonnet-4.5*","copilot/*sonnet-4-5*","anthropic/*sonnet-4.5*","anthropic/*sonnet-4-5*","copilot/*sonnet-3.7*","copilot/*sonnet-3-7*","anthropic/*sonnet-3.7*","anthropic/*sonnet-3-7*","copilot/*sonnet-3.5*","copilot/*sonnet-3-5*","anthropic/*sonnet-3.5*","anthropic/*sonnet-3-5*"],"vision":["copilot/gemini-*image*","gemini/gemini-*image*","copilot/gemini-*flash*","gemini/gemini-*flash*"]}},"container":{"imageTag":"0.25.49"}}' > "${RUNNER_TEMP}/gh-aw/awf-config.json" + printf '%s\n' '{"$schema":"https://github.com/github/gh-aw-firewall/releases/download/v0.25.50/awf-config.schema.json","network":{"allowDomains":["*.grafana.net","*.sentry.io","api.business.githubcopilot.com","api.enterprise.githubcopilot.com","api.github.com","api.githubcopilot.com","api.individual.githubcopilot.com","api.snapcraft.io","archive.ubuntu.com","azure.archive.ubuntu.com","crl.geotrust.com","crl.globalsign.com","crl.identrust.com","crl.sectigo.com","crl.thawte.com","crl.usertrust.com","crl.verisign.com","crl3.digicert.com","crl4.digicert.com","crls.ssl.com","github.com","host.docker.internal","json-schema.org","json.schemastore.org","keyserver.ubuntu.com","ocsp.digicert.com","ocsp.geotrust.com","ocsp.globalsign.com","ocsp.identrust.com","ocsp.sectigo.com","ocsp.ssl.com","ocsp.thawte.com","ocsp.usertrust.com","ocsp.verisign.com","packagecloud.io","packages.cloud.google.com","packages.microsoft.com","ppa.launchpad.net","raw.githubusercontent.com","registry.npmjs.org","s.symcb.com","s.symcd.com","security.ubuntu.com","telemetry.enterprise.githubcopilot.com","ts-crl.ws.symantec.com","ts-ocsp.ws.symantec.com","www.googleapis.com"]},"apiProxy":{"enabled":true,"enableTokenSteering":true,"maxRuns":500,"maxEffectiveTokens":25000000,"models":{"agent":["sonnet-6x","gpt-5.4","gpt-5","gemini-pro","haiku","any"],"antigravity":["copilot/antigravity*","google/antigravity*","gemini/antigravity*"],"any":["copilot/*","anthropic/*","openai/*","google/*","gemini/*"],"auto":["large"],"claude":["agent","sonnet-6x","haiku","any"],"codex":["agent","gpt-5-codex","gpt-5","any"],"coding":["copilot/gpt-5*codex*","openai/gpt-5*codex*","gpt-5-codex"],"computer-use":["copilot/*computer-use*","google/*computer-use*","gemini/*computer-use*","openai/*computer-use*"],"copilot":["agent","gpt-5.4","sonnet","gpt-5","any"],"deep-research":["copilot/deep-research*","copilot/o3-deep-research*","copilot/o4-mini-deep-research*","google/deep-research*","gemini/deep-research*","openai/o3-deep-research*","openai/o4-mini-deep-research*"],"gemini":["agent","gemini-pro","gemini-flash","any"],"gemini-3-flash":["copilot/gemini-3*flash*","google/gemini-3*flash*","gemini/gemini-3*flash*"],"gemini-3-pro":["copilot/gemini-3*pro*","google/gemini-3*pro*","gemini/gemini-3*pro*"],"gemini-3.1-flash":["copilot/gemini-3.1*flash*","google/gemini-3.1*flash*","gemini/gemini-3.1*flash*"],"gemini-3.1-pro":["copilot/gemini-3.1*pro*","google/gemini-3.1*pro*","gemini/gemini-3.1*pro*"],"gemini-flash":["copilot/gemini-*flash*","google/gemini-*flash*","gemini/gemini-*flash*"],"gemini-flash-lite":["copilot/gemini-*flash*lite*","google/gemini-*flash*lite*","gemini/gemini-*flash*lite*"],"gemini-pro":["copilot/gemini-*pro*","google/gemini-*pro*","gemini/gemini-*pro*"],"gemma":["copilot/gemma*","google/gemma*","gemini/gemma*"],"gpt-4.1":["copilot/gpt-4.1*","openai/gpt-4.1*"],"gpt-5":["copilot/gpt-5*","openai/gpt-5*"],"gpt-5-codex":["copilot/gpt-5*codex*","openai/gpt-5*codex*"],"gpt-5-mini":["copilot/gpt-5*mini*","openai/gpt-5*mini*"],"gpt-5-nano":["copilot/gpt-5*nano*","openai/gpt-5*nano*"],"gpt-5-pro":["copilot/gpt-5*pro*","openai/gpt-5*pro*"],"gpt-5.4":["copilot/gpt-5.4*","openai/gpt-5.4*"],"haiku":["copilot/*haiku*","anthropic/*haiku*"],"large":["sonnet","gpt-5-pro","gpt-5","gemini-pro"],"mini":["haiku","gpt-5-mini","gpt-5-nano","gemini-flash-lite"],"opus":["copilot/*opus*","anthropic/*opus*"],"reasoning":["copilot/o1*","copilot/o3*","copilot/o4*","openai/o1*","openai/o3*","openai/o4*"],"robotics":["copilot/*robotics*","google/*robotics*","gemini/*robotics*"],"small":["mini"],"sonnet":["copilot/*sonnet*","anthropic/*sonnet*"],"sonnet-6x":["copilot/*sonnet-4-5-*","anthropic/*sonnet-4-5-*","copilot/*sonnet-4-6*","anthropic/*sonnet-4-6*"],"summarization":["haiku","gpt-5-mini","gemini-flash-lite","mini"],"vision":["copilot/gemini-*image*","gemini/gemini-*image*","copilot/gemini-*flash*","gemini/gemini-*flash*"]}},"container":{"imageTag":"0.25.50"}}' > "${RUNNER_TEMP}/gh-aw/awf-config.json" cp "${RUNNER_TEMP}/gh-aw/awf-config.json" /tmp/gh-aw/awf-config.json GH_AW_DOCKER_HOST_PATH_PREFIX_ARGS="" if [[ "${DOCKER_HOST:-}" =~ ^tcp:// ]]; then @@ -1178,7 +1181,7 @@ jobs: GH_AW_PHASE: agent GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} - GH_AW_VERSION: v0.74.8 + GH_AW_VERSION: dev GH_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN || github.token }} GITHUB_API_URL: ${{ github.api_url }} GITHUB_AW: true @@ -1395,9 +1398,16 @@ jobs: tools_reported: ${{ steps.missing_tool.outputs.tools_reported }} total_count: ${{ steps.missing_tool.outputs.total_count }} steps: + - name: Checkout actions folder + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + repository: github/gh-aw + sparse-checkout: | + actions + persist-credentials: false - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@v0.74.8 + uses: ./actions/setup with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} @@ -1537,9 +1547,16 @@ jobs: detection_reason: ${{ steps.detection_conclusion.outputs.reason }} detection_success: ${{ steps.detection_conclusion.outputs.success }} steps: + - name: Checkout actions folder + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + repository: github/gh-aw + sparse-checkout: | + actions + persist-credentials: false - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@v0.74.8 + uses: ./actions/setup with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} @@ -1575,7 +1592,7 @@ jobs: rm -rf /tmp/gh-aw/sandbox/firewall/logs rm -rf /tmp/gh-aw/sandbox/firewall/audit - name: Download container images - run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/gh-aw-firewall/agent:0.25.49 ghcr.io/github/gh-aw-firewall/api-proxy:0.25.49 ghcr.io/github/gh-aw-firewall/squid:0.25.49 + run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/gh-aw-firewall/agent:0.25.50 ghcr.io/github/gh-aw-firewall/api-proxy:0.25.50 ghcr.io/github/gh-aw-firewall/squid:0.25.50 - name: Check if detection needed id: detection_guard if: always() @@ -1638,7 +1655,7 @@ jobs: env: GH_HOST: github.com - name: Install AWF binary - run: bash "${RUNNER_TEMP}/gh-aw/actions/install_awf_binary.sh" v0.25.49 + run: bash "${RUNNER_TEMP}/gh-aw/actions/install_awf_binary.sh" v0.25.50 - name: Execute GitHub Copilot CLI if: always() && steps.detection_guard.outputs.run_detection == 'true' continue-on-error: true @@ -1653,7 +1670,7 @@ jobs: export GH_AW_NODE_BIN export COPILOT_API_KEY="$COPILOT_DUMMY_BYOK" (umask 177 && touch /tmp/gh-aw/threat-detection/detection.log) - printf '%s\n' '{"$schema":"https://github.com/github/gh-aw-firewall/releases/download/v0.25.49/awf-config.schema.json","network":{"allowDomains":["api.business.githubcopilot.com","api.enterprise.githubcopilot.com","api.github.com","api.githubcopilot.com","api.individual.githubcopilot.com","github.com","host.docker.internal","telemetry.enterprise.githubcopilot.com"]},"apiProxy":{"enabled":true,"enableTokenSteering":true,"maxRuns":500,"maxEffectiveTokens":25000000},"container":{"imageTag":"0.25.49"}}' > "${RUNNER_TEMP}/gh-aw/awf-config.json" + printf '%s\n' '{"$schema":"https://github.com/github/gh-aw-firewall/releases/download/v0.25.50/awf-config.schema.json","network":{"allowDomains":["api.business.githubcopilot.com","api.enterprise.githubcopilot.com","api.github.com","api.githubcopilot.com","api.individual.githubcopilot.com","github.com","host.docker.internal","telemetry.enterprise.githubcopilot.com"]},"apiProxy":{"enabled":true,"enableTokenSteering":true,"maxRuns":500,"maxEffectiveTokens":25000000},"container":{"imageTag":"0.25.50"}}' > "${RUNNER_TEMP}/gh-aw/awf-config.json" cp "${RUNNER_TEMP}/gh-aw/awf-config.json" /tmp/gh-aw/awf-config.json GH_AW_DOCKER_HOST_PATH_PREFIX_ARGS="" if [[ "${DOCKER_HOST:-}" =~ ^tcp:// ]]; then @@ -1670,7 +1687,7 @@ jobs: COPILOT_MODEL: claude-haiku-4.5 GH_AW_PHASE: detection GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt - GH_AW_VERSION: v0.74.8 + GH_AW_VERSION: dev GITHUB_API_URL: ${{ github.api_url }} GITHUB_AW: true GITHUB_COPILOT_INTEGRATION_ID: agentic-workflows @@ -1727,6 +1744,7 @@ jobs: pre_activation: runs-on: ubuntu-slim permissions: + contents: read issues: read pull-requests: read outputs: @@ -1742,9 +1760,16 @@ jobs: setup-span-id: ${{ steps.setup.outputs.span-id }} setup-trace-id: ${{ steps.setup.outputs.trace-id }} steps: + - name: Checkout actions folder + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + repository: github/gh-aw + sparse-checkout: | + actions + persist-credentials: false - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@v0.74.8 + uses: ./actions/setup with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} @@ -2210,9 +2235,16 @@ jobs: process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }} process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }} steps: + - name: Checkout actions folder + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + repository: github/gh-aw + sparse-checkout: | + actions + persist-credentials: false - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@v0.74.8 + uses: ./actions/setup with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} From b901c0cb431fe809932df728d40402fa083f6ee7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 21 May 2026 18:31:29 +0000 Subject: [PATCH 2/2] feat: apply progressive disclosure to all ready_for_review agentic workflows - test-quality-sentinel: wrap metrics table, classification table, flagged tests, and language support in
elements; keep score headline, one-sentence summary, and verdict visible; update formatting guidelines - design-decision-gate: wrap "What to do next", "Why ADRs Matter", and verification details in
; keep headline and blocking notice visible - mattpocock-skills-reviewer: inline review comments now keep a brief visible sentence and collapse code examples/analysis into
blocks; overall review body uses progressive disclosure; Step 7 summary uses same pattern - pr-code-quality-reviewer: inline comments lead with one-sentence impact statement; detailed fix suggestions collapse into
; formatting guidelines updated to mandate progressive disclosure pattern Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/workflows/design-decision-gate.md | 42 +++++++++------ .../workflows/mattpocock-skills-reviewer.md | 24 ++++----- .github/workflows/pr-code-quality-reviewer.md | 26 +++++++-- .github/workflows/test-quality-sentinel.md | 54 ++++++++++--------- 4 files changed, 87 insertions(+), 59 deletions(-) diff --git a/.github/workflows/design-decision-gate.md b/.github/workflows/design-decision-gate.md index a2158a66f33..bf94a8691a0 100644 --- a/.github/workflows/design-decision-gate.md +++ b/.github/workflows/design-decision-gate.md @@ -341,11 +341,12 @@ Post a comment using `add-comment` explaining the requirement: This PR {has been labeled `implementation` / makes significant changes to core business logic (>100 new lines)} but does not have a linked Architecture Decision Record (ADR). -**AI has analyzed the PR diff and generated a draft ADR** to help you get started: +๐Ÿ“„ **Draft ADR committed**: `docs/adr/{NNNN}-{title}.md` โ€” review and complete it before merging. -๐Ÿ“„ **Draft ADR**: `docs/adr/{NNNN}-{title}.md` +> ๐Ÿ”’ *This PR cannot merge until an ADR is linked in the PR body.* -### What to do next +
+๐Ÿ“‹ What to do next 1. **Review the draft ADR** committed to your branch โ€” it was generated from the PR diff 2. **Complete the missing sections** โ€” add context the AI couldn't infer, refine the decision rationale, and list real alternatives you considered @@ -355,13 +356,16 @@ This PR {has been labeled `implementation` / makes significant changes to core b Once an ADR is linked in the PR body, this gate will re-run and verify the implementation matches the decision. -### Why ADRs Matter +
+ +
+โ“ Why ADRs Matter > *"AI made me procrastinate on key design decisions. Because refactoring was cheap, I could always say 'I'll deal with this later.' Deferring decisions corroded my ability to think clearly."* ADRs create a searchable, permanent record of **why** the codebase looks the way it does. Future contributors (and your future self) will thank you. ---- +
๐Ÿ“‹ Michael Nygard ADR Format Reference @@ -376,15 +380,13 @@ An ADR must contain these four sections to be considered complete: All ADRs are stored in `docs/adr/` as Markdown files numbered by PR number (e.g., `0042-use-postgresql.md` for PR #42).
- -> ๐Ÿ”’ *This PR cannot merge until an ADR is linked in the PR body.* ``` ### Report Formatting - Use h3 (###) or lower for all headers in your report to maintain proper document hierarchy. -- Wrap long sections in `
Section Name` tags to improve readability and reduce scrolling. -- Structure: Brief summary (always visible) โ†’ Key findings (always visible) โ†’ Detailed analysis (in `
`) โ†’ Recommendations (always visible) +- Apply **progressive disclosure**: keep the immediately visible text as brief as possible; wrap all verbose sections (next steps, background, reference material) in `
โ€ฆ` tags. +- Required structure for blocking comments: headline + one-line status (always visible) โ†’ "What to do next" (in `
`) โ†’ "Why ADRs Matter" (in `
`) โ†’ ADR format reference (in `
`) โ†’ blocking notice (always visible) ## Step 4b: If ADR Found โ€” Verify Implementation Matches @@ -414,14 +416,14 @@ Post an approving comment: ```markdown ### โœ… Design Decision Gate โ€” ADR Verified -The implementation in this PR aligns with the stated Architecture Decision Record. +**ADR reviewed**: {ADR title and link} โ€” implementation aligns with the stated decision. Great work! ๐Ÿ—๏ธ -**ADR reviewed**: {ADR title and link} +
+๐Ÿ“‹ Verification Summary -### Verification Summary {Brief summary of how the code matches the ADR decision} -The design decision has been recorded and the implementation follows it. Great work! ๐Ÿ—๏ธ +
``` **If there are DIVERGENCES**: @@ -430,21 +432,27 @@ Post a comment describing the discrepancies: ```markdown ### โš ๏ธ Design Decision Gate โ€” Implementation Diverges from ADR -The implementation in this PR has divergences from the linked Architecture Decision Record. +**ADR reviewed**: {ADR title and link} โ€” {N} divergence(s) found. -**ADR reviewed**: {ADR title and link} +> Either update the code to align with the ADR, or update the ADR to reflect the revised decision. -### Divergences Found +
+๐Ÿ” Divergences Found ({N} items) {List each divergence with specific file paths and explanation} -### What to do next +
+ +
+๐Ÿ“‹ What to do next Either: 1. **Update the code** to align with the ADR decision, OR 2. **Update the ADR** to reflect the revised decision (and document why the approach changed) The ADR and implementation must be in sync before this PR can merge. + +
``` ## Important: Always Call a Safe Output diff --git a/.github/workflows/mattpocock-skills-reviewer.md b/.github/workflows/mattpocock-skills-reviewer.md index 6e09d5ff0f5..ba0435a5a73 100644 --- a/.github/workflows/mattpocock-skills-reviewer.md +++ b/.github/workflows/mattpocock-skills-reviewer.md @@ -197,20 +197,21 @@ Focus areas by skill: ### Step 5: Post Inline Review Comments -For each issue found, create a review comment using `create-pull-request-review-comment`: +For each issue found, create a review comment using `create-pull-request-review-comment`. Apply **progressive disclosure**: lead with a brief visible statement, then collapse verbose analysis and code examples in a `
` block: ```json { "path": "path/to/file.ts", "line": 42, - "body": "**[/tdd]** This function is modified but the tests don't cover the edge case where `value` is `null`. Consider adding:\n\n```ts\nit('returns default when value is null', () => {\n expect(fn(null)).toBe(defaultValue);\n});\n```\n\nMissing edge case tests are a common source of regressions." + "body": "**[/tdd]** Missing edge case: `value` is `null` โ€” add a test to prevent this regression.\n\n
\n๐Ÿ’ก Suggested test\n\n```ts\nit('returns default when value is null', () => {\n expect(fn(null)).toBe(defaultValue);\n});\n```\n\nMissing edge case tests are a common source of regressions.\n\n
" } ``` Guidelines: - Prefix each comment with the skill name in brackets: `**[/diagnose]**`, `**[/tdd]**`, etc. +- Keep the **immediately visible text brief** (1โ€“2 sentences): state the issue and its impact +- Wrap code examples, detailed explanations, and multi-step suggestions in `
๐Ÿ’ก โ€ฆ` blocks - Be specific: file path, line number, exact issue -- Provide code examples when possible - Limit to the **10 most impactful** issues ### Step 6: Submit the Overall Review @@ -221,18 +222,17 @@ Submit a review using `submit_pull_request_review` with an overall summary: - **`REQUEST_CHANGES`** โ€” There are important issues that should be addressed - **`COMMENT`** โ€” Observations only; no blocking issues -The review body should include: -1. Which skill(s) were applied and why -2. A brief summary of the key themes found -3. Any positive highlights โ€” what was done well -4. Overall verdict +The review body should apply progressive disclosure โ€” keep the immediately visible portion brief and collapse details: **Example review body:** ```markdown ### Skills-Based Review ๐Ÿง  -Applied **`/tdd`** and **`/zoom-out`** based on the feature addition + refactor in this PR. +Applied **`/tdd`** and **`/zoom-out`** โ€” requesting changes on test coverage gaps. + +
+๐Ÿ“‹ Key Themes & Highlights #### Key Themes @@ -244,14 +244,12 @@ Applied **`/tdd`** and **`/zoom-out`** based on the feature addition + refactor - โœ… Clean separation of concerns in the new module - โœ… Good use of early returns throughout -#### Verdict - -Requesting changes on the test coverage gaps before merge. +
``` ### Step 7: Post a Summary Comment (optional) -If the review is complex or the overall findings are significant, post a single `add-comment` with a concise summary for the author, including links to relevant Matt Pocock skill documentation. +If the review is complex or the overall findings are significant, post a single `add-comment` with a concise summary for the author. Apply progressive disclosure: one-line outcome visible, details in `
` blocks. ## Scope Rules diff --git a/.github/workflows/pr-code-quality-reviewer.md b/.github/workflows/pr-code-quality-reviewer.md index ce6a0731e0c..628d90cb528 100644 --- a/.github/workflows/pr-code-quality-reviewer.md +++ b/.github/workflows/pr-code-quality-reviewer.md @@ -86,8 +86,26 @@ Review only the **changed lines**. Look for issues across two categories: For each significant issue, create a `create-pull-request-review-comment` with: - **File path and line number** of the issue -- **Clear description** of what is wrong and why it matters -- **Concrete suggestion** for how to fix it (include a code snippet when helpful) +- **Immediately visible text**: one brief sentence stating the issue and its impact +- **`
` block**: detailed explanation, code snippet fix, and rationale โ€” collapsed by default + +Example: +```markdown +**Potential nil dereference**: `user.Profile` is accessed without a nil check and will panic if the user has no profile. + +
+๐Ÿ’ก Suggested fix + +```go +if user.Profile == nil { + return ErrNoProfile +} +``` + +Callers that pass users without profiles (e.g., in tests) will hit this panic silently. + +
+``` **Prioritization** (use your 10-comment budget wisely): 1. Correctness and security-adjacent bugs (highest priority, up to 4 comments) @@ -129,8 +147,8 @@ Save your review summary to `/tmp/gh-aw/cache-memory/pr-${{ github.event.issue.n ### Review Formatting - Use h3 (###) or lower for all headers in your review output to maintain proper document hierarchy. -- Wrap long sections in `
Section Name` tags to improve readability and reduce scrolling. -- Structure: Brief summary (always visible) โ†’ Key findings (always visible) โ†’ Detailed analysis (in `
`) โ†’ Recommendations (always visible) +- Apply **progressive disclosure** in every comment: keep the immediately visible text to one brief sentence, then wrap detailed analysis and code suggestions in `
๐Ÿ’ก โ€ฆ` blocks. +- Overall review body structure: verdict + one-line summary (always visible) โ†’ themes/highlights (in `
`) ### Review Focus - **Focus on changed lines only** โ€” do not review the entire codebase diff --git a/.github/workflows/test-quality-sentinel.md b/.github/workflows/test-quality-sentinel.md index aada5a889fd..13dbdf01958 100644 --- a/.github/workflows/test-quality-sentinel.md +++ b/.github/workflows/test-quality-sentinel.md @@ -311,9 +311,12 @@ Post a comment to the pull request with the full analysis using `add-comment`. ```markdown ### ๐Ÿงช Test Quality Sentinel Report -### Test Quality Score: {SCORE}/100 +{SCORE_EMOJI} **Test Quality Score: {SCORE}/100 โ€” {SCORE_LABEL}** -{SCORE_EMOJI} **{SCORE_LABEL}** +> {One-sentence summary: e.g. "Analyzed {TOTAL} test(s): {DESIGN_COUNT} design, {IMPL_COUNT} implementation, {VIOLATIONS} guideline violation(s)."} + +
+๐Ÿ“Š Metrics & Test Classification ({TOTAL} tests analyzed) | Metric | Value | |--------|-------| @@ -325,8 +328,6 @@ Post a comment to the pull request with the full analysis using `add-comment`. | Test inflation detected | {YES/NO} | | ๐Ÿšจ Coding-guideline violations | {VIOLATIONS} (Go mock libraries / missing build tags / no assertion messages) | ---- - ### Test Classification Details {For each test, one row:} @@ -336,9 +337,20 @@ Post a comment to the pull request with the full analysis using `add-comment`. | `TestProcessData_MockCalls` | `pkg/processor/processor_test.go:42` | โš ๏ธ Implementation | No error case; only asserts mock was called | | `TestBarHappyPath` | `pkg/bar/bar_test.go:18` | โœ… Design | Verifies observable output | ---- +### Language Support + +Tests analyzed: +- ๐Ÿน Go (`*_test.go`): {GO_COUNT} tests โ€” unit (`//go:build !integration`) and integration (`//go:build integration`) +- ๐ŸŸจ JavaScript (`*.test.cjs`, `*.test.js`): {JS_COUNT} tests (vitest) + +{If other languages detected:} +> โ„น๏ธ Tests in other languages were found but are outside the current analysis scope (Go and JavaScript supported). + +
-### Flagged Tests โ€” Requires Review +{If flagged tests exist:} +
+โš ๏ธ Flagged Tests โ€” Requires Review ({FLAGGED_COUNT} issue(s)) {List each flagged test with AI-generated improvement suggestion:} @@ -353,28 +365,15 @@ Post a comment to the pull request with the full analysis using `add-comment`. {Repeat for each flagged test} ---- - -### Language Support - -Tests analyzed: -- ๐Ÿน Go (`*_test.go`): {GO_COUNT} tests โ€” unit (`//go:build !integration`) and integration (`//go:build integration`) -- ๐ŸŸจ JavaScript (`*.test.cjs`, `*.test.js`): {JS_COUNT} tests (vitest) - -{If other languages detected:} -> โ„น๏ธ Tests in other languages were found but are outside the current analysis scope (Go and JavaScript supported). - ---- +
### Verdict {If PASS:} -> โœ… **Check passed.** {IMPL_PCT}% of new tests are implementation tests (threshold: 30%). +> โœ… **Check passed.** {IMPL_PCT}% of new tests are implementation tests (threshold: 30%). {If FAIL:} -> โŒ **Check failed.** {IMPL_PCT}% of new tests are classified as low-value implementation tests (threshold: 30%). Please review the flagged tests above and improve their behavioral coverage before merging. - ---- +> โŒ **Check failed.** {IMPL_PCT}% of new tests are classified as low-value implementation tests (threshold: 30%). Expand the sections above to review flagged tests and improve behavioral coverage before merging.
๐Ÿ“– Understanding Test Classifications @@ -439,8 +438,13 @@ After posting the comment, submit a pull request review based on the verdict: ### Report Formatting - Use h3 (###) or lower for all headers in your report to maintain proper document hierarchy. -- Wrap long sections in `
Section Name` tags to improve readability and reduce scrolling. -- Structure: Brief summary (always visible) โ†’ Key metrics/score (always visible) โ†’ Detailed test classification (in `
` for tables with >10 rows) โ†’ Verdict and recommendations (always visible) +- Apply **progressive disclosure**: keep the immediately visible text as brief as possible; wrap all verbose sections in `
โ€ฆ` tags so readers can expand only what they need. +- Required structure: + - **Visible**: Score headline + one-sentence summary + - **`
`**: Metrics table + full test classification table + language support + - **`
`** (omit if empty): Flagged tests with per-test improvement suggestions + - **Visible**: Verdict (pass/fail, one sentence) + - **`
`**: "Understanding Test Classifications" reference ### Analysis Scope - **Focus only on new and changed tests** โ€” do not analyze unchanged test files @@ -462,7 +466,7 @@ After posting the comment, submit a pull request review based on the verdict: 1. In **Step 2**, collect the first 50 newly added test functions (not modified), then stop collecting. 2. In the PR comment (Step 7), add a note such as: "โš ๏ธ Sampling applied โ€” analyzed the first 50 of N test functions. Prioritized newly added tests." - Keep individual test analysis concise โ€” 2โ€“3 sentences per test in the flagged section. -- Use `
` tags for per-test tables with more than 10 rows. +- Always wrap the per-test classification table and flagged-test details in `
` tags regardless of row count โ€” keep every visible report section brief. ## agent: `go-test-analyzer` ---