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:
Minimal, focused changes
Follow existing patterns
snake_case, don't introduce camelCaseAdd comments for non-obvious logic
Design for quality
| 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 |
Fix verification — prove the bug is fixed / feature works
test_feature_handles_null_input() # The exact scenario from the issue
小葱技能站7w4.net每天更新,海量AI技能等你发现。
Edge cases — boundary conditions
test_feature_with_empty_string()
test_feature_with_max_length_input()
test_feature_with_special_characters()
Error handling — invalid inputs, failure paths
test_feature_raises_on_invalid_type()
test_feature_returns_none_on_missing_key()
Regression — existing behavior preserved
test_existing_behavior_unchanged()
test_other_module_still_works()
test_oauth_token_refreshes_when_expired not test_tokenArrange-Act-Assert pattern:
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 |
这个 Skill 质量不错,内容专业且实用。它把开发测试工作拆成清晰的步骤,从学习代码到写测试再到提交都有覆盖。表格和代码示例让内容易读,操作清单也很实用。不足是缺少快速入门的示例和常见问题解答,新手可能需要花时间理解每个阶段的具体做法。总体适合需要规范开发流程的团队使用。