Issue Fixer Pipeline — Operational Guide and Troubleshooting #36

Closed
opened 2026-05-12 19:37:59 +00:00 by Mark · 1 comment
Owner

Normal Operation

issue-fixer-autorun (every 15m)

Normal output format:

--- ISSUE: repo#N ---
Title: <title>
Result: FIXED | SKIP | BLOCKED
Commit: <SHA> | none
Action: committed+pushed+closed | already-visited | needs-decision
Gate chain: research->plan->pre-dispatch->implement->verify->commit
  research: pass
  plan: pass
  ...
State: <N> completed, <N> blocked

When queue is empty, output is: [SILENT] (suppressed delivery)

feature-triage (every 60m)

Normal output is a rich triage report box showing assessment and routing decision.
When no candidates: "No feature candidates to triage." or [SILENT]

Troubleshooting

Issue: Cron job delivers [SILENT] repeatedly

This is expected when the queue is empty. Check state files to confirm:
ls -la ~/.hermes/scripts/issue-fixer-state.json
cat ~/.hermes/scripts/issue-fixer-state.json | python3 -c "import json,sys; d=json.load(sys.stdin); print(f'Completed: {len(d.get("completed",[]))}')"

Issue: Cron job shows Script timed out after 120s

The script is in no_agent mode (obsolete). Switch to agent-mode:
cronjob(action='update', job_id='<job_id>', no_agent=False, prompt='')

Issue: Gate blocks at pre-dispatch

The implementation script didn't call the pre-dispatch gate. Common when models skip the gate step. The implementation phase must explicitly run the gate script before starting implementation work.

Issue: queue is empty but issues exist on Forgejo

Possible causes:

  1. All issues are already in the visited set in the state file
  2. Issues have blocked/wontfix/feature-request labels
  3. The feature-request filter is catching them (add triage-approved to bypass)

To force-dispatch: add triage-approved label to the issue on Forgejo

Issue: Duplicate run on same issue

The visited set prevents re-processing. If an issue was visited but not fixed (e.g., pipeline failed), it stays in visited and won't be picked up again. Clear the issue from the visited list in the state file to re-process.

Metrics

As of May 12, 2026:

  • Total issues processed: 198 across 24 repos
  • Fixed and closed: 36
  • Blocked: 2 (both needs-decision)
  • Feature requests triaged/skipped: ~160
  • All feature-request issues in 24 repos have been auto-labeled by the fixer

All scripts are under ~/.hermes/scripts/:

  • cron-get-issue.py (850 lines)
  • next-issue.sh (bash, Forgejo API integration)
  • feature-triage.py (370 lines)
  • feature-triage-state.json
  • issue-fixer-state.json

Gates and GSD infrastructure under ~/Projects/gsd-self/.gsd/:

  • gates/pre-dispatch.sh
  • gates/check-gate
  • gates/gate-pass
  • gates/gate-fail
  • bin/next-issue.sh
## Normal Operation ### issue-fixer-autorun (every 15m) Normal output format: ``` --- ISSUE: repo#N --- Title: <title> Result: FIXED | SKIP | BLOCKED Commit: <SHA> | none Action: committed+pushed+closed | already-visited | needs-decision Gate chain: research->plan->pre-dispatch->implement->verify->commit research: pass plan: pass ... State: <N> completed, <N> blocked ``` When queue is empty, output is: [SILENT] (suppressed delivery) ### feature-triage (every 60m) Normal output is a rich triage report box showing assessment and routing decision. When no candidates: "No feature candidates to triage." or [SILENT] ## Troubleshooting ### Issue: Cron job delivers [SILENT] repeatedly This is expected when the queue is empty. Check state files to confirm: ls -la ~/.hermes/scripts/issue-fixer-state.json cat ~/.hermes/scripts/issue-fixer-state.json | python3 -c "import json,sys; d=json.load(sys.stdin); print(f'Completed: {len(d.get("completed",[]))}')" ### Issue: Cron job shows Script timed out after 120s The script is in no_agent mode (obsolete). Switch to agent-mode: cronjob(action='update', job_id='<job_id>', no_agent=False, prompt='<prompt>') ### Issue: Gate blocks at pre-dispatch The implementation script didn't call the pre-dispatch gate. Common when models skip the gate step. The implementation phase must explicitly run the gate script before starting implementation work. ### Issue: queue is empty but issues exist on Forgejo Possible causes: 1. All issues are already in the visited set in the state file 2. Issues have blocked/wontfix/feature-request labels 3. The feature-request filter is catching them (add triage-approved to bypass) To force-dispatch: add triage-approved label to the issue on Forgejo ### Issue: Duplicate run on same issue The visited set prevents re-processing. If an issue was visited but not fixed (e.g., pipeline failed), it stays in visited and won't be picked up again. Clear the issue from the visited list in the state file to re-process. ## Metrics As of May 12, 2026: - Total issues processed: 198 across 24 repos - Fixed and closed: 36 - Blocked: 2 (both needs-decision) - Feature requests triaged/skipped: ~160 - All feature-request issues in 24 repos have been auto-labeled by the fixer ## Related Files All scripts are under ~/.hermes/scripts/: - cron-get-issue.py (850 lines) - next-issue.sh (bash, Forgejo API integration) - feature-triage.py (370 lines) - feature-triage-state.json - issue-fixer-state.json Gates and GSD infrastructure under ~/Projects/gsd-self/.gsd/: - gates/pre-dispatch.sh - gates/check-gate - gates/gate-pass - gates/gate-fail - bin/next-issue.sh
Author
Owner

Fixed in commit. Closing.

Fixed in commit. Closing.
Mark closed this issue 2026-05-14 01:20:27 +00:00
Sign in to join this conversation.
No description provided.