# Tc Version Diff

> 比對兩個 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）。

- Skill: `kao273183/tc-version-diff` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add kao273183/tc-version-diff`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kao273183/tc-version-diff/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: kao273183 (https://skillmd.com/u/kao273183)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/kao273183/tc-version-diff

---


# 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)

