Skip to content

feat(experiments): extend schema with guardrails/hypothesis/min_samples, enrich reporting & OTEL#29670

Merged
pelikhan merged 9 commits intomainfrom
copilot/improve-experiment-infrastructure
May 2, 2026
Merged

feat(experiments): extend schema with guardrails/hypothesis/min_samples, enrich reporting & OTEL#29670
pelikhan merged 9 commits intomainfrom
copilot/improve-experiment-infrastructure

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented May 2, 2026

Extends the A/B experiment infrastructure with richer schema fields, min_samples-gated significance detection, guardrail metric enforcement, tracking issue lifecycle automation, and OTEL span attributes for variant filtering in APM tools.

Schema (ExperimentConfig)

New fields in frontmatter_types.go (parsed in compiler_experiments.go):

experiments:
  prompt_style:
    variants: [concise, detailed]
    hypothesis: "H0: no change in tokens. H1: concise reduces by >=15%"
    secondary_metrics: [duration_ms, discussion_word_count]
    guardrail_metrics:
      - name: success_rate
        threshold: ">=0.95"
      - name: empty_output_rate
        threshold: "==0"
    min_samples: 25
    owner: "@team-agents"

New Go types: GuardrailMetric{Name, Threshold} + extractStringSlice / extractGuardrailMetrics helpers. Guardrail entries with a missing or empty threshold are silently skipped so invalid configs don't propagate.

Bug fix: goccy/go-yaml returns YAML integer values as uint64 (not int/int64/float64). Added uint64 cases to the switch blocks for min_samples, issue, and weight in compiler_experiments.go — previously these integer fields were silently dropped from the compiled lock file.

JSON Schema (main_workflow_schema.json)

The main workflow JSON schema is updated with the new experiment object-form properties:

  • hypothesis (string) — hypothesis statement surfaced in step summaries and reports
  • secondary_metrics (string[]) — additional metrics to collect alongside the primary metric
  • guardrail_metrics (object[]) — each entry requires name + threshold; threshold is pattern-validated as ^(>=|<=|==|>|<)-?\d+(\.\d+)?$ to reject non-numeric or malformed expressions
  • min_samples (integer ≥ 1, default 20) — minimum runs per variant before PROMOTE is eligible
  • owner (string) — owner/team attribution

The top-level description and examples are updated to demonstrate all new fields.

Step Summary (pick_experiment.cjs)

  • Progress bars per variant toward min_samples: A: ████████░░░░░░░░░░░░ 8/25 (32%)
  • ✅ Ready for analysis flag when all variants reach min_samples
  • Hypothesis and guardrail metric thresholds surfaced in Experiment Details section
  • min_samples: 0 or negative values are treated as unset and the progress section is skipped entirely (prevents RangeError from repeat(negative))
  • Fixes a pre-existing TypeScript error in the ExperimentConfig typedef ({T|undefined}[propName] optional syntax) that was silently preventing the test suite from running

Daily Experiment Report (daily-experiment-report.md)

  • Step 1 collects all new schema fields
  • Step 3 evaluates guardrail thresholds — any failure forces ABANDON regardless of p-value
  • Step 4 gates PROMOTE on n >= min_samples per variant (was hardcoded n≥20)
  • ASCII table gains min_samples progress column and per-guardrail pass/fail rows
  • Step 8 (new): posts add-comment notifications to tracking issues for three conditions: all variants hit min_samples, experiment reaches significance, or a guardrail fails
  • Step 9 (new): applies experiment:active / experiment:ready-for-analysis / experiment:concluded labels on tracking issues via add-labels safe-output (labels are additive only; removal is manual)

OTEL (shared/observability-otlp.md)

Documents how to read assignments.json and emit gh_aw.experiment.<name> span attributes via otlp.cjs, enabling variant-based filtering in Datadog/Honeycomb.

Integration Tests (pkg/cli/)

Two workflow fixtures and a Go integration test file verify that experiments compile correctly end-to-end:

  • test-experiments-bare-array.md — two bare-array experiments; test asserts both appear in GH_AW_EXPERIMENT_SPEC with correct variants
  • test-experiments-rich-schema.md — full object form with all new fields; test parses the spec JSON and asserts hypothesis, secondary_metrics, guardrail_metrics, min_samples, issue, variants, and weight all round-trip correctly through the compiler

…dit enhancements

- Extend ExperimentConfig with Hypothesis, SecondaryMetrics, GuardrailMetrics, MinSamples, Owner fields
- Add GuardrailMetric struct for threshold-based experiment guardrails
- Parse new fields in extractOneExperimentConfig with extractStringSlice/extractGuardrailMetrics helpers
- Fix TypeScript type error in ExperimentConfig JSDoc typedef (pre-existing issue)
- Enhance writeSummary() with hypothesis display, guardrail metrics, progress bars, and ready-for-analysis flag
- Add OTEL span attribute injection for experiment assignments to shared/observability-otlp.md
- Enhance daily-experiment-report.md with min_samples-aware significance detection, guardrail evaluation, tracking issue notifications (Steps 8 & 9), and lifecycle label management
- Add tests for new Go fields and JavaScript summary features

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/818f45d8-b494-4013-bbe3-6ae5f558672c

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title [WIP] Improve experiment infrastructure: schema, reporting, and audit feat(experiments): extend schema with guardrails/hypothesis/min_samples, enrich reporting & OTEL May 2, 2026
Copilot AI requested a review from pelikhan May 2, 2026 03:05
@pelikhan pelikhan marked this pull request as ready for review May 2, 2026 03:47
Copilot AI review requested due to automatic review settings May 2, 2026 03:47
@pelikhan
Copy link
Copy Markdown
Collaborator

pelikhan commented May 2, 2026

@copilot update experiments docs

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 2, 2026

🧪 Test Quality Sentinel Report

Test Quality Score: 76/100

⚠️ Acceptable — with suggestions

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

Test Classification Details

View all 5 tests
Test File Classification Issues Detected
renders hypothesis in step summary when hypothesis field is set actions/setup/js/pick_experiment.test.cjs ✅ Design Happy-path only — no test for missing/null hypothesis field
renders guardrail metrics in step summary when guardrail_metrics field is set actions/setup/js/pick_experiment.test.cjs ✅ Design Happy-path only — no test for empty array or malformed entry
renders progress bar in step summary when min_samples field is set actions/setup/js/pick_experiment.test.cjs ✅ Design Happy-path only — no test for min_samples: 0 or negative
shows ready-for-analysis flag when all variants reach min_samples actions/setup/js/pick_experiment.test.cjs ✅ Design ✅ Boundary condition covered (all variants at threshold)
object form with new extended metadata fields (table row) pkg/workflow/compiler_experiments_test.go ✅ Design Happy-path only — no row testing missing/invalid field values

Flagged Tests — Suggestions for Improvement

⚠️ renders hypothesis in step summary (pick_experiment.test.cjs)

Classification: Design test — passes, but happy-path only.
Issue: No test for the case where hypothesis is absent or empty — the rendering code may silently omit the section or produce broken output.
Suggested improvement: Add a sibling test where hypothesis is absent (no key in spec) and assert the summary does not contain **Hypothesis:**.

⚠️ renders guardrail metrics in step summary (pick_experiment.test.cjs)

Classification: Design test — passes, but happy-path only.
Issue: No test for an empty guardrail_metrics: [] or a metric with a missing threshold key.
Suggested improvement: Add a case with an empty array and assert the guardrail section is omitted from the summary.

⚠️ renders progress bar in step summary when min_samples field is set (pick_experiment.test.cjs)

Classification: Design test — passes, but happy-path only.
Issue: Edge case min_samples: 0 or a variant with zero prior runs is not covered.
Suggested improvement: Add a row asserting behaviour when no prior state exists (file absent) to confirm the progress bar shows 0/N.

⚠️ object form with new extended metadata fields (Go table row, compiler_experiments_test.go)

Classification: Design test — passes, but happy-path only.
Issue: The extended fields (hypothesis, guardrail_metrics, min_samples, secondary_metrics, owner) have no negative-path table rows — e.g. guardrail_metrics containing an entry without threshold, or min_samples supplied as a string.
Suggested improvement: Add table rows like "invalid guardrail_metrics entry missing threshold" (should skip/error) and "min_samples as string" (should fail or be ignored).


Language Support

Tests analyzed:

  • 🐹 Go (*_test.go): 1 new table row in TestExtractExperimentConfigsFromFrontmatter (unit, //go:build !integration ✅)
  • 🟨 JavaScript (*.test.cjs): 4 new it() blocks (vitest)

Verdict

Check passed. 0% of new tests are implementation tests (threshold: 30%). All 5 new tests verify observable outputs and behavioral contracts. The score is 76/100 rather than higher because 4 of 5 tests cover only the happy path — adding negative/edge-case siblings for the new hypothesis, guardrail_metrics, and min_samples fields would substantially improve confidence.


📖 Understanding Test Classifications

Design Tests (High Value) verify what the system does:

  • Assert on observable outputs, return values, or state changes
  • Cover error paths and boundary conditions
  • Would catch a behavioral regression if deleted
  • Remain valid even after internal refactoring

Implementation Tests (Low Value) verify how the system does it:

  • Assert on internal function calls (mocking internals)
  • Only test the happy path with typical inputs
  • Break during legitimate refactoring even when behavior is correct
  • Give false assurance: they pass even when the system is wrong

Goal: Shift toward tests that describe the system's behavioral contract — the promises it makes to its users and collaborators.

References:

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

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: 76/100. Test quality is acceptable — 0% of new tests are implementation tests (threshold: 30%). All 5 new tests verify observable behavioral contracts. Main opportunity: add negative/edge-case tests for the new hypothesis, guardrail_metrics, and min_samples fields.

…_samples, hypothesis fields

- Show bare-array vs object form side-by-side
- Document all new fields: hypothesis, secondary_metrics, guardrail_metrics, min_samples, owner, weight, start_date, end_date, issue
- Add step summary example showing progress bars and guardrail thresholds
- Add audit filtering section (--experiment / --variant flags)
- Update frontmatter reference table with full object-form field list

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/37750d81-ae35-4ca7-9a55-d94e37ce564e

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
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

Extends the experiment (A/B) metadata schema and reporting/telemetry surface area to support richer experiment definitions (hypothesis/guardrails/min_samples/owner), improved step summaries, tracking-issue automation, and OTEL span attributes for variant filtering.

Changes:

  • Extend ExperimentConfig schema to include hypothesis, secondary metrics, guardrail metrics, min sample gating, and owner metadata.
  • Enhance pick_experiment.cjs step summary with sampling progress/ready-for-analysis, plus hypothesis and guardrail rendering (with added tests).
  • Update experiment-reporting workflow docs and OTEL documentation; regenerate related lock workflows.
Show a summary per file
File Description
pkg/workflow/frontmatter_types.go Adds new experiment schema fields and GuardrailMetric type.
pkg/workflow/compiler_experiments.go Parses new experiment frontmatter fields; adds helpers for string slices and guardrail metrics.
pkg/workflow/compiler_experiments_test.go Adds test coverage for the newly parsed experiment metadata fields.
actions/setup/js/pick_experiment.cjs Updates JS typedefs and step summary rendering (hypothesis/guardrails/min_samples progress).
actions/setup/js/pick_experiment.test.cjs Adds step-summary tests for hypothesis, guardrails, and min_samples progress/ready state.
.github/workflows/shared/observability-otlp.md Documents emitting OTEL span attributes from experiment assignments.
.github/workflows/daily-fact.lock.yml Regenerated lockfile incorporating the updated observability prompt content.
.github/workflows/daily-experiment-report.md Expands daily report spec to include guardrails, min_samples gating, and tracking-issue notifications/labels.
.github/workflows/daily-experiment-report.lock.yml Regenerated lockfile reflecting safe-output additions and permissions changes.

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

Comment thread actions/setup/js/pick_experiment.cjs Outdated
Comment on lines +219 to +223
const minSamples = cfg.min_samples || 0;
const variants = cfg.variants || [];
const counts = state.counts[name] || {};
const allReady = minSamples > 0 && variants.every(v => (counts[v] || 0) >= minSamples);
if (allReady) {
add-comment:
max: 10
add-labels:
max: 10
Comment on lines +200 to +204
name, _ := m["name"].(string)
threshold, _ := m["threshold"].(string)
if name == "" {
continue
}
Copy link
Copy Markdown
Contributor Author

Copilot AI commented May 2, 2026

@copilot update experiments docs

Updated docs/src/content/docs/guides/experiments.md in 504d960.

Changes:

  • Added side-by-side comparison of bare-array form vs rich object form with a full example showing all new fields (hypothesis, secondary_metrics, guardrail_metrics, min_samples, owner, weight, start_date, end_date, issue)
  • Added a step summary example showing the progress bars and guardrail threshold display
  • Added an "audit filtering" section documenting --experiment / --variant flags
  • Documented weight field and date-range gating behavior
  • Expanded the frontmatter reference table with all object-form fields, their types, and descriptions

@pelikhan
Copy link
Copy Markdown
Collaborator

pelikhan commented May 2, 2026

@copilot review all comments

Copilot AI and others added 2 commits May 2, 2026 04:05
…lidation, and label lifecycle

- pick_experiment.cjs: guard min_samples progress bar against 0/negative values using
  Number.isInteger + > 0 check; eliminates potential RangeError from repeat(negative)
- compiler_experiments.go: skip guardrail entries with empty threshold (in addition to
  empty name) so invalid guardrail configs don't propagate silently
- daily-experiment-report.md: clarify Step 9 labels are additive only (remove the
  "Remove when" column that implied remove-labels was supported — only add-labels is
  configured in safe-outputs)
- Tests: add Go test case for guardrail entry with empty/missing threshold; add two JS
  tests for min_samples: 0 and min_samples: -5 (progress bar should not be shown)

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/a5b8e895-a9f7-4c16-9a6d-0cf7a286cb93

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

Copilot AI commented May 2, 2026

@copilot review all comments

Addressed all three review comments in f76262a + c5f0227:

  1. pick_experiment.cjs min_samples divisor guard — changed filter predicate to Number.isInteger(ms) && ms > 0 using a captured variable, so min_samples: 0 and negative values are treated as unset and the progress section is skipped entirely. Added two new test cases for min_samples: 0 and min_samples: -5.

  2. compiler_experiments.go empty thresholdextractGuardrailMetrics now skips entries where either name or threshold is empty, so ambiguous guardrail configs don't propagate. Added a test case with a missing-threshold entry and an empty-string threshold entry to verify they're both dropped and only the valid entry survives.

  3. daily-experiment-report.md Step 9 label removal — removed the "Remove when" column from the label lifecycle table and added a note that labels are additive only, matching what add-labels safe-output actually supports. Users who want to remove labels must do so manually.

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)
    • Triggering command: /usr/bin/gh gh repo view --json owner,name --jq .owner.login &#43; &#34;/&#34; &#43; .name 64/pkg/tool/linux_amd64/link GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/link env sole.test GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw GOMOD GOMODCACHE go env -json GO111MODULE ache/go/1.25.8/x64/bin/go 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 --check **/*.cjs 64/bin/go **/*.json --ignore-path ../../../.pretti-json 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
    • Triggering command: /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 -json GO111MODULE ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel go /usr/bin/infocmp agent-performanc/opt/hostedtoolcache/node/24.14.1/x64/bin/npm GO111MODULE sv infocmp (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 go /usr/bin/git -json GO111MODULE 64/bin/go git init�� GOMODCACHE go /usr/bin/git -json GO111MODULE 64/bin/go git (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git Onlymin-integritgit GO111MODULE 1/x64/bin/node git rev-�� --show-toplevel go /usr/bin/git ithub/workflows/sed GO111MODULE e/git git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git Onlymin-integritgit GO111MODULE /opt/hostedtoolc--show-toplevel git rev-�� --show-toplevel go /usr/bin/git 0450-27101/test-sed (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 vaScript41694560.artifacts[].name GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go env 2133484895 GO111MODULE 1/x64/bin/node 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 vaScript41694560git GO111MODULE ash git rev-�� --show-toplevel go /usr/bin/git -json 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 /tmp/gh-aw-test-git s/1/artifacts /usr/bin/git git rev-�� ref/tags/v1 git sv --show-toplevel resolved$ /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 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv 3 GO111MODULE 1/x64/bin/node s GOMOD GOMODCACHE 1/x64/bin/node env runs/20260502-040450-27101/test-nonexistent/repo GO111MODULE /opt/hostedtoolcache/go/1.25.8/xstatus,conclusion GOINSECURE GOMOD GOMODCACHE /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv 0450-27101/test-2133484895 GOPROXY /usr/bin/git GOSUMDB GOWORK 64/bin/go git rev-�� --show-toplevel go ache/node/24.14.1/x64/bin/node -json GO111MODULE 64/bin/go ache/node/24.14.1/x64/bin/node (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 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 (http block)
    • Triggering command: /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 5125920/b411/impGO111MODULE -c che/go-build/10/GOINSECURE GOPROXY 64/bin/go GOSUMDB GOWORK 64/bin/go /opt/hostedtoolcGO111MODULE (http block)
    • Triggering command: /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 /...; \ else \ GO111MODULE -c &#34;prettier&#34; --cheGOINSECURE GOPROXY 64/bin/go GOSUMDB GOWORK 64/bin/go /opt/hostedtoolcGO111MODULE (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 (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/git -json GO111MODULE 64/bin/go git rev-�� --show-toplevel go /usr/bin/git -json GO111MODULE aw.test git (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 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --git-dir /opt/hostedtoolcGO111MODULE /usr/bin/git /tmp/go-build415git -trimpath 64/bin/go git rev-�� --show-toplevel go /usr/bin/git -json GO111MODULE 64/bin/go git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv GOMODCACHE go /usr/bin/git LsRemoteWithRealgit LsRemoteWithRealrev-parse 64/bin/go git rev-�� --show-toplevel go /usr/bin/gh 0434/001/stabiligit GO111MODULE 64/pkg/tool/linu--show-toplevel gh (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv -json tname) /opt/hostedtoolcache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE r env runs/20260502-040450-27101/test-1231606650/.github/workflows GO111MODULE /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD -d /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv licyTrustedUsersCompiledOutput1810906494/001 GOPROXY /usr/bin/git GOSUMDB GOWORK 64/bin/go git -C /tmp/gh-aw-test-runs/20260502-040450-27101/test-add-source-path-3307254371/.github/workflows rev-parse /opt/hostedtoolcache/node/24.14.1/x64/bin/node -json GO111MODULE 64/bin/go node (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 sh /usr/bin/git 331083444/001&#39; 331083444/001&#39; 64/bin/go git remo�� 64/bin/go l /opt/hostedtoolcache/node/24.14.1/x64/bin/node -json GO111MODULE 64/bin/go node (http block)
  • https://api.github.com/repos/aws-actions/configure-aws-credentials/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/aws-actions/configure-aws-credentials/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git -json GO111MODULE ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet /usr/bin/git 0450-27101/test-git GO111MODULE xpires.lock.yml git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/aws-actions/configure-aws-credentials/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git Onlymin-integritgit GO111MODULE 1/x64/bin/node git rev-�� --show-toplevel go /usr/bin/git ithub/workflows/git GO111MODULE /opt/hostedtoolcorigin git (http block)
  • https://api.github.com/repos/azure/login/git/ref/tags/v2
    • Triggering command: /usr/bin/gh gh api /repos/azure/login/git/ref/tags/v2 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git ring3611684436/0git GO111MODULE ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/link /usr/bin/git 3437215/b431/parsed GO111MODULE e/git git (http block)
  • https://api.github.com/repos/docker/login-action/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/docker/login-action/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv f/tags/v4 go sv -json GO111MODULE /opt/hostedtoolc--show-toplevel git rev-�� --show-toplevel go /usr/bin/git runs/20260502-04git GO111MODULE e/git-receive-pack git (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/git rdian.md GO111MODULE 64/bin/go git rev-�� --show-toplevel go /usr/bin/git 1231606650/.githgit GO111MODULE At,event,headBra--show-toplevel 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 /tmp/gh-aw-test-runs/20260502-040450-27101/test-1231606650/.github/workflows remote /usr/bin/git (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.2.3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv /tmp/gh-aw-test-runs/20260502-040450-27101/test-1231606650/.github/workflows rev-parse /usr/bin/git --check scripts/**/*.js 44b5018e4296c679--show-toplevel git conf�� --get remote.origin.url om/myorg/myrepo.git 1 GO111MODULE 64/bin/go git (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --limit 100 --created &gt;=2026-04-25 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 --limit 100 --created &gt;=2026-04-02 GOMOD GOMODCACHE go env source-field-variant-938541779/.github/workflows 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 --limit 100 --created &gt;=2026-02-01 GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (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/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 run download 1 --dir test-logs/run-1 GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go env 10906494/001 GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/12345/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12345/artifacts --jq .artifacts[].name LsRemoteWithRealGitbranch_with_hyphen3977212407/001&#39; 64/bin/go GOINSECURE GOMOD GOMODCACHE go env 01/test2.md GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh run download 12345 --dir test-logs/run-12345 mLsRemoteWithRealGitbranch_with_hyphen3977212407/001&#39; 64/bin/go GOINSECURE GOMOD GOMODCACHE go env ithout_min-integrity65348532/001 GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/1234567890
    • Triggering command: /usr/bin/gh gh api repos/{owner}/{repo}/actions/runs/1234567890 --jq {databaseId: .id, number: .run_number, url: .html_url, status: .status, conclusion: .conclusion, workflowName: .name, workflowPath: .path, createdAt: .created_at, startedAt: .run_started_at, updatedAt: .updated_at, event: .event, headBranch: .head_branch, prettier --check 64/bin/go --ignore-path .prettierignore 64/bin/go go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/12346/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12346/artifacts --jq .artifacts[].name itbranch_with_hyphen3977212407/002/work 64/bin/go GOINSECURE GOMOD GOMODCACHE go env y_with_repos=public_3897632300/001 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/bin/go GOINSECURE GOMOD GOMODCACHE go env ithout_min-integ-errorsas GO111MODULE 64/pkg/tool/linu-nilfunc GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linu-tests (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/2/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/2/artifacts --jq .artifacts[].name GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env mpiledOutput838270151/001 GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /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 rity281695097/001 GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/3/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/3/artifacts --jq .artifacts[].name GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env mpiledOutput838270151/001 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 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/4/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/4/artifacts --jq .artifacts[].name GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env edOutput85712223--limit GO111MODULE ache/go/1.25.8/x--created GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh run download 4 --dir test-logs/run-4 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/5/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/5/artifacts --jq .artifacts[].name GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env edOutput857122239/001 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 ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go env rity281695097/001 GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/actions/workflows
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --check **/*.cjs 64/bin/go **/*.json --ignore-path ../../../.pretti-json 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 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 go env -json GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linuTest User (http block)
  • https://api.github.com/repos/github/gh-aw/contents/.github/workflows/shared/reporting.md
    • Triggering command: /tmp/go-build3233437215/b404/cli.test /tmp/go-build3233437215/b404/cli.test -test.testlogfile=/tmp/go-build3233437215/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 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 etup-node/git/ref/tags/v6 go bject.type] | @tsv CompiledOutput18git GO111MODULE /opt/hostedtoolc--show-toplevel git rev-�� --show-toplevel go /usr/bin/git runs/20260502-04infocmp GO111MODULE ache/node/24.14.xterm-color git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go env sRemoteWithRealGitmaster_branch331083444/001 sRemoteWithRealGitmaster_branch331083444/002/work .cfg 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 d43tsyO/DAaZteIL-3lxG0HoYBiF env -json GO111MODULE 66da8775fd6964359a2d00bd8b79e366-d 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 h0_G4AE/_Krp0NanWnRu6iNI4rtq env -json GO111MODULE a6e2ce05998de627b06c250ea7116516-d 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 64/bin/go GOINSECURE GOMOD GOMODCACHE go env y-frontmatter.mdremote.origin.url GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v3.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v3.0.0 --jq [.object.sha, .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/google-github-actions/auth/git/ref/tags/v2
    • Triggering command: /usr/bin/gh gh api /repos/google-github-actions/auth/git/ref/tags/v2 --jq [.object.sha, .object.type] | @tsv tags/v6 go sv 0450-27101/test-git GO111MODULE 1/x64/bin/node git rev-�� --show-toplevel 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 1464025685 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)
  • https://api.github.com/repos/nonexistent/repo/actions/runs/12345
    • Triggering command: /usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env -json GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/owner/repo/actions/workflows
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo 64/bin/go **/*.json --ignore-path ../../../.pretti--noprofile go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo d7716c1304cc676d-d **/*.json --ignore-path ../../../.pretti--noprofile 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 1173063499/001 GO111MODULE ache/go/1.25.8/x64/bin/go 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 71021317/001&#39; 71021317/001&#39; 64/bin/go **/*.json --ignore-path ../../../.pretti-json go env -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 -json GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env approach-validator.md GO111MODULE 1/x64/bin/node GOINSECURE GOMOD GOMODCACHE go (http block)

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

@pelikhan
Copy link
Copy Markdown
Collaborator

pelikhan commented May 2, 2026

@copilot update main json schema

Copilot AI and others added 2 commits May 2, 2026 04:18
…samples/owner to experiments schema

Extends the `experiments` object-form properties in `main_workflow_schema.json` with:
- `hypothesis` (string) — hypothesis statement surfaced in step summaries/reports
- `secondary_metrics` (string[]) — additional metrics to collect alongside the primary metric
- `guardrail_metrics` (object[]) — each entry requires `name` + `threshold` (pattern-validated); entries without a threshold are rejected at schema level
- `min_samples` (integer, minimum 1) — minimum runs per variant before PROMOTE is eligible
- `owner` (string) — owner/team label for experiment tracking

Also updates the top-level description and the example to demonstrate all fields.
Rebuilds the binary to embed the updated schema.

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/848f602b-d364-43bf-9f1c-29c3bf57d4b7

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
- threshold pattern changed from \\S+ to -?\\d+(\\.\\d+)? so only
  numeric values are accepted (e.g. >=0.95, ==0, <=0.05); rejects
  double-operator forms like >=>=0.95
- min_samples gets default: 20 to make the schema self-documenting

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/848f602b-d364-43bf-9f1c-29c3bf57d4b7

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

Copilot AI commented May 2, 2026

@copilot update main json schema

Updated pkg/parser/schemas/main_workflow_schema.json in eb4f726 + a110c68:

  • Added hypothesis (string), secondary_metrics (string[]), guardrail_metrics (object[] with required name + threshold fields), min_samples (integer ≥ 1, default 20), and owner (string) to the experiments object-form properties
  • threshold is pattern-validated as ^(>=|<=|==|>|<)-?\d+(\.\d+)?$ — rejects non-numeric or double-operator values
  • Updated the top-level description and example to showcase all new fields
  • Binary rebuilt to embed the updated schema

@pelikhan
Copy link
Copy Markdown
Collaborator

pelikhan commented May 2, 2026

@copilot add integration test workflows in pkg/cli/workflows to parse experiments

Copilot AI and others added 2 commits May 2, 2026 04:34
…ing for min_samples/issue/weight

- Fix compiler_experiments.go: add uint64 case to switch blocks for
  min_samples, issue, and weight items (goccy/go-yaml returns YAML
  integers as uint64, not int/int64/float64)
- Add unit test case: "uint64 integer values for min_samples and issue
  are parsed correctly" in TestExtractExperimentConfigsFromFrontmatter
- Add pkg/cli/workflows/test-experiments-bare-array.md: bare-array form
  with two experiments (prompt_style, model_temp)
- Add pkg/cli/workflows/test-experiments-rich-schema.md: full object
  form with all new fields (hypothesis, secondary_metrics,
  guardrail_metrics, min_samples, owner, weight, issue, dates)
- Add pkg/cli/compile_experiments_integration_test.go with two tests:
  TestCompileExperimentsBareArrayForm — checks that both experiments
  appear in GH_AW_EXPERIMENT_SPEC and pick_experiment.cjs is wired;
  TestCompileExperimentsRichSchema — parses the spec JSON and asserts
  all new fields round-trip correctly through the compiler

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/cd061a98-3485-49e6-aab5-d40a5af3ca66

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

Copilot AI commented May 2, 2026

@copilot add integration test workflows in pkg/cli/workflows to parse experiments

Added in a9556b2 + e8a42ad:

Workflow fixtures (pkg/cli/workflows/):

  • test-experiments-bare-array.md — two bare-array experiments (prompt_style, model_temp)
  • test-experiments-rich-schema.md — full object form with all new fields (hypothesis, secondary_metrics, guardrail_metrics, min_samples, owner, weight, issue, dates)

Integration tests (pkg/cli/compile_experiments_integration_test.go):

  • TestCompileExperimentsBareArrayForm — compiles the bare-array fixture and asserts both experiments appear in GH_AW_EXPERIMENT_SPEC with correct variants
  • TestCompileExperimentsRichSchema — compiles the rich-schema fixture, parses the GH_AW_EXPERIMENT_SPEC JSON, and asserts all new fields round-trip correctly

While writing the tests I discovered a bug: goccy/go-yaml returns YAML integers as uint64 (not int/int64/float64), so min_samples, issue, and weight integers were silently dropped from the compiled output. Fixed by adding uint64 cases to the three switch blocks in compiler_experiments.go, with a new unit test case to cover it.

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)
    • 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 auto-triage-issu-C aw-failure-inves/home/REDACTED/work/gh-aw/gh-aw/.github/workflows blog-auditor.md bot-�� brave.md breaking-change-checker.md n-dir/bash gpg.program (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw GOMOD GOMODCACHE node /hom�� --check **/*.cjs 64/bin/go **/*.json --ignore-path ../../../.pretti--noprofile go (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 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv --local user.email est.lock.yml (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv --local user.name ock.yml (http block)
  • https://api.github.com/repos/actions/download-artifact/git/ref/tags/v8
    • Triggering command: /usr/bin/gh gh api /repos/actions/download-artifact/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv &#34; -o gh-aw ./cmd/gh-aw --local 1/x64/bin/bash committer.name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/download-artifact/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv get --local ndor/bin/bash committer.name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/download-artifact/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv -dirty&#34; -o gh-aw ./cmd/gh-aw GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE r: $owner, name:-f GOINSECURE GOMOD GOMODCACHE go (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 ithub/workflows (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE bin/bash GOINSECURE GOMOD GOMODCACHE go inte�� ithub/workflows 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/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE r: $owner, name:-f GOINSECURE GOMOD GOMODCACHE go env ithub/workflows GO111MODULE repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } GOINSECURE GOMOD ed } } go (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv --local user.name r: $owner, name: $name) { hasDiscussionsEnabled } } (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv GOSUMDB GOWORK 64/bin/go GOINSECURE GOMOD GOMODCACHE sh -c &#34;prettier&#34; --cheGOINSECURE GOPROXY 64/bin/go GOSUMDB GOWORK 64/bin/go go (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 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv --check scripts/**/*.js 64/bin/go .prettierignore GO111MODULE 64/bin/go go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv --check scripts/**/*.js 64/bin/go -d GO111MODULE 64/bin/go go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw --jq .default_branch --local committer.name /usr/bin/git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw --jq .default_branch -json GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linurev-parse env -json GO111MODULE r: $owner, name: $name) { hasDiscussionsEnabled } } GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/1234567890
    • Triggering command: /usr/bin/gh gh api repos/{owner}/{repo}/actions/runs/1234567890 --jq {databaseId: .id, number: .run_number, url: .html_url, status: .status, conclusion: .conclusion, workflowName: .name, workflowPath: .path, createdAt: .created_at, startedAt: .run_started_at, updatedAt: .updated_at, event: .event, headBranch: .head_branch, GOSUMDB GOWORK 64/bin/go GOINSECURE GOMOD GOMODCACHE sh -c npx prettier --cGOINSECURE GOPROXY 64/bin/go GOSUMDB GOWORK 64/bin/go node (http block)

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

@pelikhan pelikhan merged commit 6330fde into main May 2, 2026
@pelikhan pelikhan deleted the copilot/improve-experiment-infrastructure branch May 2, 2026 04:59
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.

[ab-advisor] Improve experiment infrastructure: schema, reporting & audit

3 participants