比對兩個 TC 版本(v0.x → v0.y)的差異,產 changelog + 補測清單 + 自動更新 status sheet 的審查紀錄。當使用者提到「TC 版本 diff / TC 升版 / 比對 v0.2 v0.3 / 哪些 TC 要重跑 / 補測清單」,或剛 review 完一份 TC 升版本(看到「v0.3 補 8 條」這種訊息)時觸發。配套:test-review(升版前審)、test-master(升版時擴張)、tc-to-pytest(API TC 升版同步 pytest)。
Scanned 9/2/2026
Install to Claude Code
npx -y skills add kao273183/qa-claude-skill --skill tc-version-diff --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Tc Version Diff?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/kao273183-tc-version-diff)More formats (shields.io, HTML) on the badges page.
---
name: tc-version-diff
description: 比對兩個 TC 版本(v0.x → v0.y)的差異,產 changelog + 補測清單 + 自動更新 status sheet 的審查紀錄。當使用者提到「TC 版本 diff / TC 升版 / 比對 v0.2 v0.3 / 哪些 TC 要重跑 / 補測清單」,或剛 review 完一份 TC 升版本(看到「v0.3 補 8 條」這種訊息)時觸發。配套:test-review(升版前審)、test-master(升版時擴張)、tc-to-pytest(API TC 升版同步 pytest)。
disable-model-invocation: false
allowed-tools: Read, Grep, Glob, Write, Edit, Bash, mcp__google__readSpreadsheet, mcp__google__getSpreadsheetInfo, mcp__google__writeSpreadsheet
argument-hint: "[v_old Sheet/檔] [v_new Sheet/檔] / 或單一 Sheet(自動從 status sheet 找最近兩版)"
---
# tc-version-diff
> ⚙️ **執行前先讀 [`modules/config-loader.md`](./modules/config-loader.md)**。
> 若 `mode = markdown-only`,跳過 Sheet 操作,純比對兩個 markdown 檔。
## 適用場景
- ✅ TC 從 v0.2 升 v0.3,要產 changelog
- ✅ Sprint review 後規格變動,TC 要回頭比對影響哪些 row
- ✅ Release 前確認「上次回歸後新增/改動的 TC 有沒有都 cover」
- ✅ Sheet status 分頁的「審查紀錄」區塊要自動寫入版本對照
## 不適用場景
- ❌ 完全新版(v0.1 first draft)→ 沒前一版可比,用 `test-master` 從零生
- ❌ 跨功能模組大重組 → 用 `test-master` 升級流程
- ❌ 純文字錯字修 → 不需要這個 skill,直接改
## Phase 1: 取兩版來源
| 輸入 | 動作 |
|------|------|
| 兩個 Sheet URL | 都用 google MCP `readSpreadsheet` 抓 |
| 兩個 markdown 檔 | Read 兩份 |
| 單一 Sheet → 自動找前一版 | 從 status 分頁的「審查紀錄」表撈最近兩個 row 的「測試版本」欄 |
| 單一模組名 + 版本號 | 從 `tc-index.md`(若存在)找 Sheet → Drive revision API 抓兩個快照 |
> Drive revision 抓法依 google MCP 版本而定;如無,互動式請使用者提供 export 的兩個檔。
## Phase 2: 建立 ID-key 對照
從兩版各抽出所有 TC row,建 dict:`{id: row_data}`。
忽略空行、status 分頁。
分 BB / WB 兩個 sheet 分別處理。
## Phase 3: 分類差異
| 類型 | 判斷 | 影響 |
|------|------|------|
| 🆕 **Added** | id 在 v_new 但不在 v_old | 補測必跑 |
| 🗑️ **Removed** | id 在 v_old 但不在 v_new | 看是否真的不需要了,還是被改 ID |
| ✏️ **Modified** | id 同但內容變 | 看哪欄變決定影響 |
| ✅ **Unchanged** | 完全相同 | 已測過免重測 |
**Modified 細分**(依「哪欄變」歸類):
| 變動欄 | 影響等級 | 補測決策 |
|--------|---------|---------|
| 標題 / 備註 | 🟢 低 | 不需重測,僅文字 |
| 步驟 J | 🟡 中 | 重測(步驟變了) |
| **預期結果 K** | 🔴 高 | **必重測**(驗收標準變了) |
| 優先度 G | 🟡 中 | P 升級 → 必跑;P 降級 → 可緩 |
| 自動化 L | 🟢 低 | 標 N→Y 不影響跑;標 Y→N 看為什麼 |
| 平台 H | 🔴 高 | 平台拓寬要補跑新平台 |
| 分類 F | 🟡 中 | 分類重歸位通常不影響跑 |
| 前置 I | 🟡 中 | 前置變了要驗環境 |
## Phase 4: 產 changelog
寫到 `<repo>/<feature>/tc-changelog-v{old}-v{new}.md`:
```markdown
# TC Changelog · {feature} v0.2 → v0.3
**生成日期**:2026-MM-DD
**對比基準**:BB v0.2 (79 條 / WB v0.2 33 條) → BB v0.3 (90 條 / WB v0.3 43 條)
**淨變動**:+11 BB / +10 WB / 修改 X / 移除 0
## 🆕 Added(補測必跑)
### Black-box (+11)
- BB-{FEATURE}-086 相容:iOS 16 [P1] [iOS]
- BB-{FEATURE}-087 相容:iOS 17 [P1] [iOS]
...
### White-box (+8)
- WB-{FEATURE}-035 步數 sync 未授權 401 防偽 [P0] [Both]
...
## ✏️ Modified(依影響等級)
### 🔴 高影響(**必重測**)
- BB-{FEATURE}-012:預期結果改(從「應該成功」→「200 + schema XXX」)
- 改動原因:補強斷言(v0.2 review 找到 Critical#3)
### 🟡 中影響
- BB-{FEATURE}-023:步驟 J 改
### 🟢 低影響
- WB-{FEATURE}-005:標題微調
## 🗑️ Removed(0)
無移除。
## 📋 補測清單
| ID | 優先度 | 平台 | 估時 | 自動化 |
|----|-------|------|------|--------|
| BB-{FEATURE}-086 | P1 | iOS | 30 min | N |
| WB-{FEATURE}-035 | P0 | Both | 10 min | Y (pytest) |
...
**總估時**:M 人時(手動)+ K 自動化(CI 跑)
## 🔗 對應 pytest(如有)
如果 WB Modified / Added 有自動化,列出 pytest function 名:
- WB-{FEATURE}-035 → `tests/test_{feature}_api.py::test_steps_sync_unauth_rejected`
→ 跑 `{FEATURE}_API_LIVE=1 pytest -k "test_steps_sync_unauth_rejected or ..."`
```
## Phase 5: 自動寫 status sheet 審查紀錄
> 僅在 `mode != markdown-only` 且 google MCP 可用時執行。
如果輸入是 Sheet(不是純 markdown),呼叫 google MCP 寫入 status 分頁的「審查紀錄」表:
```
2026-MM-DD | tc-version-diff | — | — | — | — | v0.2 → v0.3 升版:+11 BB / +10 WB / Modified X / 補測 N 條
```
對應 status sheet 的「綜合評分」欄不動(這不是審查,是版本對照)。
## Phase 6: Slack 通知
依 `slack.notification_rules.tc_version_diff`(若未定義則跳過):
```
:arrows_counterclockwise: *TC 升版 {feature} v0.2 → v0.3*
:new: +N · :memo: M Modified · :wastebasket: 0 Removed
:exclamation: *補測必跑*:N 條(含 P0 X 條)
:link: changelog: <local path>
```
## ⚠️ 安全護欄
- ✅ 只 Write `tc-changelog-*.md`(純 documentation)
- ✅ 寫 Sheet 限於 status 分頁的「審查紀錄」追加 row
- ❌ 不動 BB / WB 主分頁
- ❌ 不主動跑補測(使用者看 changelog 後決定)
- ❌ 不動 pytest 程式碼(要動用 `tc-to-pytest --incremental`)
## 配套整合
完整 升版 workflow:
```
1. spec 變動 / TC review 找到缺口
↓
2. test-master --mode=quick 補新 TC(v0.2 → v0.3)
↓
3. /test-review 跑審查(v0.3 自評)
↓
4. /tc-version-diff v0.2 v0.3 ← 本 skill
↓
5. /tc-to-pytest --incremental 同步 pytest 三件套
↓
6. 跑補測清單 + pytest,回填結果
↓
7. status sheet 自動更新(含本 skill 寫的版本紀錄)
```
## 設定依賴
| 設定 Key | 用途 | 缺值時行為 |
|---------|------|-----------|
| `mode = markdown-only` | 全程模式 | 只比對 .md,不寫 Sheet |
| `slack.notification_rules.tc_version_diff` | 通知設定 | 不發 Slack |
## 範例
詳見 [`examples.md`](./examples.md)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!