Skip to content

perf: eliminate redundant permissions parsing and domain computation per compilation#28560

Merged
pelikhan merged 4 commits intomainfrom
copilot/fix-performance-regression-compile-simple-workflow
Apr 26, 2026
Merged

perf: eliminate redundant permissions parsing and domain computation per compilation#28560
pelikhan merged 4 commits intomainfrom
copilot/fix-performance-regression-compile-simple-workflow

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 26, 2026

BenchmarkCompileSimpleWorkflow regressed 21% (2.76ms → 3.34ms) due to two hot paths being executed redundantly per compilation run.

Root causes

1. Redundant NewPermissionsParser calls (~7% CPU)
NewPermissionsParser(data.Permissions) — which calls goccy/go-yaml.Unmarshal internally — was invoked 4+ times per compilation despite data.CachedPermissions already being populated by applyDefaults.

Affected callers: ShouldGeneratePRCheckoutStep, collectPromptSections, filterJobLevelPermissions, checkout app token generation, GitHub MCP app token generation.

2. Redundant domain computation (~4% CPU)
mergeDomainsWithNetworkToolsAndRuntimes (builds + deduplicates + sorts a large domain set) was called 2–3× per compilation via computeAllowedDomainsForSanitization from the activation job builder, safe-outputs steps, and agent run step YAML generation.

Changes

  • Permissions.HasContentsReadAccess() — new method on the parsed struct; avoids re-parsing YAML just to check contents read access. Correctly handles nil, shorthands (read-all/write-all/none), all: read, all: write (write implies read), and explicit permission maps.

  • filterJobLevelPermissions(raw, cachedPerms...) — optional variadic parameter; callers with data.CachedPermissions skip the yaml.Unmarshal step entirely.

  • WorkflowData.CachedAllowedDomainsStrcomputeAllowedDomainsForSanitization now stores its result on first call and returns it directly on subsequent calls within the same compilation.

  • Updated pr.go, unified_prompt_step.go, compiler_yaml_main_job.go, compiler_github_mcp_steps.go, and compiler_main_job.go to use data.CachedPermissions where available.

Results

Metric Before After Δ
ns/op ~1,157,000 ~1,060,000 −8.4%
B/op 782,551 752,717 −3.8%
allocs/op 5,017 4,277 −14.8%

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 x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env 3250-34994/test-source-field-variant-2498145274/--detach GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh repo view owner/repo env 1809805936 GO111MODULE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile estl�� g_.a GO111MODULE .cfg GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh repo view owner/repo env 1809805936 GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env -json GO111MODULE .cfg GOINSECURE GOMOD GOMODCACHE go (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 -c=4 -nolocalimports -importcfg /tmp/go-build2570095748/b434/importcfg -pack /home/REDACTED/work/gh-aw/gh-aw/pkg/repoutil/repoutil.go /home/REDACTED/work/gh-aw/gh-aw/pkg/repoutil/repoutil_test.go -o /tmp/go-build240GOSUMDB -trimpath 64/bin/go -p main -lang=go1.25 go (http block)
    • Triggering command: /usr/bin/gh gh api /orgs/test-owner/actions/secrets --jq .secrets[].name -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env json' --ignore-p-p GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /orgs/test-owner/actions/secrets --jq .secrets[].name -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go /pre�� -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/actions/ai-inference/git/ref/tags/v1
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv REDACTED go /usr/bin/git mpiledOutput3316git GO111MODULE ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel go /usr/bin/git 5/001/test-frontnode GO111MODULE ache/go/1.25.8/xinstall git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv --git-dir 64/pkg/tool/linu--jq (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv --show-toplevel go r,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,disp--show-toplevel */*.ts' '**/*.jsgit flow 64/pkg/tool/linu--show-toplevel git rev-�� 0:00Z 64/pkg/tool/linux_amd64/compile 0682843/b404/cli.test ithub/workflows GO111MODULE nch,headSha,dispinstall 0682843/b404/cli--package-lock-only (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 /tmp/TestHashConsistency_GoAndJavaScript624868805/001/test-frontmatter-with-nested-objects.md go /opt/hostedtoolcache/node/24.14.1/x64/bin/node -json GO111MODULE 64/bin/go node /tmp�� /tmp/TestHashConsistency_WithImports508072118/001/main.md l /opt/hostedtoolcache/node/24.14.1/x64/bin/node -json GO111MODULE 64/bin/go node (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv /tmp/compile-instructions-test-1377947214 show /usr/bin/git json' --ignore-pgit GO111MODULE 64/bin/go git init�� GOMODCACHE go /usr/bin/git -json GO111MODULE x_amd64/compile git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv /home/REDACTED/work/gh-aw/gh-aw/.github/workflows/agent-persona-explorer.md go /usr/bin/gh re GO111MODULE 64/bin/go gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq /usr/bin/infocmp -json GO111MODULE 64/bin/go infocmp (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 -json 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 ai-moderator.md GO111MODULE /opt/hostedtoolcache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git -json GO111MODULE ache/go/1.25.8/x: git rev-�� --show-toplevel go /usr/bin/git ApprovalLabelsCogit GO111MODULE /opt/hostedtoolc--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 git /usr/bin/git origin develop /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git /tmp/TestGuardPogit rev-parse /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 /tmp/TestGuardPolicyMinIntegrityOnlymin-integrity_with_repos_array_c3887134841/001 rev-parse /usr/bin/git yphen2040966922/git yphen2040966922/rev-parse 64/bin/go git -C thImports1916651203/001 rev-parse ache/node/24.14.1/x64/bin/node -json GO111MODULE 64/bin/go ache/node/24.14.1/x64/bin/node (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv --objects l /usr/bin/git --exclude-hiddengit --all --quiet git -C /tmp/TestGuardPolicyMinIntegrityOnlymin-integrity_with_explicit_repo2356785176/001 rev-parse /usr/bin/infocmp yphen2902271577/git yphen2902271577/rev-parse node infocmp (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv git-upload-pack '/tmp/TestParseDefaultBranchFromLsRemoteWithRealGitcustom_branch3323126829/001' git-upload-pack '/tmp/TestParseDefaultBranchFromLsRemoteWithRealGitcustom_branch3323126829/001' /usr/bin/git -json GO111MODULE 64/bin/go git -C /tmp/TestGuardPolicyMinIntegrityOnlymin-integrity_with_repos=public_1588668267/001 remote /usr/bin/git h ../../../.pretgit 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 ache/go/1.25.8/xowner/test-repo /usr/bin/git 3672056430 GO111MODULE 64/pkg/tool/linux_amd64/compile git rev-�� --show-toplevel 64/pkg/tool/linux_amd64/compile /usr/bin/git g_.a GO111MODULE 0095748/b438/imp--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 ache/go/1.25.8/x64/pkg/tool/linuremote.origin.url /usr/bin/git Onlymin-integritbash QuTc/8J1aAAdvjhK/tmp/gh-aw-test-runs/20260426-073616-54326/test-patch-priority-11737�� 6744851/b204=> git rev-�� --show-toplevel /bin/sh /usr/bin/git 6744851/b045/impgit (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 owner /usr/bin/git 0 -j ACCEPT git rev-�� --show-toplevel go /usr/bin/git -json (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 /tmp/go-build1068544339/b047/_pkg_.a -trimpath /snap/bin/bash -p cmd/internal/biorev-parse -lang=go1.25 bash --no�� '**/*.ts' '**/*.json' --ignore-path ../../../.pr**/*.json Pi5Y8TJQ3IjVYCOwZtLq/Pi5Y8TJQ3IjVYCOwZtLq ndor/bin/sh go1.25.8 -c=4 -nolocalimports bash (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv /tmp/go-build1068544339/b088/_pk-test.run=TestPermissions|TestFilterJobLevel|TestShouldGeneratePgit -trimpath n-dir/sh -p debug/gosym -lang=go1.25 bash --no�� '**/*.ts' '**/*.json' --ignore-path ../../../.pr**/*.json ion_cache.go ache/uv/0.11.7/x86_64/bash ion_cache_test.ggit ion_mode.go ion_pins.go ion_pins_integration_test.go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv /tmp/go-build1068544339/b105/_pk./pkg/workflow/ -trimpath tions/setup/js/node_modules/.bin/node -p cmd/internal/telrev-parse -lang=go1.25 bash 1/x6�� --noprofile QvfvbTVtSshfCcZYDqGC/QvfvbTVtSshfCcZYDqGC 1/x64/bin/node go1.25.8 -c=4 -nolocalimports gcc (http block)
  • https://api.github.com/repos/actions/setup-go/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv /tmp/go-build1068544339/b079/_pk-errorsas -trimpath bin/sh -p cmd/internal/sysrev-parse -lang=go1.25 bash --no�� '**/*.ts' '**/*.json' --ignore-path ../../../.pr**/*.json kPxqne9Ce1LHx1u_zMT0/kPxqne9Ce1LHx1u_zMT0 /home/REDACTED/.cache/go-build/d4/d476ad3d1c0b29b7../../../.prettierignore go1.25.8 -c=4 -nolocalimports /home/REDACTED/.cache/go-build/d4/d476ad3d1c0b29b721e232e8253e5bc77d1a5980b06fb861/sys/fs/cgroup (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --noprofile 64/pkg/tool/linupkg/workflow/permissions_parser.go /opt/hostedtoolcache/go/1.25.8/x64/bin/sh ./../.prettieriggit (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/infocmp ty-test.md GO111MODULE 64/bin/go infocmp -1 xterm-color go /usr/bin/infocmp -json GO111MODULE 64/pkg/tool/linu--show-toplevel 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 -stringintconv -tests de_modules/.bin/sh (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --noprofile 64/pkg/tool/linux_amd64/vet /home/REDACTED/.local/bin/sh ./../.prettieriggit .cfg 64/pkg/tool/linu--show-toplevel sh -c "prettier" --write '**/*.cjs' '**/*.ts' '**/*.json' --ignore-path ../../../.pret.prettierignore 64/pkg/tool/linux_amd64/vet /home/REDACTED/work/gh-aw/gh-aw/actions/setup/js/node_modules/.bin/node get .cfg 64/pkg/tool/linu--show-toplevel node (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 /opt/hostedtoolcGO111MODULE 0095748/b461/vet.cfg /tmp/go-build240git -trimpath 64/bin/go git -C /tmp/gh-aw-test-runs/20260426-073250-34994/test-3948886571 show /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 /tmp/gh-aw-test-runs/20260426-073250-34994/test-3849048839/.github/workflows rev-parse /usr/bin/git -c=4 -nolocalimports -importcfg git rev-�� --show-toplevel /home/REDACTED/work/gh-aw/gh-aw/pkg/semverutil/semverutil_test.go /opt/hostedtoolcache/node/24.14.1/x64/bin/node 01 GO111MODULE 64/bin/go node (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel -dwarf=false /usr/bin/infocmp go1.25.8 -c=4 -nolocalimports infocmp -1 ons-test3220360795 /home/REDACTED/go/pkg/mod/golang.org/x/text@v0.36.0/message/catalog.go /usr/bin/git 5201884/001' 5201884/001' 64/bin/go git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv -aw/git/ref/tags/v3.0.0 go bject.type] | @tsv -json GO111MODULE 64/bin/go git rev-�� ons-test2430326820 go /usr/bin/git -json 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 user.email ings.cjs odules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin/git f9e02610..full-m/opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile st/suppress-warn-o 64/bin/node forks.js rev-�� HEAD st/suppress-warnmain _modules/.bin/gi-lang=go1.25 --bare full mode test k/gh-aw/gh-aw/no--require st/dist/workers//home/REDACTED/work/gh-aw/gh-aw/actions/setup/js/node_modules/vitest/suppress-warnings.cjs (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv . tions/setup/js/node_modules/vite--stdout $name) { hasDiscussionsEnabled } } /tmp/bare-incremgit gin/full-mode-brcommit tions/setup/node-m git init�� -q (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv . tions/setup/js/node_modules/vite--stdout bin/git /tmp/bare-increm/opt/hostedtoolcache/node/24.14.1/x64/bin/node . ode-gyp-bin/git pfWKqrn/05aP_znb/home/REDACTED/work/gh-aw/gh-aw/actions/setup/js/node_modules/vitest/suppress-warnings.cjs init�� -q st/suppress-warn--conditions k/node_modules/.development -m 9fde467f..HEAD n-dir/git st/dist/workers/-f (http block)
  • https://api.github.com/repos/github/gh-aw
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw --jq .default_branch .go test@example.com ules/.bin/go ode_modules/.bingit git 02 git bran�� -cwd.go main repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } --is-ancestor k/gh-aw/gh-aw/ac-C odules/npm/node_/home/REDACTED/work/gh-aw/gh-aw/.github/workflows git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw --jq .default_branch . /opt/hostedtoolcache/node/24.14.owner=github me: String!) { repository(owne-f --require /home/REDACTED/wor-C n-dir/git /opt/hostedtoolcshow --ex�� k/gh-aw/gh-aw/.github/workflows /home/REDACTED/work/gh-aw/gh-aw/actions/setup/js/node_modules/vitest/suppress-warnings.cjs 1/x64/bin/node node --conditions development go (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 go /usr/bin/gh -json GO111MODULE 64/bin/go gh run download 12345 /usr/bin/gh test-logs/run-12git GO111MODULE 64/pkg/tool/linu--show-toplevel gh (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv --show-toplevel x_amd64/vet /usr/bin/git report.md ce314595c223dfcarev-parse 64/pkg/tool/linu--show-toplevel git rev-�� --show-toplevel 64/pkg/tool/linuTest User /usr/bin/git itmaster_branch2git itmaster_branch2rev-parse 64/pkg/tool/linu--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv --show-toplevel go iptables -json GO111MODULE 64/bin/go git rev-�� --show-toplevel go /usr/bin/git -json GO111MODULE n-dir/node 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 ons-test2814330126 rev-parse .test --check scripts/**/*.js 64/bin/go .test lope�� /repos/actions/github-script/git/ref/tags/v9 l /opt/hostedtoolcache/node/24.14.1/x64/bin/node -json GO111MODULE 64/bin/go node (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 /tmp/gh-aw-add-gitattributes-test2254058068/.github/workflows rev-parse /usr/bin/git s/data/action_pigit GO111MODULE 64/bin/go git -C /tmp/gh-aw-test-runs/20260426-073611-53034/test-2209810529/.github/workflows config /usr/bin/git remote.origin.urgit 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, .object.type] | @tsv --bare (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 ons-test2814330126 prettier /usr/bin/git l --ignore-path 64/bin/go git -C 2" 1>&2 remote rue,"errors":[],"warnings":[]}] eturned GO111MODULE 64/bin/go 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 --show-toplevel -pack /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/link -json GO111MODULE 64/bin/go /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/link -o /tmp/go-build1239705215/b469/workflow.test -importcfg /usr/bin/infocmp -s -w -buildmode=exe infocmp (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 /tmp/TestHashStability_SameInputSameOutput1159255812/001/stability-test.md -tests /usr/bin/git -json GO111MODULE 64/bin/go git rev-�� k/gh-aw/gh-aw/pkg/cli go /usr/bin/git l 794476194/001' 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/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile env report.md GO111MODULE x_amd64/link GOINSECURE GOMOD GOMODCACHE x_amd64/link (http block)
    • Triggering command: /usr/bin/gh gh run download 1 --dir test-logs/run-1 GO111MODULE 64/pkg/tool/linu-nolocalimports GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linu/tmp/go-build2570095748/b466/_testmain.go env 4014623461/.github/workflows GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/1/artifacts --jq .artifacts[].name wyMD/ZnqvKWWFy1YdeRMpwyMD 6744851/b162=> --ignore-path th2/internal 64/bin/go /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linutest@example.com -o /v1.2.3 -trimpath sv -p internal/runtimerev-parse -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linuorigin (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/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env 2496020704 GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (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 1809805936 GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12345/artifacts --jq .artifacts[].name O_e3/jNiaaPEe3F5AUUx1O_e3 6744851/b178=> GOSUMDB GOWORK run-script/lib/n--show-toplevel git stat�� 6744851/b071/importcfg b24G/6nfC8zN5c6kASggpb24G /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -json GO111MODULE 64/bin/go /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile (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 GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env 2496020704 GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh run download 12346 --dir test-logs/run-12346 GO111MODULE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile env 1809805936 GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12346/artifacts --jq .artifacts[].name d2UJ/DbmGN00V4XBV3gqgd2UJ At,event,headBranch,headSha,displayTitle GOSUMDB g/x/crypto/chachrev-parse 64/bin/go git t-19�� sistency_GoAndJavaScript2257745166/001/test-simple-frontmatter.md TWRl/eDvIxLANZ0cGFI5vTWRl /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile --format=%H:%ct GO111MODULE 64/bin/go /opt/hostedtoolcache/go/1.25.8/xTest User (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/link GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/link env ntdrain.test GO111MODULE ortcfg.link GOINSECURE GOMOD GOMODCACHE b4L7Ikj7IChhS-MVF4/opxEl9d6gxDxhtest@example.com (http block)
    • Triggering command: /usr/bin/gh gh run download 2 --dir test-logs/run-2 GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env 4014623461/.github/workflows GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/2/artifacts --jq .artifacts[].name Kv-X/SrddFjc3EqPBzwz7Kv-X 1/x64/bin/node GOSUMDB contextprotocol/rev-parse 64/bin/go 1/x64/bin/node -p runs/20260426-073611-53034/test-add-source-path-651598656/.github/workflows -trimpath (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 GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env 3967727542/.github/workflows GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (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 ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/3/artifacts --jq .artifacts[].name 4ACQ/f02Eva1ttQPQuPWq4ACQ 6744851/b161=> GOSUMDB th2 64/bin/go /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linuorigin -o herd/ByMgtkBi9h7Z_8Baherd -trimpath /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -p internal/runtime-1 -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/xremote.origin.url (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/linux_amd64/vet env 3967727542/.github/workflows GO111MODULE 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/linux_amd64/link env 4014623461/.github/workflows GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/4/artifacts --jq .artifacts[].name GOPROXY 6744851/b140=> GOSUMDB contextprotocol/rev-parse 64/bin/go /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linuremote.origin.url 6744�� /v2.0.0 k/gh-aw/gh-aw/pkg/constants/constants.go sv l internal/trace/trev-parse -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/xremote.origin.url (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 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env 3967727542/.github/workflows 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 x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env util.test GO111MODULE ck GOINSECURE GOMOD GOMODCACHE -4GmfpWzsnidAKUU7I/p67f43WHEJUTs4-oiIa1/9KqfPfOCrev-parse (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/5/artifacts --jq .artifacts[].name 7gve/JS7DQw3o9RuNG8R67gve 1/x64/bin/node "prettier" --wrigit b/gh-aw/pkg/parsrev-parse 64/bin/go 1/x64/bin/node -o runs/20260426-073611-53034/test-add-source-path-651598656 -trimpath kflows/my-workflow.lock.yml -p math/bits -lang=go1.25 /opt/hostedtoolcache/go/1.25.8/x64/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 che/go-build/4c/GOINSECURE **/*.cjs 64/bin/go **/*.json --ignore-path ../../../.prettiGOPATH /opt/hostedtoolcGOPROXY -o /tmp/go-build240GOSUMDB -trimpath 64/bin/go -p main -lang=go1.25 go (http block)
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --workflow nonexistent-workflow-12345 --limit 100 GOMOD GOMODCACHE 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 64/pkg/tool/linumyorg 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/contents/.github/workflows/shared/reporting.md
    • Triggering command: /tmp/go-build2570095748/b404/cli.test /tmp/go-build2570095748/b404/cli.test -test.testlogfile=/tmp/go-build2570095748/b404/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true GOINSECURE GOMOD GOMODCACHE node /opt�� prettier --check 64/bin/go **/*.ts **/*.json --ignore-path git (http block)
    • Triggering command: /tmp/go-build1239705215/b404/cli.test /tmp/go-build1239705215/b404/cli.test -test.testlogfile=/tmp/go-build1239705215/b404/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true -nolocalimports -importcfg /tmp/go-build1696744851/b180/importcfg -pack env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /tmp/go-build3518111190/b404/cli.test /tmp/go-build3518111190/b404/cli.test -test.testlogfile=/tmp/go-build3518111190/b404/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true GOINSECURE GOMOD GOMODCACHE go env -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 go /usr/bin/git -json stmain.go ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel ache/go/1.25.8/x64/pkg/tool/linuTest User /usr/bin/git approach-validatls GO111MODULE e/git 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 ache/go/1.25.8/xtest@example.com /usr/bin/git 6744851/b050/_pkgit om/modelcontextprev-parse ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel ache/go/1.25.8/x64/pkg/tool/linuremote.origin.url /usr/bin/git 6744851/b169/_pkls qrnP/bIu9B-2Kyy2-lh 6744851/b169=> 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 efaultBranchFromgit efaultBranchFromrev-parse ache/node/24.14.--show-toplevel /usr/bin/git conf�� WorkflowFiles_SimpleWorkflow1842334658/001 ^remote\..*\.gh-resolved$ /usr/bin/git l GO111MODULE ache/node/24.14./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 3250-34994/test-source-field-variant-3195859434/.github/workflows GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go env efaultBranchFromLsRemoteWithReal-p efaultBranchFromLsRemoteWithRealmain ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (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 age.go x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile tion�� -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/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv repo1471233925/001 GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env or.md GO111MODULE 64/bin/sh 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 -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env lGitmain_branch451510654/001' lGitmain_branch451510654/001' 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE x_amd64/asm GOINSECURE GOMOD GOMODCACHE x_amd64/asm env -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go 7970�� -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, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go _bra�� -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, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE x_amd64/asm GOINSECURE GOMOD GOMODCACHE x_amd64/asm 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/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 64/bin/go GOINSECURE GOMOD GOMODCACHE aDttp7jQC4de 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/v3.0.0 --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/github/gh-aw/git/ref/tags/v3.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE 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, .object.type] | @tsv 3250-34994/test-source-field-variant-3195859434/.github/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)
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE 86_64/sh GOINSECURE GOMOD ic/asm.s go env echo "Running wasm-opt -Oz (size optimization)..."; \ BEFORE=$(wc -c < gh-aw.wasm); \ wasm-optgit GO111MODULE 64/pkg/tool/linux_amd64/asm GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/asm (http block)
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv 947901/001 GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE tions/setup/js/node_modules/.bin/sh 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 GOMOD GOMODCACHE go env /ref/tags/v9 GO111MODULE sv GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion -I /tmp/go-build169rev-parse -I /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linustatus -o runs/20260426-073611-53034/test-2209810529/.gith.github/workflows/test.md -trimpath /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet -p github.com/goccyrev-parse -lang=go1.21 /opt/hostedtoolcache/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 sh t-32�� 01274371/001 GOPROXY /bin/sh GOSUMDB GOWORK 64/bin/go /bin/sh (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 **/*.json --ignore-path ../../../.pretti-bool go list�� -m -json 64/bin/go -json GO111MODULE 64/bin/go go (http block)
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo 64/bin/go **/*.json --ignore-path ../../../.pretti-bool go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh workflow list --repo owner/repo --json name,path,state ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go env 5/001/test-inlined-imports-enabled-with-env-template-expressions-in-body.md GO111MODULE .cfg GOINSECURE GOMOD GOMODCACHE go (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 che/go-build/db/GOINSECURE **/*.cjs 64/bin/go **/*.json --ignore-path ../../../.prettiGOPATH /opt/hostedtoolcGOPROXY -o /tmp/go-build240GOSUMDB -trimpath 64/bin/go -p github.com/githuconfig -lang=go1.25 go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env json' --ignore-p-p GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go /pre�� -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/test/repo
    • Triggering command: /usr/bin/gh gh api /repos/test/repo --jq .default_branch 4014623461/.github/workflows GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go env aJd7B2VBq GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/test/repo --jq .default_branch /home/REDACTED/work/gh-aw/gh-aw/.github/workflows rev-parse /opt/hostedtoolcache/node/24.14.1/x64/bin/node sm-opt -Oz (sizeinfocmp GO111MODULE x_amd64/asm /opt/hostedtoolcache/node/24.14.1/x64/bin/node /tmp�� vars.MY_VAR x_amd64/asm /usr/bin/git ty-test.md x86.go x_amd64/compile git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/test/repo --jq .default_branch --get l /usr/bin/git 01 GO111MODULE 64/bin/go git conf�� user.name Test User /usr/bin/git le-frontmatter.mgit GO111MODULE 64/bin/go git (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 e/git init�� ndor/bin/git git ode_modules/.bin/git =receive test@example.com--git-dir=/tmp/bare-incremental-4DWZos /git (dns block)

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

…per compilation

Fix the 21% regression in BenchmarkCompileSimpleWorkflow by targeting two
root-cause hotspots identified via CPU and memory profiling:

1. Redundant NewPermissionsParser calls (7.16% CPU, 446MB allocs/10k runs):
   NewPermissionsParser(data.Permissions) was called 4+ times per compilation
   even though data.CachedPermissions was already populated by applyDefaults.
   Each call invokes goccy/go-yaml.Unmarshal internally.

2. Redundant domain computation (3.79% CPU, 234MB allocs/10k runs):
   mergeDomainsWithNetworkToolsAndRuntimes was called 2-3 times per
   compilation via computeAllowedDomainsForSanitization from the activation
   job builder, safe-outputs steps, and agent run step YAML generation.

Changes:
- Add Permissions.HasContentsReadAccess() method that checks the parsed
  struct directly (avoids YAML re-parsing in ShouldGeneratePRCheckoutStep
  and collectPromptSections)
- Extend filterJobLevelPermissions with optional variadic cachedPerms
  parameter — callers with data.CachedPermissions skip YAML parsing
- Update pr.go, unified_prompt_step.go, compiler_yaml_main_job.go,
  compiler_github_mcp_steps.go, and compiler_main_job.go to use
  data.CachedPermissions when available
- Add CachedAllowedDomainsStr string to WorkflowData struct
- Cache computeAllowedDomainsForSanitization result on first call;
  subsequent calls return the cached string immediately
- Add tests for Permissions.HasContentsReadAccess() and
  filterJobLevelPermissions with cached permissions

Benchmark results (AMD EPYC 7763, 3 runs x 10s):
  Before: ~1,157,000 ns/op  782,551 B/op  5,017 allocs/op
  After:  ~1,060,000 ns/op  752,717 B/op  4,277 allocs/op
  Delta:       -8.4%           -3.8%         -14.8%

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/6b44487c-839a-4da9-890f-701d6a22c987

Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix regression in CompileSimpleWorkflow performance perf: eliminate redundant permissions parsing and domain computation per compilation Apr 26, 2026
Copilot AI requested a review from gh-aw-bot April 26, 2026 07:50
@pelikhan pelikhan marked this pull request as ready for review April 26, 2026 10:07
Copilot AI review requested due to automatic review settings April 26, 2026 10:07
@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 (132 test lines / 39 production lines = 3.4:1 ratio)
🚨 Coding-guideline violations None

Test Classification Details

Test File Classification Issues Detected
TestPermissions_HasContentsReadAccess pkg/workflow/permissions_operations_test.go:775 ✅ Design None — 11 table rows covering nil, shorthand, explicit scope combinations, and override interactions
TestFilterJobLevelPermissionsWithCache pkg/workflow/permissions_operations_test.go:868 ✅ Design None — verifies cache-consistency behavioral invariant

Flagged Tests — Requires Review

No tests are flagged for quality issues. Both new test functions are high-value behavioral tests.


Test Inflation Note

The test file grew 132 lines while the production file (permissions_operations.go) grew 39 lines, a 3.4:1 ratio (threshold: 2:1). This triggered a 10-point deduction. However, the inflation is well-justified: TestPermissions_HasContentsReadAccess covers 11 distinct behavioral scenarios for a single new method, which is good practice for a method with many input combinations (nil, shorthand enums, scope-level overrides). This is a borderline case where test thoroughness explains the ratio, not padding.


Language Support

Tests analyzed:

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

Verdict

Check passed. 0% of new tests are implementation tests (threshold: 30%). Both new tests verify observable behavioral contracts — HasContentsReadAccess() correctness across all permission combinations, and cache-optimization equivalence with non-cached execution.


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

🧪 Test quality analysis by Test Quality Sentinel · ● 381.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 acceptable — 0% of new tests are implementation tests (threshold: 30%). Both new tests (TestPermissions_HasContentsReadAccess and TestFilterJobLevelPermissionsWithCache) verify behavioral contracts with strong edge-case coverage.

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

Improves workflow compilation performance by avoiding redundant permissions parsing and repeated allowed-domain computation within a single compilation.

Changes:

  • Reuses WorkflowData.CachedPermissions (when available) to avoid repeated YAML unmarshalling for permissions checks.
  • Adds (*Permissions).HasContentsReadAccess() to check contents read access without re-parsing YAML.
  • Caches computed allowed-domains CSV in WorkflowData.CachedAllowedDomainsStr to avoid repeated domain merging/sorting.
Show a summary per file
File Description
pkg/workflow/unified_prompt_step.go Uses cached parsed permissions (when present) to avoid re-parsing when deciding whether to include PR context.
pkg/workflow/pr.go Uses cached parsed permissions (when present) to avoid re-parsing when deciding whether to generate PR checkout step.
pkg/workflow/permissions_operations.go Adds Permissions.HasContentsReadAccess() and updates filterJobLevelPermissions to optionally accept cached permissions.
pkg/workflow/permissions_operations_test.go Adds tests for HasContentsReadAccess and verifies filterJobLevelPermissions behavior is unchanged when using cached permissions.
pkg/workflow/domains.go Caches allowed-domains computation result on WorkflowData to prevent repeated recomputation.
pkg/workflow/compiler_yaml_main_job.go Reuses cached permissions for checkout GitHub App token minting when available.
pkg/workflow/compiler_main_job.go Passes cached permissions into filterJobLevelPermissions to avoid YAML re-parsing.
pkg/workflow/compiler_github_mcp_steps.go Reuses cached permissions for GitHub MCP app token minting step (but currently introduces a mutation bug—see PR comment).
pkg/workflow/compiler_types.go Adds CachedAllowedDomainsStr to WorkflowData for per-compilation allowed-domains caching.

Copilot's findings

Tip

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

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

Comment on lines +103 to +108
// Get permissions from the agent job - use cached permissions when available to avoid YAML re-parsing
var permissions *Permissions
if data.Permissions != "" {
parser := NewPermissionsParser(data.Permissions)
permissions = parser.ToPermissions()
if data.CachedPermissions != nil {
permissions = data.CachedPermissions
} else if data.Permissions != "" {
permissions = NewPermissionsParser(data.Permissions).ToPermissions()
Copy link

Copilot AI Apr 26, 2026

Choose a reason for hiding this comment

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

data.CachedPermissions is assigned directly to permissions here, but later in this function you call permissions.Set(...) while applying tools.github.github-app.permissions. That mutates the cached workflow permissions on WorkflowData, which can unintentionally change job-level permissions rendering/validation and any other callers that reuse CachedPermissions. Consider copying/cloning the permissions object before applying tool-specific overrides (or build a new *Permissions from the cached one) so the cache remains immutable.

Copilot uses AI. Check for mistakes.
Comment thread pkg/workflow/domains.go Outdated
Comment on lines +869 to +872
// Return cached result if available (engine/network/tools/runtimes do not change during compilation)
if data.CachedAllowedDomainsStr != "" {
return data.CachedAllowedDomainsStr
}
Copy link

Copilot AI Apr 26, 2026

Choose a reason for hiding this comment

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

The cache check if data.CachedAllowedDomainsStr != "" won't treat an empty-but-valid computed domain list as cached, so callers will recompute on every call when the result is legitimately empty. If an empty allow-list is a valid outcome, store a separate boolean flag (e.g. AllowedDomainsComputed) or change the cache field to a *string so you can distinguish "not computed" from "computed empty".

Copilot uses AI. Check for mistakes.
Generated by the Design Decision Gate workflow to document the performance
optimization pattern introduced in PR #28560.
@github-actions
Copy link
Copy Markdown
Contributor

Commit pushed: 1a1de46

🏗️ 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/28560-compilation-scoped-memoization-for-permissions-and-domain-computation.md

📋 What the draft covers

The draft captures the following from the PR diff:

  • Decision: Introduce compilation-scoped lazy memoization fields (CachedPermissions, CachedAllowedDomainsStr) on WorkflowData to avoid redundant YAML parsing and domain-list computation across multiple compiler steps within a single compilation run.
  • Driver: BenchmarkCompileSimpleWorkflow regressed 21% (2.76 ms → 3.34 ms); profiling identified goccy/go-yaml.Unmarshal being called 4+ times per compilation and mergeDomainsWithNetworkToolsAndRuntimes being called 2–3× per compilation.
  • Alternatives considered: (1) eager pre-computation of all derived fields unconditionally in applyDefaults; (2) threading computed values as explicit call-site parameters.
  • Consequences: −8.4% ns/op, −14.8% allocs/op (positive); mutable cache fields introduce implicit ordering requirements and an empty-string sentinel limitation (negative).

What to do next

  1. Review the draft ADR committed to your branch at docs/adr/28560-compilation-scoped-memoization-for-permissions-and-domain-computation.md
  2. Complete any missing sections — add context the AI couldn't infer, refine the decision rationale, and list the real alternatives you considered
  3. Commit the finalized ADR to docs/adr/ on your branch
  4. Reference the ADR in this PR body by adding a line such as:

    ADR: ADR-28560: Compilation-Scoped Memoization for Permissions and Domain Computation

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., 28560-title.md for this PR).

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

References: §24954049328

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

@pelikhan
Copy link
Copy Markdown
Collaborator

@copilot review all comments

…r domain cache

Address two reviewer issues:

1. compiler_github_mcp_steps.go: assigning data.CachedPermissions directly to
   a local var then calling permissions.Set() on it mutated the shared cached
   object, corrupting CachedPermissions for all subsequent callers in the same
   compilation. Fix by adding Permissions.Clone() (deep copy) and calling it
   before applying github-app.permissions overrides.

2. domains.go: the cache check `!= ""` silently re-computed the allowed-domain
   list every call when the result was legitimately empty (e.g. a custom engine
   with no network config). Fix by adding WorkflowData.CachedAllowedDomainsComputed
   bool as the sentinel; the string field is only consulted once the boolean is set.

Add TestPermissions_Clone tests to guard the Clone() invariants.

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/1fc54b8d-1baa-447f-88a2-c074d372e33e

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

Copilot AI commented Apr 26, 2026

@copilot review all comments

Both reviewer issues are fixed in 7d10648:

  1. Cache mutation (compiler_github_mcp_steps.go) — Added Permissions.Clone() (deep copy of all fields including the underlying permissions map) and call it before applying github-app.permissions overrides via Set(). The shared CachedPermissions object is now never mutated.

  2. Empty domain list cache miss (domains.go) — Replaced the != "" sentinel with a dedicated CachedAllowedDomainsComputed bool field on WorkflowData. The boolean is set to true on first computation, so a legitimately empty domain string is correctly treated as cached on all subsequent calls.

Also added TestPermissions_Clone to guard the Clone invariants (mutation independence, nil handling, shorthand/all-read preservation).

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 (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 prettier --write /usr/bin/git !../../../pkg/wogit --ignore-path ../../../.pretti--show-toplevel git rev-�� --show-toplevel 64/pkg/tool/linux_amd64/cgo /usr/bin/git ignore-path ../.node --local k/gh-aw/gh-aw/acinstall 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 (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 rt credential.helpe.prettierignore ache/node/24.14.--log-level=error (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git get --local ache/uv/0.11.7/x: git rev-�� --show-toplevel erignore /usr/bin/git --local committer.name /snap/bin/git 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 git /usr/bin/git --show-toplevel (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 --show-toplevel (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v8
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git w/js/**/*.json&#39; bash core.hooksPath /home/REDACTED/.dotnet/tools/bash git rev-�� --show-toplevel bash /usr/bin/git --noprofile (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 ../pkg/workflow/js/**/*.json&#39; --ignore-path ../../../.prettierignore (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv ../pkg/workflow/js/**/*.json&#39; ---errorsas (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv run format:cjs /home/REDACTED/work/_temp/uv-python-dir/sh (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 ../pkg/workflow/js/**/*.json&#39; --ignore-path ../../../.prettierignore (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv npx prettier --write &#39;**/*.cjs&#39; &#39;**/*.ts&#39; &#39;**/*.json&#39; --ignore-path ../../../.pr**/*.json (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 ../pkg/workflow/js/**/*.json&#39; --ignore-path ../../../.prettierignore (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 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv npx prettier --write &#39;**/*.cjs&#39; &#39;**/*.ts&#39; &#39;**/*.json&#39; --ignore-path ../../../.pr**/*.json (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 --show-toplevel (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 npx prettier --write &#39;**/*.cjs&#39; &#39;**/*.ts&#39; &#39;**/*.json&#39; --ignore-path ../../../.pr**/*.json (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 */*.ts&#39; &#39;**/*.json&#39; --ignore-path ../../../.prettierignore (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 */*.ts&#39; &#39;**/*.json&#39; --ignore-path ../../../.prettierignore (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 git /usr/bin/git h ../../../.pretgit user.name k/gh-aw/gh-aw/no--show-toplevel git rev-�� --show-toplevel git /usr/bin/git --abbrev-ref on rkflow/js/**/*.j/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 ignore-path ../../../.prettierignore --local k/gh-aw/gh-aw/actions/node_modules/.bin/node credential.usernsh (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 ignore-path ../../../.prettierignore --local k/gh-aw/node_modules/.bin/node credential.usernsh (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 26, 2026 11:00
@pelikhan pelikhan merged commit ace845d into main Apr 26, 2026
24 of 25 checks passed
@pelikhan pelikhan deleted the copilot/fix-performance-regression-compile-simple-workflow branch April 26, 2026 11:43
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.

[performance] Regression in CompileSimpleWorkflow: 21.0% slower

4 participants