feat: enhance experiment frontmatter schema with metadata fields#29618
feat: enhance experiment frontmatter schema with metadata fields#29618
Conversation
- Add ExperimentConfig struct with variants, description, metric, weight, issue, start_date, end_date fields - Update JSON schema to accept both bare-array and new object form - Update extractExperimentsFromFrontmatter to handle both forms - Add extractExperimentConfigsFromFrontmatter returning full configs - Add ExperimentConfigs field to WorkflowData - Update buildExperimentSpecJSON to embed full metadata - Update pick_experiment.cjs: weighted selection, date-range gating, both spec formats (legacy array + new object) - Add comprehensive Go and JS unit tests for new functionality Agent-Logs-Url: https://github.com/github/gh-aw/sessions/8bace3f5-2aa9-424e-b33d-256b562635fb Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Agent-Logs-Url: https://github.com/github/gh-aw/sessions/8bace3f5-2aa9-424e-b33d-256b562635fb Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Extends the workflow frontmatter experiments: schema to support a richer object-form experiment configuration (metadata + optional weighted selection + optional date gating) while keeping the legacy bare-array form working.
Changes:
- Added a typed
ExperimentConfigmodel and compiler plumbing to carry experiment metadata through compilation into the runtime spec. - Updated frontmatter JSON schema to accept either legacy arrays or object-form experiment configs.
- Enhanced the JS runtime picker to normalize legacy specs, support weighted selection, and apply start/end date window gating.
Show a summary per file
| File | Description |
|---|---|
| pkg/workflow/frontmatter_types.go | Introduces ExperimentConfig and adds ExperimentConfigs to FrontmatterConfig. |
| pkg/workflow/compiler_types.go | Adds ExperimentConfigs to WorkflowData to propagate metadata through compilation. |
| pkg/workflow/compiler_orchestrator_workflow.go | Populates WorkflowData.Experiments and WorkflowData.ExperimentConfigs from frontmatter. |
| pkg/workflow/compiler_experiments.go | Parses both experiment formats, builds JSON spec embedding full configs when available, and threads configs into experiment steps. |
| pkg/workflow/compiler_experiments_test.go | Adds/updates tests for object-form parsing and config-inclusive JSON spec generation. |
| pkg/parser/schemas/main_workflow_schema.json | Updates schema to allow experiments.* to be either an array or an object with variants + metadata fields. |
| actions/setup/js/pick_experiment.cjs | Normalizes legacy configs, adds weighted selection, adds date-window gating, and updates summary rendering for config objects. |
| actions/setup/js/pick_experiment.test.cjs | Adds test coverage for object-form specs, weighted selection, date gating, and normalization. |
| .github/workflows/smoke-copilot.lock.yml | Updates locked workflow env spec example to the new object-form format. |
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: 4
| // correct escaping of all special characters. We iterate names (a sorted slice) | ||
| // rather than the map directly to produce deterministic output. | ||
| // Caller is responsible for escaping single quotes when embedding the result in a YAML | ||
| // single-quoted scalar (each ' must be doubled to ” per YAML spec §7.3.3). |
| Experiments map[string][]string `json:"experiments,omitempty"` | ||
|
|
||
| // ExperimentConfigs holds the fully-typed experiment metadata, populated alongside | ||
| // Experiments during frontmatter parsing. Keys match those of Experiments. | ||
| ExperimentConfigs map[string]*ExperimentConfig `json:"-"` |
| // Extract experiments configuration | ||
| workflowData.Experiments = extractExperimentsFromFrontmatter(frontmatter) | ||
| workflowData.ExperimentConfigs = extractExperimentConfigsFromFrontmatter(frontmatter) |
|
|
||
| // extractExperimentsFromFrontmatter reads the "experiments" map from a raw frontmatter map. | ||
| // Both the bare-array form and the new object form with metadata fields are accepted. | ||
| // Invalid entries are silently skipped. |
🧪 Test Quality Sentinel ReportTest Quality Score: 88/100✅ Excellent test quality
Test Classification DetailsView all 27 test classifications🟨 JavaScript —
|
| Test | Classification | Issues Detected |
|---|---|---|
accepts new object-form spec and picks variant |
✅ Design | — |
uses control variant when today is before start_date |
✅ Design | — |
uses control variant when today is after end_date |
✅ Design | — |
always selects the only non-zero-weight variant when one weight is 100 |
✅ Design | — |
always selects the only non-zero-weight variant when one weight is 0 |
✅ Design | — |
falls back to first variant when all weights are zero |
✅ Design | — |
distributes variants proportionally across many runs |
✅ Design | — |
returns true when no dates are specified |
✅ Design | — |
returns true when today equals start_date |
✅ Design | — |
returns false when today is before start_date |
✅ Design | — |
returns true when today equals end_date |
✅ Design | — |
returns false when today is after end_date |
✅ Design | — |
returns true when today is within [start_date, end_date] |
✅ Design | — |
returns false when today is before the window |
✅ Design | — |
returns false when today is after the window |
✅ Design | — |
wraps a bare array in a variants object |
✅ Design | — |
passes through an object-form config unchanged |
✅ Design | — |
🐹 Go — compiler_experiments_test.go (10 new test scenarios)
| Test | File | Classification | Issues Detected |
|---|---|---|---|
TestExtractExperimentsFromFrontmatter/new object form with variants only |
pkg/workflow/compiler_experiments_test.go |
✅ Design | — |
TestExtractExperimentsFromFrontmatter/new object form with full metadata |
pkg/workflow/compiler_experiments_test.go |
✅ Design | — |
TestExtractExperimentsFromFrontmatter/new object form skips when variants missing |
pkg/workflow/compiler_experiments_test.go |
✅ Design | — |
TestExtractExperimentsFromFrontmatter/new object form skips when fewer than two variants |
pkg/workflow/compiler_experiments_test.go |
✅ Design | — |
TestBuildExperimentSpecJSONWithConfigs |
pkg/workflow/compiler_experiments_test.go |
assert.Contains key-presence only; no structural JSON verification |
|
TestExtractExperimentConfigsFromFrontmatter/nil returns nil |
pkg/workflow/compiler_experiments_test.go |
✅ Design | — |
TestExtractExperimentConfigsFromFrontmatter/bare array form returns config with variants only |
pkg/workflow/compiler_experiments_test.go |
✅ Design | — |
TestExtractExperimentConfigsFromFrontmatter/object form with all metadata fields |
pkg/workflow/compiler_experiments_test.go |
✅ Design | — |
TestExtractExperimentConfigsFromFrontmatter/mixed bare array and object form in same map |
pkg/workflow/compiler_experiments_test.go |
✅ Design | — |
TestGenerateExperimentSteps_WithConfigs |
pkg/workflow/compiler_experiments_test.go |
assert.Contains string checks only; no YAML parse verification |
Flagged Tests — Minor Suggestions
⚠️ TestBuildExperimentSpecJSONWithConfigs (pkg/workflow/compiler_experiments_test.go:~196)
Classification: Weak design test
Issue: Uses only assert.Contains(t, got, "variants") style key-presence checks on a raw JSON string. This passes even if the JSON is malformed or the values are wrong.
What would break if deleted? Passing the wrong JSON spec to the runtime would not be caught.
Suggested improvement: Use assert.JSONEq (as done in TestBuildExperimentSpecJSON) or unmarshal the result and assert on specific field values — e.g. verify weight is [70,30] and start_date is "2026-01-01".
⚠️ TestGenerateExperimentSteps_WithConfigs (pkg/workflow/compiler_experiments_test.go:~380)
Classification: Weak design test
Issue: Checks that the generated YAML step string contains substrings like "variants" and "weight", but does not parse the YAML or verify the actual values passed to the runtime.
What would break if deleted? A bug that emits structurally correct-looking but semantically wrong YAML (e.g. wrong weights) would not be caught.
Suggested improvement: After generating the steps, unmarshal the YAML env value for GH_AW_EXPERIMENT_SPEC and assert specific field values (e.g. weight: [70, 30], start_date: "2026-01-01").
Highlights
The test suite is of high quality overall. Notable strengths:
- Comprehensive boundary testing in
isWithinDateWindow— all 8 boundary combinations (before/on/within/after for both start and end dates) are explicitly covered. - Statistical robustness test for
pickVariantWeightedwith N=1000 trials and a 10% absolute tolerance — good calibration. - Graceful degradation is tested:
falls back to first variant when all weights are zeroandnew object form skips when variants missingverify the system doesn't crash on bad input. - State-side-effect verification in
uses control variant when today is before start_datechecks thatcounts["style"]isundefined— not just the output value but the absence of a write side-effect. - Build tag is present (
//go:build !integration) on the Go test file. ✅ - No mock libraries used in Go tests. ✅
- All assertions have descriptive messages in Go tests. ✅
Score Breakdown
| Component | Weight | Score |
|---|---|---|
| Behavioral coverage (25/27 = 93%) | 40 pts | 37 |
| Error/edge case coverage (20/27 = 74%) | 30 pts | 22 |
| Low duplication (0 clusters) | 20 pts | 20 |
| Proportional growth (max ratio 1.75:1) | 10 pts | 10 |
| Total | 100 pts | 89 → 88 |
Minor deduction for the two weak-assertion tests described above.
Language Support
Tests analyzed:
- 🐹 Go (
*_test.go): 10 test scenarios — unit (//go:build !integration) - 🟨 JavaScript (
*.test.cjs): 17 tests (vitest)
Verdict
✅ Check passed. 7% of new tests are implementation tests (threshold: 30%). Two tests use string-containment assertions where structural verification would provide stronger guarantees, but this does not rise to the level of a guideline violation.
📖 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: §25232335879
🧪 Test quality analysis by Test Quality Sentinel · ● 793.5K · ◷
|
I could have copilot review all comments. @copilot |
…tension Documents the decision to extend the experiments: frontmatter schema with a dual-form design (bare-array + object) supporting weighted selection, date-range gating, and machine-readable metadata. Also notes the amendment to ADR-29534 Rule 5 for the weighted-random selection path. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Commit pushed:
|
- Fix garbled Unicode in YAML escape comment ('' not curly double-quote)
- Fix misleading 'silently skipped' comment to mention debug logging
- Change FrontmatterConfig.Experiments to map[string]any so JSON
unmarshal doesn't fail on object-form experiment entries
- Populate ExperimentConfigs in ParseFrontmatterConfig
- Eliminate double extraction in orchestrator via experimentVariantsFromConfigs
- Add test for ParseFrontmatterConfig with object-form experiments
Agent-Logs-Url: https://github.com/github/gh-aw/sessions/b7ad6aa8-f361-4adc-8498-3d1a176197fd
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Addressed all 4 reviewer comments in commit 2c7e281:
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:
If you need me to access, download, or install something from one of these locations, you can either:
|
Extends the
experiments:frontmatter schema to support rich metadata alongside the existing bare-array form, enabling weighted variant selection, date-range gating, and machine-readable experiment metadata.Schema changes
Both forms now compile correctly:
Go
ExperimentConfigstruct (frontmatter_types.go) — typed representation withVariants,Description,Metric,Weight,Issue,StartDate,EndDateextractExperimentConfigsFromFrontmatter(compiler_experiments.go) — parses both forms intomap[string]*ExperimentConfig;extractExperimentsFromFrontmatterdelegates to it so all callers remain unchangedWorkflowData.ExperimentConfigs— carries full metadata through the compiler;buildExperimentSpecJSONembeds it in the generated step env var so the JS runtime can consume all fieldsadditionalPropertiesupdated tooneOf(bare array | object withvariantsrequired)JavaScript (
pick_experiment.cjs)normalizeConfig()— coerces legacy bare-array spec entries to the object form; both formats work at runtimepickVariantWeighted(variants, weight)— weighted random selection whenweightis provided (falls back to round-robin when absent or mismatched length)isWithinDateWindow(start, end)— uses control variant (first) without incrementing counters when today is outside[start_date, end_date]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/usr/bin/gh gh repo view --json owner,name --jq .owner.login + "/" + .name ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go env /ref/tags/v9 GO111MODULE tartedAt,updatedAt,event,headBranch,headSha,displayTitle GOINSECURE GOMOD GOMODCACHE ortcfg(http block)/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 GOMOD GOMODCACHE go env -json GO111MODULE .cfg GOINSECURE GOMOD GOMODCACHE go(http block)/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 GOMOD GOMODCACHE go env /ref/tags/v9 GO111MODULE sv GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/orgs/test-owner/actions/secrets/usr/bin/gh gh api /orgs/test-owner/actions/secrets --jq .secrets[].name --check scripts/**/*.js 64/bin/go .prettierignore GO111MODULE 64/bin/go go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/actions/ai-inference/git/ref/tags/v1/usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv view owner/repo /usr/bin/git util.test GO111MODULE ortcfg.link git rev-�� --show-toplevel 6lOae4WsPt2nvzZ6yM/kanFXMcb9Ib9jtest@example.com /usr/bin/gh -json GO111MODULE g_.a gh(http block)https://api.github.com/repos/actions/checkout/git/ref/tags/v3/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv /tmp/TestHashStability_SameInputSameOutput1431765044/001/stability-test.md go /usr/bin/git -json GO111MODULE 64/bin/go git rev-�� --show-toplevel go /opt/hostedtoolcache/node/24.14.1/x64/bin/node -json GO111MODULE 64/bin/go node(http block)https://api.github.com/repos/actions/checkout/git/ref/tags/v4/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel ache/go/1.25.8/xconfig /usr/bin/git -json GO111MODULE 1/x64/bin/node git rev-�� --show-toplevel go /usr/bin/git SameOutput143176sed GO111MODULE 1284913/b371/vet.cfg git(http block)/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet /usr/bin/git 2976949120 GO111MODULE 64/pkg/tool/linu--show-toplevel git rev-�� --show-toplevel 64/pkg/tool/linux_amd64/vet /usr/bin/git 1284913/b438/_pksed GO111MODULE ache/go/1.25.8/x64/pkg/tool/linu--show-toplevel git(http block)https://api.github.com/repos/actions/checkout/git/ref/tags/v5/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv 3521-32822/test-.artifacts[].name GO111MODULE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linuTest User env 1284913/b413/_pkg_.a GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet(http block)/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel x_amd64/vet /usr/bin/git 3521-32822/test-git GO111MODULE ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel ache/go/1.25.8/xowner/test-repo /usr/bin/git /ref/tags/v9 GO111MODULE 1/x64/bin/node git(http block)/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git ZFWo/sMr_w3qRcZYgit s/12345/artifactrev-parse /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel 1284913/b466/_terev-parse r,url,status,con--show-toplevel git(http block)https://api.github.com/repos/actions/checkout/git/ref/tags/v6/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv '/tmp/TestParseDefaultBranchFromLsRemoteWithRealGitcustom_branch1302595036/001' '/tmp/TestParseDefaultBranchFromLsRemoteWithRealGitcustom_branch1302595036/001' /snap/bin/bash GOINSECURE GOMOD GOMODCACHE bash --no�� licyTrustedUsersCompiledOutput260563529/001 GOPROXY /usr/bin/git GOSUMDB GOWORK 64/bin/go git(http block)/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv sistency_GoAndJavaScript2271990284/001/test-complex-frontmatter-with-tools.md -trimpath t -p main -lang=go1.25 /bin/sh -c git-receive-pack '/tmp/TestParseDefaultBranchFromLsRemoteWithRealGitmain_branch1855048840/001' git-receive-pack '/tmp/TestParseDefaultBranchFromLsRemoteWithRealGitmain_branch1855048840/001' /usr/bin/git go1.25.8 -c=4 -nolocalimports git(http block)/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv --show-toplevel -extld=gcc /usr/bin/git --porcelain go 64/bin/go git -C /tmp/compile-all-instructions-test-3329004280/.github/workflows config /usr/bin/git remote.origin.urgit GO111MODULE 64/bin/go git(http block)https://api.github.com/repos/actions/download-artifact/git/ref/tags/v8/usr/bin/gh gh api /repos/actions/download-artifact/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv x_amd64/compile git /usr/bin/git --show-toplevel x_amd64/compile /usr/bin/git git rev-�� --show-toplevel git r: $owner, name:-f --show-toplevel ache/go/1.25.8/xapi /usr/bin/git git(http block)/usr/bin/gh gh api /repos/actions/download-artifact/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv user.email test@example.com /usr/bin/git --show-toplevel go /usr/bin/git git rev-�� --show-toplevel git r: $owner, name:-f --show-toplevel ache/go/1.25.8/xapi /usr/bin/git git(http block)https://api.github.com/repos/actions/github-script/git/ref/tags/v8/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 /v1.2.3 GO111MODULE sv git rev-�� --show-toplevel 1284913/b398/importcfg /usr/bin/git 935016990/001 GO111MODULE r: $owner, name:--show-toplevel git(http block)https://api.github.com/repos/actions/github-script/git/ref/tags/v9/usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv GOSUMDB GOWORK 64/bin/go GOINSECURE GOMOD GOMODCACHE node /opt�� prettier --check 64/bin/go --ignore-path .prettierignore 64/bin/go go(http block)/usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv -c=4 -nolocalimports -importcfg /tmp/go-build1261284913/b475/importcfg -pack /home/REDACTED/work/gh-aw/gh-aw/tmp/smoke_test_22524436360.go bDanQgOjZI_h /hom�� --check scripts/**/*.js 64/bin/go .prettierignore GO111MODULE 64/bin/go go(http block)/usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv prettier --check 64/bin/go **/*.ts **/*.json --ignore-path go list�� -mod=readonly -f 64/bin/go -d unsafe 64/bin/go go(http block)https://api.github.com/repos/actions/setup-go/git/ref/tags/v4/usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv Value: ${{ github.actor }} go /usr/bin/git -json GO111MODULE ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel go /usr/bin/git or.md GO111MODULE At,event,headBra--show-toplevel git(http block)https://api.github.com/repos/actions/setup-node/git/ref/tags/v4/usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv /repos/actions/github-script/git/ref/tags/v9 --jq /usr/bin/git -json GO111MODULE 64/bin/go git rev-�� --show-toplevel go /usr/bin/docker with-tools.md GO111MODULE 64/bin/go docker(http block)/usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv xterm-color go /usr/bin/git -json GO111MODULE ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel go /usr/bin/gh rity4088589697/0git GO111MODULE ache/go/1.25.8/x--show-toplevel gh(http block)/usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel ache/go/1.25.8/xorigin /usr/bin/git 466468529/.githugit GO111MODULE 1/x64/bin/node git rev-�� --show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile /usr/bin/git vaScript22719902git GO111MODULE 1/x64/bin/node git(http block)https://api.github.com/repos/actions/setup-node/git/ref/tags/v6/usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv command -v debian-sa1 > /dev/null && debian-sa1 1 1 =my-default /opt/pipx_bin/bash GOSUMDB GOWORK 64/bin/go bash --no�� licyTrustedUsersCompiledOutput260563529/001 go /usr/bin/git -json GO111MODULE 64/bin/go git(http block)/usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv sistency_GoAndJavaScript2271990284/001/test-complex-frontmatter-with-tools.md -buildtags /usr/lib/git-core/git -errorsas -ifaceassert -nilfunc /usr/lib/git-core/git pack�� --all-progress-implied --revs /usr/bin/git --thin --delta-base-offrev-parse -q git(http block)/usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv v1.0.0 git /usr/bin/git 855048840/001' 855048840/001' 64/bin/go git -C /tmp/compile-all-instructions-test-3329004280 show /tmp/go-build1261284913/b447/stringutil.test -json GO111MODULE 64/bin/go /tmp/go-build1261284913/b447/stringutil.test(http block)https://api.github.com/repos/actions/upload-artifact/git/ref/tags/v4/usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel /home/REDACTED/work/gh-aw/gh-aw/pkg/logger/logger.go /usr/bin/git -json GO111MODULE 64/bin/go git -C /tmp/gh-aw-test-runs/20260501-203521-32822/test-1433829775/custom/workflows rev-parse /usr/bin/git -json GO111MODULE 64/bin/go git(http block)https://api.github.com/repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b/usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv --show-toplevel infocmp /usr/bin/git xterm-color x_amd64/vet /opt/hostedtoolc--noprofile git rev-�� --show-toplevel /opt/hostedtoolcache/node/24.14.1/x64/bin/node /usr/bin/git secrets.TOKEN go /usr/bin/infocmpgraphql git(http block)/usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git --git-dir x_amd64/vet /usr/bin/git git rev-�� --show-toplevel git /opt/hostedtoolcache/node/24.14.1/x64/bin/npm user.email test@example.com-C /usr/bin/gh /opt/hostedtoolcrev-parse(http block)https://api.github.com/repos/aws-actions/configure-aws-credentials/git/ref/tags/v4/usr/bin/gh gh api /repos/aws-actions/configure-aws-credentials/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel ache/go/1.25.8/xrev-parse /usr/bin/git -json GO111MODULE 1/x64/bin/node git rev-�� --show-toplevel go /usr/bin/git vaScript22719902git GO111MODULE(http block)/usr/bin/gh gh api /repos/aws-actions/configure-aws-credentials/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv tags/v6 ache/go/1.25.8/xremote.origin.url sv st-3329004280/.ggit GO111MODULE /opt/hostedtoolc--show-toplevel git rev-�� --show-toplevel go(http block)https://api.github.com/repos/azure/login/git/ref/tags/v2/usr/bin/gh gh api /repos/azure/login/git/ref/tags/v2 --jq [.object.sha, .object.type] | @tsv --show-toplevel ache/go/1.25.8/x64/pkg/tool/linuremote.myorg.url /usr/bin/git -json GO111MODULE ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet /usr/bin/git -json GO111MODULE(http block)https://api.github.com/repos/docker/login-action/git/ref/tags/v3/usr/bin/gh gh api /repos/docker/login-action/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv --show-toplevel ache/go/1.25.8/x64/pkg/tool/linuremote.origin.url /usr/bin/git -json GO111MODULE /opt/hostedtoolc--show-toplevel git rev-�� --show-toplevel go /usr/bin/git -json GO111MODULE(http block)https://api.github.com/repos/github/gh-aw/usr/bin/gh gh api /repos/github/gh-aw --jq .default_branch --show-toplevel git /usr/bin/git --show-toplevel go /usr/bin/infocmp/home/REDACTED/work/gh-aw/gh-aw/.github/workflows git rev-�� --show-toplevel 712592-aujm07.txt r: $owner, name: $name) { hasDiscussionsEnabled } } xterm-color go /usr/bin/git git(http block)https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v0.1.2/usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv --show-toplevel FVPrIMI/Ghy3DT33rev-parse /tmp/go-build1261284913/b404/cli.test -json GO111MODULE 64/bin/bash /tmp/go-build1261284913/b404/cli.test -tes�� GOMODCACHE go /usr/bin/git mpiledOutput3620git GO111MODULE 64/pkg/tool/linu--show-toplevel git(http block)https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.0.0/usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv /tmp/TestGuardPolicyTrustedUsersExpressionCompiledOutput727526885/001(http block)https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.2.3/usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv /tmp/TestGuardPolicyTrustedUsersCompiledOutput260563529/001 remote /usr/bin/git -json GO111MODULE 64/bin/go git -C /home/REDACTED/work/gh-aw/gh-aw/.github/workflows rev-parse /usr/bin/git -json GO111MODULE 64/bin/go git(http block)https://api.github.com/repos/github/gh-aw/actions/runs/usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --limit 100 --created >=2026-04-24 GOMOD GOMODCACHE go env add-source-path-1068645924 GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)/usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --limit 100 --created >=2026-04-01 GOMOD GOMODCACHE x_amd64/vet env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)/usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --limit 100 --created >=2026-01-31 GOMOD GOMODCACHE BW/Vpa8Q5oQtl-xBremote.origin.url env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/github/gh-aw/actions/runs/1/artifacts/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/linuTest User env g_.a GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet(http block)/usr/bin/gh gh run download 1 --dir test-logs/run-1 GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go env 3513701729/.github/workflows GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/github/gh-aw/actions/runs/12345/artifacts/usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12345/artifacts --jq .artifacts[].name GO111MODULE 64/pkg/tool/linu-nolocalimports GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linu--json env ntdrain.test GO111MODULE ortcfg.link GOINSECURE GOMOD GOMODCACHE qyt2rkmdiK-Ysnbcremote.origin.url(http block)/usr/bin/gh gh run download 12345 --dir test-logs/run-12345 GO111MODULE ionpins.test GOINSECURE GOMOD GOMODCACHE ionpins.test 2612�� 3055627001 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/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 3928324063 GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)/usr/bin/gh gh run download 12346 --dir test-logs/run-12346 GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env 3055627001 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/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 util.test GO111MODULE ortcfg.link GOINSECURE GOMOD GOMODCACHE 6lOae4WsPt2nvzZ6yM/kanFXMcb9Ib9jtest@example.com(http block)/usr/bin/gh gh run download 2 --dir test-logs/run-2 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/actions/runs/3/artifacts/usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/3/artifacts --jq .artifacts[].name GO111MODULE 64/pkg/tool/linux_amd64/link GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linutest@example.com env stants.test GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile(http block)/usr/bin/gh gh run download 3 --dir test-logs/run-3 GO111MODULE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile env g_.a GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/github/gh-aw/actions/runs/4/artifacts/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 -json GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)/usr/bin/gh gh run download 4 --dir test-logs/run-4 GO111MODULE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile env y.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/5/artifacts/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 27687189/.github/workflows GO111MODULE x_amd64/link GOINSECURE GOMOD GOMODCACHE x_amd64/link(http block)/usr/bin/gh gh run download 5 --dir test-logs/run-5 l_test.go ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE k GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/github/gh-aw/actions/workflows/usr/bin/gh gh workflow list --json name,state,path --check scripts/**/*.js 64/bin/go .prettierignore GO111MODULE 64/bin/go go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)/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)/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/linux_amd64/vet env ithub/workflows 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/tmp/go-build1261284913/b404/cli.test /tmp/go-build1261284913/b404/cli.test -test.testlogfile=/tmp/go-build1261284913/b404/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true GOINSECURE GOMOD GOMODCACHE 5190224/b430/impGO111MODULE /hom�� k/gh-aw/gh-aw/pkGOINSECURE k/gh-aw/gh-aw/pkGOMOD 64/bin/go **/*.json --ignore-path ../../../.pretti-json /opt/hostedtoolcGO111MODULE(http block)https://api.github.com/repos/github/gh-aw/git/ref/tags/v0.47.4/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/x64/pkg/tool/linux_amd64/compile /usr/bin/git 3521-32822/test-git GO111MODULE 1284913/b412=> git rev-�� --show-toplevel go /usr/bin/git Huki/i5O5IcpibGsinfocmp GO111MODULE /opt/hostedtoolcxterm-color git(http block)https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.0.0/usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv g_.a GO111MODULE tartedAt,updatedAt,event,headBranch,headSha,displayTitle GOINSECURE er GOMODCACHE go env XHZm9Oz8O GO111MODULE ash GOINSECURE GOMOD GOMODCACHE ortcfg(http block)https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.2.3/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 Gitmaster_branch1108907969/001' Gitmaster_branch1108907969/001' 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/github/gh-aw/git/ref/tags/v2.0.0/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 lGitmaster_brancremote.origin.url lGitmaster_branch1108907969/001' 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)/usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq [.object.sha, .object.type] | @tsv iant-2601348829/.github/workflows GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env Gitmaster_branch1108907969/001' Gitmaster_branch1108907969/001' 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)/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 tImIOC-NY5wN env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/github/gh-aw/git/ref/tags/v3.0.0/usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v3.0.0 --jq [.object.sha, .object.type] | @tsv ted-objects.md GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go er_b�� -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/google-github-actions/auth/git/ref/tags/v2/usr/bin/gh gh api /repos/google-github-actions/auth/git/ref/tags/v2 --jq [.object.sha, .object.type] | @tsv --show-toplevel outil.test /usr/bin/git -json GO111MODULE /opt/hostedtoolc--show-toplevel git rev-�� --show-toplevel go /usr/bin/git -json(http block)https://api.github.com/repos/nonexistent/action/git/ref/tags/v999.999.999/usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go estl�� DefaultBranchFromLsRemoteWithRealGitbranch_with_hyphen314232783/001' DefaultBranchFromLsRemoteWithRealGitbranch_with_hyphen314232783/001' /opt/hostedtoolcache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/nonexistent/repo/actions/runs/12345/usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion GOINSECURE GOMOD GOMODCACHE go env 84/001/test-inlined-imports-enabled-with-body-content.md GO111MODULE /opt/hostedtoolcache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/owner/repo/actions/workflows/usr/bin/gh gh workflow list --json name,state,path --repo owner/repo 64/bin/go -d GO111MODULE 64/bin/go go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)/usr/bin/gh gh workflow list --json name,state,path --repo owner/repo 64/bin/go tierignore GO111MODULE 64/bin/go go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)/usr/bin/gh gh workflow list --repo owner/repo --json name,path,state x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet env /ref/tags/v9 GO111MODULE sv GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/test-owner/test-repo/actions/secrets/usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name go1.25.8 -c=4 -nolocalimports -importcfg /tmp/go-build1261284913/b435/importcfg -pack /tmp/go-build1261284913/b435/_testmain.go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/test/repo/usr/bin/gh gh api /repos/test/repo --jq .default_branch 3521-32822/test-source-field-variant-2601348829/.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)If you need me to access, download, or install something from one of these locations, you can either: