TTechSpecs

Finishing a Development Branch Skill

Finishing a Development Branch 是 Superpowers 中的重要完成型 skills,專注於系統化地完成開發分支的所有收尾工作,確保程式碼品質和整合順利進行。

何時使用

在以下情況中使用 Finishing a Development Branch skill:

必須使用的情境

  • 完成一個功能或重構的開發
  • 準備將分支合併到主分支前
  • 完成所有開發任務和測試
  • 需要確保分支可安全合併
  • Sprint 結束需要整合功能

不適合的情境

  • 還在開發中的功能
  • 只是中間的開發里程碑
  • 需要先驗證功能(應先用 verification)
  • 還有未完成的測試

完成分支的清單

第 1 層:功能完整性

確保所有承諾的功能都已實作:

功能驗收清單:
- [ ] 所有承諾的功能都已實作
- [ ] 所有邊界條件都已處理
- [ ] 錯誤處理完整且合理
- [ ] 功能符合需求文件的描述
- [ ] 使用者體驗符合預期

第 2 層:程式碼品質

確保程式碼符合品質標準:

程式碼品質清單:
- [ ] 程式碼符合專案的 linting 規則
- [ ] TypeScript 型別檢查無誤
- [ ] 程式碼可讀且命名清楚
- [ ] 複雜邏輯有適當註解
- [ ] 沒有除錯用的 console.log
- [ ] 沒有註解掉的程式碼
- [ ] 沒有無用的 import 和變數

第 3 層:測試覆蓋

確保有足夠的測試保護:

測試清單:
- [ ] 所有核心功能都有單元測試
- [ ] 關鍵路徑有整合測試
- [ ] 邊界條件有測試覆蓋
- [ ] 錯誤情況有測試處理
- [ ] 所有測試通過(100% pass rate)
- [ ] 測試覆蓋率符合專案標準

第 4 層:文件和註解

確保適當的文件說明:

文件清單:
- [ ] 複雜的函式有 JSDoc 註解
- [ ] API 變更已更新到 API 文件
- [ ] README 或使用文件已更新
- [ ] 變更日誌(CHANGELOG)已更新
- [ ] 重要設計決策有記錄

第 5 層:整合和相容性

確保與其他系統的整合:

整合清單:
- [ ] 與現有功能的相容性
- [ ] API 的向後相容性
- [ ] 資料庫 migration 正確
- [ ] 環境變數設定文件已更新
- [ ] 第三方服務整合正常

完成分支的流程

第 1 步:自我審查

在請求審查前先進行徹底的自我審查:

# 1. 檢查程式碼變更
git diff main...HEAD

# 2. 檢查檔案列表
git diff main...HEAD --name-only

# 3. 執行所有測試
npm test

# 4. 檢查型別
npm run type-check

# 5. 檢查 linting
npm run lint

# 6. 檢查建置
npm run build

第 2 步:最終驗證

使用 verification-before-completion skill 進行最終驗證:

驗證檢查:
✓ 功能正常運作
✓ 沒有 regression
✓ 效能符合預期
✓ 安全性檢查通過

第 3 步:清理程式碼

清理所有開發過程中的遺留物:

// 移除除錯程式碼
- console.log('debug:', data);  // ❌ 移除
- debugger;                      // ❌ 移除

// 移除註解掉的程式碼
- // const oldFunction = () => { ... };  // ❌ 移除

// 移除無用的 import
- import { unusedFunction } from './utils';  // ❌ 移除

// 移除 TODO 和 FIXME(除非有意義的)
// TODO: 優化效能  // ❌ 移除或建立 issue

第 4 步:更新文件

確保所有相關文件都已更新:

文件更新:
- [x] 更新 README.md(如果影響使用方式)
- [x] 更新 API.md(如果有 API 變更)
- [x] 更新 CHANGELOG.md(記錄重要變更)
- [x] 更新 migration guide(如果有 breaking changes)

第 5 步:提交最後變更

將所有收尾工作提交:

# 提交程式碼清理
git add .
git commit -m "chore: code cleanup and final polish"

# 如果有多個收尾 commit,可以 squash
git rebase -i HEAD~3

第 6 步:更新分支

確保分支與主分支同步:

# Fetch 最新的 main
git fetch origin main

# Rebase 到最新的 main(保持乾淨的歷史)
git rebase origin/main

# 如果有 conflict,解決後繼續
git rebase --continue

實際範例

範例 1:完成功能分支

情境:完成使用者認證功能的開發

完成流程

# 第 1 步:檢查當前狀態
$ git status
On branch feature/user-auth
Your branch is ahead of 'origin/feature/user-auth' by 3 commits.

# 第 2 步:檢查程式碼品質
$ npm run lint
 All files pass linting

$ npm run type-check
 No type errors found

# 第 3 步:執行測試
$ npm test
PASS  src/auth/auth.test.ts
PASS  src/auth/login.test.ts
PASS  src/auth/register.test.ts
 All 23 tests passed

# 第 4 步:建置測試
$ npm run build
 Build successful

# 第 5 步:清理程式碼
# 移除所有 console.log 和除錯程式碼
$ git add -A
$ git commit -m "chore: remove debug code and finalize implementation"

# 第 6 步:更新文件
# 更新 README、API 文件、CHANGELOG
$ git commit -m "docs: update documentation for auth feature"

# 第 7 步:同步 main 分支
$ git fetch origin main
$ git rebase origin/main
Current branch feature/user-auth is up to date.

# 第 8 步:推送到遠端
$ git push origin feature/user-auth

# 第 9 步:建立 Pull Request
# 在 GitHub 上建立 PR 並填寫完整描述

PR 描述

## 實作使用者認證功能

### 變更摘要
完整的認證系統,包含註冊、登入、登出和 session 管理。

### 功能清單
- ✅ Email 註冊功能
- ✅ 密碼登入功能
- ✅ Session 管理
- ✅ 自動登出機制
- ✅ 密碼重置功能

### 技術實作
- **後端**:Express.js + JWT + bcrypt
- **前端**:React Context API
- **資料庫**:PostgreSQL(含 migration)
- **測試**:Jest + Supertest

### 測試狀態
- ✅ 單元測試:18 個測試全部通過
- ✅ 整合測試:5 個測試全部通過
- ✅ 測試覆蓋率:87%

### 程式碼品質
- ✅ Linting 通過
- ✅ TypeScript 無錯誤
- ✅ 無 console.log 或除錯程式碼
- ✅ 程式碼已格式化

### 文件
- ✅ README 已更新
- ✅ API 文件已更新
- ✅ CHANGELOG 已更新
- ✅ Migration guide 已建立

### 測試部署
- ✅ 已部署到測試環境
- ✅ 功能測試通過
- ✅ 效能測試通過

### 截圖
(附上功能截圖)

### 相關 Issue
Closes #123, #124

### 待審查項目
請特別關注:
1. 認證邏輯的正確性
2. Session 管理的安全性
3. 錯誤處理的完整性

範例 2:處理合併衝突

情境:在 rebase 時遇到衝突

處理流程

# 第 1 步:開始 rebase
$ git rebase origin/main
Auto-merging src/auth/login.ts
CONFLICT (content): Merge conflict in src/auth/login.ts

# 第 2 步:檢查衝突
$ git status
both modified:   src/auth/login.ts

# 第 3 步:解決衝突
$ vim src/auth/login.ts

# 在編輯器中手動解決衝突
<<<<<<< HEAD
function login(email: string, password: string) {
  return authenticateUser(email, password);
}
=======
function login(email: string, password: string) {
  const user = await findUserByEmail(email);
  if (!user) throw new Error('User not found');
  return bcrypt.compare(password, user.password_hash);
}
>>>>>>> feature/user-auth

# 解決後(保留 feature 分支的實作,但整合 main 的改進)
function login(email: string, password: string) {
  const user = await findUserByEmail(email);
  if (!user) throw new Error('User not found');
  return bcrypt.compare(password, user.password_hash);
}

# 第 4 步:標記衝突已解決
$ git add src/auth/login.ts

# 第 5 步:繼續 rebase
$ git rebase --continue

# 第 6 步:驗證結果
$ npm test
 All tests passed

# 第 7 步:強制推送(因為 rebase 改寫了歷史)
$ git push origin feature/user-auth --force-with-lease

範例 3:在完成前發現問題

情境:在收尾時發現設計問題

處理決策

## 發現的問題

在完成收尾時,我發現當前的 session 設計有潛在的安全問題。

**問題描述**
目前的 JWT token 沒有過期時間,可能會被濫用。

**可能的解決方案**

**方案 1:在這個 PR 中修正**
- 優點:問題立即解決
- 缺點:會延遲合併,影響其他依賴此功能的功能

**方案 2:建立 follow-up PR**
- 優點:當前功能可以及時合併
- 缺點:需要追蹤並確保 follow-up 完成

**方案 3:回退實作,重新設計**
- 優點:確保設計正確
- 缺點:會花費更多時間

**我的建議**:方案 2
1. 在當前 PR 中加上 TODO 註解和警告
2. 建立高優先的 follow-up issue
3. 在下次 sprint 優先處理

**行動計畫**
- [x] 在當前 PR 中加上安全性警告註解
- [x] 建立 issue #456 追蹤這個問題
- [x] 安排在下個 sprint 處理
- [x] 更新风险评估文件

**審查者意見**
請問你們認為這個處理方式是否妥當?
或者你們有更好的建議?

完成分支的檢查清單

程式碼品質

- [ ] 所有 linting 檢查通過
- [ ] TypeScript 型別檢查無誤
- [ ] 程式碼已格式化
- [ ] 沒有除錯程式碼
- [ ] 沒有註解掉的程式碼
- [ ] 沒有無用的 import 和變數
- [ ] 複雜邏輯有適當註解

測試完整性

- [ ] 所有測試通過(100% pass rate)
- [ ] 測試覆蓋率符合標準
- [ ] 關鍵功能有測試保護
- [ ] 邊界條件有測試
- [ ] 錯誤情況有測試
- [ ] 整合測試通過

功能驗證

- [ ] 所有承諾的功能已實作
- [ ] 功能符合需求描述
- [ ] 使用者體驗符合預期
- [ ] 錯誤處理完整且合理
- [ ] 與現有功能相容
- [ ] 效能符合預期

文件更新

- [ ] README 已更新(如需要)
- [ ] API 文件已更新(如需要)
- [ ] CHANGELOG 已更新
- [ ] Migration guide 已建立(如有 breaking changes)
- [ ] 重要決策有記錄

Git 清理

- [ ] 分支歷史乾淨(無 merge commits)
- [ ] Commit 訊息清楚且符合規範
- [ ] 與主分支同步(rebase 到最新)
- [ ] 推送到遠端
- [ ] PR 描述完整清楚

常見問題

Q1:分支還沒完成但需要發布怎麼辦?

A:考慮以下選項:

  1. 功能開關:完成部分功能,用開關控制
  2. 拆分 PR:將完成的部分先合併
  3. 延後發布:等待功能完成再發布

Q2:發現嚴重問題怎麼辦?

A

  1. 立即修復:如果問題嚴重且容易修復
  2. 回退變更:如果問題難以快速修復
  3. 追蹤問題:建立高優先 issue 追蹤

Q3:測試失敗怎麼辦?

A

  1. 修復測試:如果測試合理
  2. 更新測試:如果測試過時或錯誤
  3. 補充測試:如果測試覆蓋不足

Q4:需要 rebase 還是 merge?

A

  • Rebase:保持乾淨的線性歷史(推薦)
  • Merge:保留完整的開發歷史(適合大型 feature)

與其他 Skills 組合

推薦組合

Verification + Finishing Development Branch

verification-before-completion → finishing-a-development-branch

先驗證功能正確,再完成收尾工作

Finishing Development Branch + Requesting Code Review

finishing-a-development-branch → requesting-code-review

完成收尾後請求審查

Finishing Development Branch + Git Worktrees

using-git-worktrees → finishing-a-development-branch

使用 worktree 並行完成多個分支

Finishing a Development Branch 確保每個功能分支都達到高品質標準,是持續交付的關鍵技能!