Skip to content

零實例表多列量測缺自證閘;已知缺口清單不記缺口大小 (follow-up from #710) #711

Open

Description

@kiki830621

Problem

#710 R1 verify 留下兩件 LOW,#710 本身已 verified:

  1. 零實例表有些列的量測沒有自證閘。 第 15、28 列,以及第 17、23、25–27 列等,量測寫的是 akashic validate 2>&1 | grep -c '…',說明卻寫「同第 13 列的自證:舊 binary 印不出東西」。少了 LC_ALL=C grep -a -q '…' "$(command -v akashic)" && 那道閘,管線在舊 binary 上會印 0 而不是什麼都不印——正是自證要防的「沒被檢查 ≡ 檢查過且乾淨」。
  2. 已知缺口清單不記當時缺口的大小。 已知缺口清單收 #0;零實例列的自證 grep 在 UTF-8 locale 下比不到中文 (follow-up from #689, #690) #710 的 Expected 第 1 點建議把未覆蓋數寫進條目,缺口變大時要求重新確認。已知缺口清單收 #0;零實例列的自證 grep 在 UTF-8 locale 下比不到中文 (follow-up from #689, #690) #710 把這一半延後;缺口變大時 rc 仍為 0。

Type

enhancement

Expected

  1. 逐列補上自證閘,或把「同第 13 列的自證」改成實際寫出的量法。
  2. 決定已知缺口清單要不要記錄當時的大小;要的話,缺口變大時守衛轉紅、要求重新確認。

Source: #710 R1 verify(2026-10-01,requirements 席第 13、14 則)

Current Status

Phase: verified(b42 verify R8:HIGH 0、MEDIUM 0;收斂模式;### Blocking 的使用者裁決待處理)
Last updated: 2026-10-20 by idd-update

Blocking

  • 使用者裁決:棘輪下限(目前 42;b39 照規則 5 從 41 調上來)要不要搬出它稽核的量測文件(比照 protected-ratchet.txt)?(b37 changelog:搬了讓改下限的那一行在 diff 裡更顯眼,但同一個 PR 照樣改得到兩個檔;裁決後搬,或維持並記為已裁)
  • 使用者裁決:三道上限的值(檔 4 MiB、fence 與段落各 1,500 行與 128 KiB、依閘去重 500 條)對不對?(b37 changelog 直接定值、沒有記使用者裁決;b41 在 docs: 把三份裁決史表移出自動載入的 .claude/rules/(移到 docs/rulings/) #736 之後的樹上重量:fence 9.9 倍、measured-numbers-audit 每行 2.36 倍、其餘十倍以上;裁決後調整常數或維持)
  • 使用者裁決:零實例第 100 列「讀不到 WriteGateRulings 時每條 akashic 量測都要 --library」是 b37 加的延伸,歸在 2026-10-05 裁決之下,而那次 Decision 第 2 項只談「判讀對認不出的管線寧可判紅」,接受這個延伸嗎?(裁決後改寫歸屬,或撤掉這一條)
  • 使用者裁決(b39 補):「三道上限的值」那一項裁決時,一併涵蓋 b39 新用到上限的兩處——跨段落接成的散文鏈,以及 measured-numbers-audit 每行 128 KiB 的上限(它掃的 docs/rulings/mcp-cli-parity.md 最長一行 55,559 位元組,餘裕 2.36 倍,而表格的一列拆不成兩行);另外,失敗訊息要不要有則數上限(b38 第 19 列)?(裁決後改常數與說明,或維持)

Commits

Activity

  1. kiki830621 commented on Oct 3, 2026

    @kiki830621
    MemberAuthor

    Verify R1–R3(2026-10-02~10-04):R3 HIGH 0、MEDIUM 7,進修正輪

    三輪都是六席交叉驗證(四個 Claude lens、devil's advocate、Codex 跨模型)。R1 與 #712 同一次驗證。表中是 findings 的原始筆數(INFO 不列);下面把同一件事被多席提出的合併成一條,括號是席數。

    輪 HIGH MEDIUM LOW 之後的修正
    R1 0 6 14 837b8541
    R2 0 6 16 b0ba76cb
    R3 0 7 13 —

    R1 的 MEDIUM

    • 自證閘的守衛只問「閘的文字在不在」,而閘在、卻擋不住的寫法都過:grep … ; 被量的指令(; 後面照跑)、fence 裡較早一行的閘讓後面的計數繼承,兩者在舊 binary 上照樣印 0(codex)——閘要以 && 接上被量的管線,而且查同一支 binary;較早一行的閘不再讓後面繼承;負控格 62 → 68,守衛的 7 個 mutant 各讓恰好一格紅。
    • 零實例表第 34、36 列的閘片段在 release binary 裡找不到:Swift 在最佳化建置把 15 位元組以內的字面段當 small string 嵌進指令,swift build -c release 出來的 akashic 對這兩個片段 grep -a -q 回 1,閘把 release 版讀成舊 binary(requirements、logic、devil's advocate,3 席,都用 release 版實測)——兩列改用較長字面段;守衛新增 selfProofNeedleIssues,要求片段落在原始碼某個 ≥16 位元組的字串字面段裡;release 版實測規則檔裡 29 個查 akashic 的閘片段全部找得到(837b8541)。
    • 第 71 列第一個區塊的閘被 audit-guards-mutations 自己種進 akashic-guards 的錨字串滿足,「已退場」的說明變成假的(logic、devil's advocate,2 席)——第 71 列已退場的區塊標成 text 不掃;對 akashic-guards 的閘,片段不得出現在負控 harness 的字串裡;錨在它上面的三格負控改錨(837b8541)。

    R2 的 MEDIUM

    • 閘只比 binary 檔名的最後一段,閘查 .build/debug/akashic、被量的是 /tmp/old/akashic 照樣通過(codex 席;requirements、logic、security 在 LOW 提同一件事)。
    • 閘只看緊鄰的 &&,前導 ||(true || G && M)可以跳過閘(codex 席;devil's advocate 在 LOW 提同一件事,logic 在 LOW 另提尾端的 || …)。
    • 規則檔第 80、81 列的區塊漏了收尾,fence 內外顛倒,之後新增的量測區塊完全不被掃(requirements、logic、security、devil's advocate,4 席)。
    • 三條的修法一起(b0ba76cb):量測指令收縮成一個固定模板(LC_ALL=C grep -a -q '<片段>' <BIN> && <BIN> <參數> 2>&1 | grep -c '<樣式>',兩處 <BIN> 逐字相同、不合模板即紅),不再擴充 shell 剖析器;fence 沒有收尾、檔尾還在 fence 裡都報錯並指名開頭那一行,並補上漏掉的收尾;text fence 要有退場標記才不掃;# 正對照 不再讓別行繼承;負控 68 → 78,守衛的 3 個 mutant 各讓對應格紅。

    R3 的 MEDIUM

    • 單行模板之外的版面仍靜默放行:以 \ 接續的行、縮排區塊、blockquote 裡的 fence、多行管線、跨行 inline code 都不被辨認也不報錯,與 changelog 和規則檔「封閉的模板沒有旁路」的宣稱不符(requirements、logic、security、regression,4 席)。
    • 計數辨識的正規式在模式字串含 |、;、&,或選項放在模式之後時整個漏掉,單行的量測也能靜默跳過(codex、devil's advocate,2 席)。
    • 33/34 條自證閘整批拿掉守衛仍綠,R2 changelog 不加棘輪的前提(「靜默跳過的那一類只剩上面兩條」)不成立(devil's advocate 席)。

    進下一輪修正(2026-10-04 開始)。

    逐則處置見 changelog:changelog/2026-10-02-measurement-self-proof-gate-binding.md、changelog/2026-10-02-measurement-template-only.md。

  2. kiki830621 commented on Oct 4, 2026

    @kiki830621
    MemberAuthor

    Verify R4(2026-10-04):HIGH 0、MEDIUM 6,進修正輪

    R4 是六席交叉驗證(四個 Claude lens、devil's advocate、Codex 跨模型),驗的是 R3 的修正 1b8a919d。表中是 findings 的原始筆數(INFO 不列);下面把同一件事被多席提出的合併成一條,括號是席數。

    輪 HIGH MEDIUM LOW 之後的修正
    R4 0 6 16 —

    R4 的 MEDIUM

    • --library "${STORE:?…}" 放在管線左側時 shell 不會停下,未設 STORE 時量測仍印 0(codex、logic、regression,3 席列為 MEDIUM;security 在 LOW 提同一件事,共 4 席;logic 與 regression 在 bash 與 zsh 都重現)。R3 把 --library "$STORE" 換成 "${STORE:?先設 STORE …}",規則檔與 changelog 寫「沒設時 shell 停下」;管線左側是子殼層,展開錯誤只終止那一層,2>&1 還沒套用,錯誤訊息出在終端機,右側的 grep -c 或 wc -l 對空輸入印 0。第 46、73、77 列期望 0,所以未設 STORE(或 STORE 路徑打錯)與「檢查過且乾淨」分不開,第 73 列兩邊同為 0 還會互相印證;第 18 列期望 1,印 0 仍分得出來;第 49 列什麼都不印,而它自己的文字把「什麼都不印」定義成舊 binary。安全那一半有擋住(命令不會落到預設的活 store);沒擋住的是 0 冒充乾淨,正是 零實例表多列量測缺自證閘;已知缺口清單不記缺口大小 (follow-up from #710) #711 要防的形狀。建議:必要變數的檢查移到整條之前(: "${STORE:?…}" && 整條量測),自證模板與棘輪要同步改,並把散文的「shell 停下」更正為實際行為。
    • 兩個形狀的量測漏過自證閘(codex、requirements,2 席;兩席都用探針重現,守衛 rc=0、標題列仍是 35 條量測、35 條合模板)。codex:管線 | 之後接空白行、再接下一個命令,邏輯行遇到空白行就停止接續,被切成兩個單位,兩個單位各自缺 binary 或缺計數而都被跳過。requirements:行內程式碼跨行、續行以 | 開頭,段落迴圈把以 | 開頭的行當成表格列,在那裡切斷;CommonMark 與 GFM 裡沒有表頭與分隔列的 | 行不是表格、不會中斷段落(# 標題與 - 項目才會)。audit-guards-mutations 沒有一格涵蓋這兩種,棘輪也擋不住,因為它只偵測既有 35 條的流失,看不到新增而認不出來的一條。建議:行尾運算子之後把狀態帶過空白行與純註解行,並補「新增而非替換既有量測」的負控。
    • 辨識表仍有放行的寫法,而且不在文件宣稱的「封閉的三類認不出」之內(security 席列為 MEDIUM;requirements、logic、devil's advocate 在 LOW 提計數工具變體或「封閉三類」不成立,共 4 席;security 席在副本上重現):"${AKASHIC_BIN-akashic}" 不帶冒號(selfProofBinaryMentionRe 為了排除 che-akashic,也排除了 X-akashic,R3 只收 :- 與 :=)、帶前綴的計數工具 ggrep、zgrep、pcregrep、ugrep(macOS 上用 Homebrew 裝 GNU grep 就是 ggrep)、rg --count-matches。對照組 ${AKASHIC_BIN:-akashic}、git grep -c、rg --count、uniq --count 正確變紅,所以是辨識表的缺口、不是機制壞了。建議:binary 的排除只對「前一個字元是連字號、再前一個是字詞字元、且不在 ${…} 之內」成立,計數工具改認 \w*grep,每種各加一個負控記號,並把規則檔與 doc 裡「封閉的三類」改成不宣稱封閉。

    進下一輪修正(2026-10-05 開始)。

    逐則處置見 changelog:changelog/2026-10-04-b32-f7-fixes-711-712.md(R3 的處置)。

  3. kiki830621 commented on Oct 5, 2026

    @kiki830621
    MemberAuthor

    Decision(2026-10-05,使用者):規則檔的體積與誤紅的取捨

    # 問題 裁決
    1 zero-instance-guards.md 每個 session 自動載入、約 38 萬位元組,長段落要不要搬 要搬:各列的量測腳本與歷輪補記搬到不自動載入的文件(守衛改讀新位置);列裡本身是通則的段落抽成 .claude/rules/ 的獨立小規則。使用者原話:「要搬,有些規則可以搬進 .claude/rules」
    2 判讀對認不出的管線寧可判紅,合法的 | sort、| tee 要有人手動加進「已知不計數」清單 接受,寧可誤紅

    第 1 項在下一輪修正處理。

  4. kiki830621 commented on Oct 9, 2026

    @kiki830621
    MemberAuthor

    Verify R5(2026-10-05):HIGH 0、MEDIUM 3,進修正輪

    R5 是六席交叉驗證(四個 Claude lens、devil's advocate、Codex 跨模型),與 #712 同一次驗證,驗的是 R4 的修正 93c248a3(量測的判讀改成認不出時偏向是量測),以及使用者 2026-10-05 裁決的拆分 f83aa2c9。表中是 findings 的原始筆數(INFO 不列),標題沒有 issue 編號的 finding 依內容歸屬(五則 LOW 屬這一類);下面把同一件事被多席提出的合併成一條,括號是席數。

    輪 HIGH MEDIUM LOW 之後的修正
    R5 0 3 14 —

    R4 的 MEDIUM 怎麼修的

    R4 的 6 則 MEDIUM(合併成三條:--library "${STORE:?…}" 放在管線裡停不下來、兩個形狀的量測漏過自證閘、辨識表仍有放行的寫法)由 93c248a3 處理。

    • 判讀反過來寫:binary 的輸出經管線送進任何命令都算計數,除了封閉的「已知不計數」清單(selfProofDisplayFilters:head,以及不帶計數選項的 grep 家族);接續運算子之後的空白行與純註解行照接,以 | 開頭的行只有在 GFM 表格裡才切段;binary 的辨識不分大小寫,${X-akashic} 算。
    • 模板加前置條件:: "${V:?訊息}" && test -f "$V/store.yaml" && …,必要變數的檢查移到整條最前面,寫在管線裡即紅。退場標記拿掉,棘輪依(binary、閘的片段)去重。零實例表新增第 90 列(整合時改號)。
    • 守衛原始碼的 35 個突變體逐一重編、重放對應的格子,全數變紅。

    使用者 2026-10-05 的 Decision:(1) zero-instance-guards.md 每個 session 自動載入、約 38 萬位元組,「要搬」;(2) 判讀對認不出的管線寧可判紅,接受。第 2 項即 93c248a3 的偏向。第 1 項由 f83aa2c9 做:各列的量測腳本與歷輪補記搬到不自動載入的 docs/zero-instance-measurements.md,量測紀律抽成獨立規則 measurement-commands-self-prove;zero-instance-guards.md 405,594 → 174,465 位元組,自動載入合計 969,568 → 743,870,守衛改讀新位置。

    R5 的 MEDIUM

    • 守衛對 PR 可控的 .md 有二次方行為,changelog 與原始碼註解寫的「已線性」對其中一條路為假(codex、security,2 席;devil's advocate 在 LOW 校正:只有空白行那一路重現,MEDIUM 偏高)。selfProofLogicalLines 在每個實體行起頭都往後掃完整段空白行或只有 # 的行,b34 的「接續運算子之後的空白行照接」新增了這一步;security 席在量測文件尾端加一個 bash fence,內容是 echo hi 加 N 個空行,真 binary 的 user 時間:基線 2.25 秒,N=5,000 為 4.3 秒、20,000 為 13.2 秒、40,000 為 41.4 秒。census-parity.yml 以 pull_request 觸發、paths 含這份量測文件、沒有 timeout-minutes,audit-guards-mutations 另有 53 格各在含 PR 內容的副本上再跑一次這支守衛,security 席推估約 100 KB 的空白行就能讓一次 CI 跑到數小時(推估,沒有跑完)。security 席的第二個向量(selfProofCountOption 的 -[A-Za-z]*c[A-Za-z]* 回溯,40,000 個 c 超過 80 秒)devil's advocate 用 12 種形狀都沒重現;devil's advocate 另指出需要能改 docs 的寫入權,fork PR 有首次貢獻者核准門。
    • 前置條件取 --library 的變數名時只認空白與 = 當分隔,TAB 繞過(codex,1 席,靜態審查,沒有執行)。selfProofArgsPattern 接受 TAB,shell 也把 TAB 當引數分隔,但取變數名的 captures 只收 [ =];--library<TAB>"$STORE" 的量測能通過「變數有保護」那一關,卻不會被要求 test -f "$STORE/store.yaml"。STORE 指向不是 store 的目錄時,doctor 可能建出佈局,計數照印 0,正是這一輪的前置條件要擋的情形。建議讓取參數的辨識與模板用同一組分隔字元,並補「TAB 分隔、變數有保護、沒檢查 store.yaml」的負控。

    進下一輪修正(2026-10-09 開始)。

    逐則處置見 changelog:changelog/2026-10-05-b34-k3-fixes-711-712.md(R4 的處置)、changelog/2026-10-05-b35-m1-split-zero-instance-711.md(拆分)。

  5. kiki830621 commented on Oct 14, 2026

    @kiki830621
    MemberAuthor

    Verify R6(2026-10-15):HIGH 0、MEDIUM 8(合併成 5 條),進修正輪

    原始筆數是 HIGH 1、MEDIUM 7;那則 HIGH 由使用者 2026-10-15 裁決降為 MEDIUM(見下方〈R6 的 HIGH(已降為 MEDIUM)〉)。

    R6 是六席交叉驗證(四個 Claude lens、devil's advocate、Codex 跨模型),驗的是 R5 的修正 ecd06e67(b37 修正輪,2026-10-10 推上 main f2a321e4)。六席都完成:第一次啟動(2026-10-10)撞到帳號用量上限,2026-10-12 與 2026-10-14 續跑。表中是 findings 的原始筆數(INFO 不列);下面把同一件事被多席提出的合併成一條,括號是席數。

    輪 HIGH MEDIUM LOW 之後的修正
    R6 1 7 20 —

    R5 的 MEDIUM 怎麼修的

    b36 的 3 個 MEDIUM(守衛對 PR 改得到的 .md 有二次方行為兩則、--library 的前置條件只比變數名一則),ecd06e67 的處置:

    • zero-instance-rows-audit 的五條二次方路徑改成線性(空白行與註解行預先算好、計數選項改 possessive、行尾空白由後往前去、相鄰 inline code 增量維護、表編號查集合),另設三道上限(檔 4 MiB、單一 fence 或段落 1,500 行與 128 KiB、依閘去重 500 條),超過即具名紅、不截斷;audit-guards-mutations 多一項線性後設檢查與限時的格子。
    • --library 的前置條件綁到每一個引數的 test -f 路徑;唯讀以外的子命令要 --library;辨識補 $AKASHIC_* 變數與不經管線的計數;census-parity.yml 加 timeout-minutes: 60;measured-numbers-audit 的小節標題 #NNN 不再背書;拆分漏掉的七句關鍵句補回。

    R6 的 HIGH(已降為 MEDIUM)

    • measured-numbers-audit 的 cmdInline 正規式對沒收尾的反引號超線性回溯(security,1 席列為 HIGH;logic、devil's advocate 在 MEDIUM 描述同一個向量)。hasCmd(around!) 對 12 行視窗跑 `[^`\n]*TOOL[^`\n]*RUNNABLE[^`\n]*`,一個沒收尾的反引號後接多個「grep | 」,加一個沒有時間錨的「實測 N」即觸發。security 把 payload 附在規則檔尾端,真 binary 單跑該守衛:400 次(2.8 KB)1.1 秒、800 次(5.6 KB)6.9 秒、2000 次(14 KB)超過 120 秒被殺;補收尾反引號、拿掉 實測 3、或換掉工具字的控制組都是 0.2 秒。
    • devil's advocate 的異議:實測指數約 2.4,不是三次方;影響面是純 DoS(pull_request 觸發、不帶 secrets),b37 的 60 分鐘 timeout-minutes 把一次 PR 的 macOS 計費上限截在 60 分鐘;b36 對同類的二次方評 MEDIUM,這裡評 HIGH 不一致,建議降為 MEDIUM。不受 timeout 保護的是本機 pre-push(見 LOW)。
    • 編排者 2026-10-15 重量(推上 main 的 binary、scratch 副本,在規則檔尾端附加一行:「實測 3 筆」加一個沒收尾的反引號,再接 N 個「grep | 」):N=200 0.88 秒、N=400 2.01 秒、N=800 9.32 秒(約 5.6 KB 的一行),不附加該行的基線 0.29 秒。原始筆數照 security 席記 HIGH,嚴重度待使用者確認(見下)。

    R6 的 MEDIUM

    • measured-numbers-audit 讀同一批 PR 可改的檔,仍是二次方、沒有任何上限,「其餘掃描也是線性」不成立(requirements、logic、security 列為 MEDIUM;devil's advocate 另指出結構問題,共 4 席)。let anchored = lineMarked || secAnchored || hasCmd(around!) 對每個無時間錨的數字各重跑一次視窗掃描。requirements:單行 N 個「實測 d 筆」,N=8,000 6.1 秒、16,000(128 KB)19.4 秒;security:同形 N=20,000 51.3 秒,每加倍 4 到 4.6 倍,行首補日期錨則 0.4 秒;logic 的 16,000 個(240 KB)14.9 秒並印出 1.8 MB 的報告。對照:同樣注入 1 MiB 單行、20 萬空行,其他六支掃描都在 2 秒內。devil's advocate 的結構判斷:三道上限與五個線性向量都沒放在這個位置,所以規則第 99 列「上限讓判讀的工作量有界」為假。
    • 散文跨段落的接續 pendingProse 仍是二次方且無界(logic、devil's advocate,2 席;真 binary 重現)。合併後的單位被存回 pendingProse,沒有 physical 檢查也沒有大小檢查,每步重掃並重拷整串。附加 N 個 x | 段落:空行隔開 16,000 個(80 KB)13.45 秒、- x | 清單 16,000 個 18.0 秒、## x | 標題 16,000 個 27.8 秒;devil's advocate 的 32,000 個(585 KB)303 秒,約 1.5 至 2 MB 就超過 60 分鐘 timeout。每塊都低於 1,500 行與 128 KiB,檔低於 4 MiB,三道上限一道都沒觸發,audit-guards-mutations 仍 116/116 綠(後設檢查沒有這個向量)。
    • 引號包起來的 "--library" 繞過新的前置條件(codex 列為 MEDIUM,讀碼確認;devil's advocate 在 LOW 補實測,共 2 席)。selfProofLibraryArguments 只認裸的 --library 後接空白、TAB 或 =:validate "--library" "$STORE/sub"、--"library"、"--library=$STORE/sub" 不被認出,唯讀子命令於是整條豁免,test -f 查的是父目錄、實際跑的是 $STORE/sub,不是 store 時 grep -c 仍印 0。devil's advocate 逐一跑過另一端:doctor "--library $STORE"、doctor --note "x --library $STORE"、./--library、-- 之後的 --library 都被當成有;validate --library= "$STORE" 放行並量到預設的活 store;--libr、--library-path 對唯讀命令放行。
    • .readOnly 豁免集合的語意比「唯讀」寬,又漏掉 9 格(security 列為 MEDIUM;logic、devil's advocate 在 LOW,共 3 席;真 binary 重現)。WriteGateRulings 的 .readOnly 只表示「不開 store 寫入閘」,35 格含 file use、file remove(改 registry)、web-read landing/check(刪除並改寫 --out、--raw)、export-bib、export-tables、crossref-match、fulltext take 等寫呼叫端指定的檔。security 在量測文件尾端放五條合模板的量測(file remove old-store、file use other-store、web-read landing --out、web-read check --out --raw、export-bib --output <任意路徑>),守衛只報其中的 doctor,其餘五條不要求 --library 也不要求 test -f;43 條現存量測都沒用到,缺口在判準。反方向:抽取的正規式字元類沒有數字,44 格只抓到 35 格,s2 author-papers 等 9 格被丟掉,量測 akashic s2 status 被要求 --library,而 s2 status --library … 實測是 Unknown option,補救無法滿足;量測文件第 100 列用同一個正規式交叉檢查,重現了缺陷而不是偵測它。

    值得記的 LOW

    • 落地後的數字重跑對不上(requirements、logic、regression、devil's advocate):規則檔與量測文件是 184,076/260,577 位元組(ecd06e67)、187,777/265,222(HEAD),changelog 寫 181,439/256,003;fence 行數 152/1,500=9.87 倍,不是「十倍以上」;合模板量測 43、42、40 條三個數互不相同;「87 節」實為 82;第 98–100 列已改號 99–101,三處仍寫舊號。
    • 拆分補回的第 13 列句子(「第一個可達的非 key per-record error、第 8 列的零會翻」)與同一個自動載入檔的第 8 列互相矛盾(regression、logic);「既有違反」清單宣稱逐列列名卻漏了同形的第 15、17、24 列(requirements、regression)。
    • 新的 $AKASHIC_* 辨識把 wc -l "$AKASHIC_GUARD_RUN_LOG" 判成計數 binary 輸出,訊息要人改 selfProofDisplayFilters,對變數名無從適用(regression、devil's advocate);selfProofFeedsCounterWithoutPipe 無視 pipes: false,表格列裡的 >、-> 變假紅(logic、devil's advocate)。
    • 限時的格子是事後判定,harness 的子行程沒有 timeout,退化時是掛住而不是變紅,本機 pre-push 也無 timeout(security;devil's advocate 讀碼確認);三道上限只限工作量不限輸出,3.1 MB payload 讓 stdout 達 75,607,310 位元組(security)。
    • 縮排 1 至 3 個空白的 ATX 標題仍背書整節,b37 修的洞用一個空白就重開(devil's advocate);CRLF 檔讓守衛紅但三則訊息都指向錯的原因(devil's advocate);60 分鐘 timeout 的理由只量到暖建置守衛的 353 秒,冷建置未量(requirements、regression)。

    待使用者裁決

    已裁決(使用者 2026-10-15):cmdInline 回溯降為 MEDIUM(同 b36 對同類問題的評法、CI 有 60 分鐘 timeout 兜底),下一輪照樣要修。

    仍待裁決的三項:issue 的 ### Blocking 原本只有「下一輪 verify」,現在各自列進 Blocking。

    1. 棘輪下限(目前 41)要不要搬出它稽核的量測文件?(changelog:搬到另一個檔讓改下限的那一行在 diff 裡更顯眼,但同一個 PR 照樣改得到兩個檔,擋不住有意的改寫;要不要搬留給使用者。)
    2. 三道上限的值(檔 4 MiB、fence 與段落各 1,500 行與 128 KiB、依閘去重 500 條)對不對?(changelog 的上限表直接定值,沒有記使用者裁決;本輪顯示 fence 行數離上限只有 9.87 倍,且接起來的單位繞過這些上限。)
    3. 第 100 列「讀不到 WriteGateRulings 時每條 akashic 量測都要 --library(偏向紅)」是 b37 加的延伸,歸在「使用者 2026-10-05 裁決」之下,而那次 Decision 第 2 項只談「判讀對認不出的管線寧可判紅」(requirements、devil's advocate 在 INFO 指出):接受這個延伸嗎?

    進下一輪修正。

    逐則處置見 changelog:changelog/2026-10-09-b37-n3-fixes-711.md(R5 的處置)。

  6. kiki830621 commented on Oct 14, 2026

    @kiki830621
    MemberAuthor

    Decision(2026-10-15,使用者):measured-numbers-audit 的回溯記為 MEDIUM

    b38 verify(R6)裡 security 席把一個問題記成 HIGH:measured-numbers-audit 的 cmdInline 正規式遇到沒收尾的反引號會超線性回溯。

    # 問題 裁決
    1 security 席記 HIGH;devil's advocate 認為實測指數約 2.4,CI 有 60 分鐘 timeout 擋著,而且 b36 對同類問題評的是 MEDIUM。重量(推上 main 的 binary,在 scratch 副本的規則檔尾端附加一行):800 次約 5.6 KB 的一行耗時 9.32 秒,不附加時 0.29 秒 降為 MEDIUM。下一輪照樣要修:改成線性、加上限,並補放大輸入的負控
  7. kiki830621 commented on Oct 18, 2026

    @kiki830621
    MemberAuthor

    Verify R7(2026-10-19):HIGH 0、MEDIUM 8(合併成 5 條),進修正輪(收斂模式)

    R7 是六席交叉驗證(四個 Claude lens、devil's advocate、Codex 跨模型),驗的是 R6 的修正 6b3f83d9(b39 修正輪,2026-10-18 推上 main 04131a49)。六席都完成。表中是 findings 的原始筆數(INFO 不列)。

    輪 HIGH MEDIUM LOW 之後的修正
    R6 1 → 0(使用者 2026-10-15 降級) 7 → 8 20 6b3f83d9
    R7 0 8 19 —

    R6 的 MEDIUM 怎麼修的

    measured-numbers-audit 改成線性並沿用檔與每行的上限;跨段落接成的散文鏈增量維護並套 fence/段落上限;runGuardProcess 加上期限;--library 先照 shell 拆字、去引號再判讀;量測可用的命令另列封閉清單 selfProofMeasurementCommands。

    R7 的 MEDIUM(合併後 5 條)

    • 量測可用清單收了會寫東西的命令(requirements、logic、security):graph 有 --output,可以寫任意檔(真 binary 在掃描副本上重現,守衛照樣綠);query、graph、venues 會重建預設 store 的 index。這與清單自己「只讀、只印」的判準矛盾,是 b38 第 6、26 列 export-bib --output 的同型缺口。
    • 第 99 列的量測與這份樹對不上(requirements、regression):數字是在 docs: 把三份裁決史表移出自動載入的 .claude/rules/(移到 docs/rulings/) #736 之前的佈局上量的,整合時沒有重量。腳本只 glob .claude/rules/*.md,看不到 docs/rulings/*.md;最長的一行(55,559 位元組)現在在 docs/rulings/mcp-cli-parity.md:136;「四個來源」現在是五個。這個餘裕數字是「三道上限的值」那項待裁決的依據。
    • fence 裡的超長行跳過每行上限(Codex):兩個 fence 分支在上限檢查之前就 continue。
    • runGuardProcess 的期限沒有涵蓋 stdout 的讀取(Codex;security、devil's advocate 補充):子行程開出的背景行程持有 pipe 時,讀取執行緒等不到 EOF,主執行緒永遠等。
    • 讀不到的檔被靜默略過(logic,真 binary 重現):measured-numbers-audit 遇到非 UTF-8 的檔整份跳過,仍報「全部都有時間錨」;未收尾的 fence 同樣靜默停止判讀(devil's advocate)。

    值得記的 LOW

    • b39 新增的守衛分支與期限路徑沒有常駐的負控,違反這個 harness 自己「每一條新分支各一格」的規則(requirements、logic、regression)。
    • 「其餘十倍以上」對新的每行上限不成立;selfProofNonBinaryVariables 漏了 AKASHIC_REPO、AKASHIC_ROOT、AKASHIC_STORE;舊的「唯讀」措辭仍留在 enum 的文件裡(regression)。
    • ProseChain 的行數上限算錯段落,5 位元組的鏈被報成 1,501 行(devil's advocate)。

    收斂模式

    這幾輪的 MEDIUM 大多落在前一輪新增的守衛分支與句子上。b41 改成收斂:只修這 5 條,能刪掉或收窄宣稱就不新增分支或句子;無法避免的新分支照規則各補一格負控。

    待使用者裁決

    ### Blocking 原有的項目不動;「三道上限的值」那項的餘裕數字,b41 會在整合後的樹上重量後更新。

    進下一輪修正。

  8. kiki830621 commented on Oct 19, 2026

    @kiki830621
    MemberAuthor

    Verify R8(2026-10-20):HIGH 0、MEDIUM 0,verified(收斂模式)

    R8 用六席交叉驗證 R7 的修正 6a59e039(b41 修正輪,2026-10-19 推上 main 7ba4d695)。六席是四個 Claude lens、devil's advocate 和 Codex 跨模型,全部完成。這一輪照收斂模式審:只報既有守衛的缺陷,不提新的守衛功能。表中是 findings 的原始筆數,不含 INFO。

    輪 HIGH MEDIUM LOW 之後的修正
    R6 1 → 0(使用者 2026-10-15 降級) 7 → 8 20 6b3f83d9
    R7 0 8 19 6a59e039
    R8 0 0 14 —

    R7 的 MEDIUM 怎麼修的

    • 量測可用清單從 24 個命令縮成 18 個。拿掉的是 query、graph、person、get-entry、venue、venues:它們會建 index,或能用 --output 寫檔。同時加了一個會變紅的 mutation 格。
    • 第 99 列的量測改在 docs: 把三份裁決史表移出自動載入的 .claude/rules/(移到 docs/rulings/) #736 之後的樹上重跑。腳本也去 glob docs/rulings/*.md,原本寫的「四個來源」因此變成五個。
    • measured-numbers-audit 在進 fence 分支之前先查每行上限,超長的行不讀。
    • runGuardProcess 的期限也涵蓋讀取 stdout。逾時回 rc 124、交回已讀到的輸出,這次執行不記成如預期。
    • 讀不到的檔與沒收尾的 fence 都會具名變紅。
    • b39 的分支補上負控。

    devil's advocate 在掃描副本上逐一確認了這些修正:

    • fence 內容行與分隔行超過 128 KiB 時,各自具名變紅。
    • 五個檔族各塞一個非 UTF-8 位元組、各留一個沒收尾的 fence,都具名變紅。
    • runGuardProcess 遇到 exec sleep 20、背景行程握著 stdout、忽略 SIGTERM 加孫行程三種情境,分別在 1.0、1.0、5.0 秒回 rc 124。

    值得記的 LOW(都不擋 verified)

    • 嵌套 fence 仍有一個放行的組合(requirements,devil's advocate 重現):兩個四反引號區塊各夾奇數個三反引號行時,toggle 的總數是偶數,夾在中間的裸數字被當成在 fence 內而略過,守衛 rc=0。changelog 寫的「方向是多判讀,不是放行」只在總數為奇數時成立。這個組合很窄。
    • 負控有兩處釘不住:
      • 拿掉的六個命令只有四個有 mutation 格(requirements),把 person 或 venue 原樣加回去,所有格子仍綠。
      • 「超長分隔行也 toggle」與「fence 內視窗的 !big[j]」沒有會因拿掉而變紅的格子(regression、devil's advocate)。
      • runGuardProcess 呼叫點的逾時接線沒有格子釘住,只有純函式 guardInvokeMet 被釘(devil's advocate;另用單檔編譯驗證現行行為正確)。
    • runGuardProcess 逾時後讀取工作沒有停止(Codex,P2):背景行程若一直輸出,讀取執行緒在函式回傳後仍會累積資料。akashic-guards 是短命 CLI,目前也沒有自證命令會製造這種背景行程,所以評 LOW。
    • 第 99 列記的兩個檔案大小重現不出來(requirements、devil's advocate):279,103 與 187,154 不是任何已提交樹的值。父樹是 277,304/186,814,b41 commit 是 279,600/187,154。待裁決的上限依據(最長一行 55,559 位元組、2.36 倍餘裕)照樣重現。
    • unclosedFence 報的是最後一次 toggle 的行,不是沒配對的開頭(logic,重現):會變紅,但指錯行。
    • s2 status 會讀 Keychain(logic、regression):兩席說它會卡在互動提示。devil's advocate 指出程式明確用 interactionNotAllowed 的非互動查詢,以不存在的 service 實測 0.03 秒結束,所以「卡住」那半句沒有證據;成立的只有清單理由欄低估了它讀的東西。

    待使用者裁決

    ### Blocking 原有的四項不動:棘輪下限的位置、三道上限的值、失敗訊息的則數上限、第 100 列的歸屬。

    devil's advocate 指出第二項的尾巴「並改寫『十倍以上』的說法」已經過時,因為 b41 已改寫那句。本次一併更新這項的文字。

    HIGH 與 MEDIUM 都是 0,標為 verified。關閉 issue 前,先處理 ### Blocking 的裁決項,再跑 /idd-close。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions