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"
