skills/issue-driven-development/SKILL.md
Use for any development work - the master 13-step coding process that orchestrates all other skills, ensuring GitHub issue tracking, proper branching, TDD, code review, and CI verification
npx skillsauth add troykelly/codex-skills issue-driven-developmentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
The master coding process. Every step references specific skills. Follow in order.
Core principle: No work without an issue. No shortcuts. No exceptions.
Announce at start: "I'm using issue-driven-development to implement this work."
Create TodoWrite items for each step you'll execute. This is not optional.
Question: Am I working on a clearly defined GitHub issue that is tracked in the project board?
Actions:
issue-prerequisite skillVerification (MANDATORY):
# Verify issue is in project board
ITEM_ID=$(gh project item-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" \
--format json | jq -r ".items[] | select(.content.number == [ISSUE_NUMBER]) | .id")
if [ -z "$ITEM_ID" ] || [ "$ITEM_ID" = "null" ]; then
echo "BLOCKED: Issue not in project board. Add it before proceeding."
# Add to project
gh project item-add "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" \
--url "$(gh issue view [ISSUE_NUMBER] --json url -q .url)"
fi
# Verify Status field is set
STATUS=$(gh project item-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" \
--format json | jq -r ".items[] | select(.id == \"$ITEM_ID\") | .status.name")
if [ -z "$STATUS" ] || [ "$STATUS" = "null" ]; then
echo "BLOCKED: Issue has no Status in project. Set Status before proceeding."
fi
Skill: issue-prerequisite, project-board-enforcement
Gate: Do not proceed unless:
Question: Are there comments on the issue I need to read?
Actions:
Skill: issue-lifecycle
Question: Is this issue too large for a single task?
Indicators of too-large:
If too large:
issue-decompositionparent labelSkill: issue-decomposition
Question: Is there previous work on this issue or related issues?
Actions:
episodic-memory for issue number, feature name, related termsmcp__memory knowledge graph for related entitiesSkill: memory-integration
Question: Do I need to perform research to complete this task?
Research types:
Actions:
Skill: pre-work-research
Question: Am I on the correct branch AND has the project status been updated?
Rules:
mainmain, sometimes existing feature branch)Naming: feature/issue-123-short-description or fix/issue-456-bug-name
Project Status Update (MANDATORY):
When starting work, update project board Status to "In Progress":
# Get project and field IDs
PROJECT_ID=$(gh project list --owner "$GH_PROJECT_OWNER" --format json | \
jq -r ".projects[] | select(.number == $GITHUB_PROJECT_NUM) | .id")
STATUS_FIELD_ID=$(gh project field-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" \
--format json | jq -r '.fields[] | select(.name == "Status") | .id')
IN_PROGRESS_ID=$(gh project field-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" \
--format json | jq -r '.fields[] | select(.name == "Status") | .options[] | select(.name == "In Progress") | .id')
# Update status to In Progress
gh project item-edit --project-id "$PROJECT_ID" --id "$ITEM_ID" \
--field-id "$STATUS_FIELD_ID" --single-select-option-id "$IN_PROGRESS_ID"
# Verify update succeeded
NEW_STATUS=$(gh project item-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" \
--format json | jq -r ".items[] | select(.id == \"$ITEM_ID\") | .status.name")
if [ "$NEW_STATUS" != "In Progress" ]; then
echo "ERROR: Failed to update project status. Cannot proceed."
exit 1
fi
Skill: branch-discipline, project-board-enforcement
Gate: Do not proceed if:
main branchProcess: RED → GREEN → REFACTOR
Standards to apply simultaneously:
tdd-full-coverage - Write test first, watch fail, minimal code to passstrict-typing - No any types, full typinginline-documentation - JSDoc/docstrings for all public APIsinclusive-language - Respectful terminologyno-deferred-work - No TODOs, do it nowActions:
Skills: tdd-full-coverage, strict-typing, inline-documentation, inclusive-language, no-deferred-work
Question: Did I succeed in delivering what is documented in the issue?
Actions:
research-after-failureSkill: acceptance-criteria-verification, research-after-failure
Question: Minor change or major change?
Minor change (Step 9.1):
comprehensive-review checklistMajor change (Step 9.2):
comprehensive-review checklist7 Review Criteria:
Security-Sensitive Check:
# Check if any changed files are security-sensitive
git diff --name-only HEAD~1 | grep -E '(auth|security|middleware|api|password|token|secret|session|routes|\.sql)'
If matches found:
security-review skill OR run codex-subagent security-reviewerHARD REQUIREMENT: Post review artifact to issue comment:
<!-- REVIEW:START -->
## Code Review Complete
| Property | Value |
|----------|-------|
| Issue | #[ISSUE] |
| Scope | [MINOR|MAJOR] |
| Security-Sensitive | [YES|NO] |
| Reviewed | [ISO_TIMESTAMP] |
[... full artifact per comprehensive-review skill ...]
**Review Status:** ✅ COMPLETE
<!-- REVIEW:END -->
Gate: PR creation will be BLOCKED by hooks if artifact not found.
Skills: review-scope, comprehensive-review, security-review, review-gate
Rule: Implement ALL recommendations from code review, regardless how minor.
ABSOLUTE: Every finding must result in ONE of:
deferred-finding skillThere is NO third option. "Won't fix without tracking" is NOT permitted.
Actions:
deferred-finding skill to create tracking issuereview-finding and spawned-from:#ISSUE labelsGate: Review artifact must show "Unaddressed: 0" before proceeding.
Skills: apply-all-findings, deferred-finding
Actions:
Skill: tdd-full-coverage
Prerequisites (verified by hooks):
Actions:
CRITICAL: The PreToolUse hook will BLOCK gh pr create if:
If blocked, return to Step 9 or Step 10.
Skills: clean-commits, pr-creation, review-gate
Actions:
When CI is green (MANDATORY):
gh pr merge [PR_NUMBER] --squash --delete-branch# When CI passes
gh pr merge [PR_NUMBER] --squash --delete-branch
# Update project status to Done
# ... project board update commands ...
# Continue to next issue (do not stop)
Do NOT:
Skills: ci-monitoring
Issue AND project board updates happen CONTINUOUSLY, not as a separate step.
These updates are NOT optional. They are gates.
| Moment | Project Status | Verification | |--------|----------------|--------------| | Starting work (Step 6) | → In Progress | Verify status changed | | PR created (Step 12) | → In Review | Verify status changed | | Work complete | → Done | Verify status changed | | Blocked | → Blocked | Verify status changed |
At minimum, update the issue:
CRITICAL: Use project board for state queries, NOT labels.
# WRONG - do not use labels for state
gh issue list --label "status:in-progress"
# RIGHT - query project board
gh project item-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" \
--format json | jq -r '.items[] | select(.status.name == "In Progress")'
Skill: issue-lifecycle, project-status-sync, project-board-enforcement
If any step fails unexpectedly:
error-recoverySkill: error-recovery
Work is complete when:
| Step | Skill(s) | Gate | |------|----------|------| | 1 | issue-prerequisite, project-board-enforcement | Must have issue IN PROJECT BOARD | | 2 | issue-lifecycle | - | | 3 | issue-decomposition | - | | 4 | memory-integration | - | | 5 | pre-work-research | - | | 6 | branch-discipline, project-board-enforcement | Must not be on main, Status → In Progress | | 7 | tdd-full-coverage, strict-typing, inline-documentation, inclusive-language, no-deferred-work | - | | 8 | acceptance-criteria-verification, research-after-failure | - | | 9 | review-scope, comprehensive-review, security-review, review-gate | Review artifact required | | 10 | apply-all-findings, deferred-finding | Unaddressed: 0 required | | 11 | tdd-full-coverage | - | | 12 | clean-commits, pr-creation, review-gate, project-board-enforcement | Hook blocks without artifact, Status → In Review | | 13 | ci-monitoring, verification-before-merge | Must be green, Status → Done on merge |
This process is enforced by:
gh pr create - Blocks without review artifactgh pr merge - Verifies CI and reviewgit checkout -b - Verifies issue is in project boardgit checkout -b - Updates Status → In Progressgh pr create - Updates Status → In ReviewIf project board verification fails:
## BLOCKED: Project Board Compliance Failed
**Issue:** #[NUMBER]
**Problem:** [Issue not in project / Status not set / Update failed]
**Required Action:**
1. Add issue to project board
2. Set required fields (Status, Type, Priority)
3. Retry the blocked action
**Command to add:**
gh project item-add $GITHUB_PROJECT_NUM --owner $GH_PROJECT_OWNER --url [ISSUE_URL]
Do NOT proceed past a project board gate failure. Fix it first.
data-ai
Defines behavior protocol for spawned worker agents. Injected into worker prompts. Covers startup, progress reporting, exit conditions, and handover preparation.
development
Defines context handover format when workers hit turn limit. Posts structured handover to GitHub issue comments enabling replacement workers to continue seamlessly.
data-ai
Use to spawn isolated worker processes for autonomous issue work. Creates git worktrees, constructs worker prompts, and handles worker lifecycle.
tools
Entry point for ALL work requests - triages scope from trivial to massive, asks clarifying questions, and routes to appropriate planning skills. Use this when receiving any new work request.