骨架結束碼與藍圖不符:未知命令回 1 而非 2 #10

Closed
opened 2026-09-10 08:17:30 +08:00 by queena · 3 comments
Member

發現自 #9 端對端測試。

現象

README「輸出與結束碼」規定:0 成功、2 用法錯誤、3 API 錯誤。但目前骨架對用法錯誤回 1。

重現步驟

go build -o teai ./cmd/teai
./teai no-such-command; echo $?   # 實際輸出 1,預期 2
./teai next; echo $?              # 未實作命令同樣回 1(亦屬用法錯誤,預期 2)

原因

internal/cli/cli.go 的常數以 iota 從 0 連續編號:

ExitOK ExitCode = iota // 0
ExitUsage              // 1
ExitInternal           // 2

cli_test.go 以 int(ExitUsage) 常數互比,未對照 README 數值,故測試通過但行為與藍圖不符。

建議修正

  • 常數明確指定數值:ExitOK = 0、ExitUsage = 2、API 錯誤碼 3(供後續命令使用),移除或改名 ExitInternal。
  • 測試改斷言具體數值(1→2),避免再次與規格脫鉤。
  • 之後 #6、#8 的命令實作(API 錯誤回 3)依賴此基礎,宜先修。
發現自 #9 端對端測試。 ## 現象 README「輸出與結束碼」規定:0 成功、**2 用法錯誤**、3 API 錯誤。但目前骨架對用法錯誤回 **1**。 ## 重現步驟 ```sh go build -o teai ./cmd/teai ./teai no-such-command; echo $? # 實際輸出 1,預期 2 ./teai next; echo $? # 未實作命令同樣回 1(亦屬用法錯誤,預期 2) ``` ## 原因 `internal/cli/cli.go` 的常數以 `iota` 從 0 連續編號: ```go ExitOK ExitCode = iota // 0 ExitUsage // 1 ExitInternal // 2 ``` `cli_test.go` 以 `int(ExitUsage)` 常數互比,未對照 README 數值,故測試通過但行為與藍圖不符。 ## 建議修正 - 常數明確指定數值:`ExitOK = 0`、`ExitUsage = 2`、API 錯誤碼 `3`(供後續命令使用),移除或改名 `ExitInternal`。 - 測試改斷言具體數值(1→2),避免再次與規格脫鉤。 - 之後 #6、#8 的命令實作(API 錯誤回 3)依賴此基礎,宜先修。
alex was assigned by queena 2026-09-10 08:17:30 +08:00
Member

認領。初步查證:

  • 常數修正其實已隨 #5(commit 6951817)進 main:ExitOK=0、ExitUsage=2、ExitAPI=3 皆為明確數值,ExitInternal=1 保留給內部錯誤。實測 main(c5d5c37):./teai no-such-command 回 2,符合 README。
  • 尚未完成的是「測試改斷言具體數值」:cli_test.go、dailyops_commands_test.go、login_test.go 仍有 8 處以 int(ExitUsage)/int(ExitAPI)/int(ExitInternal) 常數互比,未對照 README 數值。我將開分支把這些斷言改為具體數值(0/2/3/1)並開 PR。

另外在跑 go test ./... 時發現 main 上 TestLoginAdd* 3 個測試失敗(login add 的 --token/--url 被 extractGlobals 搶走),屬 #16(commit 927855d)引入的另一回歸,與本 issue 範圍無關,將另建 issue 追蹤。

認領。初步查證: - 常數修正其實已隨 #5(commit 6951817)進 main:ExitOK=0、ExitUsage=2、ExitAPI=3 皆為明確數值,ExitInternal=1 保留給內部錯誤。實測 main(c5d5c37):./teai no-such-command 回 2,符合 README。 - 尚未完成的是「測試改斷言具體數值」:cli_test.go、dailyops_commands_test.go、login_test.go 仍有 8 處以 int(ExitUsage)/int(ExitAPI)/int(ExitInternal) 常數互比,未對照 README 數值。我將開分支把這些斷言改為具體數值(0/2/3/1)並開 PR。 另外在跑 go test ./... 時發現 main 上 TestLoginAdd* 3 個測試失敗(login add 的 --token/--url 被 extractGlobals 搶走),屬 #16(commit 927855d)引入的另一回歸,與本 issue 範圍無關,將另建 issue 追蹤。
Member

已完成:PR #19(commit f481377)。

補充處理過程中發現的事項:

  1. #10 回報的常數 iota 問題,核心修正已隨 #5(commit 6951817)進 main,實測未知命令已回 2。本 issue 剩餘的「測試改斷言具體數值」由 PR #19 補上:cli_test.go、dailyops_commands_test.go、login_test.go、exitcode_test.go 共 9 處改為直接對照 README 數值(0/2/3;內部錯誤 1)。
  2. 跑 go test 時發現 main 上 TestLoginAdd* 3 個測試失敗,根因是 #16(commit 927855d)的 extractGlobals 搶走 login add 的 --token/--url 命令旗標,與本 issue 無關,已另建 #18 追蹤(分派 @max)。
已完成:PR #19(commit f481377)。 補充處理過程中發現的事項: 1. #10 回報的常數 iota 問題,核心修正已隨 #5(commit 6951817)進 main,實測未知命令已回 2。本 issue 剩餘的「測試改斷言具體數值」由 PR #19 補上:cli_test.go、dailyops_commands_test.go、login_test.go、exitcode_test.go 共 9 處改為直接對照 README 數值(0/2/3;內部錯誤 1)。 2. 跑 go test 時發現 main 上 TestLoginAdd* 3 個測試失敗,根因是 #16(commit 927855d)的 extractGlobals 搶走 login add 的 --token/--url 命令旗標,與本 issue 無關,已另建 #18 追蹤(分派 @max)。
Author
Member

PR #19 已驗證符合本 issue 要求並合併(merge commit f7d63d6),關閉本 issue。

兩項要求均已完成:

  • 常數明確數值(ExitOK=0、ExitUsage=2、ExitAPI=3):隨 #5(commit 6951817)進 main。
  • 測試改斷言 README 具體數值:#19 完成,實測 no-such-command→2、API 連線錯誤→3,符合規格。
PR #19 已驗證符合本 issue 要求並合併(merge commit f7d63d6),關閉本 issue。 兩項要求均已完成: - 常數明確數值(ExitOK=0、ExitUsage=2、ExitAPI=3):隨 #5(commit 6951817)進 main。 - 測試改斷言 README 具體數值:#19 完成,實測 no-such-command→2、API 連線錯誤→3,符合規格。
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: alterminal/teai#10