Skip to content

fix: preserve engine.max-turns through JSON roundtrip when sourced from shared import#26122

Merged
pelikhan merged 4 commits intomainfrom
copilot/fix-max-turns-flag-issue
Apr 14, 2026
Merged

fix: preserve engine.max-turns through JSON roundtrip when sourced from shared import#26122
pelikhan merged 4 commits intomainfrom
copilot/fix-max-turns-flag-issue

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 14, 2026

When engine config is defined in a shared import, it passes through a JSON serialization cycle before being parsed. Go's json.Unmarshal converts JSON numbers to float64, but ExtractEngineConfig only handled int, uint64, and string for max-turns and max-continuations — silently dropping the values.

Changes

  • pkg/workflow/engine.go: Add float64 branch in ExtractEngineConfig for both max-turns and max-continuations. This covers the YAML intjson.Marshaljson.Unmarshalfloat64 path that all shared-import engine configs travel.

  • pkg/workflow/engine_config_test.go: Unit test with float64(100) as max-turns to directly cover the JSON roundtrip case.

  • pkg/workflow/max_turns_test.go: Integration test (TestMaxTurnsFromSharedImport) that compiles a workflow importing engine config with max-turns: 100 from a shared file and asserts --max-turns 100 appears in the lock file output.

Example

# shared/common.md
---
engine:
  id: claude
  max-turns: 100   # was silently dropped after JSON roundtrip
---

# my-workflow.md
---
imports:
  - shared/common.md
---

Before: compiled invocation omitted --max-turns.
After: compiled invocation correctly includes --max-turns 100.

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 GO111MODULE .cfg infocmp -1 xterm-color go /usr/bin/git 0220-30423/test-git GO111MODULE 64/pkg/tool/linu--show-toplevel 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 /opt/hostedtoolcrev-parse /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel git /home/REDACTED/go/--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 bCRA/1urW5vlaXznGOINSECURE GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE 793369/b397/impoGO111MODULE -c che/go-build/12/GOINSECURE GOPROXY 64/bin/go GOSUMDB GOWORK 64/bin/go /opt/hostedtoolc-test.v=true (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 --show-toplevel x_amd64/vet /usr/bin/gh -json GO111MODULE 64/bin/go gh run list --json /usr/bin/git --workflow nonexistent-workrev-parse --limit git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq .object.sha --show-toplevel git /usr/bin/git --show-toplevel /opt/hostedtoolcrev-parse /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel git /usr/bin/git 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 /tmp/gh-aw-test-runs/20260414-010220-30423/test-2322446787/.github/workflows remote /usr/bin/git plate-expressiongit GOPROXY 64/bin/go git rev-�� /v1.0.0 sh /usr/bin/git "prettier" --chegit /opt/hostedtoolcrev-parse 64/bin/go git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq .object.sha --show-toplevel git /usr/bin/git --show-toplevel go /usr/bin/git git rev-�� --show-toplevel git .cfg --show-toplevel go /usr/bin/git 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 75/001/test-complex-frontmatter-with-tools.md GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go env (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq /usr/bin/git edOutput37749281git GO111MODULE x_amd64/vet git rev-�� --show-toplevel x_amd64/vet /usr/bin/git ntdrain.test GO111MODULE ortcfg.link git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha --show-toplevel go /usr/bin/git OKEN }} GO111MODULE /opt/hostedtoolc--show-toplevel git rev-�� --show-toplevel /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linu/tmp/go-build2484609032/b455/_testmain.go /usr/bin/git runs/20260414-01git GOPROXY 1/x64/bin/node git (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v8
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha --show-toplevel 64/pkg/tool/linux_amd64/link /usr/bin/git ger.test GO111MODULE ortcfg.link git rev-�� --show-toplevel PfVSWh7piXGOU8txD7/90LsJdncQeTVLtest@example.com /usr/bin/git 0220-30423/test-git GO111MODULE g_.a git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.pgit git 1/x64/bin/node --show-toplevel infocmp /usr/bin/git 1/x64/bin/node api /repos/actions/upload-artifact/git/ref/tags/v7 --jq /usr/bin/git --show-toplevel git /usr/bin/git 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 793369/b424/_pkgGOINSECURE GO111MODULE 64/bin/go GOINSECURE b/gh-aw/pkg/typeenv GOMODCACHE go env H8pU/eNnoa-rIndzGOINSECURE GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE 793369/b424/impoGOPROXY (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq .object.sha "prettier" --cheGOINSECURE GOPROXY 64/bin/go GOSUMDB GOWORK 64/bin/go /opt/hostedtoolc-trimpath -V=f�� -nilfunc /opt/hostedtoolcgithub.com/github/gh-aw/pkg/envutil 64/bin/go -d -buildtags 64/bin/go go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq .object.sha che/go-build/52/GOINSECURE GOPROXY 64/bin/go GOSUMDB GOWORK 64/bin/go /opt/hostedtoolcGOPROXY -o /tmp/go-build964GOSUMDB -trimpath 64/bin/go -p github.com/githuworkflow -lang=go1.25 go (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 om/owner/repo.git origin /usr/bin/git lic_561994603/00git GO111MODULE x_amd64/vet git rev-�� --show-toplevel x_amd64/vet /usr/bin/git -json GO111MODULE 64/bin/go git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq .object.sha sistency_GoAndJavaScript1206435688/001/test-inlined-imports-enabled-with-body-content.md git 1/x64/bin/node --show-toplevel go /usr/bin/git 1/x64/bin/node rev-�� --show-toplevel git /usr/local/bin/bash --show-toplevel x_amd64/vet /usr/bin/git bash (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 v1.0.0 remote.origin.url /usr/bin/git -json GO111MODULE nch,headSha,disp--show-toplevel git rev-�� --show-toplevel x_amd64/compile /usr/bin/git -json GO111MODULE 64/bin/go git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq .object.sha ithub/workflows/archie.md git /usr/bin/git --show-toplevel ufYLUqbTpY992CEArev-parse /usr/bin/infocmp--show-toplevel git rev-�� --show-toplevel infocmp /home/REDACTED/.dotnet/tools/bash /ref/tags/v9 x_amd64/link /usr/bin/git bash (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 -aw/git/ref/tags/v1.2.3 -trimpath ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet -p main -lang=go1.25 ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet add . -dwarf=false /usr/bin/git go1.25.8 -c=4 -nolocalimports git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq .object.sha HEAD git /usr/bin/git --show-toplevel go /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel 64/pkg/tool/linurev-parse /usr/bin/git git (http block)
  • https://api.github.com/repos/actions/upload-artifact/git/ref/tags/v7
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v7 --jq .object.sha -json GO111MODULE /opt/hostedtoolcache/go/1.25.8/x-nolocalimports GOINSECURE GOMOD GOMODCACHE go env 4|max-turns GO111MODULE 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/actions/upload-artifact/git/ref/tags/v7 --jq .object.sha ExpressionCompiledOutput3774928107/001 GO111MODULE ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet env -json GO111MODULE 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/actions/upload-artifact/git/ref/tags/v7 --jq .object.sha 0220-30423/test-1180004739 GO111MODULE ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet env -json GO111MODULE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile (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 --show-toplevel go /usr/bin/git ub/workflows GO111MODULE 64/bin/go git rev-�� --git-dir go /usr/bin/git -json 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 --show-toplevel git /usr/bin/git --show-toplevel go /usr/bin/git git rev-�� --show-toplevel git /home/REDACTED/go/bin/bash --show-toplevel bash /usr/bin/git bash (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 sistency_GoAndJavaScript3715838475/001/test-complex-frontmatter-with-tools.md -test.v=true /usr/bin/gh -test.timeout=10git -test.run=^Test -test.short=true--show-toplevel gh api /orgs/test-owner/actions/secrets --jq /usr/bin/git bCRA/1urW5vlaXzngit GO111MODULE 64/bin/go git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq .object.sha --show-toplevel git /usr/bin/git --show-toplevel go /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel 64/pkg/tool/linurev-parse /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.2.3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq .object.sha 4609032/b435/stringutil.test -test.v=true 4609032/b435/importcfg.link -test.timeout=10git -test.run=^Test -test.short=true--show-toplevel VxkL1CTZHoOnk/hV8dBAPheVNXq858eZBB/DhPXKBUjWYAJ47sC7-S6/tVHQwa_V-tests -1 ErrorFormatting82023473/001 go 4609032/b435/_pkg_.a 9uR7/akUWNAkePwagit 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 --show-toplevel gh /usr/bin/git pload-artifact/ggit --jq (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 GO111MODULE 1/x64/bin/bash GOINSECURE GOMOD GOMODCACHE go env 1180004739 GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh run download 1 --dir test-logs/run-1 GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env -json GO111MODULE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile (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 GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env ithub/workflows GO111MODULE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh run download 12345 --dir test-logs/run-12345 GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (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 GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env ithub/workflows o 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linuremote.origin.url (http block)
    • Triggering command: /usr/bin/gh gh run download 12346 --dir test-logs/run-12346 GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (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 GO111MODULE 64/bin/bash GOINSECURE GOMOD GOMODCACHE go env 1180004739 GO111MODULE 64/pkg/tool/linux_amd64/link GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linuremote.origin.url (http block)
    • Triggering command: /usr/bin/gh gh run download 2 --dir test-logs/run-2 GO111MODULE n-dir/bash GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE 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 GO111MODULE de/node/bin/bash-importcfg GOINSECURE GOMOD GOMODCACHE go env 1180004739 GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh run download 3 --dir test-logs/run-3 GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env -json GO111MODULE x_amd64/link GOINSECURE GOMOD GOMODCACHE x_amd64/link (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 GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json go ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh run download 4 --dir test-logs/run-4 GO111MODULE 64/pkg/tool/linux_amd64/link GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linutest@example.com env 2624545194 GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (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 GO111MODULE ache/go/1.25.8/x-nolocalimports GOINSECURE GOMOD GOMODCACHE ylQP4Z8/vCNYLdc7D8RXanEmFBss env -json GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh run download 5 --dir test-logs/run-5 GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linuTest User env 2624545194/.github/workflows GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/actions/workflows
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path -c=4 -nolocalimports -importcfg /tmp/go-build2484609032/b411/importcfg -pack /home/REDACTED/work/gh-aw/gh-aw/pkg/fileutil/fileutil.go /home/REDACTED/work/gh-aw/gh-aw/pkg/fileutil/tar.go -c k/gh-aw/gh-aw/pkGOINSECURE k/gh-aw/gh-aw/pkGOMOD 64/bin/go GOSUMDB GOWORK 64/bin/go /opt/hostedtoolc-trimpath (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 n_sha_checker_in-c 64/bin/go 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 6 GOMOD GOMODCACHE go env -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_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 --show-toplevel 64/pkg/tool/linux_amd64/asm /usr/bin/git -json GO111MODULE ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel go /usr/bin/git -json GO111MODULE ache/go/1.25.8/xgit-upload-pack 'origin' git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq .object.sha /tmp/TestHashConsistency_WithImports2612496261/001/main.md git /usr/bin/git ch ps iginal git rev-�� --show-toplevel iginal 1/x64/bin/node --show-toplevel git /usr/bin/git 1/x64/bin/node (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 edOutput3774928107/001 GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet env ntdrain.test GO111MODULE ortcfg.link GOINSECURE GOMOD GOMODCACHE W9FT-FP7_6Kws9t3pd/XJ3yBE12j21iuxq3TT-m/tggwGl4X-goversion (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq .object.sha --show-toplevel /usr/lib/git-core/git /usr/bin/git --all-progress-igit --revs /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git /tmp/TestGuardPogit remote /usr/bin/git git (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 log.showsignatur-p log 64/bin/go -d -tests 64/bin/go go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v2.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq .object.sha -x c 64/bin/go - -importcfg 64/bin/go go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq .object.sha /tmp/go-build964-p -trimpath 64/bin/go -p main -lang=go1.25 go env 227130/001 227130/002/work 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq .object.sha /tmp/go-build964GOSUMDB -trimpath 64/bin/go -p github.com/githuworkflow -lang=go1.25 go 2271�� -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (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 -nilfunc git 64/bin/go --show-toplevel -tests 64/bin/go go env -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 edOutput3774928107/001 GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq .object.sha --show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet /usr/bin/git run --auto /usr/bin/git git rev-�� --show-toplevel git ache/node/24.14.1/x64/bin/npm /tmp/TestGuardPogit remote 4609032/b442/vet--show-toplevel ache/node/24.14.1/x64/bin/npm (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 GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile env g_.a GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE 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 64/bin/go GOINSECURE GOMOD GOMODCACHE 793369/b402/impoGO111MODULE -c k/gh-aw/gh-aw/pkGOINSECURE k/gh-aw/gh-aw/pkGOMOD 64/bin/go GOSUMDB GOWORK 64/bin/go /opt/hostedtoolcGOPROXY (http block)
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo -nolocalimports -importcfg /tmp/go-build2484609032/b415/importcfg -pack /tmp/go-build2484609032/b415/_testmain.go -c k/gh-aw/gh-aw/pkGOINSECURE k/gh-aw/gh-aw/pkGOMOD 64/bin/go GOSUMDB GOWORK 64/bin/go /opt/hostedtoolctest@example.com (http block)
  • https://api.github.com/repos/owner/repo/contents/file.md
    • Triggering command: /tmp/go-build2484609032/b397/cli.test /tmp/go-build2484609032/b397/cli.test -test.testlogfile=/tmp/go-build2484609032/b397/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true GOINSECURE GOMOD GOMODCACHE go env 9uR7/akUWNAkePwaGOINSECURE GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE 793369/b388/impoGO111MODULE (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 -WOK/DhNdPf8zPyRGOINSECURE GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE 793369/b378/impoGO111MODULE -c k/gh-aw/gh-aw/cmGOINSECURE k/gh-aw/gh-aw/cmGOMOD 64/bin/go GOSUMDB GOWORK 64/bin/go /opt/hostedtoolc-test.v=true (http block)

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

… loaded via shared import

When engine config (including max-turns) is sourced from a shared import,
it goes through a JSON roundtrip: YAML int -> json.Marshal -> json.Unmarshal
-> float64. ExtractEngineConfig only handled int, uint64, and string types
for max-turns and max-continuations, silently dropping the value when it
arrived as float64 from the JSON deserialization.

Add float64 type handling for max-turns and max-continuations in
ExtractEngineConfig, with a unit test using float64(100) to simulate
the JSON roundtrip scenario, and an integration test that verifies
--max-turns appears in the compiled output when set via shared import.

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/a2e1bda8-a668-47d0-bf80-b5b2f373927d

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix max-turns flag dropped in engine configuration fix: preserve engine.max-turns through JSON roundtrip when sourced from shared import Apr 14, 2026
Copilot AI requested a review from pelikhan April 14, 2026 01:07
}

// Extract optional 'max-turns' field
if maxTurns, hasMaxTurns := engineObj["max-turns"]; hasMaxTurns {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

@copilot use convert... helper to read value

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done in d36e3e0. Both max-turns and max-continuations now use typeutil.ParseIntValue which handles int, int64, uint64, and float64 in one call, with a string fallback for quoted YAML values.

}

// Extract optional 'max-continuations' field
if maxCont, hasMaxCont := engineObj["max-continuations"]; hasMaxCont {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

@copilot use convert... helper to read value

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done in d36e3e0 — same change covers both fields.

…ons extraction

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/11f9df38-a6ab-4951-8aea-644807d527c5

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

Copilot AI commented Apr 14, 2026

Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details.

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 ame x_amd64/vet git rev-�� --show-toplevel x_amd64/vet /usr/bin/git get --local x_amd64/vet git (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 -bool -buildtags /usr/bin/git -errorsas -ifaceassert -nilfunc git rev-�� --show-toplevel -tests /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 g_.a 0146207/b039/vet.cfg .cfg (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 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha --show-toplevel k/_temp/ghcca-no/tmp/go-build1130146207/b195/vet.cfg /usr/bin/git k/_temp/copilot-git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha --show-toplevel 64/pkg/tool/linux_amd64/vet /usr/bin/git rite &#39;**/*.cjs&#39; git user.email 64/pkg/tool/linu--show-toplevel git rev-�� --show-toplevel 64/pkg/tool/linux_amd64/vet /usr/bin/git te &#39;scripts/**/*git .cfg 64/pkg/tool/linu--show-toplevel git (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v8
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha (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 -unreachable=false /tmp/go-build1130146207/b146/vet.cfg /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet &amp;1 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq .object.sha -bool -buildtags /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet -errorsas -ifaceassert -nilfunc /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet -ato�� -bool -buildtags /usr/bin/tail -errorsas -ifaceassert -nilfunc tail (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq .object.sha -bool -buildtags /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet -errorsas -ifaceassert -nilfunc /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet -ato�� -bool -buildtags /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/cgo -errorsas -ifaceassert -nilfunc /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/cgo (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 it/ref/tags/v7 -buildtags ache/node/24.14.1/x64/bin/node -errorsas -ifaceassert -nilfunc /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet t-39�� bility_SameInputSameOutput2441149049/001/stability-test.md -buildtags /usr/bin/bash -errorsas -ifaceassert -nilfunc bash (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 -unreachable=false /tmp/go-build1130146207/b080/vet.cfg /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet ath ../../../.prgit (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 te &#39;scripts/**/*.js&#39; --ignore-path .prettierigno-errorsas .cfg 64/pkg/tool/linux_amd64/vet (http block)
  • https://api.github.com/repos/actions/upload-artifact/git/ref/tags/v7
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v7 --jq .object.sha (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v7 --jq .object.sha &#39;**/*.ts&#39; &#39;**/*.json&#39; --ignore-p-errorsas (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v7 --jq .object.sha --get-regexp --local x_amd64/vet (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 -bool -buildtags /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet -errorsas -ifaceassert -nilfunc /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet -ato�� -bool -buildtags /opt/hostedtoolcache/node/24.14.1/x64/bin/bash -errorsas -ifaceassert -nilfunc bash (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 --abbrev-ref .cfg 64/pkg/tool/linux_amd64/vet (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 or.md .cfg 64/pkg/tool/linux_amd64/vet (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 /tmp/TestHashStability_SameInputSameOutput2441149049/001/stability-test.md (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 (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 (http block)

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

Copilot AI requested a review from pelikhan April 14, 2026 01:22
@github-actions
Copy link
Copy Markdown
Contributor

Hey @Copilot 🎉 — great catch on the JSON roundtrip type coercion bug! Fixing the silent float64 drop in ExtractEngineConfig for shared-import engine configs is exactly the kind of precise, targeted fix this codebase needs.

The PR is well-structured: the root cause is clearly explained in the body, the fix is minimal and surgical (6 lines in engine.go), and both a unit test (engine_config_test.go) and a full integration test (max_turns_test.go) are included to prevent regressions. This looks ready for maintainer review. ✅

Generated by Contribution Check · ● 1.1M ·

@github-actions github-actions bot added the lgtm label Apr 14, 2026
@pelikhan pelikhan marked this pull request as ready for review April 14, 2026 01:31
Copilot AI review requested due to automatic review settings April 14, 2026 01:31
@pelikhan
Copy link
Copy Markdown
Collaborator

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

Fixes loss of engine.max-turns / engine.max-continuations when engine config is sourced via shared imports and passes through a JSON marshal/unmarshal roundtrip (where numbers become float64).

Changes:

  • Update ExtractEngineConfig to parse numeric config values that arrive as float64 after JSON roundtrip.
  • Add a unit test covering max-turns provided as float64.
  • Add an integration test ensuring max-turns from a shared import appears in the compiled lock file output.
Show a summary per file
File Description
pkg/workflow/engine.go Switches max-turns/max-continuations extraction to use typeutil.ParseIntValue, enabling float64 numeric handling.
pkg/workflow/engine_config_test.go Adds unit coverage for max-turns arriving as float64(100).
pkg/workflow/max_turns_test.go Adds integration coverage verifying max-turns from shared import propagates to --max-turns and GH_AW_MAX_TURNS in the lock output.

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/workflow/engine.go:206

  • typeutil.ParseIntValue converts float64 to int without checking for range or ensuring the value is an integer (it truncates and returns ok=true). Since max-turns / max-continuations are defined as integers in the workflow schema, this can produce incorrect values (including implementation-dependent overflow) if a large or non-integer JSON number makes it here. Consider handling the float64 case locally by accepting only whole numbers within math.MaxInt (otherwise ignore or surface a validation error) instead of blindly converting via ParseIntValue.
			// Extract optional 'max-turns' field
			if maxTurns, hasMaxTurns := engineObj["max-turns"]; hasMaxTurns {
				if val, ok := typeutil.ParseIntValue(maxTurns); ok {
					config.MaxTurns = strconv.Itoa(val)
				} else if maxTurnsStr, ok := maxTurns.(string); ok {
					config.MaxTurns = maxTurnsStr
				}
			}

			// Extract optional 'max-continuations' field
			if maxCont, hasMaxCont := engineObj["max-continuations"]; hasMaxCont {
				if val, ok := typeutil.ParseIntValue(maxCont); ok {
					config.MaxContinuations = val
				} else if maxContStr, ok := maxCont.(string); ok {
					if parsed, err := strconv.Atoi(maxContStr); err == nil {
						config.MaxContinuations = parsed
					}
				}
			}
  • Files reviewed: 3/3 changed files
  • Comments generated: 1

expectedEngineSetting: "claude",
expectedConfig: &EngineConfig{ID: "claude", MaxTurns: "100"},
},
{
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

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

This adds coverage for max-turns as float64, but the same JSON roundtrip issue applies to max-continuations (now also parsed via typeutil.ParseIntValue). Please add a companion test case that sets "max-continuations": float64(...) and asserts EngineConfig.MaxContinuations is populated, so the new branch stays protected against regressions.

Suggested change
{
{
// float64 is what json.Unmarshal produces for numbers when deserializing engine
// config JSON from shared imports (JSON roundtrip: YAML int -> JSON -> Go float64)
name: "object format - with max-continuations as float64 (JSON roundtrip from shared import)",
frontmatter: map[string]any{
"engine": map[string]any{
"id": "claude",
"max-continuations": float64(7),
},
},
expectedEngineSetting: "claude",
expectedConfig: &EngineConfig{ID: "claude", MaxContinuations: "7"},
},
{

Copilot uses AI. Check for mistakes.
@github-actions
Copy link
Copy Markdown
Contributor

🧪 Test Quality Sentinel Report

Test Quality Score: 80/100

Excellent test quality

Metric Value
New/modified tests analyzed 2
✅ Design tests (behavioral contracts) 2 (100%)
⚠️ Implementation tests (low value) 0 (0%)
Tests with error/edge cases 2 (100%)
Duplicate test clusters 0
Test inflation detected Yes (contextual — see note below)
🚨 Coding-guideline violations 0

Test Classification Details

📋 Test table (2 tests)
Test File Classification Issues Detected
TestExtractEngineConfig — row: "object format - with max-turns as float64 (JSON roundtrip from shared import)" pkg/workflow/engine_config_test.go:141 ✅ Design None
TestMaxTurnsFromSharedImport pkg/workflow/max_turns_test.go:257 ✅ Design None

Test Analysis

TestExtractEngineConfig — new table row (pkg/workflow/engine_config_test.go:141)

Classification: Design test (behavioral contract)
Build tag: //go:build !integration
What invariant does it enforce? When json.Unmarshal deserializes a YAML integer through a JSON roundtrip (shared imports serialize to JSON), the resulting float64 value for max-turns must be correctly extracted and converted to its string representation in EngineConfig.
Value if deleted: A future refactor that removes float64 handling in extractEngineConfig() would silently drop max-turns again without this test catching it.
Notes: Well-placed within the existing table-driven TestExtractEngineConfig suite. The test name is descriptive and explains the JSON-roundtrip context. ✅


TestMaxTurnsFromSharedImport (pkg/workflow/max_turns_test.go:257)

Classification: Design test (end-to-end behavioral contract)
Build tag: //go:build integration
What invariant does it enforce? When max-turns is defined in a shared import (not inline), the compiled lock file must contain both the CLI flag --max-turns 100 and the environment variable GH_AW_MAX_TURNS: 100. This is the exact contract a user of the import feature relies on.
Value if deleted: The precise bug scenario (shared import → JSON roundtrip → float64 → silent drop) would be undetectable through unit tests alone. This end-to-end test provides a regression guard for the full compilation pipeline.
Notes: Uses t.Fatal for setup (correct) and t.Errorf with full lock file content for debugging context (excellent). ✅


Scoring Breakdown

Component Weight Raw Score
Behavioral coverage 40 pts 2/2 = 100% 40
Error/edge case coverage 30 pts 2/2 = 100% 30
Low duplication 20 pts 0 clusters 20
Proportional growth 10 pts >2:1 ratio detected 0

⚠️ Test inflation note: max_turns_test.go adds 75 lines with no corresponding max_turns.go production file (the fix lives in engine.go which added 5 lines). The 2:1 threshold is technically exceeded. However, this is the expected pattern for a targeted bug-fix: the production change is minimal (one type-coercion branch), and comprehensive end-to-end test coverage is the right response. The 10-point penalty is mechanical.


Language Support

Tests analyzed:

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

Verdict

Check passed. 0% of new tests are implementation tests (threshold: 30%). Both tests are design tests enforcing real behavioral contracts, with build tags correctly applied and no mock library usage. The test suite provides both a unit-level regression guard (float64 type handling) and an end-to-end integration guard (full shared-import compilation pipeline).


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

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

Copy link
Copy Markdown
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

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

✅ Test Quality Sentinel: 80/100. Test quality is excellent — 0% of new tests are implementation tests (threshold: 30%). Both added tests are design tests enforcing behavioral contracts: a unit-level table row for float64 type handling and an end-to-end integration test for the full shared-import compilation pipeline.

Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 14, 2026

@copilot fix https://github.com/github/gh-aw/actions/runs/24376043986/job/71189693427

Fixed in c58f078. TestMaxTurnsFromSharedImport was missing permissions in the main workflow frontmatter — the validator requires them to be declared directly in the main file, not just inherited from a shared import.

@pelikhan pelikhan merged commit 7fec16b into main Apr 14, 2026
56 of 57 checks passed
@pelikhan pelikhan deleted the copilot/fix-max-turns-flag-issue branch April 14, 2026 03:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

engine.max-turns is silently dropped when engine config is sourced from a shared import

3 participants