程式碼遷移 Stage 2:實作階段指令
用途
規格書審核通過後,用這道指令讓 AI 依規格把目標檔案的 stub 換成正式實作——型別、精度、捨入與算法全部對齊——並在指定的 checkpoint 停下,不自動往下跑測試或進入下一階段。
何時用
- 適合:已有人工核可的遷移規格書,想分階段控制實作進度、每個 checkpoint 親自確認後才放行時。
- 不要用:規格書還沒核可或根本還沒寫——那時請先用「規格書生成」;也不要用在一次性小改動(直接改比設 checkpoint 快得多)。
Prompt
text
遷移任務:{{遷移任務描述,例:把 billing 模組從 VB6 搬到 Python 3.12}}
只推進到 Stage 2,不要進入 Stage 3 或之後的步驟。
依照核可規格目錄 {{規格目錄路徑}} 中的規格,對目標檔案 {{目標檔路徑}} 執行以下實作:
1. 把所有 stub 函式換成正式實作
2. 型別對應必須符合規格書中的「目標語言型別對應」表
3. 精度與 rounding 方式必須符合規格書中的指定算法
4. 邊界條件(零值、負值、超大數)依規格書中的「邊界條件清單」處理
到達 🛑 checkpoint2 後立即停止:
- 不要自動執行任何測試
- 不要修改規格目錄以外的其他檔案
- 輸出一份簡短的「本次實作摘要」(改了什麼、有哪些不確定點)等待我確認範例 / 變體
- 填好變數:遷移任務填
把 CalcInvoiceTax 從 VB6 搬到 Python、規格目錄填docs/specs/、目標檔填src/billing/calc_invoice_tax.py。 - 變體(Stage 3 測試放行):確認 Stage 2 實作後,另發一道 prompt:「通過確認,推進到 Stage 3,執行規格書中的測試案例並回報結果。」讓階段切換明確可控。
- 變體(多檔批次):把目標檔改成清單,加「每個檔案各自停在自己的 checkpoint,全部完成再一起回報」。
🎯 範例輸出(實測)
在 Claude Code 跑這句、遷移任務填「把 CalcInvoiceTax 從 VB6 搬到 Python」、規格目錄填「docs/specs/」、目標檔填「src/billing/calc_invoice_tax.py」的結果:
點開看 AI 實際輸出
Claude Code 讀取 docs/specs/CalcInvoiceTax-spec.md 後,將 stub 函式替換為正式實作:
實作前(stub):
text
from decimal import Decimal
from typing import Literal
TaxType = Literal[1, 2, 3]
def calc_invoice_tax(invoice_amt: Decimal, tax_type: TaxType) -> Decimal:
"""TODO: 實作發票稅額計算"""
raise NotImplementedError實作後(正式實作,符合規格書):
text
from decimal import Decimal, ROUND_DOWN
from typing import Literal
TaxType = Literal[1, 2, 3]
def calc_invoice_tax(invoice_amt: Decimal, tax_type: TaxType) -> Decimal:
"""
計算發票稅額。
對應規格書:docs/specs/CalcInvoiceTax-spec.md
Rounding:ROUND_DOWN(模擬 VB6 Currency 截斷行為)
"""
if invoice_amt < 0:
raise ValueError(f"發票金額不允許負數:{invoice_amt}")
if tax_type == 1: # 應稅 5%
raw = invoice_amt * Decimal("0.05")
return raw.quantize(Decimal("0.0001"), rounding=ROUND_DOWN)
elif tax_type in (2, 3): # 零稅率 / 免稅
return Decimal("0.00")
else:
raise ValueError(f"不支援的稅別代碼:{tax_type}")🛑 checkpoint2 — 實作摘要(等待確認)
本次改動:
src/billing/calc_invoice_tax.py:stub → 正式實作(+18 行)
不確定點(請確認後再繼續):
- 規格書指定
ROUND_DOWN模擬 VB6 截斷行為,請確認業務上是否要保留此行為(對應 1,001 元稅額為 50.05 而非 50.0500 進位) - 負數金額規格書標示
ValueError,但原始 VB6 並未做此驗證——請確認是否需要額外 migration test 確認舊有資料無負數
未執行任何測試,未修改 docs/specs/ 以外的其他檔案。
💡 實測心得:🛑 checkpoint2 設計讓 Claude Code 輸出「不確定點」而非自己決定——實測中 AI 確實標注了 VB6 截斷 vs. 四捨五入的業務決策點,這正是人工審核最值錢的時刻,不要跳過。
延伸
你有沒有遇過這種情況?遷移寫到一半,AI 自作主張跑了測試、順手改了不相關的設定檔,結果 diff 一塌糊塗根本沒辦法 review。這道指令的設計就是要把控制權還給你——每個 checkpoint 都是一次決策點,你說可以才往下。搭配「前置風險分析」和「規格書生成」,三步走下來整個遷移會清晰得多。