Commit fadf069
authored
feat(ci): git identity for issue-auto-implement implement step (#244)
* feat(ci): add issue auto-implement action and workflow
- Add workflow issue-auto-implement.yml (label, comment, PR review triggers)
- Add composite action: team check, labels, assess script, implement placeholder, verify loop, create PR
- Add assess script (TypeScript/tsx, Claude, fixtures) with vitest tests
- Add workflow issue-auto-implement-test.yml to run assess tests on PR
- Add README (usage, inputs, testing) and AGENTS.md (flows, verification, next steps)
- Use AUTO_IMPLEMENT_* prefix for secrets/vars; require github_allowed_trigger_team
Made-with: Cursor
* feat(ci): pass context_files into assess and include in Claude prompt
- Add CONTEXT_FILES and GITHUB_WORKSPACE to assess step env
- Load repo files (AGENTS.md, REFERENCE.md, etc.) and append to assessment prompt
- Skip missing files; REPO_ROOT from GITHUB_WORKSPACE or cwd for local runs
Made-with: Cursor
* feat(ci): fetch all issue comments for assessment
- For issues and issue_comment events, call GitHub API for issue comments
- Include all comments in Claude prompt (author, date, body)
- Fall back to payload comment/comments when API not used
Made-with: Cursor
* fix(ci): stabilize issue-auto-implement assess tests workflow
- Set GITHUB_WORKSPACE in job env so assess script has repo root in CI
- Use working-directory instead of cd for install/test step
- Add npm cache keyed by assess package-lock.json
Made-with: Cursor
* fix(ci): do not run main() when assess script is loaded by Vitest
In CI the runner sets GITHUB_EVENT_PATH, so the script was invoking main()
on import; loadPayload() then threw and process.exit(1) caused Vitest to
fail with an unhandled error. Only run main() when GITHUB_EVENT_PATH is
set and VITEST is not (i.e. when invoked as script, not by tests).
Made-with: Cursor
* feat(ci): wire Claude implement step and commit-and-push
- Add assess/implement.ts: fetch issue, call Claude for edits JSON, apply files, write commit message
- Action: run implement script with env; commit and push using generated commit message
- Add .gitignore for .commit_msg; document implement script in AGENTS.md
Made-with: Cursor
* feat(ci): true implement-verify loop with PREVIOUS_VERIFY_OUTPUT
- Implement script accepts PREVIOUS_VERIFY_OUTPUT and adds it to Claude prompt on retry
- Single step loops: implement → commit/push → verify; on verify failure retry with output
- Create PR uses implement_verify_loop.outcome; document loop in AGENTS.md
Made-with: Cursor
* refactor(issue-auto-implement): move assess into src/ and test/
- Main code: assess/src/ (index.ts, implement.ts, normalize.ts)
- Tests: assess/test/ (index.test.ts, normalize.test.ts)
- Fixtures stay at assess/fixtures/
- Update package.json scripts and action.yml to use src/
- Add .env.example, setup-local-env.sh, .gitignore .env; update README/AGENTS paths
Made-with: Cursor
* refactor(issue-auto-implement): consolidate tests under test/ (unit, integration, fixtures)
- test/unit/ — unit tests (npm test), no API
- test/integration/ — Claude API tests (npm run test:integration), not in CI
- test/fixtures/ — shared event JSONs for both and assess:fixture script
- Remove top-level fixtures/ and test-integration/; update vitest configs and paths
Made-with: Cursor
* chore: ignore auto-implement worktrees
Made-with: Cursor
* fix(issue-auto-implement): use Claude Code CLI only, single API key
- Implement runs only Claude Code CLI (no API path); pass AUTO_IMPLEMENT_ANTHROPIC_API_KEY to CLI
- Assess uses only AUTO_IMPLEMENT_ANTHROPIC_API_KEY
- Action installs Claude Code CLI in CI when assess outcome is implement
- README: add CI/CD checklist; docs for implement and env
- AGENTS.md: implement flow and backlog updated
Made-with: Cursor
* fix(issue-auto-implement): create new PR when previous closed; TS push-and-open-pr
- push-and-open-pr.ts: check gh pr view --json state; only skip create when OPEN
- run-local-assess.ts: worktree flow, calls pushAndOpenPr, default context
- load-dotenv.ts: used by run-local-assess
- scripts/push-and-open-pr.sh: optional standalone script
Made-with: Cursor
* docs(issue-auto-implement): quick start, remove TEST_PLAN refs, add assess:local
- README: add How to use (workflow, secrets, trigger label, trigger)
- Remove TEST_PLAN.md references from README and AGENTS.md
- package.json: add assess:local script
Made-with: Cursor
* feat(issue-auto-implement): add setup workflow to create labels
- Add issue-auto-implement-setup.yml (workflow_dispatch) to create
automation/auto-implement, automation/needs-info, automation/pr-created
- README: quick start step 3 mentions running setup workflow
- REMOTE_TEST_PLAN: prerequisites reference setup workflow
Made-with: Cursor
* chore: remove REMOTE_TEST_PLAN.md from source control
Made-with: Cursor
* feat(issue-auto-implement): add permission-based trigger gate (works with default token)
- Add optional github_allowed_trigger_min_permission input (triage, push, maintain, admin).
When set via repo variable AUTO_IMPLEMENT_ALLOWED_TRIGGER_MIN_PERMISSION, the action
checks repo collaborator permission via API; works with default GITHUB_TOKEN (no read:org).
- Keep team check (AUTO_IMPLEMENT_ALLOWED_TRIGGER_TEAM) as alternative; token needs read:org.
- Exactly one gate required per run; if both variables set, permission check is used.
- Update README and AGENTS.md with both options.
Made-with: Cursor
* feat(ci): dotenv in deps for issue-auto-implement CI, upgrade to actions/checkout@v6
- Move dotenv to dependencies so npm ci --omit=dev installs it (fixes ERR_MODULE_NOT_FOUND in CI)
- Upgrade actions/checkout@v4 to @v6 (Node 24, removes deprecation warning)
- issue-auto-implement-test: checkout@v6, Node 22 for assess tests
Made-with: Cursor
* feat(ci): set git user identity before implement step (fix exit 128)
Runner has no default git user; set user.name and user.email in Checkout
branch step so git merge and git commit in implement loop succeed.
Made-with: Cursor1 parent 85a78c8 commit fadf069
1 file changed
Lines changed: 3 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
177 | 177 | | |
178 | 178 | | |
179 | 179 | | |
| 180 | + | |
180 | 181 | | |
| 182 | + | |
| 183 | + | |
181 | 184 | | |
182 | 185 | | |
183 | 186 | | |
| |||
0 commit comments