Skip to content

Refactor workflow helpers: consolidate string-slice parsing and extract engine API target resolution#27325

Merged
pelikhan merged 5 commits intomainfrom
copilot/refactor-semantic-function-clustering-another-one
Apr 20, 2026
Merged

Refactor workflow helpers: consolidate string-slice parsing and extract engine API target resolution#27325
pelikhan merged 5 commits intomainfrom
copilot/refactor-semantic-function-clustering-another-one

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 20, 2026

Semantic clustering identified overlapping any -> []string parsing helpers and mixed concerns in awf_helpers.go. This PR narrows helper surface area in pkg/workflow by consolidating string-slice parsing call paths and isolating engine API target resolution into a dedicated module.

  • String-slice helper consolidation (pkg/workflow)

    • Removed extractStringSliceField from validation_helpers.go.
    • Replaced role/bot skip-field parsing call sites with a focused local parser in role_checks.go that:
      • accepts single-string and array forms,
      • reuses parseStringSliceAny,
      • filters empty strings to preserve existing role/bot semantics.
    • Moved extractStringSliceFromConfig into config_helpers.go and removed duplicate definition from safe_outputs_config_helpers.go.
  • AWF helper responsibility split

    • Extracted engine API target logic from awf_helpers.go into new:
      • pkg/workflow/engine_api_targets.go
    • Moved:
      • extractAPITargetHost
      • extractAPIBasePath
      • GetCopilotAPITarget
      • GetGeminiAPITarget
      • DefaultGeminiAPITarget
    • awf_helpers.go now stays focused on AWF command/arg construction.
  • Illustrative before/after (call-site intent)

    // before
    return extractStringSliceField(botsValue, fieldName)
    
    // after
    return parseOptionalStringSliceField(botsValue, fieldName)
    // -> uses parseStringSliceAny for array coercion + explicit empty-string filtering

Warning

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

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

  • https://api.github.com/graphql
    • Triggering command: /usr/bin/gh gh repo view --json owner,name --jq .owner.login + "/" + .name 64/pkg/tool/linux_amd64/vet GOINSECURE 0029631/b047/flo/tmp/js-hash-test-4115545238/test-hash.js ache/go/1.25.8/x/home/REDACTED/work/gh-aw/gh-aw/.github/workflows/ai-moderator.md 64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh repo view owner/repo env 3187569886 GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE g/x/crypto/chachrev-parse GOMODCACHE 64/pkg/tool/linux_amd64/vet 0029�� 15/001/test-frontmatter-with-nested-objects.md Bcts/l-3Xgegn_V4R30X4Bcts .cfg -n1 --format=format:config --end-of-options--get-regexp ache/go/1.25.8/x^remote\..*\.gh-resolved$ (http block)
    • Triggering command: /usr/bin/gh gh repo view owner/repo env 0029631/b220/_pkg_.a V4ci/NWzImF-917Hk3aRqV4ci 64/pkg/tool/linux_amd64/link GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/link -c 15/001/test-frontmatter-with-arrays.md -Eee/499QsILxkBjFfa_H-Eee x_amd64/vet -n1 --format=format:config --end-of-options--get-regexp x_amd64/vet (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 -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /orgs/test-owner/actions/secrets --jq .secrets[].name -c=4 -nolocalimports -importcfg /tmp/go-build859254983/b390/importcfg -pack /home/REDACTED/work/gh-aw/gh-aw/internal/tools/actions-build/main.go go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE node (http block)
  • https://api.github.com/repos/actions/ai-inference/git/ref/tags/v1
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv xterm-color 64/pkg/tool/linux_amd64/vet /usr/bin/infocmp 12533617/.githubgit GO111MODULE 64/pkg/tool/linu--show-toplevel infocmp -1 xterm-color 64/pkg/tool/linux_amd64/vet /usr/bin/git 0029631/b179/_pk/opt/hostedtoolcache/node/24.14.1/x64/bin/npm Ldjv/q8rDzC5dO2Kinstall .cfg git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv download 12346 /usr/bin/infocmp test-logs/run-12git GO111MODULE 64/bin/go infocmp -1 xterm-color go /usr/bin/git /001/test-inline/opt/hostedtoolcache/node/24.14.1/x64/bin/npm GO111MODULE 64/pkg/tool/linu--package-lock-only git (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv --show-toplevel x_amd64/compile /usr/bin/git -json GO111MODULE x_amd64/vet git conf�� user.name Test User ache/node/24.14.1/x64/bin/node -json GO111MODULE x_amd64/vet ache/node/24.14.1/x64/bin/node (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv xterm-color go om/owner/repo.git -json GO111MODULE 64/bin/go gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq /usr/bin/git npx prettier --cgit GOPROXY 64/bin/go git (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v5
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv or.md 9712140/b100/vet.cfg .cfg -p internal/reflectadd -lang=go1.25 hz/8-8vmLiYCmHH9yLNKNaz/ITCHFh6R_3VA1bELNvSY -o 1997284501 -trimpath 64/pkg/tool/linux_amd64/compile -p crypto/ed25519 -lang=go1.25 64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel 64/pkg/tool/linuTest User /usr/bin/git g_.a XvR1/5IzJsHuNVIjrev-parse .cfg git rev-�� --show-toplevel ache/go/1.25.8/x64/pkg/tool/linu--auto /usr/bin/git 1SUlY0Hxg 9712140/b102/vetrev-parse ache/go/1.25.8/x--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet 86_64/node ithub/workflows/git -buildtags ache/node/24.14.--show-toplevel git 1/x6�� --show-toplevel git /usr/bin/git bility_SameInputgit initial commit /usr/bin/git git (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv 9712140/b460/_pkg_.a x_amd64/compile .test -json b/gh-aw/pkg/typerev-parse x_amd64/compile .test lope�� 88qG/8AJ7Y7dVpgtqOdVA88qG x_amd64/compile om/owner/repo.git 01 GO111MODULE x_amd64/compile 9712140/b460/importcfg (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv k/gh-aw/gh-aw/.github/workflows/agentic-observab.artifacts[].name --auto test --detach GO111MODULE 64/bin/go test lope�� /tmp/TestGuardPolicyBlockedUsersApprovalLabelsCompiledOutput3783803240/001 s/test.md /usr/bin/git -json GO111MODULE 64/bin/go git (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v8
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv --show-toplevel Q9JjIZREDlYiHWP_71/KDaUrle63TPPPother /usr/bin/git Onlymin-integritgit 9712140/b245/vetrev-parse g_.a git rev-�� tags/v3 ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet sv /tmp/go-build209git -trimpath /opt/hostedtoolc--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git -json GO111MODULE cfg git rev-�� tags/v3 go sv -json GO111MODULE ache/go/1.25.8/x--show-toplevel git (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v9
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv -json 2/compile.go x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv -json age.go x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env -json GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
  • https://api.github.com/repos/actions/setup-go/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv /home/REDACTED/work/gh-aw/gh-aw/.github/workflows/ai-moderator.md x_amd64/vet /usr/bin/git jYhsBWmby .cfg 64/pkg/tool/linu--show-toplevel git rev-�� --show-toplevel 64/pkg/tool/linux_amd64/vet /usr/bin/infocmp 0029631/b096/_pkgit 64/src/net/addrsrev-parse 64/pkg/tool/linu--show-toplevel infocmp (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv Secret: ${{ secrets.TOKEN }} go /usr/bin/git -json GO111MODULE 64/bin/go git init�� GOMODCACHE go /usr/bin/infocmp -json GO111MODULE 64/bin/go infocmp (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel x_amd64/vet /usr/bin/git -json .cfg 64/pkg/tool/linu--show-toplevel git init�� GOMODCACHE 64/pkg/tool/linux_amd64/vet /usr/bin/git mLsRemoteWithReagit mLsRemoteWithRearev-parse 64/pkg/tool/linu--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git -json GO111MODULE 64/bin/go git rev-�� --show-toplevel go /usr/bin/git -json GO111MODULE 64/bin/go git (http block)
  • https://api.github.com/repos/actions/upload-artifact/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv 9712140/b451/_pkg_.a --auto 9712140/b451=> --detach -nolocalimports -importcfg git conf�� HIFr/iLX4908EimRzvG1AHIFr s/1/artifacts /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -json GO111MODULE x_amd64/compile /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --objects --stdin /usr/bin/git --exclude-hiddengit --all --quiet git -C /tmp/gh-aw-test-runs/20260420-122155-87879/test-1404114690/.github/workflows rev-parse /usr/bin/git 700735/b422/_pkggit GO111MODULE 64/bin/go git (http block)
  • https://api.github.com/repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv f891462b..HEAD st/suppress-warnings.cjs $name) { hasDiscussionsEnabled } } README.md ion-test..token--c /git st/dist/workers/forks.js rev-�� HEAD ef019652..HEAD /usr/local/.ghcup/bin/git token-test.txt (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv f891462b..HEAD --stdout 86_64/git ion-test..token-git git /home/REDACTED/wor. git rev-�� HEAD ef019652..HEAD ules/.bin/node -m (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v0.1.2
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv --show-toplevel /tmp/go-build1179712140/b461/_testmain.go /usr/bin/git -json ortcfg 64/pkg/tool/linu--show-toplevel git conf�� --get remote.origin.url /usr/lib/git-core/git LsRemoteWithRealgit LsRemoteWithRealrev-parse 64/pkg/tool/linu--show-toplevel /usr/lib/git-core/git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv user.name Test User /usr/bin/git -json GO111MODULE x_amd64/vet git rev-�� --show-toplevel x_amd64/vet /usr/lib/git-core/git -json GO111MODULE 64/bin/go /usr/lib/git-core/git (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv list --json /usr/bin/git -c=4 -nolocalimports -importcfg git remo�� s/test.md /home/REDACTED/work/gh-aw/gh-aw/pkg/fileutil/tar.go /usr/bin/infocmp -json GO111MODULE x_amd64/compile infocmp (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv --pack_header=2,3 l /usr/bin/git GoFiles,Export,Dgit GO111MODULE 64/bin/go git rev-�� --git-dir go /usr/bin/git -json GO111MODULE 64/bin/go git (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.2.3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv r-test2425887178/test1.md r-test2425887178/test2.lock.yml /usr/bin/git -json GO111MODULE x_amd64/compile git rev-�� --show-toplevel s/test.md /opt/hostedtoolcache/node/24.14.1/x64/bin/node -json GO111MODULE x_amd64/compile node (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv GOMODCACHE l ache/node/24.14.1/x64/bin/node ck '**/*.cjs' '*git GO111MODULE 64/bin/go ache/node/24.14.1/x64/bin/node 6775�� uts.version remote /usr/bin/git yphen3413735091/git yphen3413735091/rev-parse 64/bin/go git (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/1/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/1/artifacts --jq .artifacts[].name GO111MODULE 64/pkg/tool/linu-nolocalimports GOINSECURE /execenv GOMODCACHE 64/pkg/tool/linu/tmp/go-build1179712140/b451/_testmain.go env 1694948399 vNkW/MmwpPo_3e3tB-Au8vNkW 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 1 --dir test-logs/run-1 .cfg 64/pkg/tool/linux_amd64/vet GOINSECURE ntio/asm/base64 0029631/b012/symabis 64/pkg/tool/linux_amd64/vet env 2689866590/.github/workflows 0029631/b012/importcfg ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet GOINSECURE b/gh-aw/pkg/filerev-parse GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/1/artifacts --jq .artifacts[].name GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env mpiledOutput3783803240/001 GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/12345/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12345/artifacts --jq .artifacts[].name GO111MODULE 64/pkg/tool/linu-buildmode=exe GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linu-extld=gcc env 0029631/b212/_pkg_.a d2UJ/DbmGN00V4XBV3gqgd2UJ .cfg GOINSECURE nal/fips140tls GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linuremote.origin.url (http block)
    • Triggering command: /usr/bin/gh gh run download 12345 --dir test-logs/run-12345 GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env 1878942967 hxms/bWOB0OjYPOs06SIChxms .cfg GOINSECURE g/x/text/secure/rev-parse GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • 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 y_with_repos=public_148360537/001 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/pkg/tool/linux_amd64/vet GOINSECURE (http block)
    • Triggering command: /usr/bin/gh gh run download 12346 --dir test-logs/run-12346 GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE 0029631/b092/ GOMODCACHE 64/pkg/tool/linuTest User env 1878942967 GO111MODULE .cfg GOINSECURE able 0029631/b092/sym--show-toplevel ache/go/1.25.8/x64/pkg/tool/linu-buildtags (http block)
    • 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 /001/test-inlined-imports-enabled-with-body-content.md 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/pkg/tool/linux_amd64/vet GOINSECURE randutil GOMODCACHE 64/pkg/tool/linux_amd64/vet env 1694948399 go .cfg GOINSECURE l GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linu-test.v=true (http block)
    • Triggering command: /usr/bin/gh gh run download 2 --dir test-logs/run-2 in/yaml/v3@v3.0.4/apic.go 64/pkg/tool/linux_amd64/vet GOINSECURE (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/2/artifacts --jq .artifacts[].name 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/3/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/3/artifacts --jq .artifacts[].name GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE fips140/hmac GOMODCACHE 64/pkg/tool/linux_amd64/vet env 1694948399 .cfg 64/pkg/tool/linux_amd64/compile GOINSECURE l/ascii GOMODCACHE 64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh run download 3 --dir test-logs/run-3 .cfg 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD 0029631/b015/sym--git-dir 64/pkg/tool/linux_amd64/vet env 2689866590/.github/workflows BHdz/-6z_QJDvZKLbBouUBHdz ache/go/1.25.8/x64/pkg/tool/linu-test.short=true GOINSECURE t/language GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/3/artifacts --jq .artifacts[].name GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env mpiledOutput3783803240/001 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/4/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/4/artifacts --jq .artifacts[].name GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linuTest User env 1694948399 aMu6/n6X7R7Av3bGkLZAPaMu6 64/pkg/tool/linux_amd64/link GOINSECURE g/x/net/idna GOMODCACHE 64/pkg/tool/linux_amd64/link (http block)
    • Triggering command: /usr/bin/gh gh run download 4 --dir test-logs/run-4 edcfg 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD 0029631/b012/sym--show-toplevel 64/pkg/tool/linux_amd64/vet ache�� 0029631/b256/_pkg_.a zBGz/yhMlvprrXT_DfcRFzBGz .cfg GOINSECURE v3 GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/4/artifacts --jq .artifacts[].name GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE ions-lock.json does not exist yeconfig env mpiledOutput3783803240/001 GO111MODULE 64/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 .cfg 64/pkg/tool/linux_amd64/vet GOINSECURE fips140/check GOMODCACHE 64/pkg/tool/linutest@example.com env ternal/tools/actions-build/main.go wDwi/8TvZlM4P0nfuVfRvwDwi eutil.test GOINSECURE contextprotocol/rev-parse GOMODCACHE eutil.test (http block)
    • Triggering command: /usr/bin/gh gh run download 5 --dir test-logs/run-5 .cfg 64/pkg/tool/linux_amd64/vet GOINSECURE 0029631/b092/ ache/go/1.25.8/x--show-toplevel 64/pkg/tool/linux_amd64/vet env 0029631/b250/_pkg_.a .cfg ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet GOINSECURE b/gh-aw/pkg/actirev-parse ache/go/1.25.8/x--git-dir ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/5/artifacts --jq .artifacts[].name GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go 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/workflows
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path -c=4 -nolocalimports -importcfg /tmp/go-build1179712140/b418/importcfg -pack /home/REDACTED/work/gh-aw/gh-aw/pkg/fileutil/fileutil.go /home/REDACTED/work/gh-aw/gh-aw/pkg/fileutil/tar.go env -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --workflow nonexistent-workflow-12345 --limit 100 GOMOD GOMODCACHE x_amd64/cgo env " GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (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 0029631/b006/ GOMODCACHE 64/pkg/tool/linux_amd64/vet env /workflows .cfg 64/pkg/tool/linux_amd64/compile GOINSECURE fips140/edwards2rev-parse 0029631/b006/sym--show-toplevel 64/pkg/tool/linux_amd64/compile (http block)
  • https://api.github.com/repos/github/gh-aw/contents/.github/workflows/shared/reporting.md
    • Triggering command: /tmp/go-build1179712140/b403/cli.test /tmp/go-build1179712140/b403/cli.test -test.testlogfile=/tmp/go-build1179712140/b403/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true GOINSECURE GOMOD GOMODCACHE x_amd64/asm env -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /tmp/go-build859254983/b403/cli.test /tmp/go-build859254983/b403/cli.test -test.testlogfile=/tmp/go-build859254983/b403/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true GOINSECURE GOMOD GOMODCACHE go m/_n�� -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v0.47.4
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq [.object.sha, .object.type] | @tsv --show-toplevel ger.test /usr/bin/git /tmp/go-build209git ache/go/1.25.8/xrev-parse .cfg git rev-�� --show-toplevel ache/go/1.25.8/x64/pkg/tool/linu/tmp/go-build1179712140/b112/vet.cfg /usr/bin/git CommaSeparatedCols -trimpath ache/go/1.25.8/x/tmp/gh-aw/aw-feature-branch.patch git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git -json GO111MODULE ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel go /usr/bin/git 2155-87879/test-ls GO111MODULE tartedAt,updated/tmp/gh-aw/aw-feature-branch.patch git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv -json HCmd/oMQac4bC0uy1Yg0zHCmd 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 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE ache/go/1.25.8/x64/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/git/ref/tags/v1.2.3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv go GO111MODULE x_amd64/compile GOINSECURE mcpgodebug GOMODCACHE x_amd64/compile env -json GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv npx prettier --c-errorsas GOPROXY 64/bin/go GOSUMDB GOWORK 64/bin/go node /hom�� --check scripts/**/*.js 64/bin/go -d --write 64/bin/go go (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v2.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet env -json GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq [.object.sha, .object.type] | @tsv bytealg/indexbyte_wasm.s GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet env Gitmain_branch32--repo Gitmain_branch32owner/repo x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq [.object.sha, .object.type] | @tsv npx prettier --c-errorsas GOPROXY 64/bin/go GOSUMDB GOWORK 64/bin/go node /hom�� --check scripts/**/*.js 64/bin/go -d --write 64/bin/go 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, .object.type] | @tsv -json GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet env g_.a (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v3.0.0 --jq [.object.sha, .object.type] | @tsv npx prettier --c-errorsas GOPROXY 64/bin/go GOSUMDB GOWORK 64/bin/go node /hom�� Gitmain_branch987304579/001' Gitmain_branch987304579/001' 64/bin/go -d git 64/bin/go go (http block)
  • https://api.github.com/repos/nonexistent/action/git/ref/tags/v999.999.999
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv sm-opt >/dev/null 2>&1; then \ echo "Running wasm-opt -Oz (size optimization)..."; \ BEFORE=$(/usr/bin/git 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 ranc�� 15/001/test-inlined-imports-enabled-with-env-template-expressions-in-body.md 9712140/b002/vet.cfg .cfg -p internal/race -lang=go1.25 ache/go/1.25.8/x12345 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv thub/workflows GO111MODULE ache/go/1.25.8/x64/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/nonexistent/repo/actions/runs/12345
    • Triggering command: /usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion GOINSECURE /go-yaml/ast GOMODCACHE 64/pkg/tool/linux_amd64/vet env 1756424973/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 (http block)
    • Triggering command: /usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion GOINSECURE GOMOD GOMODCACHE go env thub/workflows 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 x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh workflow list --repo owner/repo --json name,path,state x_amd64/vet GOINSECURE g/x/crypto/interconfig GOMODCACHE x_amd64/vet desc�� 9712140/b070/_pkg_.a oXnN/-5aZqfwMX4HRR0X2oXnN .cfg GOSUMDB GOWORK 64/bin/go ache/go/1.25.8/x^remote\..*\.gh-resolved$ (http block)
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE sh (http block)
  • https://api.github.com/repos/test-owner/test-repo/actions/secrets
    • Triggering command: /usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env -json age/common.go x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name ck 'scripts/**/*GOINSECURE GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE node (http block)
  • https://api.github.com/repos/test/repo
    • Triggering command: /usr/bin/gh gh api /repos/test/repo --jq .default_branch 0029631/b256/_pkg_.a zBGz/yhMlvprrXT_DfcRFzBGz .cfg GOINSECURE v3 GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/test/repo --jq .default_branch edOutput4203548990/001 GO111MODULE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile env _.a GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linu3 (http block)
  • invalid.example.invalid
    • Triggering command: /usr/lib/git-core/git-remote-https /usr/lib/git-core/git-remote-https origin https://invalid.example.invalid/nonexistent-repo.git git form�� origin/auth-cleanup-success..auth-cleanup-success --stdout cal/bin/git 64/bin/git git ode-gyp-bin/git git add . git k/gh-aw/gh-aw/node_modules/.bin/git -m Initial commit tions/setup/nodeagent-change.txt git (dns block)
    • Triggering command: /usr/lib/git-core/git-remote-https /usr/lib/git-core/git-remote-https origin https://invalid.example.invalid/nonexistent-repo.git git conf�� --local --get ode_modules/.bin/git '/tmp/bare-incr/usr/lib/git-core/git '/tmp/bare-incr--git-dir=/tmp/bare-incremental-5yIZfx /git git add . git tions/setup/node_modules/.bin/git -m Initial commit it git (dns block)

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

Copilot AI and others added 3 commits April 20, 2026 12:14
Agent-Logs-Url: https://github.com/github/gh-aw/sessions/d9723c0e-e1d1-42aa-9776-4fe2051b2143

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title [WIP] Refactor semantic function clustering in pkg/workflow and pkg/cli Refactor workflow helpers: consolidate string-slice parsing and extract engine API target resolution Apr 20, 2026
Copilot AI requested a review from pelikhan April 20, 2026 12:28
@pelikhan pelikhan marked this pull request as ready for review April 20, 2026 12:54
Copilot AI review requested due to automatic review settings April 20, 2026 12:54
@github-actions github-actions bot mentioned this pull request Apr 20, 2026
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

Refactors pkg/workflow helpers by consolidating any -> []string parsing paths and extracting engine API target/base-path resolution out of awf_helpers.go into a dedicated module.

Changes:

  • Removed the legacy extractStringSliceField helper and updated role/bot/skip parsing to use a focused local parser that reuses parseStringSliceAny and filters empty strings.
  • Moved extractStringSliceFromConfig into config_helpers.go, removing the duplicate in safe_outputs_config_helpers.go.
  • Extracted engine API target/base-path resolution helpers from awf_helpers.go into a new engine_api_targets.go module.
Show a summary per file
File Description
pkg/workflow/validation_helpers.go Removes extractStringSliceField from the shared validation helper set.
pkg/workflow/safe_outputs_config_helpers.go Removes duplicate extractStringSliceFromConfig helper.
pkg/workflow/role_checks.go Introduces parseOptionalStringSliceField and updates skip/bots parsing call sites.
pkg/workflow/engine_api_targets.go New module containing API target/base-path resolution helpers previously in awf_helpers.go.
pkg/workflow/config_helpers.go Adds extractStringSliceFromConfig helper for handler config parsing.
pkg/workflow/awf_helpers.go Removes extracted API target/base-path resolution helpers, keeping AWF arg/command construction.

Copilot's findings

Tip

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

  • Files reviewed: 6/6 changed files
  • Comments generated: 2

Comment on lines +49 to +58
// Remove protocol prefix if present
host := baseURL
if idx := strings.Index(host, "://"); idx != -1 {
host = host[idx+3:]
}

// Remove path suffix if present (everything after first /)
if idx := strings.Index(host, "/"); idx != -1 {
host = host[:idx]
}
Copy link

Copilot AI Apr 20, 2026

Choose a reason for hiding this comment

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

extractAPITargetHost does not strip query/fragment when the base URL has no path (e.g., https://example.com?x=1), so it would return example.com?x=1 as the host. That is not a valid hostname for --*-api-target and will break proxy routing. Consider using net/url parsing (optionally prepending a scheme when missing) or at least trimming ?# from the host portion before returning it.

Copilot uses AI. Check for mistakes.
Comment on lines +180 to +183
if len(values) == 0 {
roleLog.Printf("No valid %s found or unsupported type: %T", fieldName, value)
return nil
}
Copy link

Copilot AI Apr 20, 2026

Choose a reason for hiding this comment

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

The log message on the len(values) == 0 path is misleading for supported-but-empty inputs (e.g., []string{}): it reports "unsupported type" even though the type is valid. Recommend distinguishing values == nil (unsupported/unset) from len(values) == 0 (empty list) and adjusting the log message accordingly (or skipping the log for an explicitly empty list to match prior behavior).

Suggested change
if len(values) == 0 {
roleLog.Printf("No valid %s found or unsupported type: %T", fieldName, value)
return nil
}
if values == nil {
roleLog.Printf("No valid %s found or unsupported type: %T", fieldName, value)
return nil
}
if len(values) == 0 {
return nil
}

Copilot uses AI. Check for mistakes.
…anization

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown
Contributor

Commit pushed: 46d8ee5

🏗️ ADR gate enforced by Design Decision Gate 🏗️

@github-actions
Copy link
Copy Markdown
Contributor

🏗️ Design Decision Gate — ADR Required

This PR makes significant changes to core business logic (204 new lines in pkg/workflow/) 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: docs/adr/27325-organize-workflow-helpers-by-semantic-responsibility.md

The draft captures the core decisions in this refactor:

  • Extracting engine API target resolution into engine_api_targets.go
  • Consolidating extractStringSliceFromConfig in config_helpers.go
  • Replacing extractStringSliceField with parseOptionalStringSliceField routed through parseStringSliceAny
  • The general principle: organize pkg/workflow helpers by semantic responsibility, not by file size or convenience

What to do next

  1. Review the draft ADR committed to your branch — it was generated from the PR diff
  2. Complete any missing sections — add context the AI couldn't infer, refine the decision rationale, and verify the alternatives reflect what was actually considered
  3. Reference the ADR in this PR body by adding a line such as:

    ADR: ADR-27325: Organize pkg/workflow Helpers by Semantic Responsibility

Once an ADR is linked in the PR body, this gate will re-run and verify the implementation matches the decision.

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

An ADR must contain these four sections to be considered complete:

  • Context — What is the problem? What forces are at play?
  • Decision — What did you decide? Why?
  • Alternatives Considered — What else could have been done?
  • Consequences — What are the trade-offs (positive and negative)?

All ADRs are stored in docs/adr/ as Markdown files numbered by PR number (e.g., 27325-organize-workflow-helpers-by-semantic-responsibility.md for PR #27325).

🔒 This PR cannot merge until an ADR is linked in the PR body.

References: §24667638374

Note

🔒 Integrity filter blocked 1 item

The following item was blocked because it doesn't meet the GitHub integrity level.

To allow these resources, lower min-integrity in your GitHub frontmatter:

tools:
  github:
    min-integrity: approved  # merged | approved | unapproved | none

🏗️ ADR gate enforced by Design Decision Gate 🏗️ · ● 185.7K ·

@pelikhan
Copy link
Copy Markdown
Collaborator

@copilot review all comments

@github-actions

This comment has been minimized.

@github-actions
Copy link
Copy Markdown
Contributor

Hey @Copilot 👋 — great work on this refactor! Consolidating the string-slice parsing helpers and extracting the engine API target logic into its own module in pkg/workflow makes the package much easier to navigate. The ADR doc is a nice touch too.

One thing that would really strengthen this PR before merge:

  • Add tests — none of the changed files have corresponding test coverage in the diff. With refactors like these — especially moving extractAPITargetHost, GetCopilotAPITarget, GetGeminiAPITarget, etc. into engine_api_targets.go and adjusting call sites in role_checks.go — a few targeted unit tests would give reviewers confidence that behavior is preserved.

If you'd like a hand, you can assign this prompt to your coding agent:

Add unit tests for the refactored helpers in pkg/workflow.
Cover the following:
1. engine_api_targets.go — test GetCopilotAPITarget and GetGeminiAPITarget with default and overridden env values.
2. role_checks.go — test parseOptionalStringSliceField with:
   - a single string value,
   - an array of strings,
   - an empty string (should be filtered out),
   - nil input.
3. config_helpers.go — test extractStringSliceFromConfig with a valid config map entry and a missing key.
Place tests in the existing *_test.go files in pkg/workflow, or create new ones following the package's existing naming conventions.

Generated by Contribution Check · ● 1.8M ·

@pelikhan pelikhan merged commit 80ac1ae into main Apr 20, 2026
24 checks passed
@pelikhan pelikhan deleted the copilot/refactor-semantic-function-clustering-another-one branch April 20, 2026 13:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[refactor] Semantic Function Clustering: Refactoring Opportunities in pkg/workflow and pkg/cli

3 participants