- enforcePolicy: respect KEEP_OPEN when model is confident and
pre_score is low. Only promote to MANUAL_REVIEW when model suggests
resolution or pre_score has hard signals
- Truncate user messages to 24k chars (issue body capped at 4k) to
stay within GitHub Models 8000 token input limit
- Upgrade model from gpt-4o-mini to gpt-4o for better classification
- Add retry loop with backoff on 429 responses (up to 5 retries)
- Respect Retry-After header from GitHub Models API
- Replace stub callGitHubModel() with real GitHub Models API call
using gpt-4o-mini with structured JSON output
- Build detailed user messages from issue body, comments, and timeline
- Add per-issue decision logging to classify step
- Upload candidates.json and decisions.json as workflow artifacts
Move the dry-run check to the top of the loop so it applies to all
decision types, not just AUTO_CLOSE. In dry-run mode the workflow now
only logs what it would do without touching any issues.
GITHUB_TOKEN cannot access org-level Projects V2. Make addToProject
return null on failure instead of crashing, and skip setTextField
calls when project access is unavailable. A PAT with project scope
is needed for full project board integration.
- Set defaults.run.working-directory to .github/issue-resolution so
scripts resolve from the correct path
- Remove npm ci step (no npm dependencies needed)
- Add fetch-candidates.mjs to gather open issues with comments and
timeline events via GitHub REST API
- Add minimal package.json with type: module