You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The optimizer failed to complete its dry-run pass. Root cause: the init step regenerates .skill-optimizer/skill-optimizer.json from answers.json (which does not include requireCleanGit: false), creating an uncommitted change after the git stash. The subsequent run step then fails because the optimizer detects this dirty workspace.
3 Improvements with Expected Impact:
Include requireCleanGit: false in answers.json — Prevents the post-init dirty-workspace failure that currently breaks every run. Expected impact: eliminates the run_status: 1 error entirely, unblocking dry-run and benchmark execution on every scheduled run.
Move the git stash step to after the init step (or stash after init and before run) — Even if fix rejig docs #1 is applied, init may write other files. Stashing before init and after is the correct ordering. Expected impact: makes the workflow resilient to any future init-induced workspace mutations.
Add OPENROUTER_API_KEY to the workflow's required secrets documentation and AGENTS.md — The summary.json shows run_mode: dry-run because OPENROUTER_API_KEY was absent, so the benchmark branch was never exercised. Documenting this secret as required (not optional) will help repository admins configure it, enabling actual benchmark scoring and SKILL.md quality measurement. Expected impact: unlocks the benchmark path and produces actionable pass-rate data against the 80% target.
Unhandled error: Error: target.repoPath: target repo has uncommitted changes
(optimize.requireCleanGit is enabled) — Run: git stash or commit your changes
in /home/runner/work/gh-aw/gh-aw
answers.json (written by the workflow, used to drive init):
Note: no requireCleanGit key — so init regenerates .skill-optimizer/skill-optimizer.json using its default (requireCleanGit: true), overwriting the committed false value and dirtying the workspace in one step.
The git stash in the workflow runs beforeinit, so the dirty file created by init is not stashed.
Recommendations
Add requireCleanGit: false to answers.json in the workflow — In daily-skill-optimizer.md, extend the answers.json heredoc to include "requireCleanGit": false under an "optimize" key, matching the committed config. This ensures init does not overwrite the setting and eliminates the post-init dirty-state error.
Reorder the git stash to run after init and before run — Split the existing stash step: run init first (to generate/update config), then stash the resulting changes, then invoke run. This guarantees the workspace is clean when the optimizer's clean-git check executes, regardless of what init writes.
Document OPENROUTER_API_KEY as a required secret in daily-skill-optimizer.md and AGENTS.md — Add an explicit note that without this secret the workflow only performs a dry-run and never benchmarks SKILL.md quality. Include the expected benchmark output format (pi) and the 80% pass-rate target so repository admins understand what they are enabling.
Summary
dry-runrun_status: 1)Key Findings
The optimizer failed to complete its dry-run pass. Root cause: the
initstep regenerates.skill-optimizer/skill-optimizer.jsonfromanswers.json(which does not includerequireCleanGit: false), creating an uncommitted change after the git stash. The subsequentrunstep then fails because the optimizer detects this dirty workspace.3 Improvements with Expected Impact:
Include
requireCleanGit: falseinanswers.json— Prevents the post-initdirty-workspace failure that currently breaks every run. Expected impact: eliminates therun_status: 1error entirely, unblocking dry-run and benchmark execution on every scheduled run.Move the
git stashstep to after theinitstep (or stash afterinitand beforerun) — Even if fix rejig docs #1 is applied,initmay write other files. Stashing beforeinitand after is the correct ordering. Expected impact: makes the workflow resilient to any futureinit-induced workspace mutations.Add
OPENROUTER_API_KEYto the workflow's required secrets documentation and AGENTS.md — Thesummary.jsonshowsrun_mode: dry-runbecauseOPENROUTER_API_KEYwas absent, so the benchmark branch was never exercised. Documenting this secret as required (not optional) will help repository admins configure it, enabling actual benchmark scoring and SKILL.md quality measurement. Expected impact: unlocks the benchmark path and produces actionable pass-rate data against the 80% target.Evidence from Artifact
summary.json:{ "run_mode": "dry-run", "init_status": 0, "run_status": 1 }run.log(tail):answers.json(written by the workflow, used to driveinit):{ "surface": "prompt", "repoPath": "...", "models": ["openrouter/anthropic/claude-sonnet-4.6"], "maxTasks": 20, "maxIterations": 3 }Note: no
requireCleanGitkey — soinitregenerates.skill-optimizer/skill-optimizer.jsonusing its default (requireCleanGit: true), overwriting the committedfalsevalue and dirtying the workspace in one step..skill-optimizer/skill-optimizer.json(committed config, pre-run):The git stash in the workflow runs before
init, so the dirty file created byinitis not stashed.Recommendations
Add
requireCleanGit: falsetoanswers.jsonin the workflow — Indaily-skill-optimizer.md, extend theanswers.jsonheredoc to include"requireCleanGit": falseunder an"optimize"key, matching the committed config. This ensuresinitdoes not overwrite the setting and eliminates the post-initdirty-state error.Reorder the git stash to run after
initand beforerun— Split the existing stash step: runinitfirst (to generate/update config), then stash the resulting changes, then invokerun. This guarantees the workspace is clean when the optimizer's clean-git check executes, regardless of whatinitwrites.Document
OPENROUTER_API_KEYas a required secret indaily-skill-optimizer.mdand AGENTS.md — Add an explicit note that without this secret the workflow only performs a dry-run and never benchmarks SKILL.md quality. Include the expected benchmark output format (pi) and the 80% pass-rate target so repository admins understand what they are enabling.