AI Agent 裝備 15 · 唔好信 exit code
上集講嗰啲嘢,係靜靜雞唔做,然後交件似模似樣嘅貨俾你。今集嗰個更加惡⋯佢有報告,報得好清楚,而且份報告係啱嘅。佢只係唔係喺度答緊你問嗰條問題。

八月八號,我改緊個 Android app,加咗個新畫面。跑 build。
背景 task 行完,報 `exit code 0`。
如果我信咗呢個 0,下一步就係 zip 個 APK send 出去,加句「build 好喇」。
個 APK 係八月三號嘅。五日前。
log 入面寫住 `BUILD FAILED`。
真正嘅錯好簡單:`MainActivity.kt` 係逐個 import data class,唔用 wildcard。我加咗個新型別,冇加返嗰行 import。編譯唔過。
咁點解係 `exit code 0`?
因為個 build 唔係赤裸裸咁跑,係經 PowerShell 重定向出去。gradle 死咗,但係「將 gradle 啲字寫入個檔案」嗰件事,做得非常成功。
我問嘅係「件事成唔成功」。佢答嘅係「最後郁嗰嘢有冇冧」。
兩條問題。一個 0。
我係點發現嘅?我去睇個 APK 嘅時間戳。
唔係睇 log,唔係睇報告⋯睇件貨本身幾時出世。
同一日,第二次 build,同一個陷阱又中多次:`exit code 0`,log 又係 `BUILD FAILED`。一日之內,兩次。兩次都係查時間戳先知。
呢個唔係 gradle 嘅專利。同一個形狀,喺唔同角落出現過:
launcher .bat。 我有個啟動檔,最後一行寫住 `exit /b 0`。佢一世都冇行過⋯因為上面嗰行叫咗另一個 .bat,冇用 `call`,控制權一去不返。我讀到嘅 exit code,由頭到尾都係另一個程式嘅。
Task Scheduler 嘅 `0x0`。 呢個綠燈嘅意思係「我成功噉開咗個程式」,唔係「個程式做完件事」。上上集嗰個成十八晚冇收過爐嘅 script,就係一路綠燈。
唔係睇 log,唔係睇報告⋯睇件貨本身幾時出世。

睇得多你會見到規律:每經過一層包裝,個 exit code 就換一次主人。 pipe、重定向、.bat、Task Scheduler、subprocess、retry wrapper、container⋯每一層都有機會將自己嘅成功,冚住底下嗰個失敗。
而 agent 嘅世界,由頭到尾都係一層層包裝。
點裝?三行:
> 1. 驗成品,唔好驗過程。 APK 睇時間戳同大細,唔係睇 build 報告。份報告可以講錯,件貨唔會⋯佢五日前出世就係五日前出世。
> 2. 一個 byte 講唔到故事,log 先講到。 exit code 得一個數字,log 有成件事。跑完要搵 `BUILD FAILED`、`Error`、`Traceback`,唔好淨係望個 0。
> 3. 問清楚呢個 0 係邊個嘅 0。 唔係「佢成功咗」,而係「邊件事成功咗」。答唔到,就當佢冇答過。
點知裝啱咗?
唔好等佢自然衰。特登整衰佢,再跑一次。
改壞一行 code,一行就夠。跟住行返平時嗰條路⋯唔好望 log,唔好開 terminal,就當自己係個等收貨嘅人。
如果條路照樣行到尾、照樣報成功、照樣有件貨送到你手⋯咁佢一路以嚟都係噉。你唔係今日先中招,你只係今日先撞到。
反過嚟,做啱係點?
九月四號我整咗個錄會議嘅程式,兩條聲軌:電腦聲一條,咪一條。我特登寫死佢:兩條都有聲先 `exit 0`;有一條係靜嘅,`exit 1`,而且要講明邊條、點解;開唔到裝置,`exit 2`。
一個錄唔到嘢嘅錄音,冇資格報成功。
呢個先係 exit code 應該有嘅樣⋯佢答緊你真正想問嗰條。
我而家個規矩係:
送貨之前,睇件貨,唔好淨係睇張送貨單。
`exit 0` 嘅意思係「有啲嘢完成咗」。邊件事完成咗,佢冇講,而你亦都冇問。
裝備 16,一三五見。