Repository navigation
[ab-advisor] Experiment campaign for daily-windows-terminal-integration-builder: A/B test output_format #69679
Description
🧪 Experiment Campaign: daily-windows-terminal-integration-builder
Workflow file: .github/workflows/daily-windows-terminal-integration-builder.md
Selected dimension: output_format
Triggered by: ab-testing-advisor on 2026-10-17
Background
This daily/manual Codex workflow reviews Windows CLI integration coverage and creates an actionable update issue, or declares noop. It uses openai/gpt-6-luna, dense scenario requirements, GitHub tools, and shared reporting conventions. Random selection chose this workflow from 298 eligible files (344 workflow markdown files, 46 containing experiments:), then chose output_format; the selected file has no experiments and no upstream source: restriction.
Compare prose and bullets for the visible overview/findings while preserving evidence, collapsible details, next actions, and issue/noop decisions. The latest ten scheduled runs, 2026-10-08 through 2026-10-17, all concluded success; this is execution status, not evidence of output quality. Example: latest run.
Deduplication limitation: The supplied security policy prohibits cache access. The recently-analyzed cache was neither read nor updated, so exclusion of the previous 14 selections could not be established.
Hypothesis
H0: Bullets do not improve the triage-ready output rate relative to prose. H1: Bullets increase the rate by 20 percentage points, from a planning assumption of 60% to 80%. These rates are assumptions, not historical measurements. Prose is a specified reference format; historical runs did not have a controlled format.
A triage-ready output contains a concrete affected scenario, evidence/location, and next action when requesting changes, or a clear reason when declaring no changes needed. Format compliance is a separate manipulation check, not proof of improved triage quality.
Experiment Configuration
Add this rich-object block to frontmatter. Start on the actual implementation date; the date below is illustrative.
experiments:
output_format:
variants: [prose, bullets]
description: "Compare visible finding formats while preserving Windows integration review coverage."
hypothesis: "H0: no improvement in triage-ready rate. H1: bullets improves rate from 0.60 to 0.80."
metric: "eval:triage_ready"
secondary_metrics: ["eval:assigned_format_visible", run_duration_seconds, issue_output_rate]
guardrail_metrics:
- name: "eval:windows_integration_checked"
direction: max
threshold: 0.95
- name: "eval:failure_reported_or_noop"
direction: max
threshold: 0.95
- name: empty_output_rate
direction: min
threshold: 0.0
min_samples: 82
weight: [50, 50]
start_date: "2026-10-17"
issue: "#aw_campaign"Assignment correction: In the current implementation, explicit weight: [50, 50] selects weighted random assignment, not round-robin. Retain it for this randomized campaign. To use the requested deterministic round-robin alternative, remove weight; disclose its time/order confounding. Repository-backed storage is currently the default; cache storage is an explicit alternative, not an assumed runtime fact.
Append to the existing evals: list, retaining both existing questions:
- id: triage_ready
question: "Does the output provide an actionable Windows integration update request with an affected scenario, evidence or file location, and a concrete next action, or a clear reason that no update is needed?"
- id: assigned_format_visible
question: "For an issue output, do the visible overview and findings use the prose or bullets format declared in the final response, and for a noop output is the reason one short sentence?"Variant descriptions:
prose: short paragraphs in the visible overview and key findings; reference format.bullets: bullet points in those same sections; identical required facts, evidence and review scope.
The manipulation check establishes visible compliance only. Join the declared format to the immutable runtime assignment and flag any mismatch. A noop passes its common short-sentence requirement but provides no evidence about issue-format adherence; report issue-only adherence separately.
Workflow Changes Required
View Details
Keep the existing Output rules and append this concrete diff. Preserve the shared reporting structure: overview → key metrics/issues → collapsible detail → next actions. Do not change issue eligibility, tools, engine, safety requirements or scenario coverage.
#### Output rules
- If changes are required (including updates to `.github/workflows/windows-cli-integration.yml` or this builder file), use `create-issue` to request those updates. Keep headers at `###` (h3) or lower, and wrap long details — full job logs, diffs, or scenario matrices — in `<details><summary><b>...</b></summary>...</details>` blocks per the `reporting` skill.
- If no changes are needed, use `noop` with a short explanation.
+
+{{#if experiments.output_format == "prose" }}
+When creating an issue, write the visible overview and key findings as short prose paragraphs.
+{{else}}
+When creating an issue, write the visible overview and key findings as bullet points.
+{{/if}}
+Keep the same required facts, evidence, collapsible details, and next actions in either format.
+For noop, keep the explanation to one short sentence in either variant.
+In the final response state: Assigned output format: ${{ experiments.output_format }}.Use explicit variant comparisons; never use internal experiment environment-variable names. Confirm conditional syntax against the current compiler during implementation; the repository guide also documents {{#else}} / {{#endif}} delimiters, whereas the requested diff uses {{else}} / {{/if}}.
Success Metrics
| Metric | Type | Target |
|---|---|---|
| eval:triage_ready | Primary | +20 percentage points; positive effect with two-sided p < 0.05 at final analysis |
| eval:assigned_format_visible | Secondary | ≥95% compliance; separately report issue-only compliance and assignment mismatches |
| run_duration_seconds | Secondary | Compare mean, variance, median and p95; no assumed latency benefit |
| issue_output_rate | Secondary | Report by arm to detect changed issue/noop behavior |
| eval:windows_integration_checked | Guardrail | ≥95% YES in each arm |
| eval:failure_reported_or_noop | Guardrail | ≥95% YES in each arm |
| empty_output_rate | Guardrail | 0 in each arm |
Collect one record per assigned run with run ID/attempt, assignment, workflow revision, engine/model, timestamps, issue/noop classification, output availability, eval results and evidence. Duration comes from the completed run's start/completion timestamps; activation-state timestamps alone are insufficient. Implement explicit collectors for duration, issue_output_rate and empty_output_rate; do not assume arbitrary metric names already resolve in the analyzer. Keep raw YES/NO/UNKNOWN values; for the primary intention-to-treat analysis, count missing/UNKNOWN or failed output as not triage-ready and report missingness separately. Validate that aggregation convention before interpreting analyzer output.
Statistical Design
View Details
- Variants: prose control and bullets treatment.
- Experimental unit: one scheduled run; the initial attempt defines the unit. Retain rerun attempt metadata without double-counting it as an independent sample.
- Assignment: 50/50 weighted random using the shown configuration. No experiment is launched by this advisory run.
- Power: two-sided two-proportion normal approximation, alpha=0.05, power=0.80, p0=0.60, p1=0.80. With pbar=0.70, n=ceil((1.96×sqrt(2×pbar×(1−pbar))+0.842×sqrt(p0×(1−p0)+p1×(1−p1)))2/0.202)=82 per arm.
- Minimum runs: 82 independent assigned runs per variant, 164 total lower bound. Weighted assignment may need more total runs before both arms reach 82.
- Duration: at one scheduled run/day, at least 164 days; budget roughly 180–200 days for imbalance and interruptions. Freeze the endpoint before inspecting effects. Manual runs are excluded from confirmatory analysis and logged separately.
- Analysis: one final two-sided two-proportion test with effect estimate and 95% confidence interval; use Fisher's exact test if cells are sparse. Secondary outcomes are descriptive. Monitor daily for quality/missingness and safety, not significance-based stopping.
- Validity: 60%→80% is the full-population effect, including unchanged noop outputs. Many noop runs dilute any issue-format effect, so 82 per arm will be underpowered if the actual full-population effect is smaller. Issue-only results are exploratory because output eligibility is post-assignment.
- Drift/interference: balance naturally over calendar time, log weekday/workload and relevant workflow/model changes, hold the eval judge and rubric fixed, and version the campaign on material changes. Prior issues can change later workloads; log duplicate/no-action reasons and assess serial dependence. Positive dependence requires a revised power calculation.
- Decision: promote bullets only after the fixed endpoint, positive primary evidence and all guardrails pass. No claim that 82 runs establishes equivalence/non-inferiority of guardrails; inconclusive evidence means no winner.
Infrastructure Gate and Analytics Follow-up
The requested field-presence-checker found no absent fields in either compiler/runtime path: analysis_type is parsed at pkg/workflow/compiler_experiments.go:224–225 and displayed at actions/setup/js/pick_experiment.cjs:492,512; tags at compiler 230–231 and picker 493,514–515; notify at compiler 233–255 and picker 494–500,517–518. The schema/runtime metadata path is complete for these three fields. No second issue is created under the explicit absent-field gate. This does not imply that the entire analytics pipeline is complete or that displaying notify destinations sends notifications.
View Details
Current records use /tmp/gh-aw/experiments/state.jsonl, with legacy state.json compatibility, rather than assuming the historical /tmp/gh-aw/agent/experiments/state.json path. Records contain run_id, timestamp, harness_version, assignments and optional continual_state; history is bounded to 512 records. Separate assignments.json maps experiment→variant. Cumulative counts are not measured outcome observations. These records do not snapshot analysis_type/tags/notify, so historical configuration reproducibility remains a gap.
Concrete future pipeline work, without duplicating existing schema or summary features:
- Snapshot configuration, workflow revision, model, assignment method and eval rubric version with each assignment; join terminal outcome/eval/cost records using repository, workflow, run ID and attempt. Support incremental ingestion and deduplication before artifact expiry/history truncation.
- A daily collector and weekly report should aggregate artifacts, publish per-arm n/mean/variance and binary YES/NO/UNKNOWN counts, confidence intervals and missingness, and emit an ASCII comparison plus chart artifact. Mark p<0.05 only at the prespecified final look, or use a separately validated sequential design. Post a discussion with experiment name and evidence, calling a winner only when endpoint and guardrails pass.
- Assignment OTEL resource attributes
experiment.<name>=<variant>already exist (picker 729–734). Verify propagation to engine/tool spans, then normalize experiment_name/variant dimensions for cross-experiment queries if needed; do not propose first-time assignment tagging. - Verify current
gh aw auditassignment display/filter support before extending it. Correlate failure modes andworking_set.rebuild_factorby arm alongside cost and quality, documenting missing values and aggregation denominators. - The picker step summary already displays assignment/counts, analysis type, tags, notification destinations, readiness, hypothesis, guardrails and issue links. Extend only with configuration revision/outcome-report links if missing.
- Statistical test execution and notification delivery are distinct from metadata display; verify existing analyzer/notification integrations before filing implementation gaps.
Implementation Steps
- Add the experiments rich-object block, actual start date and resolved campaign issue number.
- Append paired evals while preserving existing questions.
- Add conditional prompt blocks with an explicit comparison to a variant.
- Define and validate outcome collection, missingness handling and assignment/output joins.
- Run
gh aw compile daily-windows-terminal-integration-builderand required repository validation to regenerate the lock file; this advisory issue does not modify workflow files. - Monitor the configured experiment artifact/state path and validate assignment counts; do not treat cumulative counts as output observations.
- Collect artifacts incrementally, then run
gh aw experiments analyzewith supported metrics and the prespecified primary aggregation. - Review guardrails, document findings and promote the winning format only if the decision rule is met.
References
Generated by 🧪 Daily A/B Testing Advisor · codex · gpt61 · 28.5 AIC · ⌖ 7.61 AIC · ⊞ 19.4K · ◷
- expires on Oct 31, 2026, 2:35 AM UTC-08:00
Activity