Skip to content

feat(ci): issue auto-implement — trigger gate, dotenv fix, actions/checkout@v6#243

Merged
leggetter merged 19 commits into
mainfrom
feat/issue-auto-implement-setup
Mar 16, 2026
Merged

feat(ci): issue auto-implement — trigger gate, dotenv fix, actions/checkout@v6#243
leggetter merged 19 commits into
mainfrom
feat/issue-auto-implement-setup

Conversation

@leggetter

Copy link
Copy Markdown
Collaborator

Summary

  • Permission-based trigger gate: Optional AUTO_IMPLEMENT_ALLOWED_TRIGGER_MIN_PERMISSION (e.g. push/maintain) so the workflow works with default GITHUB_TOKEN; team check (AUTO_IMPLEMENT_ALLOWED_TRIGGER_TEAM) remains as alternative (requires read:org).
  • CI fix: Move dotenv to dependencies so npm ci --omit=dev installs it (fixes ERR_MODULE_NOT_FOUND in assess step).
  • Actions upgrade: actions/checkout@v4@v6 (Node 24); issue-auto-implement-test uses Node 22.

Docs

  • README and AGENTS.md updated for both trigger options (permission vs team).

Made with Cursor

- 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
- 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
- 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
- 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
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
- 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
- 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
- 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
…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
- 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
…h-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
…ssess: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
- 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
…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
…ons/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
@leggetter leggetter merged commit 85a78c8 into main Mar 16, 2026
8 of 9 checks passed
@leggetter leggetter deleted the feat/issue-auto-implement-setup branch March 16, 2026 21:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant