Skip to content

[skill-optimizer] Daily Skill Optimizer Improvements - 2026-04-27 #28819

@github-actions

Description

@github-actions

Summary

Key Findings

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:

  1. 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.

  2. 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.

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

Evidence from Artifact

summary.json:

{
  "run_mode": "dry-run",
  "init_status": 0,
  "run_status": 1
}

run.log (tail):

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

{
  "surface": "prompt",
  "repoPath": "...",
  "models": ["openrouter/anthropic/claude-sonnet-4.6"],
  "maxTasks": 20,
  "maxIterations": 3
}

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.

.skill-optimizer/skill-optimizer.json (committed config, pre-run):

"optimize": {
  "requireCleanGit": false,
  ...
}

The git stash in the workflow runs before init, so the dirty file created by init is not stashed.

Recommendations

  1. 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.

  2. 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.

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

Generated by Daily Skill Optimizer Improvements · ● 354.1K ·

  • expires on May 4, 2026, 11:31 PM UTC

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions