Skip to content

fix: emit model aliases under apiProxy.models instead of top-level config.models#30367

Merged
pelikhan merged 1 commit intomainfrom
copilot/rebuild-pull-30315
May 5, 2026
Merged

fix: emit model aliases under apiProxy.models instead of top-level config.models#30367
pelikhan merged 1 commit intomainfrom
copilot/rebuild-pull-30315

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented May 5, 2026

AWF firewall v0.25.38 performs strict schema validation and rejects unknown top-level keys. Placing model aliases at config.models caused all smoke runs to fail at startup with config.models is not supported — 0 turns, 0 tokens per run.

Changes

  • pkg/workflow/schemas/awf-config.schema.json — Embed the AWF v0.25.38 config schema. The schema defines apiProxy.models as the correct location for model alias maps.
  • pkg/workflow/awf_config.go — Move Models from AWFConfigFile (top-level, was tagged json:"-") to AWFAPIProxyConfig.Models (nested under apiProxy, tagged json:"models,omitempty"). Add schema validation using the embedded JSON schema with sync.Once caching so every generated config is validated before use.
  • pkg/workflow/model_aliases_test.go — Update tests to expect models nested under apiProxy.models; add awfConfigModelsResult helper type for typed JSON assertion.
  • pkg/workflow/model_aliases_import_test.go — Update test to expect models under apiProxy.models.
  • Golden test fixtures — Regenerated to reflect the new apiProxy.models output.
  • Lock files — Recompiled to pick up the new AWF config shape.

Rebuild of #30315



✨ PR Review Safe Output Test - Run 25383635321

Warning

Firewall blocked 6 domains

The following domains were blocked by the firewall during workflow execution:

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

💥 [THE END] — Illustrated by Smoke Claude · ● 242.6K ·

…nfig.models

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/d9f00ef6-097c-4d7f-9735-f073aed282c3

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
@pelikhan pelikhan marked this pull request as ready for review May 5, 2026 14:49
Copilot AI review requested due to automatic review settings May 5, 2026 14:49
@pelikhan pelikhan added the smoke label May 5, 2026
Copilot AI requested a review from pelikhan May 5, 2026 14:53
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

This pull request fixes AWF config generation so model alias mappings are emitted under apiProxy.models (per AWF v0.25.38+ schema expectations) instead of as unsupported top-level keys, and adds local schema validation for generated AWF config JSON.

Changes:

  • Embedded the AWF config JSON schema and added schema validation for generated config JSON (cached via sync.Once).
  • Moved model alias emission to apiProxy.models and updated tests to assert the new shape.
  • Regenerated golden/lock fixtures to reflect the updated awf-config.json output.
Show a summary per file
File Description
pkg/workflow/awf_config.go Emits model aliases under apiProxy.models and validates generated config JSON against an embedded schema.
pkg/workflow/schemas/awf-config.schema.json Embedded AWF config schema used for local validation.
pkg/workflow/model_aliases_test.go Updates tests to assert apiProxy.models via typed JSON parsing.
pkg/workflow/model_aliases_import_test.go Updates import-related test expectations for apiProxy.models.
pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden Regenerated golden fixture with apiProxy.models in emitted config JSON.
pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden Regenerated golden fixture with apiProxy.models in emitted config JSON.
.github/workflows/ace-editor.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/agent-performance-analyzer.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/agent-persona-explorer.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/ai-moderator.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/archie.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/bot-detection.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/brave.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/code-simplifier.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/codex-github-remote-mcp-test.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/contribution-check.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/constraint-solving-potd.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/copilot-token-optimizer.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/craft.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/daily-architecture-diagram.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/daily-cli-tools-tester.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/daily-malicious-code-scan.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/daily-regulatory.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/daily-secrets-analysis.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/daily-semgrep-scan.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/daily-skill-optimizer.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/daily-team-status.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/dependabot-burner.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/deployment-incident-monitor.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/dev.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/dictation-prompt.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/example-permissions-warning.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/github-remote-mcp-auth-test.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/gpclean.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/issue-triage-agent.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/jsweep.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/mattpocock-skills-reviewer.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/metrics-collector.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/notion-issue-summary.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/pdf-summary.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/plan.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/poem-bot.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/pr-nitpick-reviewer.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/q.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/refiner.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/repo-audit-analyzer.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/repo-tree-map.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/security-compliance.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/security-review.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/smoke-ci.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/smoke-crush.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/smoke-gemini.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/smoke-opencode.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/super-linter.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/terminal-stylist.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/test-dispatcher.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/test-project-url-default.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/test-workflow.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/video-analyzer.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/workflow-generator.lock.yml Regenerated locked workflow output with apiProxy.models.
.github/workflows/workflow-health-manager.lock.yml Regenerated locked workflow output with apiProxy.models.

Copilot's findings

Tip

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

  • Files reviewed: 161/222 changed files
  • Comments generated: 3

Comment on lines +83 to +87
loader := jsonschema.NewCompiler()
schemaURL := fmt.Sprintf("https://github.com/github/gh-aw-firewall/releases/download/%s/awf-config.schema.json", constants.DefaultFirewallVersion)
if err := loader.AddResource(schemaURL, schemaDoc); err != nil {
awfConfigSchemaCompileError = fmt.Errorf("failed to add AWF config schema resource: %w", err)
return
Comment on lines +1 to +5
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/github/gh-aw-firewall/releases/download/v0.25.38/awf-config.schema.json",
"title": "AWF Configuration",
"description": "JSON/YAML configuration for awf CLI. CLI flags override config file values. See https://github.com/github/gh-aw-firewall for documentation.",
Comment on lines +137 to +138
// models must appear nested under apiProxy
assert.Contains(t, jsonStr, `"models"`, "models section must be present under apiProxy in AWF config JSON")
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Good catch! The assert.Contains check for "models" is indeed a weak assertion. Unmarshalling into a typed struct and asserting apiProxy.models is populated (while verifying no top-level models key exists) would make this test much more robust against regressions.

Warning

Firewall blocked 6 domains

The following domains were blocked by the firewall during workflow execution:

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

📰 BREAKING: Report filed by Smoke Copilot · ● 1.3M

@pelikhan pelikhan added smoke and removed smoke labels May 5, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

⚠️ Smoke Gemini failed. Gemini encountered unexpected challenges...

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

📰 BREAKING: Smoke Copilot is now investigating this pull request. Sources say the story is developing...

@github-actions github-actions Bot removed the smoke label May 5, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

🚀 Smoke Pi MISSION COMPLETE! Pi delivered. 🥧

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

✨ The prophecy is fulfilled... Smoke Codex has completed its mystical journey. The stars align. 🌟

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

🎬 THE ENDSmoke Claude MISSION: ACCOMPLISHED! The hero saves the day! ✨

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

Agent Container Tool Check

Tool Status Version
bash 5.2.21
sh available
git 2.53.0
jq 1.7
yq 4.52.5
curl 8.5.0
gh 2.89.0
node 22.22.2
python3 3.10.16 (PyPy 7.3.19)
go 1.24.13
java 10.0.201
dotnet NOT FOUND

Result: 11/12 tools available ⚠️
Overall Status: FAIL — dotnet is missing

🔧 Tool validation by Agent Container Smoke Test · ● 131.5K ·

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

🧪 Test Quality Sentinel Report

Test Quality Score: 100/100

Excellent test quality

Metric Value
New/modified tests analyzed 7
✅ Design tests (behavioral contracts) 7 (100%)
⚠️ Implementation tests (low value) 0 (0%)
Tests with error/edge cases 7 (100%)
Duplicate test clusters 0
Test inflation detected No
🚨 Coding-guideline violations None

Test Classification Details

View all 7 tests
Test File Classification Notes
TestModelAliasesFromImportedWorkflow model_aliases_import_test.go ✅ Design End-to-end compile; verifies import pipeline succeeds
TestModelAliasesImportMergeOrder model_aliases_import_test.go ✅ Design Verifies merge priority; main wins over import, import-only alias visible, builtins present
TestModelAliasesAWFConfigJSON model_aliases_import_test.go ✅ Design Verifies JSON output has apiProxy.models; checks ModelMappings values
TestBuiltinModelAliases model_aliases_test.go ✅ Design Verifies builtin families exist, copilot patterns, meta-aliases, and immutability (fresh copy)
TestBuildAWFConfigJSON_ModelsSection model_aliases_test.go ✅ Design 3 subtests: builtin inclusion, frontmatter override round-trip, nil suppresses section
TestMergeImportedModelAliases model_aliases_test.go ✅ Design 6 subtests covering all priority-order invariants (builtins > imports > main)
TestFrontmatterModelsField model_aliases_test.go ✅ Design Verifies parsing of models frontmatter field; optional-field nil case

Flagged Tests — Requires Review

No tests flagged. All tests enforce behavioral contracts with adequate edge-case coverage.


Language Support

Tests analyzed:

  • 🐹 Go (*_test.go): 7 tests — unit (//go:build !integration)

Test Inflation Check

File Lines Added (test) Production File Lines Added (prod) Ratio
model_aliases_import_test.go 4 awf_config.go 88 0.05:1 ✅
model_aliases_test.go 26 awf_config.go 88 0.30:1 ✅

No inflation detected (threshold: 2:1).


Verdict

Check passed. 0% of new tests are implementation tests (threshold: 30%). All 7 modified tests verify observable behavioral contracts with complete assertion messages, no mock libraries, required build tags, and comprehensive edge-case coverage including nil/empty inputs, priority-order conflicts, and immutability guarantees.


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

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

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: 100/100. Test quality is excellent — 0% of new tests are implementation tests (threshold: 30%). All 7 modified tests enforce behavioral contracts with comprehensive edge-case coverage.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

Smoke Codex: FAIL
PRs: #30352 fix: allow bot-posted-menu / user-checks-box pattern to bypass confused-deputy check; #30366 Move dictation prompt to root DICTATION.md
✅ GitHub ✅ Serena ✅ Playwright ❌ WebFetch ✅ File ✅ Bash ✅ Build ❌ CommentMemory ✅ CacheMemory

Warning

Firewall blocked 6 domains

The following domains were blocked by the firewall during workflow execution:

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

🔮 The oracle has spoken through Smoke Codex ·

@pelikhan pelikhan merged commit 0c5f632 into main May 5, 2026
254 of 272 checks passed
@pelikhan pelikhan deleted the copilot/rebuild-pull-30315 branch May 5, 2026 15:57
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

👋 The smoke test agent was here! 🤖✨

Just passing through to confirm the agentic plumbing is working — models talking to APIs, APIs writing to GitHub, tests passing in the matrix. If you can read this, it means everything worked! 🎉

Warning

Firewall blocked 6 domains

The following domains were blocked by the firewall during workflow execution:

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

📰 BREAKING: Report filed by Smoke Copilot · ● 1.3M ·

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

Smoke Test Run §25383635363

PR: fix: emit model aliases under apiProxy.models instead of top-level config.models
Author: @app/copilot-swe-agent | Assignees: @pelikhan, @Copilot

Test Status
GitHub MCP
MCP Scripts GH CLI
Serena CLI
Playwright CLI
Web Fetch
File Writing
Bash Tool
Discussion Interaction
Build gh-aw
Upload artifact
Discussion Creation
Workflow Dispatch
PR Review
Comment Memory ⚠️ (no dir)
Sub-Agent (file-summarizer)

Overall: ✅ PASS

Warning

Firewall blocked 6 domains

The following domains were blocked by the firewall during workflow execution:

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

📰 BREAKING: Report filed by Smoke Copilot · ● 1.3M ·

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

💨 Smoke test §25383635321 — Claude engine

Core tests #1–12: ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
PR review tests #13–19: ✅ ✅ ✅ ✅ ✅ ✅ ⚠️(#19 skipped)

Status: PARTIAL (all non-skipped tests passed)

Warning

Firewall blocked 6 domains

The following domains were blocked by the firewall during workflow execution:

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

💥 [THE END] — Illustrated by Smoke Claude · ● 242.6K ·

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.

Smoke test agent reviewed PR #30367. The fix correctly moves model aliases under apiProxy.models per AWF schema. Two minor observations: (1) schema compilation is pinned to DefaultFirewallVersion rather than the per-workflow version; (2) the embedded schema $id is v0.25.38 but the default is v0.25.39. Both are minor but could cause version drift in schema validation.

Warning

Firewall blocked 6 domains

The following domains were blocked by the firewall during workflow execution:

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

📰 BREAKING: Report filed by Smoke Copilot · ● 1.3M

@@ -0,0 +1,325 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/github/gh-aw-firewall/releases/download/v0.25.38/awf-config.schema.json",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The embedded schema $id references v0.25.38 while constants.DefaultFirewallVersion is v0.25.39. This version mismatch may cause confusing validation errors. Update the embedded schema to match the current default firewall version.

schemaURL := fmt.Sprintf("https://github.com/github/gh-aw-firewall/releases/download/%s/awf-config.schema.json", constants.DefaultFirewallVersion)
if err := loader.AddResource(schemaURL, schemaDoc); err != nil {
awfConfigSchemaCompileError = fmt.Errorf("failed to add AWF config schema resource: %w", err)
return
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The schema compilation uses constants.DefaultFirewallVersion as the resource URL, but workflows may specify different firewall versions. This means validation always runs against the default schema rather than the configured version. Consider using buildAWFConfigSchemaURL to derive the schema URL from the actual firewall version in use.

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.

💥 Automated smoke test review - all systems nominal! Run §25383635321

Warning

Firewall blocked 6 domains

The following domains were blocked by the firewall during workflow execution:

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

💥 [THE END] — Illustrated by Smoke Claude · ● 242.6K

export GH_AW_NODE_BIN
(umask 177 && touch /tmp/gh-aw/agent-stdio.log)
printf '%s\n' '{"$schema":"https://github.com/github/gh-aw-firewall/releases/download/v0.25.39/awf-config.schema.json","network":{"allowDomains":["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},"container":{"imageTag":"0.25.39"}}' > "${RUNNER_TEMP}/gh-aw/awf-config.json" && cp "${RUNNER_TEMP}/gh-aw/awf-config.json" /tmp/gh-aw/awf-config.json
printf '%s\n' '{"$schema":"https://github.com/github/gh-aw-firewall/releases/download/v0.25.39/awf-config.schema.json","network":{"allowDomains":["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,"models":{"auto":["large"],"deep-research":["copilot/deep-research*","google/deep-research*"],"gemini-flash":["copilot/gemini-*flash*","google/gemini-*flash*"],"gemini-pro":["copilot/gemini-*pro*","google/gemini-*pro*"],"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"],"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*"]}},"container":{"imageTag":"0.25.39"}}' > "${RUNNER_TEMP}/gh-aw/awf-config.json" && cp "${RUNNER_TEMP}/gh-aw/awf-config.json" /tmp/gh-aw/awf-config.json
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ Smoke test review comment #1 — The apiProxy.models aliases are now correctly emitted under apiProxy.models rather than top-level config.models. This aligns with the expected schema structure for model routing.

export GH_AW_NODE_BIN
(umask 177 && touch /tmp/gh-aw/agent-stdio.log)
printf '%s\n' '{"$schema":"https://github.com/github/gh-aw-firewall/releases/download/v0.25.39/awf-config.schema.json","network":{"allowDomains":["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},"container":{"imageTag":"0.25.39"}}' > "${RUNNER_TEMP}/gh-aw/awf-config.json" && cp "${RUNNER_TEMP}/gh-aw/awf-config.json" /tmp/gh-aw/awf-config.json
printf '%s\n' '{"$schema":"https://github.com/github/gh-aw-firewall/releases/download/v0.25.39/awf-config.schema.json","network":{"allowDomains":["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,"models":{"auto":["large"],"deep-research":["copilot/deep-research*","google/deep-research*"],"gemini-flash":["copilot/gemini-*flash*","google/gemini-*flash*"],"gemini-pro":["copilot/gemini-*pro*","google/gemini-*pro*"],"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"],"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*"]}},"container":{"imageTag":"0.25.39"}}' > "${RUNNER_TEMP}/gh-aw/awf-config.json" && cp "${RUNNER_TEMP}/gh-aw/awf-config.json" /tmp/gh-aw/awf-config.json
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ Smoke test review comment #2 — Model alias configuration consistently applied across all lock files. Good pattern to have a single recompile surface so all workflows stay in sync.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

📰 VERDICT: Smoke Copilot has concluded. All systems operational. This is a developing story. 🎤

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants