A structured workflow for implementing code changes with quality built in. Covers the full cycle from understanding the codebase to having a verified, reviewable diff.
Use cases: Bug fixes, feature development, refactoring, open-source contributions, any code change that needs to be correct and maintainable.
Never write code before understanding the context. This phase prevents wasted effort and bad designs.
Check for and read these files (if they exist):
CONTRIBUTING.md — contribution guidelines.editorconfig — formatting rulespyproject.toml / package.json / Makefile — project config, linting, formattingtox.ini / .flake8 / .eslintrc — code style rulestests/, __tests__/, test/test_feature.py, feature.test.ts, feature_test.goBefore writing code, articulate:
snake_case, don't introduce camelCase| Principle | Meaning | Example |
|-----------|---------|---------|
| Defense-in-depth | Layer multiple protections | Validate input at API + service + DB layer |
| Backward compatibility | Don't break existing behavior | Add new params with defaults |
| Graceful degradation | Handle missing features | Platform-specific code falls back safely |
| Extensibility | Prefer composable designs | Plugin/middleware over hardcoded switch |
| Single responsibility | One function = one job | Extract logic instead of growing functions |
```
test_feature_handles_null_input() # The exact scenario from the issue
```
```
test_feature_with_empty_string()
test_feature_with_max_length_input()
test_feature_with_special_characters()
```
```
test_feature_raises_on_invalid_type()
test_feature_returns_none_on_missing_key()
```
```
test_existing_behavior_unchanged()
test_other_module_still_works()
```
test_oauth_token_refreshes_when_expired not test_token```python
def test_feature():
# Arrange
input_data = create_test_data()
# Act
result = feature(input_data)
# Assert
assert result.status == "success"
```
# 1. Run only your new/modified tests first (fast feedback)
python -m pytest tests/test_my_feature.py -v --tb=short
# or: npm test -- --testPathPattern=my_feature
# or: go test ./pkg/my_feature/... -v
# 2. Run the full test module/directory
python -m pytest tests/ -v --tb=short
# 3. Run the entire test suite (before committing)
python -m pytest --tb=short
# or: npm test
# or: go test ./...
| Scenario | Action |
|---|---|
| ---------- | -------- |
| All pass ✅ | Proceed to diff review |
| Your tests fail | Fix the code, re-run |
| Pre-existing failures | Note them, don't fix (out of scope) |
| Flaky tests (pass/fail randomly) | Run 3x to confirm flakiness, note in PR |
| Tests you can't run (need env/infra) | Note in PR, explain what you tested manually |
Before committing, review every line of your diff.
# Overview of what changed
git diff --stat
# Full diff
git diff
# If already staged
git diff --cached
# Stage specific files (never use `git add .`)
git add path/to/modified_file.py
git add tests/test_new_feature.py
# Verify staged files
git diff --cached --stat
# Commit with conventional message
git commit -m "fix(module): short description of what was fixed
Longer explanation of why, if non-obvious.
Addresses #issue_number"
{type}({scope}): {concise description}
{body: what and why, not how}
{footer: issue refs, test results, breaking changes}
| Type | When |
|---|---|
| ------ | ------ |
fix | Bug fix |
feat | New feature |
refactor | Code restructure (no behavior change) |
test | Adding/fixing tests only |
docs | Documentation changes only |
chore | Build/tooling/dependency changes |
共 1 个版本