Problem
tests/integration/inspect.test.ts:74-81 用 expect(stdout).not.toContain('5432') 檢查 port 沒有洩漏。這在 PR #91 的 CI 上假紅過一次(job):--no-connect 的輸出裡根本沒有 port 欄位,但 audit_recent 的隨機 UUID 是 d234ec76-8833-4413-9d02-7c35f8435432,結尾 435432 含有子字串 5432。
同一個 commit 的另一個 run 就過了,所以這不是回歸,是判準本身會誤判。粗估機率:輸出裡三個 UUID、每個 32 個 hex 字元,5432 出現在任一個裡面約每 700 次跑撞一次——低到不會被當成常態問題,高到每隔一陣子就會浪費一次 CI 與一輪追查。
'localhost' 那條同理(audit_recent 的 target 或 hints 都可能含),只是字串長不容易撞。
Solution
洩漏檢查應該對解析後的結構斷言,而不是對整份輸出做子字串掃描:port 與 host 若要出現,只會出現在 connection 物件裡,所以檢查那裡就夠,而且檢查得比現在準——現在的寫法連 "host" 這個 key 名出現在任何巢狀位置都會炸。
一個方向:JSON.parse(stdout) 後斷言 j.connection 只含 name / database / version 三個 key,這樣新增任何洩漏欄位都會失敗,而隨機 UUID 不會。原本的子字串掃描可以保留但限縮到 JSON.stringify(j.connection)。
Notes
不是 #91 造成的,#91 也沒有動 inspect。發現當下用重跑解除阻塞。
Problem
tests/integration/inspect.test.ts:74-81用expect(stdout).not.toContain('5432')檢查 port 沒有洩漏。這在 PR #91 的 CI 上假紅過一次(job):--no-connect的輸出裡根本沒有 port 欄位,但audit_recent的隨機 UUID 是d234ec76-8833-4413-9d02-7c35f8435432,結尾435432含有子字串5432。同一個 commit 的另一個 run 就過了,所以這不是回歸,是判準本身會誤判。粗估機率:輸出裡三個 UUID、每個 32 個 hex 字元,
5432出現在任一個裡面約每 700 次跑撞一次——低到不會被當成常態問題,高到每隔一陣子就會浪費一次 CI 與一輪追查。'localhost'那條同理(audit_recent的 target 或 hints 都可能含),只是字串長不容易撞。Solution
洩漏檢查應該對解析後的結構斷言,而不是對整份輸出做子字串掃描:port 與 host 若要出現,只會出現在
connection物件裡,所以檢查那裡就夠,而且檢查得比現在準——現在的寫法連"host"這個 key 名出現在任何巢狀位置都會炸。一個方向:
JSON.parse(stdout)後斷言j.connection只含name/database/version三個 key,這樣新增任何洩漏欄位都會失敗,而隨機 UUID 不會。原本的子字串掃描可以保留但限縮到JSON.stringify(j.connection)。Notes
不是 #91 造成的,#91 也沒有動 inspect。發現當下用重跑解除阻塞。