釋出共用函式庫的收尾修正至 master,版本 0.4.3 升到 0.4.4 #85

Merged
admin merged 3 commits from develop into master 2026-09-03 05:37:27 +00:00
Member

摘要

  • 需求描述:把 develop 的修正釋出到 master。部署工具的 git clone 沒有指定分支,抓的是預設分支 master,所以變更沒進 master 就到不了任何一台機器。版本 0.4.3 升到 0.4.4。
  • 計畫名稱:無
  • 計畫頁:無
  • 分析頁:無

變更內容

共用函式庫補上 stdin JSON 的載入期預設值,讓四條在讀取標準輸入之前離開的路徑收尾時不再往標準錯誤吐「參數未設定」。

設計重點

  • 這是釋出用的 PR,內容全部來自已經審過並合併進 develop 的變更,這裡不新增任何程式碼。

測試結果

  • 合併前的檢查都跑過並回結束碼 0:lint-scripts.sh、check-behaviors.sh、ste100-lint.sh。
  • 四條路徑的修前修後對照已在工作區實測過,含陽性對照(掃描仍正確回結束碼 2)與事件記錄仍然正常兩項。沒有需要真機驗收的行為變更。

前置 Push Request

  • 無
## 摘要 - 需求描述:把 `develop` 的修正釋出到 `master`。部署工具的 `git clone` 沒有指定分支,抓的是預設分支 `master`,所以變更沒進 `master` 就到不了任何一台機器。版本 0.4.3 升到 0.4.4。 - 計畫名稱:無 - 計畫頁:無 - 分析頁:無 ## 變更內容 共用函式庫補上 stdin JSON 的載入期預設值,讓四條在讀取標準輸入之前離開的路徑收尾時不再往標準錯誤吐「參數未設定」。 ## 設計重點 - 這是釋出用的 PR,內容全部來自已經審過並合併進 `develop` 的變更,這裡不新增任何程式碼。 ## 測試結果 - 合併前的檢查都跑過並回結束碼 0:`lint-scripts.sh`、`check-behaviors.sh`、`ste100-lint.sh`。 - 四條路徑的修前修後對照已在工作區實測過,含陽性對照(掃描仍正確回結束碼 2)與事件記錄仍然正常兩項。沒有需要真機驗收的行為變更。 ## 前置 Push Request - 無
jiantw83 added 3 commits 2026-09-03 05:36:56 +00:00
有幾條路徑在收尾時會往標準錯誤吐一行「參數未設定」,掃描結果其實是對的,但那行訊息讓人以為掃描失敗。註解範圍掃描的流程規定「安靜地回 0 才算通過」,這一行正好讓「安靜」這個判準失效。

根因在共用函式庫:hook_trace 裝的 EXIT trap 會在腳本結束時經由 emit_event 呼叫 session_id,而它第一件事就是讀 stdin JSON 那個變數。腳本在讀取標準輸入之前就離開時,那個變數還沒人設過,開了 set -u 的腳本收尾就報錯。

訊息裡的檔名有誤導性:dash 回報行號用被 source 檔的行號、檔名卻用呼叫端的名字,所以看起來像是呼叫端的第 30 行出錯,實際上在函式庫裡。用一支探針腳本確認過行號的來源。

修法是在共用函式庫載入期給那個變數一個預設值,寫在任何讀取它的函式之前。修在共用處而不是各腳本各補一次:讀它的是共用函式,補在共用處才涵蓋每一條離開路徑,也涵蓋往後新增的腳本。用帶預設的展開而不是直接指派空字串,呼叫端已經帶值進來時原樣保留。

這個缺陷不只一處。凡是「有 set -u、裝了 hook_trace、又在讀取標準輸入之前離開」的路徑都會中,實測四條路徑修前都吐、修後都安靜。

驗證三項:掃描回 0 且標準錯誤零位元組;陽性對照仍正確回 2 並印出命中,證明掃描還有作用;事件記錄仍然正常,且事件裡的工作階段欄位取自標準輸入而不是預設值。事件驗證用隔離的環境做,沒有污染正式事件流。
共用函式庫的收尾修正要靠版號才傳得到機器端。

三份 manifest 由 sync-skill-manifest.sh 同步,只動版本欄位。
Reviewed-on: #84
admin approved these changes 2026-09-03 05:37:24 +00:00
admin merged commit 03451f49f9 into master 2026-09-03 05:37:27 +00:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: plugins/hooks#85