• claude-code released this 2026-08-28 12:38:19 +00:00 | 0 commits to main since this release

    🔴 v0.15.0 上線之後,這個環境完全派不出任何工。 這一版修它。

    撞到的長相

    派給 isep:isep-hand  → roster-guard:「名單上沒有這個人」
    派給 isep-hand       → Claude Code:「Agent type not found」
    

    兩種寫法都不通,而且自己做也不行——subagent-first-guard 要求先派過工。雙向死鎖。

    根因

    Claude Code 給 plugin agent 的 subagent_type 帶前綴isep:isep-hand),而 agents/*.md 的 frontmatter name 沒有前綴isep-hand)。roster.find() 用完全相等比對 ⇒ 它永遠不可能認得真實的值

    修法是允許 <plugin>:<name>,冒號後面那半才拿去比;裸名字仍然收(人會照 roster list 直接貼),不存在的仍然擋(剝前綴不能變成放行任何東西)。

    🔴 為什麼 24 條測試一條都沒抓到

    因為它們全部餵手寫 payload,沒有一條用真實的 subagent_type 形狀。測試驗的是「這支閘的邏輯對不對」,沒有驗「它接到的東西長什麼樣」。

    已補第 19 條專測它,而且做了有鑑別力的對照

    舊 roster.py + 新測試   → 第 19 條紅(24 通過 / 1 失敗)
    修好後                  → 25/25 全綠
    

    📌 第一次做對照時我把測試檔一起 git stash 了 ⇒ 對照組只跑了 24 條,等於沒對照到。只還原 roster.py、保留新測試,才是真的對照組。

    順手補上 gate-ok 漏掉的 roster

    gate-okv0.12.0 做的(把七種形狀各異的逃生口收斂成一個名字),但 v0.15.0 新增 roster-guard沒有同步那份清單 ⇒ 撞上死鎖時連留痕的出口都沒有,只能手工建檔。

    新增一支會擋人的閘時,它的逃生口要同時進 gate-ok,否則出口只存在於那支閘的錯誤訊息裡。

    這一版是怎麼被做出來的(留痕)

    派不出工、又不准自己動 code ⇒ 蓋了 gate-ok solo 戳記自己修。理由命中 CLAUDE.md 寫的兩種正當情形:hook 自己緊急止血

    總管自己驗的

    roster-guard    25/25(新增第 19 條,對照組驗過有鑑別力)
    隔離重跑全套    36 支全綠 / 0 紅
    gate-ok roster  實跑蓋得出戳記、用法列表印得出來
    

    📌 票:inkstone/ISEP#86 的迴歸|PR:#108

    Downloads
  • claude-code released this 2026-08-28 01:32:11 +00:00 | 2 commits to main since this release

    兩張票一批(inkstone/ISEP#93#89)。

    ① 逾期與掉在地上的棒子,會主動叫(#93

    開場跑一次(不輪詢、不掛排程、子 session 不叫),撈三類:逾期的 milestone、在等 leo 的票、掉在地上沒人接的棒子。實跑撈得出今天那五個逾期 milestone8 張在等 leo 的票20 根掉在地上的棒子

    沒東西時說「查過了,沒有」;撈不到資料時說「我沒查到」而不是「沒有事情逾期」——那兩句在機器上是不同的事。

    ② wiki 太長時有人整理(#89

    最重要的設計決定是 只搬不改:正文一個字都不動,機器只做「搬去 archive + 產目錄 + 標記重複次數」。「合併同類、濃縮成一行」要重寫正文,而重寫的當下沒有人會發現弄丟了什麼——所以合併留給人,機器負責把該合併的那批點名出來

    拿現在的 mistakes.md 複本實壓過(真的 wiki 一個字沒動):

    7,681 行 → 1,199 行
    260 條一條都沒少   (用內文雜湊逐條對帳)
    80 個查詢命中 80/80,定位成本 2,956 → 131 行,快 22.5 倍
    

    verify 反向測過:真的弄丟一條時它抓得到——抓不到的對帳表比沒有更糟

    📌 順帶一個數字:mistakes.md 裡有 73 條自己寫著「同款第 N 次」「又犯一次」,佔 28%。用標題相似度只找得到 1 對,人下的判斷準得多——所以機器只負責點名,不負責合併。

    🔴 這一版的交付過程,工人把昨天的教訓當場用上了

    hooks.json 這次自動合併成功、沒有衝突標記。工人沒有停在那裡,因為總管上一版才記過「對照組相符只證明兩邊條件一樣,不證明條件是對的」——「自動合成功」本身就是一個看起來很綠的訊號,跟「合對了」是兩件事

    它做了集合對照:

    merged 82 = main 79 + 它的 3
    從 main 掉了 0 條 / 從它那邊掉了 0 條 / 兩邊都沒有卻冒出來 0 條
    

    並把逐支點名的指令和這段理由寫進 README.md——下一個合這個檔的人不必再自己想到

    🔴 今天第四次「假紅」,這次根因是測試互相污染

    合併後連續跑全套,test-release-tag-guardtest-stage-before-prod-guard 是紅的。單獨跑:8/8 與 13/13 全過,離開碼 0

    根因是這批測試共用 /tmp 底下的戳記檔,連續跑時前面的會影響後面的。清乾淨再逐支跑:36 支全綠、零紅

    ⇒ 今天四次假紅的形狀完全相同:拿一個沒驗過的判準去讀輸出(輸出格式/測試污染/參數帶錯/再一次測試污染)。四次裡有三次是總管自己犯的。

    🔴 有一格驗不了,明講

    #93 的驗收第 4 條「Telegram 真的收得到」過不了,而原因不在這次的程式碼:leo21c 上的工作流定義整批失效notify_leo 404,連 ship_refresh_cdn 的執行紀錄都寫著「圖定義已失效」)。修它要寫 leo 的個人帳號,leo21c-write-guard.sh 明文禁止 ⇒ 真人閘,總管也解不了。

    該票已 指派給 Leo + 掛 Human。通道修好後不必改任何程式碼,重跑 scripts/isep-nag --notify 就能補驗。

    📌 票:inkstone/ISEP#89#93|PR:#106#107|里程碑:SOP 變成閘12/13

    Downloads
  • claude-code released this 2026-08-28 01:22:47 +00:00 | 9 commits to main since this release

    三張票一批(inkstone/ISEP#86#87#88),都是派工這條線上的紀律。

    ① 工人有名字

    以前派工是派給一個沒有名字的臨時工——票上看不出來誰做的,每次都要重新交代它是誰。

    現在 agents/ 有七位具名工人(isep-handarcrun-handarcrun-rag-handinkstoneco-handmira-handcollector-handscout),各自寫明:你是誰、負責哪個 repo、開工前先讀什麼、你的紅線是什麼。指名錯了或沒指名,閘會擋下來並印出整份名單;指對了就把那位的檔案原文注入。

    🔴 用的是 Claude Code plugin 原生的 agents/ 目錄,所以「指名派給誰」就是既有欄位,派工單格式一個字都沒改。加一個工人 = 加一個 .md,不必碰任何 hook。

    ② 沒調查過就寫不出診斷

    leo 2026-08-27 列的今日錯誤之一是「票裡寫未經調查的診斷」。這一版讓它寫不出來:想在 Gitea 上留一段像診斷的話,得先滿足三個結構訊號——這個 session 有沒有派人查過那張票、這段話裡有沒有走得過去的出處(檔案:行號/commit/留言號/票號/網址)、有沒有份量。

    🔴 零關鍵字比對,字面比對只往放行的方向做。60 字的門檻是量出來的不是猜的——真的一段診斷 73 字、最短的合理回覆 6 字;第一版寫 120,那段真的診斷就漏抓了。

    ③ 回覆 subagent 也只給票號

    v0.5.0 把派工單壓成只剩票號,但那道閘只掛在「新開一個 subagent」那條路上。回覆一個正在跑的工人走的是別的通道,完全不經過攔截點 ⇒ 第一次乾淨,第二次又把一長串要求塞進訊息裡,而那些話一樣沒留在票上。

    這一版沒有另造閘,而是把所有通往 subagent 的路收成一張表TaskAgentSendMessage、雲端的建 session/送訊息/排程、claude -p),共用同一個判斷函式。擋下來時把那段內容原文印出來,方便直接貼上票。

    刻意不管兩個方向:工人往上回報(那是交件不是派工)、子 session 送出的回覆(但它自己往下派工時照樣管)。

    總管自己驗的

    main 上 34 個測試套件全綠 / 0 紅
    dispatch-format 52/52(原 33,新增三群 19 條)|roster-guard 24/24|diagnosis-evidence 26/26
    實數:58 支 .sh/79 條註冊/49 支腳本/7 位具名工人
    

    🔴 這一版收斂時的兩件事,都值得記

    hooks.json 的衝突不是二選一。 兩邊在同一個陣列位置各加了一支閘(roster-guard vs mainline-focus-guard),選一邊就會讓一支閘靜靜消失——JSON 照樣合法、載入照樣成功、不會有任何東西喊一聲。正解是展開成兩個項目,並且用「逐支數註冊次數」複驗,不是只看 JSON 合不合法。

    ② 今天第三次「假紅」,而這次是我自己。 我兩次把 gitea-arm-checkmain-and-prod-push-guard-cross-repo 判成「本來就紅、不是我弄的」,還開了對照組跑乾淨的 main——對照組也紅,於是我更確信了。實際上兩邊都紅只是因為我兩次都沒帶對參數(前者要 repo 根目錄、後者要絕對路徑)。帶對之後兩支全綠。

    對照組相符只證明兩邊條件一樣,不證明條件是對的。 今天三次假紅(輸出格式判準、測試互相污染、參數帶錯)形狀完全相同:拿一個沒驗過的判準去讀輸出。

    📌 票:inkstone/ISEP#86#87#88|PR:#105|里程碑:SOP 變成閘10/13

    Downloads
  • claude-code released this 2026-08-28 01:05:46 +00:00 | 12 commits to main since this release

    這一版一次進來三件,都是「該發生卻不會自己發生」的事。

    ① 舊票每天有固定管道被撈出來(inkstone/ISEP#83

    leo 2026-08-27:「現在每天都在追新的,所以要用 Routine 去消化舊的,可以有多個條件」。

    實查:這個組織 243 張 open issue、10 個 open PR,而每天在動的只有掛在主線上的那些。scripts/debt-worklist 每天撈一份可領清單,成包領取(互相指著/原生相依的必然同包),排序用多條件——出事的/擋住別人的/答應過人家的/放最久的/最快做完的。

    🔴 兩件只有跑真實資料才會現形的錯,工人自己抓到並修掉

    • 第一版用「單向文字引用」成包,對真實資料跑出來 121 張黏成一坨(大家都順手引用同一張 hub 票)=沒有人領得動
    • s/stage 的票被列成可領——那是等 leo 驗,正確動作是催不是領,混進去會讓人重做已經做完的事

    並且它接上了 v0.13.0 的「主線唯一答案」,不自己養第二套判斷:沒標主線時照實說「現在沒有標主線」,不編一條出來

    ② 一次交貨由哪些版本組成,退版退得回去(inkstone/ISEP#84

    scripts/release-manifest。三條硬規則長在工具裡不是文件裡:凍結前每一格真的去 Gitea 抓過(抓不到不給凍結)/凍結後不准再加/退版一定吐整份,--only <單一 repo> 直接擋下(那會產生一組從來沒測過的組合)。

    ③ 結案要留下帳(inkstone/ISEP#85

    三個數字自己算:訂的期限/實際耗時/偏差 %。差超過 ±25%(提早太多也算,那是當初估太鬆)就要從七個封閉集合裡挑一個原因,而且代號要有時間軸撐得住——判準一句自然語言都不讀,只看時間戳、指派欄位、標籤、票的歸屬。

    真實資料重演(唯讀):今天那五個逾期的 milestone 都算得出數字——arcrun-rag#47 +592%、Arcrun#46 +592%、Arcrun#50 +131%、Arcrun#51 +178%、ISEP#43 +66%。

    ④ 下游做完時頂層跟著關(inkstone/ISEP#92

    這一格早上就併進 main 了,但版本沒動=更新是 no-op=等於沒交付,所以它跟這一版一起送達。

    總管自己驗的

    29 個測試套件綠 / 3 紅
    

    🔴 那 3 個紅我逐一做了對照組,因為「我弄壞的」和「本來就紅的」不能混為一談:

    紅的 在乾淨 main 上 判定
    gitea-arm-check 也紅 不是本次造成
    main-and-prod-push-guard-cross-repo 也紅(14/5) 不是本次造成
    dispatch-format-guard 第一次測是綠的 差點誤判成「我弄壞的」

    第三個隔離重測後兩邊都是 32/33——第一次的「綠」是測試互相污染造成的假象。根因是那支測試用固定路徑當豁免戳記,多份一起跑會互相刪掉(工人並行重現過:一份 33/33、一份 32/33)。今天四條線並行,這個假紅還會再出現,而它長得跟「閘壞了」一模一樣。

    🔴 這一版的收斂過程,總管犯了一個值得記的錯

    解衝突時我用 tail -6 看 git 的衝突清單,把開頭截掉了,於是漏看兩個檔plugin.jsonREADME.md)。是後來全樹掃 grep -rln '^<<<<<<<' 才抓到。

    截斷輸出來省事,代價是漏掉的那部分你不會知道自己漏了。 同一天我還用錯的 grep 判準把 12 個綠的測試判成紅(它們只是輸出格式不同),那也是同一族——拿一個猜的判準去讀別人的輸出

    📌 票:inkstone/ISEP#83#84#85#92|PR:#101#98#104|里程碑:SOP 變成閘7/13

    Downloads
  • claude-code released this 2026-08-28 00:49:45 +00:00 | 32 commits to main since this release

    你會看到什麼不一樣

    每一則回覆的那一行倒數,現在多了第三段:

    ⏱ 已過 0 分|距收工線(台北 16:00)剩 7 小時 16 分|主線 SOP 變成閘 剩 71 小時 16 分
    

    為什麼需要這一格:2026-08-27 實查,這個組織同時有 14 個 open milestone,其中「Mira 現代化」這一個名字同時存在於 5 個 repo,還有 5 個已經逾期。SOP 要求「有主線時只做主線的事」、也要求每回合把主線目標推到眼前——但**「那個主線」在現場根本沒有指涉對象**。要注入不知道注哪一個,要擋跳線也不知道拿哪一個當基準。

    現在它是一個查得到的事實:scripts/mainline

    而且派工會被擋:主線期間派一張不屬於主線的票,擋一次並問你是補收還是新事項(mainline-focus-guard,至多擋一次)。

    總管自己驗的

    mainline-focus-guard  24/24
    countdown-guard       20/20   ← 無迴歸(它是 v0.10.0 帶進來的那一行)
    實數:54 支 .sh/71 條註冊/40 支腳本
    

    🔴 這一版的工人做了一件我沒要求的事,值得記

    它不只跑自己工作區的檔案,而是git archive 還原推上去的那顆 commit 來跑——理由是「工作區裡的檔案不是別人裝到的東西」。因此它驗到了一格我不會想到的:

    檔案權限scripts/mainlinemainline-focus-guard.sh 都是 100755——沒有執行位元的話,SessionStart 那條對所有人都會失敗,而那種失敗是安靜的。

    它自己找到並修掉七個問題,其中兩個是自己的測試誤紅(拿整份輸出比對關鍵字,被描述欄裡的同一個字串誤判),還有兩個是盤點表既有的假綠

    🔴 一個仍然存在的假綠,記在這裡

    scripts/check-version-consistency.sh 只比對版本號字串,不比對內容。所以「main 的內容已經比上一顆 tag 多了東西」這件事它會說「 一致」。

    這正是出貨心法寫死要擋的那一格(「把『版號沒變但內容變了』餵進去,管線要擋下來而不是跳過」),而它跳過了。本版沒有修它——記在這裡,因為總管今天就是靠人眼發現的。

    📌 票:inkstone/ISEP#82|PR:inkstone/ISEP#99#102|里程碑:SOP 變成閘(13 張,這是第 4 張)

    Downloads
  • claude-code released this 2026-08-28 00:39:09 +00:00 | 37 commits to main since this release

    這一版修的是雲端 session 專屬的四個缺陷。它們活這麼久的共同原因是:每一個都不會自己喊痛

    你會看到什麼不一樣

    ① 未推警察不再每次收工都誤攔
    判準從「這條分支有沒有設定 upstream」改成「遠端有沒有這顆 commit」。雲端開 session 時生出來的工作分支天生沒有 upstream,而它的內容就是遠端 main ⇒ 舊版每個 session、每次收工都誤報一次。今天實測誤報了八次。

    ② 總管的「我確認過了」出口,在雲端根本打不開
    三支閘(推 main/推 prod/出 stage)都用同一個寫法算戳記時間,而那個寫法在 Linux 上取不到秒數——它取到的是一整段檔案系統資訊。下一行的數字檢查必然失敗 ⇒ 戳記永遠不被接受

    ⇒ 也就是說:閘留了一道給總管的門,而那道門在每一個雲端 session 上都是焊死的。 它們在雲端等於純擋,而閘不會告訴你門是壞的。

    今天總管為了發一則通知蓋了兩次戳記都無效,一度以為是權限問題,還去翻了白名單設定——那一整段時間是被這個 bug 吃掉的

    🔴 這個 bug 活這麼久的真正原因:既有三支測試(29/16/10 條)只驗了「擋得住」,一條都沒驗過「放得開」。新增的 gate-ok 測試補的正是那一半。

    ③④ 兩件本來看不見的事,現在開場就講
    信標多報三件:這台機器載的 plugin 落後幾版有沒有舊複本遮蔽正門有沒有已退役機制的殘骸還在長。判準是「這一份 plugin 的檔案有沒有提到它」,不是關鍵字比對。

    總管自己驗的(合併後在 main 上重跑,不是聽工人說)

    gate-ok               17/17     ← 新增,補「門打不打得開」那一半
    unpushed-police       10/10     ← 新增
    isep-presence-beacon  14/14     ← 新增
    countdown-guard       20/20     ← 無迴歸
    pr-verdict-guard      52/52     ← 無迴歸
    prod-write-guard      37/37     ← 無迴歸
    ────────────────────────────
    合計 150 條全綠
    

    盤點數字在合併後的樹上重數53 支 .sh/68 條註冊/39 支腳本

    🔴 診斷過程本身出過一次錯,記在這裡

    總管一度宣稱「那個取時間的寫法從來不會被執行」,證據是量到 exit=0。工人訂正了:那個 0 是管線造成的假象$? 拿到的是管線最後一段的離開碼)。

    重新驗過的正確描述是:那個旗標是布林旗標、不接格式字串,格式字串被當成額外的檔名運算元 ⇒ 只要目標檔存在,指令就成功 ⇒ 後備寫法不執行。而戳記檢查時目標檔必定存在 ⇒ 在真實情境下 100% 失效

    ⇒ 結論沒變,但證明過程錯了一次,是工人抓到的。記下來是因為:那正是「量離開碼時中間接了管線」這個坑,而總管在同一天警告過別人不要犯。

    📌 票:inkstone/ISEP#90|PR:inkstone/ISEP#96#100|里程碑:SOP 變成閘(13 張,這是第 3 張)

    Downloads
  • claude-code released this 2026-08-28 00:28:58 +00:00 | 48 commits to main since this release

    你會看到什麼不一樣

    收工那一刻會清點:還有哪些 PR 沒有結論——open、沒有人被指派、也沒有「要求修改」的 review,就擋一次並點名是哪幾個(含開了幾天與網址)。已經合併但分支還留著的也一起點名。

    背景:2026-08-27 實查,最久的三個 open PR 躺了兩星期,而當時 46 支閘一支都沒有在管 PR。票看起來「已交付」,東西卻沒進 main、沒進版本 ⇒ leo 手上永遠不會出現它

    🔴 擋的是遺忘,不是等待

    這一格有前車之鑑:治理規範的分歧書 §B4 記過一個被否決的設計(「待審佇列非空就不准收工」)——那會讓總管永遠停不下來,因為 leo 在上課、沒人 merge,佇列本來就不會空。

    所以四層都用來放掉「等待」:有人被指派或掛 Human(棒子在他手上)/有「要求修改」的 review(結論已經給了)/這一回合碰過它/響過就退讓(每個 PR 各自 1→4→8→16,不可能鎖死)。

    「碰過」不讀任何一句話,只看三件機器事實:updated_at 變了/上次收工時還不存在(不在它誕生的那一回合就開罵)/這一回合的工具呼叫出現它的識別碼。

    配套:scripts/pr-verdict

    三種結論各是一個動作,不是三個步驟讓人記得做:

    pr-verdict merge   <owner/repo#N>    併 + 刪分支 + 當場複驗分支真的不見了
    pr-verdict reject  <owner/repo#N>    理由寫進票 + 關 PR + 刪分支
    pr-verdict changes <owner/repo#N>    修改要求寫進票 + 以票號通知
    

    總管自己驗的

    pr-verdict-guard  52/52
    countdown-guard   20/20   (合併後重跑,無迴歸)
    prod-write-guard  37/37   (合併後重跑,無迴歸)
    

    盤點數字在合併後的樹上重數,不是相加推的:53 支 .sh/68 條註冊/38 支腳本

    並且逐檔比對過遠端與本機測過的那份 sha256 逐位元相同——不是「API 回 200」就算。

    🔴 這一版的交付過程本身撞到一個死鎖,值得記下來

    這條分支推不上去github-contact-guard 用「payload 釘住的工作目錄」去解 remote 名,而雲端 session 的那個目錄是 GitHub 薄殼 ⇒ 任何推 Gitea 的動作都被判成推 GitHub

    而修這一族 cwd bug 的 PR(inkstone/ISEP#90自己也被同一個 bug 擋住

    最後改走 Gitea 的檔案 API 送上一條乾淨的新分支(全程只打 git.uncle6.me,完全沒有接觸 GitHub ⇒ 那道閘的目的一點都沒有被規避,被繞過的只有它查錯 repo 的那個 bug)。原本的 #95 因此作廢,內容原封搬到 #97

    📌 票:inkstone/ISEP#81|PR:inkstone/ISEP#97|里程碑:SOP 變成閘(13 張,這是第 2 張)

    Downloads
  • claude-code released this 2026-08-28 00:12:25 +00:00 | 56 commits to main since this release

    leo 2026-08-28 07:40:「先完成倒數計時器,每一次回覆都發倒數,你有 8 小時左右」

    這是今天八個版本的第一個,也是其餘十二張票的節拍器

    你會看到什麼不一樣

    • 每一則回覆開頭都會有一行 ⏱ 已過 X|距收工線剩 Y——數字是機器算的,不是我記的
    • 算不出來時整段不顯示,不編數字
    • 它同時掛在兩個地方:訊息進來時把算好的那一行送到眼前,收工時檢查那一行在不在,不在就擋一次
      • 只有前半 = 又一個會被忽略的提醒;只有後半 = 罰它做一件拿不到資料的事

    判準不是關鍵字黑名單

    查的是「那個被要求的東西在不在」(一個機器產生的標記),不是「有沒有講不該講的話」。
    換個講法照樣要帶標記 ⇒ 閃不過;多寫什麼都不會觸發 ⇒ 不誤攔。

    連帶修好兩個今天實撞的卡點

    ① Telegram 發不出去:發一則通知和部署一個工作流,在舊判準眼裡長得一模一樣(都是帶 body 打到那台實例)。
    改成看打的是哪一個 named webhook——只放行 notify_leo 一個名字,不放行整個家族。
    實測 notify_leo_deploy 這種前綴相同的不算通知,照擋。

    ② 連「描述這個卡點」都被同一支閘擋(同款第八次):把卡點寫進票時,內文引用了判準關鍵字就被咬。
    改成剝掉內文再判,起始行保留——所以真的在部署、只是把 payload 藏進內文的寫法,仍然照擋。

    📌 inkstone/InkStoneCo#23 的標題寫著「同款第七次」。這是第八次,而它終於被修在機制上而不是又記一筆。

    總管自己驗的

    countdown-guard      20/20   (其中 7 條專測「不該擋」)
    prod-write-guard     37/37   (原 29,新增 8 條含兩個卡點的真跡重演)
    

    不是轉述——總管自己 clone 下來跑過一次,數字相同。

    🔴 有一格沒驗,明講

    「新 session 裡這支閘真的會被叫到」沒有驗——subagent 開不了新 session,而發版的這個 session 載入的是舊版 plugin(0.3.9,落後六版,inkstone/ISEP#67)。

    ⇒ 依 leo 2026-08-17 的分界,這一版是 report 不是 deliver 的完整態:腳本層面全綠,但「裝上去真的會動」要下一個新 session 打開才算數。

    📌 票:inkstone/ISEP#63|PR:inkstone/ISEP#94|里程碑:SOP 變成閘(13 張,這是第 1 張)

    Downloads
  • v0.9.0 e0ac81b2e3

    claude-code released this 2026-08-27 13:41:19 +00:00 | 58 commits to main since this release

    這一版擋的是「用一條已被否定的路去證明另一件事」——今天總管犯了四次,其中一次退回了一張已經做完、有測試的票。

    你會看到什麼不一樣

    • 只有兩個條件同時成立才響:① 要送出去的留言裡貼了一個值(entry id 或 kb:// 位址),而它這個 session 只在 kbdb_search 的回應裡出現過 ② 這個 session 從沒用產品檢索路徑拿過那筆
    • 閘裡一個措辭關鍵字都沒有——比對的是從工具掉出來的值。8-17 已經證明文字層的閘只會誤攔
    • kbdb_search 完全沒變難用:查 wiki、找 record_id、看某筆在不在,全部放行

    總管自己驗的:31/31 測試通過(11 條「不該擋」+5 條「該擋」+訊息+登記處)。那條線還拿今天的真跡重演——Arcrun#167 comment 4865 那則錯誤退回,原文照貼 → 擋。

    Downloads
  • v0.8.0 a001b10947

    claude-code released this 2026-08-27 13:24:29 +00:00 | 60 commits to main since this release

    這一版讓「開票前搜過了」不能再是一句空話。

    你會看到什麼不一樣

    • 以前 ticket where 只要跑過就拿得到戳記——把輸出丟進 /dev/null 照樣能開新票。今天就是這樣開出一張重複票,而命中的第一名講的是同一件事、已經開了 13 天
    • 現在戳記證明的是「這份輸出到過人眼前」。丟掉了就擋下來,並且把剛才被丟掉的命中清單重新印一次

    總管自己驗的:17/17 測試通過;重演今天那次違規(where … >/dev/null 後開票)→ 擋下,訊息直接列出命中的票。

    Downloads