332 lines
7.3 KiB
Markdown
332 lines
7.3 KiB
Markdown
# Commit Workflow Guidelines
|
|
|
|
> When and how to commit, especially between to-do items.
|
|
|
|
**Related:** [TESTING_VALIDATION.md](./TESTING_VALIDATION.md) | [GIT_PUSH_PROCEDURES.md](./GIT_PUSH_PROCEDURES.md)
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
This document defines when and how to commit changes, with special emphasis on the **"commit after each to-do"** rule. Frequent, focused commits create a clean history and enable easy rollback.
|
|
|
|
---
|
|
|
|
## When to Commit
|
|
|
|
### Commit Decision Matrix
|
|
|
|
| Scenario | Commit? | Rationale |
|
|
|----------|---------|-----------|
|
|
| Completed a to-do item | **YES** | Checkpoint progress |
|
|
| Made a working change | **YES** | Save known-good state |
|
|
| Fixed a bug | **YES** | Isolate the fix |
|
|
| Added a feature | **YES** | Track feature addition |
|
|
| Refactored code | **YES** | Separate from other changes |
|
|
| Updated documentation | **YES** | Track doc changes |
|
|
| Made partial progress | **MAYBE** | Only if working state |
|
|
| Code doesn't compile | **NO** | Never commit broken code |
|
|
| Tests failing | **NO** | Fix tests first |
|
|
| Debugging in progress | **NO** | Remove debug code first |
|
|
|
|
### After Each To-Do Rule
|
|
|
|
**RULE: Commit after completing each to-do item.**
|
|
|
|
```
|
|
TO-DO LIST WORKFLOW:
|
|
|
|
[ ] To-do 1: Implement feature A
|
|
↓
|
|
[Complete work]
|
|
↓
|
|
[Validate] → [COMMIT] ← Commit here
|
|
↓
|
|
[ ] To-do 2: Update tests
|
|
↓
|
|
[Complete work]
|
|
↓
|
|
[Validate] → [COMMIT] ← Commit here
|
|
↓
|
|
[ ] To-do 3: Update documentation
|
|
↓
|
|
[Complete work]
|
|
↓
|
|
[Validate] → [COMMIT] ← Commit here
|
|
```
|
|
|
|
**Benefits:**
|
|
- Each to-do is a discrete, reversible unit
|
|
- Easy to rollback individual changes
|
|
- Clear history of what was done when
|
|
- Progress is preserved even if later work fails
|
|
|
|
---
|
|
|
|
## Commit Frequency Patterns
|
|
|
|
### Single-File Changes
|
|
|
|
```
|
|
Pattern: One commit per logical change
|
|
|
|
Example:
|
|
- Fix bug in parser.py → commit
|
|
- Add test for fix → commit
|
|
- Update docstring → commit
|
|
```
|
|
|
|
### Multi-File Changes
|
|
|
|
```
|
|
Pattern: Group related changes, commit together
|
|
|
|
Example:
|
|
- Add new endpoint (route + handler + model) → one commit
|
|
- Update config and env files → one commit
|
|
- Refactor shared utility used by multiple files → one commit
|
|
```
|
|
|
|
### Sprint Task Commits
|
|
|
|
```
|
|
Pattern: Follow sprint steps, commit after each
|
|
|
|
SPRINT-2026-01-14-add-feature.md:
|
|
STEP 1: Read files → (no commit, read-only)
|
|
STEP 2: Edit code → COMMIT after validation
|
|
STEP 3: Add tests → COMMIT after validation
|
|
STEP 4: Update docs → COMMIT after validation
|
|
```
|
|
|
|
---
|
|
|
|
## Commit Message Standards
|
|
|
|
### Format Template
|
|
|
|
```
|
|
<type>(<scope>): <short description>
|
|
|
|
<optional body - explain why, not what>
|
|
|
|
Authored by TheArchitectit
|
|
```
|
|
|
|
### Type Reference
|
|
|
|
| Type | Use For | Example |
|
|
|------|---------|---------|
|
|
| `fix` | Bug fixes | `fix(parser): handle null input` |
|
|
| `feat` | New features | `feat(auth): add OAuth support` |
|
|
| `docs` | Documentation | `docs(readme): update install steps` |
|
|
| `refactor` | Code restructure | `refactor(api): simplify handler logic` |
|
|
| `test` | Test changes | `test(parser): add edge case tests` |
|
|
| `chore` | Maintenance | `chore(deps): update packages` |
|
|
| `perf` | Performance | `perf(query): add index for lookup` |
|
|
| `security` | Security fixes | `security(auth): fix token validation` |
|
|
|
|
### Good vs Bad Messages
|
|
|
|
```
|
|
BAD:
|
|
- "fix bug"
|
|
- "update code"
|
|
- "changes"
|
|
- "WIP"
|
|
|
|
GOOD:
|
|
- "fix(parser): handle empty string input gracefully"
|
|
- "feat(api): add rate limiting to public endpoints"
|
|
- "docs(readme): add troubleshooting section"
|
|
```
|
|
|
|
### AI Attribution
|
|
|
|
**All AI-generated commits MUST include:**
|
|
|
|
```
|
|
Authored by TheArchitectit
|
|
```
|
|
Authored by TheArchitectit
|
|
```
|
|
|
|
Use HEREDOC for proper formatting:
|
|
|
|
```bash
|
|
git commit -m "$(cat <<'EOF'
|
|
fix(parser): handle null input gracefully
|
|
|
|
Added null check to prevent TypeError when input is undefined.
|
|
|
|
Authored by TheArchitectit
|
|
EOF
|
|
)"
|
|
```
|
|
|
|
---
|
|
|
|
## Pre-Commit Checklist
|
|
|
|
**Before EVERY commit, verify:**
|
|
|
|
```
|
|
[ ] All validation checks pass (see TESTING_VALIDATION.md)
|
|
[ ] Only expected files are staged
|
|
[ ] Git diff shows only intended changes
|
|
[ ] No debug/logging code included
|
|
[ ] No secrets or credentials included
|
|
[ ] No generated files included
|
|
[ ] Commit message follows format
|
|
[ ] AI attribution included
|
|
```
|
|
|
|
### Staging Patterns
|
|
|
|
```bash
|
|
# Stage specific file
|
|
git add path/to/file.py
|
|
|
|
# Stage multiple specific files
|
|
git add file1.py file2.py
|
|
|
|
# Review what will be committed
|
|
git diff --cached
|
|
|
|
# Unstage if needed
|
|
git reset HEAD path/to/file.py
|
|
```
|
|
|
|
**AVOID:**
|
|
```bash
|
|
# Don't use these without reviewing first
|
|
git add .
|
|
git add -A
|
|
git add *
|
|
```
|
|
|
|
---
|
|
|
|
## Commit Verification
|
|
|
|
### Post-Commit Verification
|
|
|
|
```bash
|
|
# Verify commit was created
|
|
git log -1 --oneline
|
|
|
|
# View full commit details
|
|
git show HEAD
|
|
|
|
# Verify commit contents
|
|
git show HEAD --stat
|
|
```
|
|
|
|
### Commit Rollback
|
|
|
|
If commit was incorrect (before push):
|
|
|
|
```bash
|
|
# Undo commit, keep changes staged
|
|
git reset --soft HEAD~1
|
|
|
|
# Undo commit, keep changes unstaged
|
|
git reset HEAD~1
|
|
|
|
# Undo commit, discard changes (CAUTION)
|
|
git reset --hard HEAD~1
|
|
```
|
|
|
|
---
|
|
|
|
## Integration with To-Do Lists
|
|
|
|
### Workflow with TodoWrite
|
|
|
|
```
|
|
1. TodoWrite: Mark to-do as "in_progress"
|
|
2. Complete the work
|
|
3. Validate (see TESTING_VALIDATION.md)
|
|
4. git add <files>
|
|
5. git commit with proper message
|
|
6. TodoWrite: Mark to-do as "completed"
|
|
7. Repeat for next to-do
|
|
```
|
|
|
|
### Example Session
|
|
|
|
```
|
|
TodoWrite: [in_progress] "Add input validation"
|
|
↓
|
|
Edit: Add validation code
|
|
↓
|
|
Validate: Syntax + tests pass
|
|
↓
|
|
git add src/validator.py
|
|
git commit -m "feat(validator): add input validation
|
|
|
|
Authored by TheArchitectit"
|
|
↓
|
|
TodoWrite: [completed] "Add input validation"
|
|
↓
|
|
TodoWrite: [in_progress] "Update tests"
|
|
↓
|
|
... continue ...
|
|
```
|
|
|
|
---
|
|
|
|
## MCP Checkpoint Integration
|
|
|
|
When using MCP checkpointing:
|
|
|
|
```
|
|
[MCP CHECKPOINT: before-todo-1]
|
|
↓
|
|
Complete to-do 1
|
|
↓
|
|
COMMIT
|
|
↓
|
|
[MCP CHECKPOINT: after-todo-1]
|
|
↓
|
|
Complete to-do 2
|
|
↓
|
|
COMMIT
|
|
↓
|
|
[MCP CHECKPOINT: after-todo-2]
|
|
```
|
|
|
|
See [MCP_CHECKPOINTING.md](./MCP_CHECKPOINTING.md) for details.
|
|
|
|
---
|
|
|
|
## Quick Reference
|
|
|
|
```
|
|
+------------------------------------------------------------------+
|
|
| COMMIT WORKFLOW QUICK REFERENCE |
|
|
+------------------------------------------------------------------+
|
|
| WHEN TO COMMIT: |
|
|
| ✓ After completing each to-do item |
|
|
| ✓ After any working change |
|
|
| ✗ Never with failing tests |
|
|
| ✗ Never with debug code |
|
|
+------------------------------------------------------------------+
|
|
| MESSAGE FORMAT: |
|
|
| <type>(<scope>): <description> |
|
|
| Authored by TheArchitectit |
|
|
+------------------------------------------------------------------+
|
|
| PRE-COMMIT: |
|
|
| [ ] Validation passes |
|
|
| [ ] Only expected files staged |
|
|
| [ ] No secrets in changes |
|
|
+------------------------------------------------------------------+
|
|
```
|
|
|
|
---
|
|
|
|
**Last Updated:** 2026-01-14
|
|
**Authored by:** TheArchitectit
|
|
**Document Owner:** Project Maintainers
|
|
**Line Count:** ~280
|