name: "Loop: Triage" # Generated by `micro loop init`. The feedback path of the evaluator: when a CI # workflow (Harness (E2E), Lint, Run Tests) fails on a non-PR run, dispatch the agent # (@codex) with the instruction in .github/loop/prompts/triage.md # to root-cause the failure and file scoped fix issues back into the queue — so # failures become fixes with no human in the middle. Gated on CODEX_TRIGGER_TOKEN. on: workflow_dispatch: {} # PAUSED 2026-07-12: automatic CI-failure dispatch disabled while the team # does focused 1:1 fixes, so failures don't auto-spawn agent tasks. Re-enable # by uncommenting the workflow_run trigger below. # workflow_run: # workflows: ["Harness (E2E)", "Lint", "Run Tests", "govulncheck"] # types: [completed] permissions: issues: write concurrency: group: loop-triage cancel-in-progress: false jobs: triage: # Only real failures on branch pushes/schedules — not PR-run failures, which # the PR author already sees. if: ${{ github.event.workflow_run.conclusion == 'failure' && github.event.workflow_run.event != 'pull_request' }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 # needed to read the prompt file - name: Dispatch triage env: GH_TOKEN: ${{ secrets.CODEX_TRIGGER_TOKEN || github.token }} HAS_TOKEN: ${{ secrets.CODEX_TRIGGER_TOKEN != '' }} REPO: ${{ github.repository }} RUN_ID: ${{ github.event.workflow_run.id }} RUN_URL: ${{ github.event.workflow_run.html_url }} WORKFLOW_NAME: ${{ github.event.workflow_run.name }} run: | if [ "$HAS_TOKEN" != "true" ]; then echo "CODEX_TRIGGER_TOKEN is not set — skipping." exit 0 fi PROMPT=".github/loop/prompts/triage.md" if [ ! -f "$PROMPT" ]; then echo "missing $PROMPT — run 'micro loop init'." >&2 exit 1 fi ISSUE_URL=$(gh issue create --repo "$REPO" \ --title "Loop: triage failed run $RUN_ID ($WORKFLOW_NAME)" \ --body "The '$WORKFLOW_NAME' workflow failed on a non-PR run: $RUN_URL") ISSUE_NUM="${ISSUE_URL##*/}" echo "Opened issue #$ISSUE_NUM — dispatching triage." { echo "@codex" echo sed -e '//d' -e "s/__ISSUE__/$ISSUE_NUM/g" -e "s#__RUNURL__#$RUN_URL#g" "$PROMPT" } > "$RUNNER_TEMP/loop-body.md" gh issue comment "$ISSUE_NUM" --repo "$REPO" --body-file "$RUNNER_TEMP/loop-body.md"