Problem
Original text (使用者觀察,2026-07-07 一個 Fable 5 session 撞上限後):
「這邊不該用 fable5 吧,怎麼沒有檔下來」
「claude-hot-limit 要設」
pacing-guard 是掛在 Workflow 上的 PreToolUse hook。它結構上無法觀測 main-loop 的 token 消耗——PreToolUse hook 只在 tool 被呼叫時 fire,而 main-loop 的每個 turn 不是一次 tool invocation。所以一個 Fable 5 session 反覆做重度 coordinator 工作時,guard 擋得到 Workflow 啟動、卻擋不到 session 自己燒的 Fable 5 quota。
Type
bug(coverage gap — 結構性,非 tuning)
實證 incident
本 session(PsychQuant/logos 的 #57 round-1+2、#58、#59、#61 五輪 6-AI IDD verify)在 #61 verify 進行到一半時撞上 Fable 5 usage limit。過程中:
- 每一輪 verify,
claude-hot-limit 的 FABLE×WORKFLOW guard 都正確 deny 了 Tier 1(pai-ensemble via Workflow)——working as intended。
- 於是 fallback 到 Tier 3 manual
Agent fan-out(5 個 reviewer + codex-call),加上 main-loop coordinator(session 本身)被 idle-notification 反覆喚醒,每次讀 8–13 KB findings 檔、render master report、merge。
- 五輪累積下來,quota 由 main-loop + Agent fan-out 兩條 guard-看不見的路徑燒完。
「怎麼沒擋下來」的答案:guard 擋掉 Workflow 之後,工作沒有消失,只是流向 guard 看不見的 main-loop。擋掉最貴的那條路,反而把負載趕到一條完全沒有計量的路上。
根因(為什麼是結構性的)
與 #21 F5 的關係(互補的兩半)
#21 F5(Agent side-door)處理的是「parallel Agent fan-out 不觸發 fable gate」——那是一個 PreToolUse 可觸及的面(你可以把 gate 擴到數 Agent blocks)。
本 issue 是互補的、更難的另一半:main-loop coordinator burn,PreToolUse hook 結構上到不了。兩者一起才構成完整的「所有 guard 看不見的 fable 消耗面」。
Scope / 可能方向(都不是 Workflow gate)
誠實邊界
這條在 PreToolUse hook 的能力範圍之外,所以它多半不是「在 pacing-guard.py 補幾行」能修的,而是要嘛歸給 rate-limit-proxy(#7 家族),要嘛降級成一條 doctrine/telemetry 的 advisory。建 issue 的目的是把這個結構性缺口明確記錄下來,避免下次又以為「guard 有裝就會擋」。
Source: 使用者於 2026-07-07 Fable 5 session 撞上限後提出(/idd-issue)。Sister 到 #21 F5(Agent side-door,PreToolUse-reachable 的另一半)、#7/#8(rate-limit-proxy,結構上正確的計量層)。
Problem
pacing-guard 是掛在
Workflow上的 PreToolUse hook。它結構上無法觀測 main-loop 的 token 消耗——PreToolUse hook 只在 tool 被呼叫時 fire,而 main-loop 的每個 turn 不是一次 tool invocation。所以一個 Fable 5 session 反覆做重度 coordinator 工作時,guard 擋得到Workflow啟動、卻擋不到 session 自己燒的 Fable 5 quota。Type
bug(coverage gap — 結構性,非 tuning)
實證 incident
本 session(
PsychQuant/logos的 #57 round-1+2、#58、#59、#61 五輪 6-AI IDD verify)在 #61 verify 進行到一半時撞上 Fable 5 usage limit。過程中:claude-hot-limit的 FABLE×WORKFLOW guard 都正確 deny 了 Tier 1(pai-ensemble viaWorkflow)——working as intended。Agentfan-out(5 個 reviewer + codex-call),加上 main-loop coordinator(session 本身)被 idle-notification 反覆喚醒,每次讀 8–13 KB findings 檔、render master report、merge。「怎麼沒擋下來」的答案:guard 擋掉 Workflow 之後,工作沒有消失,只是流向 guard 看不見的 main-loop。擋掉最貴的那條路,反而把負載趕到一條完全沒有計量的路上。
根因(為什麼是結構性的)
Agent(那是 fable×Workflow gate — F5/F7/F8/F10 (6-AI verify follow-up of #18) #21 F5 的範圍,另一條路)。與 #21 F5 的關係(互補的兩半)
#21 F5(Agent side-door)處理的是「parallel
Agentfan-out 不觸發 fable gate」——那是一個 PreToolUse 可觸及的面(你可以把 gate 擴到數Agentblocks)。本 issue 是互補的、更難的另一半:main-loop coordinator burn,PreToolUse hook 結構上到不了。兩者一起才構成完整的「所有 guard 看不見的 fable 消耗面」。
Scope / 可能方向(都不是 Workflow gate)
ANTHROPIC_BASE_URL導流層看得到實際 token spend,不分來源面(main-loop / Agent / Workflow 一視同仁)。這是唯一能量到 main-loop 消耗的機制。→ 本 issue 很可能是 rate-limit-proxy Phase 2:依真實 budget 主動排程(delay / 佇列 / block) #7 的一個 motivating use-case,而非獨立可修項。誠實邊界
這條在 PreToolUse hook 的能力範圍之外,所以它多半不是「在 pacing-guard.py 補幾行」能修的,而是要嘛歸給 rate-limit-proxy(#7 家族),要嘛降級成一條 doctrine/telemetry 的 advisory。建 issue 的目的是把這個結構性缺口明確記錄下來,避免下次又以為「guard 有裝就會擋」。
Source: 使用者於 2026-07-07 Fable 5 session 撞上限後提出(
/idd-issue)。Sister 到 #21 F5(Agent side-door,PreToolUse-reachable 的另一半)、#7/#8(rate-limit-proxy,結構上正確的計量層)。