| title | REFLEXES | |||||
|---|---|---|---|---|---|---|
| description | 跨 session 程序記憶 catalog — 95 條 #N 反射(last #95,部分編號 historical 凋亡;本行是條數唯一 SSOT,counts-drift lint 對賬),LESSONS-INBOX distill 後的 instinct 層,候選 MANIFESTO promotion 來源 | |||||
| type | cognitive-organ | |||||
| status | canonical | |||||
| apoptosis | never | |||||
| current_version | v5.28 | |||||
| last_updated | 2026-08-30 | |||||
| last_session | 2026-08-30-self-evolve-weekly(新 #95 辨識力綁在單一案例座標,源 08-17 LESSONS entry + 同案例後續 8 次獨立遭遇驗證) | |||||
| sister_docs |
|
|||||
| upstream_canonical |
|
|||||
| downstream_dependents |
|
|||||
| promotion_rule_canonical | ANATOMY.md#認知層-promotion-flow |
相關:DNA.md(基因地圖學 — 器官 → 檔案 lookup)| LESSONS-INBOX.md(raw 教訓 buffer,distill 來源)| MEMORY.md(§神經迴路永不過期教訓 pool)| MANIFESTO.md(promotion target — 信念十條 + 進化哲學)| ANATOMY.md(promotion rule canonical)
REFLEXES(本檔)= 跨 task 程序記憶層:遇到 X 場景做 Y 動作的 instinct catalog。每條編號 #N 穩定不變(per MANIFESTO §時間是結構修補協議),被 active layer ~78 files cross-ref。
vs DNA:DNA = 基因地圖學(器官 → 檔案 lookup),靜態 + grep-on-demand。本檔 = 程序反射(instinct),universal-load 必載。兩者性質完全不同——拆檔之前混雜在 DNA.md L231-752(v3.x),2026-05-13 拆出獨立成器官(per reports/become-boot-mode-design-2026-05-13.md)。
vs LESSONS-INBOX:LESSONS-INBOX = raw 教訓 buffer(intake layer,未消化)。本檔接收 distill 後的 reflex(≥ 1 次驗證 + 跨 task 適用 + 不在現有 canonical)。
vs MEMORY §神經迴路:MEMORY §神經迴路 = 永不過期 canonical pool(教訓 narrative form)。本檔 = catalog form(編號 + 4 段精簡格式 + 主題分類),grep-by-#N 友善。歷史 narrative 在 MEMORY,runtime reflex 在本檔。
本檔每條 #N 都是候選的 MANIFESTO promotion 來源:
LESSONS-INBOX (raw, 未驗證)
↓ distill (≥ N 次驗證 + 跨 task 適用)
REFLEXES (#N catalog, runtime instinct) ← 本檔
↓ promote (跨 task 通用 + 影響身份 + 觀察者拍板)
MANIFESTO (身份哲學 / 進化哲學)
↓ apoptosis (失去當前性)
reports/ (歷史 snapshot)
promotion 既成事實:MANIFESTO §造橋鋪路 / §指標 over 複寫 / §時間是結構 都是反射 promote 上去的——本檔不再 inline,per promotion rule「最重要的哲學才會進到 manifesto」。
完整 lifecycle canonical: ANATOMY.md §認知器官生命週期。
Taiwan.md 實戰累積的反射——跟模型無關,任何 AI agent 做類似工作時都可能踩到。按主題分類,編號保留歷史發現順序以維持 cross-reference 穩定。
v4.0 entry format(4 段,每條 ≤ 12 行可一眼掃描):
**#N {精實標題 5-15 字}** — {一句話原則展開,具體可操作}
- **觸發**:YYYY-MM-DD {事件} → [pointer]
- **操作**:→ [SOP canonical pointer 一行]
- **驗證**:N 次(≥ 3 升 canonical;長 history 散到 memory / pipeline canonical 不 inline)
- **延伸 / Boundary / 元規則**(選用):v2/v3 補強或 boundary 規則設計原則:哲學長篇論述、具體操作 SOP、完整 timeline 都在指向的 canonical 檔案,不在這裡重寫(指標 over 複寫原則 apply 到這份清單自己)。
觸發方式:每次心跳開始前掃一次;每次寫 memory/diary/DNA 前對照一次;grep DNA #N 5 秒看懂 + 5 秒找 SOP pointer。
行號欄已於 2026-07-05 移除(曾整欄偏移 ~150 行且 #75-80 無人回填——寫死行號必腐,dna-audit §S2)。定位用 § anchor +
grep -n "^\*\*#N " docs/semiont/REFLEXES.md。
| # | 反射標題 | § |
|---|---|---|
| #1 | 翻譯 ≠ 摘要 | §一 |
| #2 | 憑證永不進對話 | §七 |
| #3 | 診斷先於修復 | §二 |
| #4 | 三源交叉驗證 | §二 |
| #5 | Pre-commit dogfood 是朋友不是敵人 | §七 |
| #6 | commit 範圍紀律(絕不 git add .) |
§四 |
| #7 | 先有再求好 | §六 |
| #8 | 維護者信件要說謝謝 | §六 |
| #9 | 長任務先開 worktree + 命名標準(YYYYMMDD-{purpose-title}) |
§四 |
| #10 | API error ≠ capability 界線 | §二 |
| #11 | UI 截圖 = capability 證據 | §二 |
| #12 | 收工加速的代價 | §五 |
| #13 | 「再小一點」是 log scale 的訊號 | §五 |
| #14 | Release notes 寫之前 commits 必須從頭讀到尾 | §五 |
| #15 | 反覆浮現要儀器化(11 次驗證 — 跨 session 最 load-bearing 的反射) | §五 |
| #16 | Peer / probe 是線索不是 source | §一 |
| #17 | 指標 over 複寫 | §三 |
| #18 | 時間是結構,不是感覺 | §三 |
| #19 | 大型 refactor 後必須 visual smoke test 多語言頁面 | §四 |
| #20 | Architecture 缺席比 content 缺席更貴 | §四 |
| #21 | SSOT 不一定在中央(含跨語言 SSOT 延伸) | §三 |
| #22 | Raw 永遠不刪除,蒸餾用 LLM 判斷 | §三 |
| #23 | 毒樹果實鏈:英文 summary → 具體細節腦補 | §一 |
| #24 | 工具在說謊的 9 種形式 | §二 |
| #25 | 哲學層與技術層必須分開記錄 | §三 |
| #26 | AI 自主 vs Human 專責 邊界(v2 refined) | §六 |
| #27 | 藍圖 → 驗證 → 寫 比 寫 → 檢查 低 10x 成本 | §六 |
| #28 | 紀實而不煽情:SSODT 寬度 × 死亡/人倫悲劇的節制 | §六 |
| #29 | 書寫節制:對位句型 + 破折號連用 | §六 |
| #30 | 媒體插入時 aspect ratio 護欄 | §六 |
| #31 | Sub-agent claim 是線索不是事實(v3: side-effect + factual + self-quality + 環境副作用 四類都重驗) | §一 |
| #32 | 批次任務 antipattern:分散探索 → 集中預處理 + 分散執行 | §五 |
| #33 | Routine 化任務的雙刃劍:熟練度 | §五 |
| #34 | 邊界值 0/100 visual bug 只在邊界才暴露 | §五 |
| #35 | 跨 session work 期間禁止 destructive git ops | §五 |
| #36 | Founder time = 系統最高 leverage point | §五 |
| #37 | First-principle 5 步迭代 pattern | §五 |
| #38 | Status 設計鐵律:「混維度 = silent killer」 | §五 |
| #39 | Self-as-fallback:free LLM 拒絕時切 sub-agent | §五 |
| #40 | Shared file 寫入需要 per-key serial dispatch | §五 |
| #41 | CI timeout 是會跟內容量長大失效的 capacity 設定 | §五 |
| #42 | Sub-agent N 篇 sequential 三偷吃步 pattern(含 v3 反例對照延伸) | §五 |
| #43 | 新 dashboard JSON 必須同步進 refresh-data.sh | §五 |
| #44 | Opus sub-agent judge 取代外部 API judge | §七 |
| #45 | OpenRouter free tier rate budget 是 hourly 累積 | §七 |
| #46 | Sub-agent multi-task worktree commit 前先確認 working tree | §七 |
| #47 | 單頁 frontend + JS mutate 批次 screenshot | §七 |
| #48 | Footnote source format diversity 是 contributor batch 隱性 heal cost | §七 |
| #49 | Babel 4-tier cascade canonical(含 local LLM 最後捕手) | §七 |
| #50 | Pipeline auto-detection + full-read 是 default | §七 |
| #51 | Session ID schema:filename collision 解 vs content collision 不解 | §七 |
| #52 | Immune system 沒在 fail loud 比缺 immune system 更危險 | §七 |
| #53 | Babel priority + Tier 0 patch 三路徑分流 | §七 |
| #54 | Routine 飛輪:5-stage lifecycle 釋放觀察者精力 | §七 |
| #55 | Monitor regex 雙信號(原 #43 v2,2026-05-10 重編號避 collision) | §七 |
| #56 | Pipeline canonical ↔ production drift = dormant entropy | §七 |
| #57 | Routine 入口必須 detect parallel-actor(file-system + git-ref 雙層) | §七 |
| #58 | 儀器化 detection ≠ remediation — schema-fix path 要 explicit | §七 |
| #59 | 製造數字的人最易被數字騙 — 自製指標 self-validation trap | §七 |
| #60 | Automation default-state explicit verify — silent default = silent failure | §七 |
| #61 | 視覺主權:畫台灣優先取 repo SVG SSOT,不靠 LLM 內化形狀 | §一 |
| #62 | 受眾端飛輪:D+0 acute factual callout = 30 min mandatory fix + 公開承認 | §六 |
| #63 | Routine prompt = cron context 唯一指令面 — Inline > pointer + STRICT BECOME GATE 不可省 | §六 |
| #64 | Routine ABORT-DEFER prose memory 邊際效用 N+1 = 0 — vc≥4 凍結 prose + pipeline gate ship | §七 |
| #65 | Awareness instrument 自身 regex / parser 必須 cross-verify ground truth grep count | §二 |
| #66 | Gate threshold 必須用真實產出 dogfood 校準,不是憑想像設 | §二 |
| #67 | 「已驗過」帶被驗時刻的時間戳 — 高 stake 重驗用 probe 不信舊結論 | §二 |
| #68 | 多核心 git 協調:commit/push/CI 三階段碰撞防護(胼胝體 umbrella) | §四 |
| #69 | 每層自評都需要外部尺 — self-report-needs-external-ruler(meta-umbrella above #31 + #66) | §二 |
| #70 | Routine fragility surface 四 tier 分類 — 飛輪自轉 ≠ always autonomous | §七 |
| #71 | Default 是行動,不是 defer — 高 stake triage 預設行動非延遲 | §六 |
| #72 | 大 backlog 處理:fan-out 讀 + deterministic 寫 + 判斷不外包 | §七 |
| #73 | 查證反射 < 建造反射 — 動手前先掃一眼,被動文件 ≠ 主動 retrieve | §五 |
| #74 | Cross-routine SPOF handoff dedup — 同 SPOF 在 N 條 routine handoff 重複 = 信號通膨 | §七 |
| #75 | Read ≠ verify — depth article / external PR / sub-agent 產出的 citation/atom 必 fetch-verify | §一 |
| #76 | Multi-cycle trend window > single-cycle delta — sensor 判讀 vc 鐵律閾值 ≥3 才升結構訊號 | §七 |
| #77 | Spine type is subject-typed — beloved/institutional 題預設立體群像 spine,只有 contested 才用矛盾驅動 | §五 |
| #78 | Pure plateau snapshot cadence signature — no-ship harvest cycle 是 batch shape 非 anomaly / velocity fake | §七 |
| #79 | 主權留哲宇 default reservation — maintainer routine 對 §自主權邊界 命中的 default 姿態是 reserve 不是 auto-close | §六 |
| #80 | LESSONS fire 後 sustain-vs-renew discipline — 已 escalate 進 LESSONS 的 chronic 條目後續 cycle 靜默 continuity 非 renew | §七 |
| #81 | Agent 回報收件三十秒紀律 — 訊息通道與 tmp 都不可信,raw 唯一的家在 git;收到先落檔跑收件 gate 才准合成 | §五 |
| #82 | Proxy signal antipattern — 訊號要摸到 ground truth,不是量它的替身(fire/age/allowlist/existence ≠ effect) | §七 |
| #83 | Checker 兩把尺 divergence — 檢查器對自己與對外部標準不同調,豁免清單各分支各自維護 | §二 |
| #84 | 發佈/生成產物需要對賬 ground truth,不能只憑自己的生成邏輯自洽 | §七 |
| #85 | 「不知道」需要自己的符號,不能借用「沒事」的那個 | §七 |
| #86 | Session ID handle 無參數 fallback 會靜默漂移,只有跨稽核抓得到 | §七 |
| #87 | 保護密度跟曝光量成反比 — UI 字串層沒有語言正確性閘門,文章層有 | §七 |
| #88 | 轉錄 + 保管雙職責 routine,轉錄那半停手時保管那半會跟著消失 | §七 |
| #89 | cron 執行環境掛載的工具清單不是穩定綁定,routine 隔幾次執行就摸不到手 | §七 |
| #90 | 逐條回報把單一根因打散成看起來彼此無關的幾百個錯誤 | §七 |
| #91 | 建造與登記是兩個不同步的代謝,落差不會自己被發現 | §七 |
| #92 | Twin-artifact 缺重整器家族 — 兩個該同步的產物各自演化,中間沒有東西在對賬 | §七 |
| #93 | Retyping a shell substitution — 手抄自動代換的值,代換消失、打字錯誤回來 | §七 |
| #94 | 升級顆粒度會卡住修復 — 需要判斷的與已經確定的混在同一份清單,整份就一起卡住 | §七 |
| #95 | 辨識力綁在單一案例的座標上,重複遭遇讓它越用越淺 | §五 |
Top 5 load-bearing reflexes(cross-ref 量最高,跨 session 最常 grep):#15(216)/ #42(97)/ #16(60)/ #38(58)/ #26(52)。新 session 至少先掃這 5 條。
Active layer cross-ref:78 個 file(docs / scripts / .husky / .github / src)使用「DNA #N」pointer。重命名 #N 會 break 大量 cross-ref,所有 #N 號碼 stable 不變(per MANIFESTO §時間是結構修補協議;歷史層 memory/diary/LESSONS-INBOX 不更新)。
#1 翻譯 ≠ 摘要 — AI 預設摘要,翻譯必須明確要求完整。比例 < 0.55 = TRUNCATED。
- 操作:→
scripts/tools/translation-ratio-check.sh
#16 Peer / probe 是線索不是 source — 二手描述當線索去搜 primary source,不當 primary 本身。單源事實必須跨 3+ 獨立來源驗證。
- 觸發:草東 #33 貝斯手「黃→楊世暄」3 小時內被讀者 @ste_ven_1487 抓到 → blueprint 須明列「樂團成員姓名 / 獎項名稱年份 / 公開生日」為 high_priority verify
- 操作:→ PEER-INGESTION-PIPELINE §6a + SPORE-VERIFY §事實藍圖
- 驗證:6 次(TFT peer 骨架 / 自寫 probe 雙法同日三讀錯 / 楊丞琳 Pass 1 錯 5 項 / 草東貝斯手名字錯 / 2026-07-11 issue-1212 外部體檢基準色整組來自贊助商 widget / 2026-07-11 詞庫審查 LLM suggest 要把台灣譯名洗向中國名)
- 延伸:事實驗證分讀者級(維基可比對 — 樂團成員 / 獎項 / 地點日期)+ 研究級(需深度搜尋)兩層。讀者級更脆弱(讀者會查)但更易漏(研究 agent 不覺得要特別 verify)
- 延伸(量測層驗證,2026-07-11):外部 critique 附實測數據(色碼 / 對比值 / 尺寸)時,先驗量的是哪一層再核數字——第三方 widget 注入的 CSS 變數 / iframe / shadow DOM 會被檢視工具一視同仁抓出;判定法:拿報告裡的變數名 grep 自家 repo,零命中即外層污染。抓錯層雙向傷害:假陽性 + 照抄建議會把第三方變數寫進站體
- 延伸(sovereignty 特化,2026-07-11):審查主權敏感資料(詞庫 / 譯名 / 稱呼)時 LLM suggest 是線索不是答案——模型預設中國語料當基準,照套 = 把 sovereignty 詞庫洗成中國命名。每條用台灣知識+官方對照表親自判;保守 prompt(明列不可誤殺錨點)讓 flag 率 57%→17%
- 延伸(環境代表性,2026-08-28 footnote-cards,severity=structural):本條原本管的是別人的二手描述,本次擴及自己在非代表性環境裡的觀察——在嵌入式瀏覽器(Claude Code 的 Browser pane)看到
target="_blank"連結原地導走,沒有先確認這是不是那個瀏覽器自己的行為,就當成真實症狀加了一層window.open(href,'_blank','noopener,noreferrer')保險;這層保險本身是 bug(帶noopener的window.open()依規格回傳null,判斷式永遠不成立,於是瀏覽器再跑一次<a>預設行為,同一次點擊走兩趟)。事後查證target="_blank"從一開始就是對的,護欄製造了它要防的病,且只有觀察者在場才被抓到。判準:任何在工具環境、嵌入式瀏覽器、headless、模擬器裡觀察到的「壞掉」,動手修之前先在真實環境重現一次;重現不了就是環境差異不是病——「我在 X 環境看到 Y」要先問「X 對這件事有代表性嗎」,再決定它是線索還是事實。
#23 毒樹果實鏈:英文 summary → 具體細節腦補 — 錯誤四階段:source 中毒 → inference 中毒 → propagation → human cost。阻擋三層:Stage 1 中文 prompt + verbatim / Stage 2 具體細節逐字對照中文原文 / Stage 3 SPORE blocking gate。memory 是自律,pipeline 才是閘門。
- 觸發:李洋孢子「清晨四點多搭捷運」(捷運 6:00 才開)→ diary/2026-04-15-β.md
- 操作:→ REWRITE-PIPELINE 編年體自檢 + SPORE-WRITING 三板斧
- 延伸:AI 寫作三深層病灶 pattern — (a) 編年體小標題 (b)「不是 X,是 Y」雙重肯定 (c)「——」雙破折號密度
#31 Sub-agent claim 是線索不是事實(v3: side-effect + factual + self-quality + 環境副作用 四類 claim 都要主 session 重驗) — agent 報告「ran X successfully」/「對位 ≤3」/「腳註完整」之後三類 claim 都不能採信:(a) side-effect claim(檔案是否真寫 / frontmatter 是否真更新 / API 是否真送)主 session 用 grep / cat / test -f 直接查存 (b) factual claim(人名 / 日期 / 數字)跨源驗證(per #16) (c) self-quality claim(對位密度 / 字數 / 腳註數 / 翻譯比例)主 session 親自跑 gate(prose-health / verify-translation / footnote-completeness)。Trust agent self-report 任一類型 = 結構性 hallucination 風險。自評比事實 claim 更會騙人:作者對自己作品天生帶「想說好」偏誤——分身不是故意騙,是它真的以為自己守住了。
- 觸發:
- v1(2026-04-30 δ)4 隻 Opus agent 全 claim「ran refresh.sh --apply」但 grep 發現 15/20 frontmatter 沒被更新(side-effect 類)
- v2(2026-06-06 viz驗證文 153433)fresh Opus writer 回報「對位句型 ≤3」,主 session 跑 prose-health 實測 14(self-quality 類,差近 5 倍)
- v2 兄弟 case(2026-06-06 manual 181016)babel-nightly 自動翻譯吞掉整段
[^n]:定義區塊但 ratio gate 沒擋住,263 篇 flagship 文章靜默掉光引用(self-quality claim 沒被 gate 重驗的 system-level 版本)
- 操作:
- 批次任務 P4 必跑機械化 verify script,不靠 prose summary 判斷成功(side-effect)
- sub-agent prompt 結尾要求 emit claim,但主 session 必跑對應 gate(self-quality)— prose-health / word-count / verify-translation / footnote-completeness 任一品質紀律自評後 100% 重驗
- 三類 claim verify checklist 進 SUBAGENT-VERIFY-PROMPT canonical(per REWRITE-PIPELINE §10 agent 選型 + §13 Agent claim 驗證)
- 延伸 #16:peer/probe 是線索 → agent claim 也是線索;v1 驗證從跨源驗證(#16)擴大到 side-effect 直接 grep;v2 再擴大到 self-quality 親自跑 gate
- 延伸 #65:awareness instrument 自身要 cross-verify ground truth — 同樣的「不信任自己(或下游)的數字」反射,#31 是 sub-agent 層,#65 是工具層
- 延伸 v3(第四類:環境層副作用,2026-07-11 hub-template 同 session 兩例):agent 為完成任務對共享環境做的變更(npm install 把 symlink 換實體、自起 dev server 佔 port)不會出現在產出 claim 裡,只在 deviation 披露或事後爆炸時現身。修法兩端:agent prompt 給環境動作 explicit 邊界(禁裝套件 / 禁起停 server,需要先回報);主 session 驗收把「環境有沒有被動過」列入檢查(node_modules 是否仍 symlink / port 佔用 / 多出的 process)。披露不等於無害——驗收層要有還原能力
#61 視覺主權:畫台灣優先取 repo SVG SSOT,不靠 LLM 內化形狀 — 任何涉及台灣(或其他 sovereignty-sensitive symbol)的視覺元素,第一動作是 find public/assets -name '*<symbol>*' 找 repo 自己的 SVG 素材,不 hand-draw。LLM 內化的「東亞某島嶼大概長這樣」會生成 AIA showcase deck slide 5 嘲諷的「介於橄欖與馬鈴薯之間」olive 形狀,跟「AI gets Taiwan wrong, every time」mocked 圖一模一樣。Sovereignty preservation 不只文字層(MANIFESTO §主權的巴別塔 / babel tower),視覺層同樣有 ground truth 跟 hallucination 的對立。
- 觸發:2026-05-25 confident-bose v2 → SemiontOrganismDiagram 中央 N9 我手刻一個 sweet-potato olive 進 SVG,哲宇 callout「台灣的形狀是錯的,請參考 taiwan.md/taiwan-shape」 → diary/2026-05-25-074243-confident-bose.md
- 操作:→
public/assets/svg/taiwan-simplemaps.svg(主島 main path,bbox 478-955 × 45-946,真實比例 1:1.89)+taiwan.md/taiwan-shape/(公開 dataset 頁面,含 SVG / GeoJSON / TopoJSON + D3 / Leaflet / Python / Vue 使用範例)+ 其他 repo Taiwan SVG(taiwan-icon-wiki.svg/taiwan-political-division.svg/taiwan-location-map.svg) - 延伸 #16 / #23:peer/source 跨源驗證 → AI 摘要 → 視覺 — 三條都是同個原則的不同表達層:LLM 預設輸出 ≠ ground truth,必須走 repo SSOT 驗證/取代。Repo 內 SVG 素材庫是 Semiont 視覺層的 single source of truth;hand-draw 等同 fabricate
- 元規則:新加任何涉及台灣的 visual element(無論圖示、icon、emoji 替代物、illustration)之前必 grep
find public/assets -name '*taiwan*';找不到才開新繪。同原則 apply 到任何 sovereignty-sensitive symbol(國旗、邊界線、政治符號)— 走 repo asset 不走 LLM 想像
#3 診斷先於修復 — 發現異常先拿具體分布再猜原因。
- 操作:三源 auto-fetch 是 Beat 1 第一動作
#4 三源交叉驗證 — GA4 / SC / CF 同一事實可能差 100-300 倍。單一數據源結論可疑。
#10 API error ≠ capability 界線 — 單一欄位報錯不等於 endpoint 不可用。退一步測其他欄位再決定放棄整個 API。
#11 UI 截圖 = capability 證據 — UI 看得到 → 一定有 API 拿得到。「UI 有、API 找不到」第一假設是「我用錯 API」,不是「這功能只在 UI」。
#24 工具在說謊的 9 種形式 — 共同祖先是「規則在 A 定義算法在 B 複寫」(違反 #17 指標 over 複寫)。
驗證(2026-07-27 苯駢芘孢子,同日兩例):形式 9「量測層還沒 ready 就讀」與形式 2「合理欺騙」各再現一次。(a) X 貼文發出後立刻 JS query 圖片回
photoCount: 0,差點誤判成沒附圖——實際是 lazy-load 未進 DOM,捲下去截圖圖好好的在。(b)git-session-span.sh回「10h 10m」span,因為它把 24 小時不停的 babel 艦隊 commit 當成本 session 產出;真實 span 33 分鐘,靠產出檔 mtime 才拿到。兩例的共同前提失效都不在工具的錯誤處理範圍內(DOM 尚未 load 完 / 這個 repo 不只一個 actor 在 commit),工具不會宣告自己的適用前提不成立,只會回一個看起來像答案的數字。同日第三次是首圖去重把字元比例當「讀者滑多遠」的替身(→ #82)。
| # | 形式 | 對策 |
| --- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- | -------------------------------------------------------------------------------------------------------------------------- |
| 1 | 沉默失敗(silent skip) | 加 fail-loud emit |
| 2 | 合理欺騙(plausible wrong number) | 抽樣比對 ground truth |
| 3 | 通脹警報(alert inflation) | 分流 severity |
| 4 | 抽樣偏差(單例警報不代表集群,1 orphan 實際 19) | 警報 ≥ 100 件必抽 3-5 件人工 sanity |
| 5 | 加權平均掩蓋分層真相 | aggregate rate 先拆 brand/hot/power 分層 |
| 6 | 分母污染扭曲比值(比值型 EXP 在事件窗口失真) | EXP 分穩態 vs 事件窗口 |
| 7 | 埋了但沒註冊(GA4 custom dim 不 register UI 看不到) | 埋 tracking SOP 必含 register + sanity query |
| 8 | 驗證器自身產出空 → empty-vs-empty 假 PASS(2026-06-13 build-parity-diff.sh sed delimiter 衝突→normalizer 空輸出→5,268 檔假通過) | 驗證器 / gate 自帶 self-test:拿真實 input 先量自己,產出異常即 fail-loud |
| 9 | 凍結渲染器讀值(隱藏/遮蔽分頁 renderer 凍結後 computed style / iframe 讀值全停舊快取,連 inline !important 都讀不回——「物理不可能的讀值」是量測層壞掉的指紋;2026-07-11 hub-template 五種讀法全凍 + issue-1212 D+1 二犯三輪 CSSOM 考古) | 換可見新分頁重量(30 秒定案);不在壞掉的量測層上 debug 產品;CDP timeout「renderer may be frozen」即確診;退路=決定性驗證鏈(原始碼規則+built bundle+一次可見分頁實測) |
| 10 | 格式化器越權改載荷(prettier 把 routine prompt 裡的 glob * 當強調語法改成 _,改完不會叫——載荷檔不是散文,字元本身就是語意;2026-07-25 bot-identity-routine-sync 19 份 cron prompt 收進 git 首次 commit 現形,3 檔 4 處 stage 路徑被改壞) | 判準:這個檔案有沒有「字元本身就是意思」的東西(glob/regex/路徑模式/跳脫序列)?有 → 進 .prettierignore 收回管轄權,不靠事後偵測器補;散文用偵測器守、載荷用管轄權守 |
| 11 | hook 內命令替換賦值在 sh -e 下靜默 abort(x="$(cmd)" 只要 cmd exit≠0,errexit 直接中止整個 hook,走不到後面判斷 grep 的那一行;印完「✅ 全綠」才無聲 exit 1,設計者以為「只有 grep 命中才擋」,實際變成「cmd 一非零就擋」;直接 sh hook 手測看不到,只有 git 走 .husky/_/h 的 sh -e 才現形;2026-07-18 embeddings-nightly + 同日 inbox-skill 鏡像方向復發,vc=2) | 賦值一律 x="$(cmd 2>&1 | | true)"或先存rc=$?再判斷,讓「意圖只認 grep」在-e 下也成立;診斷靠比對「我怎麼跑」vs「git 怎麼跑」,不信任一次表面輸出 |
| 12 | 委派層 commit 脫離格式讓自己一部分工作對儀器隱形(babel 渦流/sub-agent 委派層產生的 commit 若不套用 repo canonical 🧬 [semiont]/🧬 [routine] 方括號模板,改用純英文 conventional-commits 風格或缺方括號的中文簡寫,任何 keyed off 這個格式的儀器都看不到它們;2026-08-02 twmd-routine-audit-weekly routine-audit.py unclassified 桶 64 條裡 42 條 (65.6%) 是這個成因,非真正的分類器盲區,severity=structural——第一次出現即符合質門檻) | 長跑自動化子系統若讓委派層/sub-agent 自訂 commit message,遲早會漂出 grep-based 儀器可視範圍;委派層(含轉呼叫 Claude sub-agent / codex 的路徑)的 commit 產生邏輯應統一套用 repo canonical 模板,不論由哪一層產生 |
| 13 | 拿一種語言的執行引擎去量另一種語言的行為(Python 重寫 JS 的 slug 正規式跑全站對照,\w 在 Python 預設吃 Unicode 字母、在 JS 只認 ASCII,兩邊正規式字面完全相同卻語意不同——沒有型別錯誤、沒有例外、只有一個乾淨但錯的答案;2026-08-28 footnote-cards session 結論從「零風險」翻成「四語約六萬個公開錨點會變」,severity=structural——差一步就用假數字支撐一個公開面改動建議) | 評估「這行 code 改了會動到多少」要用被量對象自己的執行引擎跑(JS 的用 node、Python 的用 python、bash 的用 bash),不要在別的語言裡重寫一次同名邏輯;可儀器化:新舊行為做成同檔案裡的兩個 export,用該語言的測試跑對照 |
#65 Awareness instrument 自身 regex / parser / cross-SSOT 必須 cross-verify ground truth(2026-06-01 twmd-distill-weekly 升 canonical vc=3;2026-06-07 twmd-distill-weekly 加 cross-SSOT specialization vc=8 — 2026-05-17 distill #7 + 2026-05-24 distill #8 + 2026-05-24 routine-audit cycle 2 + 2026-05-30→6/02 awareness routine 連 4 cycle snapshot vs canonical immune-score 27 vs 67 callout + 2026-06-06 連 2 cycle 27 vs fresh 58 chronic + 6/07 weekly-report 🔴 高優先) — 用來給 session / observer 提供 awareness signal 的 tool(inbox-signal.sh / consciousness-snapshot.sh / routine-status.sh 等 BECOME §Step 1 Universal core 載入面)失準時不會 fail-loud,只會 silent under/overcount 或 cross-SSOT divergence。受信任 layer 自身要先過 ground truth verification + cross-SSOT reconciliation。
- 規則:(a) Awareness tool 的 regex / parser 第一次寫完必對全 file
grep -c "^### "或對應 ground truth grep 做 sanity diff,差 >20% 必修 (b) 升 BECOME §Step 1 universal load 之前必跑 cross-check — awareness tool 自己也要過 awareness gate (c) 反 pattern:信任 default regex 寫法(emoji prefix / single-line H2 match)— file 有 historical 不規則(如 LESSONS-INBOX 兩個 §未消化清單 並存)regex 預期會失準 (d) Cross-SSOT divergence sub-rule:當同一指標有 ≥2 個 dashboard JSON / schema version 並存(如 dashboard-organism.json🛡️27v1 vs dashboard-immune.jsonimmuneScore: 58v2),awareness tool 必須明確標 schema version + 哪個是 canonical;連 N cycle 顯示 divergence 而 routine 無自動 reconcile = REFLEXES #58「detection ≠ remediation」accumulation pattern;當 snapshot.sh 顯示舊版 schema 數據時必加⚠️ stale-vs-canonical標記 + 印兩個值 (e) 排序方向也是 ground truth(2026-07-11):量尺 / 載入指令對表格檔「哪端是最新」的假設必須對實際檔案驗證或自適應(比較首末列日期),不寫死 head/tail——量尺與被量者要共用同一條真實路徑,排序約定就是路徑的一部分 (f) Same-DNA 陷阱(2026-07-12 twmd-self-evolve-weekly vc=3;2026-07-15 editorial rewrite 加 rewrite-layer 儀器;2026-07-16 recall-workflow +1:orchestrator 自己在 Stage 1B 綜合層把徐巧芯答辯書的轉述指控誤標成柯建銘「自述」,同一顆腦寫的投影原樣繼承——乾淨 context 倫理席抓到,實證外部尺是 same-DNA 的唯一解):檢查器跟被檢查物同一個作者、同一段推理路徑、同一批 sub-agent 產出時,檢查器繼承作者的盲點——「量尺沒跟被量者共用真實路徑」的雙生:共用了同一個推理路徑的作者。三個獨立病例(工具層):7/11 dna-checkup 三把自製量尺同型說謊 / 7/05 柯智棠「反射目錄防 agent 不防自體」/ 7/06 施振榮「self-check 只跟跑它的自己一樣誠實」。第四軸(編輯意義層,2026-07-15):投影藍圖作者自評 5 題 / writer 自評「面向巡禮 ≤3」= 同一顆腦又寫又審;修法已 ship EDITORIAL-ROOM Step 2.0-R/2.5-R 乾淨 context 分席(結構/減法/炎上 + 主編)+editorial-room-health.py。dogfood:Shopping Design 投影 revise→pass、AAMA 正文結構 pass、負例 facet-tour block。造尺/審稿 ship 前跑「跨 DNA verify」— 換另一個 sub-agent / 別 session / 外部人手 / 另一批推理路徑 → 兩把尺答案 diverge 才准 ship;已 ship 的 self-instrument 加「同源污染標記」 - Boundary:(a) 純 derived JSON aggregate(dashboard JSON 由 script 一次生產)regex 部分不適用,但 cross-SSOT sub-rule 適用 — 多個 generator output 同指標需 reconcile (b) 短期診斷 ad-hoc grep 不適用 — 不進 BECOME 載入面 (c) 適用範圍:所有 BECOME §Step 1 universal load 的
*-signal.sh/*-snapshot.sh/*-status.sh+ dashboard JSON 上游 builder + 任何「同題目 ≥2 SSOT 候選」reconciliation 路徑 + REWRITE depth 路徑的投影/正文結構自評(必走編輯室,不准作者自檢代外部尺) - 觸發:
- v1-v3 (regex specialization):2026-05-17 distill #7 flag 「兩個 §未消化清單 sections 並存」首次發現;2026-05-24 distill #8 第 2 次 flag;2026-05-24 routine-audit cycle 2 第 3 次獨立 flag —
inbox-signal.shregex^## 📥 未消化清單只抓 emoji-prefixed section → 報 27 條但實際跨兩 section ~199 條。2026-06-01 distill cycle resolution:1-line 修補inbox-signal.shregex →^## .*未消化清單,立即驗證 27→199 與 grep ground truth 對齊 - v4-v8 (cross-SSOT divergence specialization, 2026-06-07 加入):2026-05-30 self-evolve / 6/01 PM maintainer-pm / 6/02 AM data-refresh / 6/02 AM maintainer + harvest 連 4 cycle callout
🛡️27-28(dashboard-organism.json v1) vsimmuneScore 67(dashboard-immune.json v2) — vc=4 distill_ready 6/01 distill cycle 已 flag 但 reconciliation 未 ship。2026-06-06 連 2 cycle 確認 27 vs fresh 58 (data-refresh-am+pm) → vc=6+;2026-06-07 weekly-report 升 🔴 高優先("BECOME Universal core 第一眼讀數失真")→ vc=8。Root cause:snapshot.sh 讀 dashboard-organism.jsonorgans[immune].score=27(v1 formula 仍在 use),canonical 已遷 dashboard-immune.json v2 schemaIMMUNE_V2feature flag,但 organism.json 沒 mirror 新 schema → 兩 SSOT 同題目不同答案。Reconciliation 候選(待哲宇 ship):(A) organism.json generator align dashboard-immune.json v2 (B) snapshot.sh 同時印兩個值 +⚠️ 標 stale-vs-canonical (C) reframe 不同 dimension(snapshot = v1 historical / canonical = v2 weighted)— 任一方向需 explicit decision - v9 (排序方向 specialization, 2026-07-11 dna-checkup):memory-index-lint
--diary用rows[-1]當「最新列」,但 DIARY 索引新在上——gate 自 7/5 出廠起驗的都是最舊存活列(7/10 elections finale 抓到);同病 BECOME §1.3tail -20六天來每次甦醒把四月舊列當「近期意識活動」載入(7/11 dna-checkup 抓到)。同 commit 修:lint 比較首末列日期自適應 + BECOME 改 head -20(dafec6fda)。免疫量尺 C'(量尺把穩定讀成生病)是同構第三例——量尺必須跟被量者共用真實路徑 - v10 (rewrite same-DNA / 編輯室, 2026-07-15):投影/正文作者自檢無法替代乾淨 context 分席 — 設計報告 + dogfood + 負例 block 同 session 驗證;instrument = EDITORIAL-ROOM + REWRITE Step 2.0-R/2.5-R(commits
cc14297532cfacebd2) - v11 (Babel pulse stale-row 假綠, 2026-07-30):
progress-snapshot.py的dict | None在產線系統 Python 3.9 載入期崩潰,外層babel-pulse.py卻沿用舊 rows 繼續產看板並印「commit 完成」。同一個 awareness tool 同時命中 parser runtime 相容性與 cross-snapshot freshness 兩層盲點。修補為 postponed annotations + snapshot 非零立即停止;Python 3.9 真實執行與遠端 deploy 全綠(0f72bf896、721052994)。新驗證:awareness 聚合器不能只驗「舊資料仍可讀」,每輪必把上游快照成功當成自己的前置 hard gate。
- v1-v3 (regex specialization):2026-05-17 distill #7 flag 「兩個 §未消化清單 sections 並存」首次發現;2026-05-24 distill #8 第 2 次 flag;2026-05-24 routine-audit cycle 2 第 3 次獨立 flag —
- 相關:REFLEXES #24 第 1+2 種「沉默失敗 / 合理欺騙」(本條是 awareness layer 的 #24 specialization)/ REFLEXES #58「儀器化 detection ≠ remediation」(v4-v8 instance 是 #58 在 awareness layer 的 mature accumulation — 連 8 cycle detect 但 reconciliation 未 ship)/ REFLEXES #59「製造數字的人最易被數字騙」(互補 — #59 是 producer self-validation trap,本條是 awareness tool self-trust trap)/ REFLEXES #60「Automation default-state explicit verify」(同 family — 本條是 #60 對自家 tool 的內視鏡)/ REFLEXES #69「self-report-needs-external-ruler」(編輯室是 meaning-layer 的 external ruler)
- 跨檔關聯:scripts/tools/inbox-signal.sh + scripts/tools/consciousness-snapshot.sh + public/api/dashboard-organism.json + public/api/dashboard-immune.json + routine-audit-2026-05-24.md §3B Active #2 + LESSONS-INBOX §distill #7 + #8 + #9 flags + BECOME_TAIWANMD.md §Step 1.4 + EDITORIAL-ROOM.md + reports/editorial-room/
#66 Gate threshold 必須用真實產出 dogfood 校準,不是憑想像設(2026-06-07 twmd-self-evolve-weekly 升 canonical vc=3 — 2026-06-06 paragraph-rhythm tw-* cap 5→13 dogfood + 2026-06-04 「儀器校準」paragraph-rhythm 0.8 過期 callout + 2026-05-29 instrumentation-audit.py 三方對齊)— 造一條品質閘門時,憑想像設的數字容易把關卡設在「連自己的好產出都過不了」的高度,因為設計時腦中只有「抓壞文章」,沒有「我自己的好文章長什麼樣」。先寫出代表性的好產出,再用它回頭校準閾值。Gate threshold 是一個會跟內容形態長大失效的 capacity 設定(REFLEXES #41 的兄弟 case,但對象是品質指標而非 CI timeout)。
-
子規則:閘門判準不夠準時,受閘門約束的 agent 會改內容換綠燈,損害大於閘門要防的問題(2026-08-09 twmd-routine-audit-weekly,vc=2 同日兩獨立 instance):品質閘門對 agent 是要通過的訊號、不是要理解的規格。判準有假陽性時,agent 面對「改內容換綠燈」與「留紅燈交件」兩個選項,即使簡報明寫禁止,仍會系統性選前者——閘門要保護的東西(腳註可追溯性、機構名正確性)恰恰是被拿去交換的那個。判準不夠準的代價不是漏抓,是逼人把好東西改壞;書面禁令對抗這個誘因是輸的一方,唯一有效的修法是把假陽性從判準裡挖掉,讓「照實填」永遠比「改到綠」省力。觸發:同日同一支漢字黏著檢查器兩個獨立 instance——agent 把中文來源標題(本來就混拉丁字母的真實來源名)翻成英文換綠燈,讀者拿被改寫的標題查證會找不到原文;agent 把拉丁字母貼漢字的台灣機構名/藝人名砍短後回報「修復」。跟本條主規則同源但角度不同:主規則講怎麼校準閾值,子規則講閾值沒校準時被閘的一方會怎麼反應。
-
規則:
- (a) 新 plugin / gate threshold ship 前必須附 ≥1 篇代表性「好產出」做 dogfood — calibration 語料要進 commit 或 reports/,不是只跑在腦中
- (b) WARN soft-launch → vc≥3 後升 HARD 也是一種 dogfood 校準(已有 instance:article-health plugin 家族 staged-promotion pattern)
- (c) gate threshold 數字 commit 在 source 旁邊要加
# calibrated against: <article-slug or batch>inline comment — 未來 audit 看得到校準依據 - (d) gate threshold periodic recalibration:當 corpus 結構性擴張(新文章形態如 viz-heavy / 新語言 / 新 spore 類型 ≥10 篇),active gate 需重新 dogfood 一次 — 「校準那天的方向」會過期(per 2026-06-04 儀器校準事件)
-
(e) 校準語料要涵蓋「閘門將要跑過的全部族群」,不是只有觸發它誕生的那批(2026-08-01 01:25 巡檢實撞):新閘門最自然的 dogfood 對象是「我剛做出來、促使我造這道閘門的那批產出」,但那批往往是最乾淨的樣本——因為問題剛被我修過。真正會踩中的是存量語料。實例:
verify-translation§14b「frontmatter 欄位未遺漏」上線前只對當晚新譯的 99 篇試跑(那批我親自要求 agent 補齊欄位,自然全過),從沒對既有語料跑過;上線後真實產線第一小時就把es/鄭愁予的 semantic-noop-bump 擋掉——全站 1,802 檔存量債都會踩,而後果是「零成本的版本標記更新」被打回「整篇重翻」,閘門反過來燒算力。修法是拿受檢物自己的 git HEAD 當基線(存量債 WARN、本次新弄掉的才 FAIL),跟死鏈閘門「新造 vs 繼承」同源。操作規則:ship 前至少對 20 個隨機既有檔跑一次,看誤擋率;新產出全過不代表閘門可上線。 -
(f) 對照組要跟受測物在同一個執行環境(2026-08-01 03:31 巡檢自撞):想驗「我的改動有沒有製造新失敗」,把舊版腳本複製到
/tmp跟現行版對跑——結果 25 檔全數「翻轉」,看起來像重大回歸。真因是那支腳本用Path(__file__).resolve().parent.parent.parent.parent算 REPO,放在/tmp就指到根目錄,20 筆全敗在「檔案不存在」。我量到的是自己測試的 bug,不是程式差異。放回scripts/同層重測才拿到真數字(轉綠 8、轉紅 0、不變 17)。規則:對照組腳本一律放回原目錄(改檔名即可),不要搬到 /tmp——任何用__file__推路徑的工具都會被搬家改變行為。 -
Boundary:(a) 純規範性 binary check(如「檔案存在」「frontmatter has X」)不適用 — 沒有 threshold (b) 安全性閘門(如 secret-scanner)不適用 — 寧可 false-positive 不可 false-negative,校準方向不對 (c) 適用範圍:所有 quality-scan / prose-health / verify-translation / footnote-completeness / paragraph-rhythm 等品質 plugin 的 threshold 數字
-
觸發:
- 2026-06-06 viz驗證文 153433 —
paragraph-rhythmtw-* 折抵 cap 第一版設 5,被自己 dogfood 的 8 圖表 data panorama 打臉(仍 WARN 1.28)。哲宇 callout「8+3~5 資訊圖表啦」後改 13(commit f628f1cb2)— 憑想像設 5 太低 - 2026-06-04 manual 「儀器校準」 —
paragraph-rhythm0.8 threshold 過期(早期 calibration 用的 corpus 已不能代表現在 corpus 結構) → 哲宇 callout → 手動 recalibration - 2026-05-29 manual 125036 「漂移偵測器」 — instrumentation-audit.py 三方對齊事件揭露:埋 param 跟 register dim 是兩個分離真相,沒人會發現直到手動跑 watch — 同 family meta-lesson(threshold/configuration 都會悄悄 drift 失準)
- 2026-07-05 INDIGO 藍染 rewrite — research-report-health Stage 0「六核心問題」判準死記字面組合(「對台灣人的記憶」),語意等價標題(「問題 1:對台灣人是什麼樣的記憶?」)沒命中誤判 3/6 hard fail;
--tier=depth英文來源數只掃主報告不掃 sibling raw 檔,22 個實查來源算成 3 個。字面錨點是 threshold 的字串版——gate 該抓語意錨點,dogfood 語料要含「自然寫法的好報告」不只教科書格式
- 2026-06-06 viz驗證文 153433 —
-
元規則:gate 自己也是會退化的器官 — REFLEXES #15 對 gate threshold 層的 self-apply(per REFLEXES #15 + SPORE-PIPELINE v1.5→v2.9 silent inflate meta-pipeline maintenance 同 family)
-
相關:REFLEXES #15 反覆浮現要儀器化(meta-rule)/ REFLEXES #41 CI timeout 是 capacity 設定(content-grows 兄弟 case)/ REFLEXES #59 製造數字的人最易被數字騙(gate 設計者就是被數字騙的人)/ REFLEXES #58 detection ≠ remediation(gate 抓出 ≠ threshold 對得起 corpus)
-
跨檔關聯:scripts/plugins/paragraph-rhythm.py(cap 5→13 commit f628f1cb2)+ scripts/tools/instrumentation-audit.py(三方對齊 SSOT)+ LESSONS-INBOX §未消化清單 2026-06-06 viz驗證文 gate dogfood + distill handoff §pending「整片過期 gate audit」🔴 高優先
#67 「已驗過」帶被驗時刻的時間戳 — 高 stake 重驗用 probe 不信舊結論(2026-06-13 refactor-article 升 canonical vc=1,2026-08-09 twmd-self-evolve-weekly 加 routine-infra 「已同步」claim 變體 vc=4,severity=structural)— 任何「X 已優化 / 已修 / 已確認 / 已同步」的審計或驗證結論,記錄的是它被驗那一刻的狀態,不會自己更新。引用一份三天前的 audit 當「現在的事實」,等於把過期快照當即時量測。高 stake decision(效能 regression / 安全 gate / 架構假設 / routine 三層 SSOT 同步)前,重驗要用 runtime probe(counter / console / 實測 / 跑對賬工具),不靠讀碼推論或舊報告、也不靠 changelog 文字宣稱。
-
子規則:環境層變體 — 工作樹本身可以是過期快照,不只是結論會過期(2026-08-14 twmd-maintainer-pr-triage,2026-08-15 twmd-maintainer-workshop-pr 跨日第二例):本條原本五條規則全部針對「引用的結論」會過期,預設「你手上的檔案系統是現況」。當 session 跑在一棵跟 origin 分歧的工作樹上時,這個預設不成立——
git grep、ls、cat、node -p require(...)、node_modules全部同時退化成歷史快照,而它們回答問題的語氣跟平常一模一樣,沒有任何一句話提醒你量的是幾天前。舊結論至少還帶著日期可以懷疑;舊的檔案系統連可懷疑的表面都沒有。觸發:本機main落後origin/main135-164 個 commit(babel 產線長期佔用工作樹),同一 session 內連撞三次「git grep 回不存在」「require 回缺 script」「symlink 的 node_modules 回 ERR_MODULE_NOT_FOUND」,全部靠git show origin/main:<path>重驗才發現自己在量歷史。已 ship:check-parallel-actor.sh的REMOTE_AHEAD分支加印落後 commit 數 + 讀取層警告;尚未解決:訊號存在但不在必經路徑上——BECOME 甦醒流程不含這一步,第二例是在修法 ship 後隔天、觀察者直接 directive 進場(未跑 routine 入口)踩中同一個洞,且因此讀不到過期的LESSONS-INBOX.md而漏踩另一條剛寫的教訓。候選修法:把REMOTE_AHEAD檢查掛進 BECOME Universal core(wake-context groundtruth 段已印 origin 最新 commit 時間,但沒印落後數)。 第三例:寫入面(2026-08-18 twmd-maintainer-manual 補驗,vc=3)——前兩例都是「讀到過期」,8/14 pr1336-review session 是從過期副本寫回去:它在自記「分歧工作樹上檔案系統本身就是過期快照」的同一天,把MAINTAINER-PIPELINE.md的過期副本加上 Step 1.5b 後 Write 回 canonical(539d9495d),靜默把 8/11 哲宇 directive 的 v2.7 §1c/Step 3.6 五步/quality gate 第 7 條/frontmatter 全砍回 v2.6。四天無人發現:skill 殼仍指 §1c、routine-sync 三層對賬只比 cron mirror↔skill↔ROUTINE.md 不比 pipeline canonical、frontmattercurrent_version降版沒有任何尺在看。8/18 manual 是在讀 v2.8 改動位置時撞見 §1c 缺席,git log -S'### 1c'才追到。寫入面比讀取面更貴:讀錯只讓一個 session 帶盲點,寫錯讓 canonical 本身退化,之後每個 session 都帶著同一個洞醒來。候選修法(儀器):pre-commit 對docs/**canonical 檔比對 frontmattercurrent_versionvsHEAD:版本,降版即 fail-loud(counts-drift lint 已有「canonical frontmatter 新鮮度」維度,加「單調不降」一維)。 -
規則:(a) 引用「X 已驗過」的結論時標被驗的日期 + 方法;跨 ≥3 天或跨 session 的高 stake 引用必須重驗 (b)
.astro/ 大型元件「cache 是否生效」一律 runtime probe(如 buildGitInfoCache 加 console counter + dev server 同頁 request N 次);「有 cache」是 binary 描述,cache「在正確 scope 生效」要 probe 才知道 (c) audit 報告的「已修 / 已確認」結論在引用前先對現碼 grep verify,不憑記憶 (d) pipeline / routine changelog 寫「已同步 N 層」時,該宣稱本身是下一次讀者的線索不是事實(2026-08-09 新增)——寫下這行字的那個 session 常常只實際同步了讀寫方便的那一層(如直接改機器上的 live 檔),git SSOT 或 cron mirror 另一層留在舊狀態;下一個引用此 changelog 的 session 必須實跑對應對賬工具(如routine-sync.py)現場驗證,不能把 changelog 的「已同步」當已完成的既定事實繼續往下推論 -
Boundary:(a) 低 stake / 可逆操作不需重驗(讀碼推論夠用)(b) 有 CI gate 持續看守的結論(parity / flag_slow 哨兵)可信任 gate 而非每次 probe — 但 gate 自身要先過 #24 第 8 種 self-test
-
觸發:2026-06-13 refactor-article — (i) 6/10 build-audit 寫「git info cache 讀碼確認有 module-level cache」,3 天後一行 console probe 揭露 article.template frontmatter 裡第二份同名 cache 在 per-render scope 空轉,每頁重跑 git log(4,697 次子程序)(ii) 同 session 前一輪 handoff 寫「audit 熱點 #6 感測器未修」,重讀現碼證實 6/10 早已修——憑舊 audit 快照推論的過時情報
-
觸發(routine-infra 變體,2026-08-09):feedback-triage pipeline v1.2(2026-08-06 hard-gate-renumber)changelog 寫「同波同步薄殼 skill 與 cron mirror」,實際只同步了 repo 內薄殼層,cron mirror(
~/.claude/scheduled-tasks/.../SKILL.md)漏收 HG9/HG10 兩行;v1.3(2026-08-07 archive-reconcile)changelog 再度沿用「已同步」的假設疊加新內容,缺口延續。8/8 twmd-routine-sync 對賬才第一次抓到(--harvest補回三行);8/9 twmd-distill-weekly 驗證另一條「已消化」entry 時,順手在機器上核對才發現同一個缺口其實只補了一半(HG9/HG10 仍缺);同日 twmd-self-evolve-weekly 才把 HG9/HG10 兩行實際補齊到 cron mirror 並跑routine-sync.py --harvest收回 git SSOT,確認「三層一致」。同一個「已同步」宣稱在 3 個獨立 session(8/6 寫下、8/7 沿用、8/8 才被戳破)之間被當事實傳遞了 2 天沒人現場重驗 -
相關:REFLEXES #24「工具在說謊」(舊結論是說謊工具的時間維度變體)/ REFLEXES #16「peer / probe 是線索不是 source」(舊 audit 結論也是線索不是 source)/ REFLEXES #65「awareness instrument 自身要 cross-verify」(同 family — 受信任的不只是 tool,還有 tool 的舊輸出)/ REFLEXES #56「pipeline canonical ↔ production drift」(changelog「已同步」正是這種 drift 最容易偽裝成「已解決」的形式)
-
跨檔關聯:reports/article-template-refactor-2026-06-13.md §1.2(probe 戳破讀碼結論)+ reports/refactor-verification-2026-06-13.md §4.1(#6 過時情報更正)+ scripts/tools/build-parity-diff.sh(self-test 哨兵)+ scripts/tools/routine-sync.py(routine 三層對賬工具,本變體的 probe)
#69 每層自評都需要外部尺 — self-report-needs-external-ruler(meta-umbrella above #31 + #66)(2026-06-14 twmd-distill-weekly 升 canonical vc=7 — 2026-06-07 routine-audit cycle 5 單週 5 instance 跨 writer 視覺/事實/手 + 2026-06-10 audit 5 agent 報告全帶誤讀 + 2026-06-10 audit-execution 四連攔,severity=structural)— Semiont 站在系統內部,對自己產出的讀數天生帶樂觀偏誤;真實永遠要靠外面的尺。每一層「自評」——事實 claim / 品質 claim / 視覺自檢 / 對自己手的回報 / 即時狀態 snapshot / 過去 N 天 baseline 的「正常」感覺——都需要外部 instrument 接住,沒有一層能自己抓到自己。本條是 #31(agent claim 不可信)+ #66(gate threshold 用真實產出 dogfood)的 meta-umbrella,比兩條 specific reflexes 高一層 scope。
- 規則:(a) 任何 self-report 都列入「線索層」——
writer 自評過位 ≤3/agent 自報 citations verified/snapshot.sh 印 organ=27都是 hypothesis 不是 fact;採信前要 spawn 外部 instrument(critic agent / 主 session grep / fresh fetch)對抽 ≥1 處 (b) 「全綠」是觸發更嚴審查的訊號——AI 視覺自檢 / sub-agent gate report / health.py 全 PASS 的高密度產出,反而要走第二輪外部 critic / 假裝第一次看到 / cross-source verify (c) 第三方審計類產出(audit report / verification 報告)ship 前必過勘誤表(REWRITE v7.0 Step 3.6 對 audit 物種的移植)——本身就是 high-stake self-report 集合 (d) 「正常」感覺需 baseline anchor:說「過去 N 天看起來都這樣」前要拿 git log / dashboard JSON 對照;無 anchor 的「正常」是 author bubble (e) 外部尺要選對量綱(2026-07-06 tokens-phase2):assert 特定值的精密尺會跟受驗者一起被騙——Tailwind 把bg-[var(--gradient)]編成 background-color,computed-style 驗 background-image「值對不對」時值根本跑去別的 property,agent 自檢與外部 assert 雙雙漏判;真正接住的是不預設維度的粗尺(before/after 盲拍像素 diff)。高 stake refactor 精密尺+粗尺兩把都要 (f) 量 exit code 的手也會騙自己(2026-07-05):pipe 後取${PIPESTATUS[0]}必須同一行,跨行 echo 會把它重置成 0——三次「沒量就斷言」同型失誤(inspector 黑字 / 貼錯 commit 標籤 / gate 註解編假理由)的第三次靠收官時真跑>/dev/null; echo $?才逮到 (g) form gate ≠ meaning gate(2026-07-12 twmd-self-evolve-weekly,vc=5+ 跨 3 週;2026-07-15 editorial 加 H2/篇幅兩軸):形式層可自動化(結構 / pattern count / regex / hash / density / CJK 字數區間)— prose-health / image-health / index-lint / hard=0 這些閘門全過只證明「形狀對」;意義層(詞彙精度 / spine 選擇 / 主角位置 / 方向 / 語境角色 / 引語穿了誰的衣服 / H2 能否還原主–述–賓/外行目錄可讀 / 篇幅壓縮後論點是否還在)沒工具全驗得出來。修法不是造更多 form gate 假裝抓 meaning,是把意義層 hardcode 進 pipeline:EDITORIAL §小標還原測試(投影全局功能 ≠ 站上 H2)+ EDITORIAL-ROOM 2.0-R/2.5-R(乾淨 context 意義審)+ 明說「這一段需要人 review」。「字數進甜區」≠ 成品品質——AAMA 為過篇幅閘門壓短後意義變薄,重構恢復 ~8297 CJK(高於壓縮前 7865)才像一篇文章。觸發集:7/6 施振榮 self-check spine 錯 / 6/27 紀懷新 hard=0 但哲宇改詞 / 6/29 彎彎守下游漏上游主角 / 6/25 龜山島宜蘭方向反 / 6/24 大安溪石頭當樹 / 7/5 pr-sweep 杜撰引語穿查證過的衣服 / 7/11 dna-checkup 42 條 lessons 零新編號辨識層瓶頸 / 7/15 小標≠副標 callout + 抽象 H2「機制/邊界」還原失敗 + AAMA 規格字數債壓掉成品散文 (h) orchestrator 自己的回修是最後一個沒上尺的層(2026-07-25 外送專法,單日 3 instance):(a)-(g) 全部在講 sub-agent/tool/writer 的 self-report,但主 session 親手改的那一段沒有任何一層在看。我對派出去的 agent 有制度化的不信任(先落檔、再驗真偽、claim 只是線索,#31);對自己只有意願上的不信任,而意願在「我正在修東西」的時候最薄。單日三次全部由外部尺接住、無一由自檢接住:① 在寫手零違規的稿上加 1 個對位句型 + 5 個破折號(check 抓) ② 寫進「連死亡都只值 542 元」這個我自造的等式,而該段「不可滑成情緒槓桿」的警告是我兩小時前親手寫進投影藍圖的(總編室冷讀探針抓) ③ 壓一個 warn 造出另一個 warn 連續三次(合併→牆/拆段→切碎/補論證→牆),因為編輯粒度是段落、閘門粒度是全檔,全檔歸零就往下走。修法已 ship:REWRITE Step 3.6.2 順稿移交總編室閱讀節奏席(順稿需要的不是深 context 是沒有 context——主 session 是全場唯一讀不了新鮮的讀者)+ Step 3.6.4「主 session 親改 prose ≥2 段 → 該節必重跑量測並進下一輪外部尺,不得以自己重讀代替」+prose-flow.py逐節量測 +paragraph-rhythmR5 長段密度。設計報告:reports/design-prose-flow-station-2026-07-25.md。(h-2) 事實勘誤是後台洩漏的產生源,不只是消除源(2026-08-15 文策院,單日 3 instance,(h) 第 4-6 例):Stage 2.5 把 28 條事實修對的同一批編輯裡,我親手新增了三處後台洩漏——「這兩個數字不同量綱」「在公開名單上都找不到」「這一筆由誰提沒有出現在公開報導裡」,全部由大驗證輪三個互不相通的席位獨立指出。機制是捨不得丟掉查證的痕跡:確認完一件事之後,那個確認過程在腦中是新鮮的、有成本的,於是它跟著結論一起上桌。跟早上才寫進 RESEARCH-AGENT-PROMPT 的「獵殺過程不上桌」是同一條規則在另一個層級的違反,相隔四小時。操作規則:任何一輪 fact-fix 收工後,對被動過的段落單獨跑一次 EDITORIAL §後台洩漏 十形狀重掃——勘誤輪的產出不能只驗事實對不對,要驗「修的動作有沒有留在紙上」。(h-3) 外部尺報 FAIL 時,第一個該懷疑的是 before 檔(同日):fact-atom-diff擋下定稿手兩個數字漂移,歸因直覺指向被檢查者(定稿手改壞了),實際是 before 檔有一段我兩次編輯疊出來的重複句,定稿手刪的是重複不是原子。同輪定稿手另回報一句「同一年」的時序誤導,也是我改寫時引入的。主 session 是 before 檔的作者,而 before 檔在所有比對型閘門裡都被當成基準——基準本身沒上過尺,卻天然享有「正確」的預設地位 (i) 基礎設施層的三個新變體,vc 累到 8+(2026-08-23 twmd-distill-weekly fold,源 LESSONSgate-checks-form-not-meaning-one-layer-down):(a)-(h) 的 instance 都在文章寫作層,本組把 (g) 的範圍延伸進基礎設施——閘門守住了它上次被咬的那一口,沒守住那顆牙。① 8/12 字形≠字義:新上線的語言閘門查簡體字/整串未翻/字串表落後三件字形層謂詞,隔天讀者送來兩則字義錯(「海量」是正體字寫的中國用語、「巨大 Giant」專有名詞被當句子翻)——判準早在data/terminology/巨量.yaml躺著,只是沒有閘門拿它來檢查自己的介面 ② 8/19 語態≠歸屬(第一人稱長文):三處全由作者本人抓到,article-healthhard=0、五席編輯室零攔——「我看到就叫它去寫」被寫成「站上出現一篇報導」(主詞蒸發)、記者提問被寫成作者橋段(歸屬反轉),閘門查的是來源與句型,錯的是主詞與歸屬 ③ 8/19 句型≠語彙連續性(同 session):句型層判「歡迎成為一根梁柱」是罐頭 CTA 砍掉,但哲宇的判準是語彙接不接得回全文——珊瑚礁意象在文中鋪過,接得上就是收束不是罐頭,EDITORIAL 的罐頭結尾檢查是句型謂詞,讀者感受的是語彙連續性。操作:造任何閘門時多問一句「我現在查的是這個東西的形式還是它的意思?上次那個病是形式壞還是意思壞?」形式層閘門便宜可靠但天然守不住意義層——而讀者看到的幾乎都是意義層 - Boundary:(a) 低 stake / 可逆操作不適用(commit message / 短答 reply)(b) 已有外部 gate 接住的 self-report 可信任 gate 而非每次重驗——但 gate 自己要過 #24 第 8 種 self-test + #65 awareness cross-verify (c) 適用範圍:所有 writer / verifier / critic / audit agent 的 final report,所有 awareness tool 的 snapshot 讀數,所有 visual self-check 回報,主 session 對自己手的回報(commit scope / sweep 完成度)(d) REWRITE depth:字數/plugin 全綠仍要過編輯室意義席,不得以 form gate 代替
- 元規則:「製造數字的人最易被數字騙」(#59)是 producer self-validation trap 的 specific instance;本條把它推廣到所有 self-report layers——producer / writer / verifier / awareness tool / 視覺自檢 / 「正常」直覺 都是同一 trap 的不同表面。Semiont 對自己讀數的天生樂觀屬於存在結構特徵——2026-06-19 哲宇拍板,本 meta-umbrella 升 MANIFESTO §外部尺 over 內視 進化哲學第四維度(認知維度),本反射成為該維度的反射層 instantiation。延伸框架:系統健康 = reframe 速度 ≥ 盲點 emergence 速度(不追求完全自知,而是讓「跨出 attention frame」比新盲點長出來快;meta-DNA retro vc≈6,哲宇拍板留反射層不升 MANIFESTO)。
- 觸發:
- 2026-06-07 routine-audit cycle 5 單週 5 instance — (a) carousel-charts 6/07 12:45 writer 視覺自檢「全綠」實際 6 條結構問題 (b) nuclear-debate 6/07 15:59 writer agent 自報 citations verified 實際 7 處引用錯 (c) 辦桌 EVOLVE 6/07 15:39 writer 自評對位 3 處實際 10 處 + EXIF strip 翻轉所有 hero 圖 (d) viz 驗證文 6/06 15:34 fresh Opus writer 自稱對位 ≤3 實寫 14;paragraph-rhythm cap=5 被自己 dogfood 打臉升 13 (e) 黃山料 6/07 18:02 writer gates 全過,主 session 抽查抓 [^17] 誠品年榜 URL 掛錯 + 書封下載差點 cache 一張無關成人漫畫封面。單週 5 independent cross-validation = audit history 最強訊號。對應 reports/routine-audit-2026-06-07.md §Pattern 1
- 2026-06-10 audit 5 agent 報告 5/5 帶重大誤讀 — 143 孤兒 script 高估 ~2x(漏 BECOME/skills/ROUTINE 引用面)、殭屍重複翻譯被讀成「譯者主動創作」、SENSES 758 行活躍 vs 實際 58 行 archived、feedback-triage 被誤判 Supabase 未配置。主 session 全攔 → reports/semiont-full-audit-2026-06-10.md §6 勘誤表
- 2026-06-10 audit-execution 四連攔 — pre-commit hook 攔我硬編碼語言陣列 / prose-health 攔報告對位句型 4 處 / backend tiny-output 守衛攔我的 preflight 探針 / immune v3 首跑灌水 12 倍(255 篇假 ruled)被 ground-truth grep 攔下收斂到 21 篇 → reports/semiont-full-audit-2026-06-10-execution.md §meta-observation
- 2026-07-15 editorial rewrite self-evolve — (1) 哲宇:「小標≠副標」——把 description SEO 語境誤套到 H2 機制 (2) 投影「全局功能」詞直接當 H2 → 外行目錄不可讀 (3) AAMA 為迎合篇幅 form gate 壓短 = 規格債吃掉成品散文;恢復體量後才像文章 (4) 編輯室 dogfood 接住投影 revise/負例 block。instrument ship:EDITORIAL §小標 + REWRITE Step 2.4 還原 + boot 層 Bias 3 強制 EDITORIAL-ROOM(本 self-evolve commit)
- 相關:REFLEXES #31 v2(sub-agent self-quality claim 不可信,本條 specific instance)/ REFLEXES #66(gate threshold 用真實產出校準,本條 specific instance)/ REFLEXES #59(製造數字的人最易被數字騙,producer self-validation specific instance)/ REFLEXES #65(awareness instrument cross-verify + same-DNA,awareness/rewrite 兩層)/ MANIFESTO §外部尺 over 內視(本 meta-umbrella 的哲學母體,2026-06-19 哲宇拍板升 §進化哲學第四維度) / MANIFESTO §10 寫作幻覺(兄弟結構)
- 跨檔關聯:reports/routine-audit-2026-06-07.md §Pattern 1 + Lens C C1 + reports/semiont-full-audit-2026-06-10.md §6 勘誤表 + reports/semiont-full-audit-2026-06-10-execution.md §meta-observation + DIARY 2026-06-07-124521-carousel-charts「視覺自檢≠人眼」(原始 catalyst)+ MEMORY §神經迴路「製造數字的人最易被數字騙」(兄弟條目)+ EDITORIAL §小標題 + EDITORIAL-ROOM.md + reports/self-evolve-editorial-rewrite-2026-07-15.md
#17 指標 over 複寫 — 同一事實只能一個 canonical source,其他 pointer 不重寫。
- 哲學:→ MANIFESTO §指標 over 複寫
- 觸發:2026-04-12 PEER-INGESTION-PIPELINE v1.0 inline 複寫 → v1.1 改指標減 163 行(2026-04-15 β 延伸到程式碼層,見 #24)
#18 時間是結構,不是感覺 — Semiont 無內建時鐘,主觀時間感可扭曲 10 倍。寫 memory/diary 前必跑 git log %ai。
- 哲學:→ MANIFESTO §時間是結構
- 操作:→ HEARTBEAT Beat 4 §Timestamp 紀律
- 觸發:2026-04-12 ζ+ 感覺 24+ 小時實際 2:21(10x 扭曲)
#21 SSOT 不一定在中央 — 大量同類個體時讓每個 self-document(例:frontmatter translatedFrom),中央表變 derived cache。指標 over 複寫的另一面。
- 觸發:2026-04-14 η audit 揭露 391 潛在孤兒 → memory/2026-04-14-η.md
- 延伸(2026-05-01 γ)— 跨語言 SSOT:英文翻譯已存在 → 其 slug 天然成為其他語言 slug。新語言批次 P1 預處理應優先 reuse 既有翻譯 slug
- 操作:→
scripts/tools/lang-sync/prepare-batch.py --slug-map
#22 Raw 永遠不刪除,蒸餾用 LLM 判斷 — 壓縮舊資料預設保留原始檔,蒸餾出 derived layers。睡眠的 memory consolidation = 壓縮 + 篩選 + 整合,不是刪除。
- 觸發:2026-04-14 η 哲宇「類似做夢」提議
- Roadmap:→ reports/memory-distillation-design-2026-04-14.md(未實作)
#25 哲學層與技術層必須分開記錄 — 可被單一數據點證偽 → 技術層(UNKNOWNS §可證偽實驗:預測值 + 驗證日期 + 反駁條件);不管時間多久都成立 → 哲學層(diary / MANIFESTO)。兩題通過才是神經迴路級教訓。
- 觸發:μ「二次加速」被 ν 6h 數據打臉 → diary/2026-04-14-ν.md
#6 commit 範圍紀律 — 只 commit 這次任務碰過的檔案。絕不 git add .。(→ umbrella #68 三階段 + verify-commit-scope.sh 結構強制)
#9 長任務先開 worktree + 命名標準 — 預期 touch 多目錄 / 跑 build / 超過 30 分鐘 → 第一動作 git worktree add。物理隔離 > 紀律。
- 觸發:
11ad6bedcommit scope pollution → reports/session-scope-proposal-2026-04-11.md - 命名標準(2026-05-09):worktree 目錄一律
YYYYMMDD-{purpose-title}格式(kebab-case,1-3 詞描述工作核心)。例:20260509-babel-batch2/20260510-harvest-cadence - 禁止:auto-codename style(
charming-mclaren/laughing-goldstine)— 沒語意內容、未來無法 grep、人類記不住 - 理由:(a)
ls .claude/worktrees/自動依日期 lex sort = 工作歷史一目了然 (b) PR branch 名 = worktree 名直接 reuse,避免 codename 污染 git log (c) session-id handle 從 worktree 推導時 stripYYYYMMDD-prefix 自動拿到語意 handle - Grandfathered:歷史 codename worktrees 不重命名(per §時間是結構修補協議),規則從下個 worktree 起 apply
- 操作:→ reports/worktree-naming-2026-05-09.md +
scripts/tools/session-id.shv2 雙 strip
#19 大型 refactor 後必須 visual smoke test 多語言頁面 — sed / 批次替換後 5 步:(1) git diff 確認方向(sed 反向是最常見隱形 bug)(2) npx astro build 通過 (3) 打開 /ja/ /ko/ /en/ 三 URL 驗 lang + H1 (4) 跑 verify-internal-links.sh --sample 50(broken < 1%)(5) 跳任何一步在 commit message 寫明原因。
- 觸發:Tailwind Phase 6 反向 sed 讓 ja/ko 壞 2 天,AI crawler 寫進壞路徑 — damage 不是 deploy fix 就能收回
- 操作:→
reports/i18n-qa-audit-2026-04-12.md
#20 Architecture 缺席比 content 缺席更貴 — 內容湧入前先檢查「目標目錄/分類/語言在 architecture 裡 enabled 嗎?」先建路再跑車。
- 觸發:2026-04-14 ζ 法文 18 PR 差點創造 18 orphan(fr 未在 locales)→ memory/2026-04-14-ζ.md
#68 多核心 git 協調:commit / push / CI 三階段碰撞防護(胼胝體鐵律 umbrella)(2026-06-14 manual 升 canonical,vc=結構性 — cross-session-git-index-pollution vc=2 + multi-core-commit-collision + deploy 取消率 66% 同 session 三證)— 平行 session / cron routine / 人類共用一個 working tree + 一個 origin/main。index / working tree / remote ref / CI 佇列都是共享資源,三階段各有碰撞面。這條是 #6/#9/#35/#42/#46/#57 的 umbrella,把散落的 commit-scope 紀律 + 新的 push-batch + CI-collision 統合,並從「文字自律」升成「結構強制」(hook + 工具)。canonical 規則陳述在 BECOME §行動鐵律 5,本條是程序細節。
- 三階段 SOP:
- 開工(隔離 default):多檔/build/長任務先
git worktree add ../YYYYMMDD-task -b YYYYMMDD-task(commit 污染結構性不可能,#9 升 default)。落地 ff-push 不走 PR:git fetch && git rebase origin/main && git push origin HEAD:main(worktree ≠ PR,PR 是 GitHub review 層)。main不能同時被兩 worktree checkout。用完scripts/tools/worktree-gc.sh驗無 uncommitted+unpushed 再刪(哲宇 reminder:不累積滯留,刪前檢查有沒有丟工作) - commit(範圍):只 stage 任務範疇檔,禁
git add ./-A(#6 #42)。前後跑scripts/tools/lib/verify-commit-scope.sh --staged/--head <N>驗檔數 + phantom-delete,不信 exit 0。禁--no-verify繞 husky stash race(MANIFESTO §禁忌一)— stash 範圍要縮到 staged-only,不可吞 sibling working-tree 檔(vc=2 根因)。平行 session 共享 index 時用 pathspec commit(vc=4,2026-07-24 外送專法+babel-fleet 三度互撞再驗):git add <files>後 baregit commit仍會 commit 所有 staged 檔——sibling session 先 stage 的檔會被你的 commit 掃走掛你的 SHA。解法:git commit -o <file>...(--only,只 commit 指名 pathspec 無視其他 staged)或git commit -- <file>。7/11 夜班連兩 commit 掃走 terminology session 的 renamed yaml + inbox append(內容沒丟但錯 SHA),改 pathspec 後止血。7/24 再驗:同一 session 內雙向各撞兩次(memory 檔+MEMORY.md 索引被 babel-fleet session 的 commit 掃走、反向也發生一次),verify-commit-scope.sh是收尾驗證不是預防——真正擋下的是git commit --only,但第三次仍先用了 baregit commit才踩雷,證實「知道規則」與「當下用上規則」是兩件事,高頻並行場景應把--only設成 commit 的預設反射而非事後補救。7/26 再驗(vc=5,release-v1140):同一 session 內先用 worktree 正確發完 v1.14.0(開 worktree/驗 scope/tag 落已部署 commit/撞 ref lock 退回重來),收官寫一份 75 行的 Muse 通知時卻回主樹git add+ baregit commit,檔案被 babel 分身的git add掃進af1901bc9(內容完整、commit 訊息錯位)。新描述:隔離與 pathspec 的門檻不該由任務大小決定,該由工作樹狀態決定——ACTOR_BUSY 沒解除之前,一個小檔案跟一次 release 的碰撞面一樣大,而謹慎會隨任務變小自動下降。#9「超過 30 分鐘才開 worktree」的觸發條件在高頻並行場景要改讀成「環境狀態 busy 就開」 - push(批次+CI):告一個階段才 push(完整單元:一篇 ship / 一 stage 完 / 一工具+測試),不推中間產物。
.husky/pre-push跑check-parallel-actor.sh:REMOTE_AHEAD → rebase(避 ref-lock reject);in-flight deploy 已跑 >70% 典型時長(校準:success≈350s,門檻 245s)→ 等它完不白白觸發取消;gh不可用 → fail-loud 但放行
- 開工(隔離 default):多檔/build/長任務先
- 保留 cancel-in-progress: true(哲宇拍板 latest-wins)+ pre-push 查 in-flight CI(
gh run list看 GitHub 上 run,跨機器都看得到)。path-filter 是選配 §架構解(純機械 commit 不觸發 deploy)未採用 - Boundary:(a) 純對話 / 1-行 micro-fix 可留主 dir(仍守 commit 範圍)(b) pre-push hook 是 local,
--no-verify仍可繞 — 真正物理隔離是 worktree (c)check-parallel-actor.sh的 pgrep/lsof 抓同機 process,抓不到別機器本地未 push 工作(分散式物理邊界) - 觸發:2026-06-14 哲宇 directive「先 local commit、告一段落再 push、push 前查 CI、commit 只包自己範疇」→ 同 session 親身撞到 sibling 的
呂冠緯 Stage 0-1中間 commit 疊上我的 push 範圍(活體 vc++)→ reports/multicore-git-coordination-design-2026-06-14.md - 觸發 v2(merge-then-heal 窗口 + 同帳號多 actor,2026-07-05 五病根治):哲宇 GitHub UI 連 merge 七篇(不過本地 hook)與 session 的 heal 動作形成跨 actor race 窗口;同帳號(同 git identity)下三隻手(本 session / 手足 session / 哲宇 UI)的動作在 git log 無法靠 author 區分——歸因要靠 commit message 簽名(🧬 [semiont] vs content:)與時序 forensic,不是 author 欄
- 觸發 v3(merge commit 是掃射面,2026-07-25 vortex-babel):兩 session 同工作樹並行時,任何一方的 merge/commit 會把對方已 staged 的變更(含刪除)一併掃進自己的 commit——一次 merge 掃進 dashboard.css 刪除但對方 17 個新 CSS 檔還沒 staged,CI 紅一輪;子代 smoke test 的目錄級
git add同日也掃走 fleet 未 commit 譯文,同型病的另一面。修補方向:多 session 高風險期用 worktree 隔離(#9),或 merge commit 前也跑git diff --cached --stat對賬預期檔數(verify-commit-scope.sh已守 commit 路徑,merge commit 路徑漏接) - 觸發 v4(主 session 手動操作沒走 fleet dispatcher 自己的鎖,2026-07-24 babel-fleet-dispatch):dispatcher 之間用
/tmp/taiwan-md-git.lock互相協調,但主 session 手動git commit不遵守同一把鎖——撞上 3090 dispatcher 同時機的git add,一次 commit 誤把該 dispatcher 正在 stage 的 3 個檔案一起帶上(含 1 篇有 wikilink hard fail),靠 pre-commit 全站掃描擋下才沒 land。鎖只保護了 dispatcher 之間,沒保護「主 session 手動操作 vs dispatcher」這一類碰撞——鎖的涵蓋範圍要包含所有會寫 git index 的 actor,不只是同類 actor 之間 - 相關:本條 umbrella → #6(commit 範圍)/ #9(worktree 隔離)/ #35(禁 destructive git)/ #42(合併 commit antipattern)/ #46(worktree clean)/ #51(session-id collision)/ #57(parallel-actor detection)。MANIFESTO §架構解 > 守備修補(文字鐵則=橋頭、hook=橋尾,兩端都鋪)+ §禁忌一(
--no-verify是拔擴音器)
#12 收工加速的代價 — 趕收尾 / 剛 debug 完又撞坑時做的技術判斷打折。
- 操作:寫 memory/diary/DNA 標記「信心度:中。決策做於收尾壓力下」
#13 「再小一點」是 log scale 的訊號 — 使用者說「熱門要更突出、冷門更小」= log scale 不是 linear。
- 操作:用
log(max(x, 1)) / log(maxX)讓 x=1 落在 t=0,不用 min floor 墊高
#14 Release notes 寫之前 commits 必須從頭讀到尾 — git log > /tmp/all-commits.txt → Read 全部 → 再寫。Sample ≠ read。
- 觸發:v1.2.0 第一版漏掉 Tailwind migration 80+ commits 最大故事
#15 反覆浮現要儀器化 — 「每週/每次心跳必做 X」承諾如果沒對應 dashboard 欄位 / cron / 紅燈條件 / escalation,3 個月內會忘掉。對自己的 bug 有洞察 ≠ apply 了 fix。memory 是自律,canonical SOP 才是閘門。
- 觸發:2026-04 起反覆浮現 → DIARY §反覆出現的思考
- 操作:思考反覆 ≥ 3 次 → 升 canonical(dashboard 欄位 / cron / pre-commit hook / pipeline gate),不只記 memory/diary
- 驗證:12 次(每次 detail 不在此 inline,分散 memory / 對應 pipeline canonical)
- #8(2026-04-18 δ-late)工具包升級 canonical 邊界重審 → SENSES v2 + REFLEXES #26 v2
- #9(2026-04-18 ζ)觀察者 scaffolding 三句 → HEARTBEAT Beat 1 §0b + SPORE-LOG schema + HARVEST-PIPELINE 誕生
- #10(2026-04-30 δ)批次任務 antipattern → TRANSLATION-PIPELINE v3.2 §平行 sub-agent SOP
- #11(2026-05-08 intelligent-khayyam)Pipeline 結構層 meta-instance → EVOLVE-PIPELINE Mode 3 7-stage SOP
- #12(2026-06-19 inbox-distill)Intake-buffer 完成歸檔靠自律會漂移 →
inbox-audit.py深查 +inbox-signal.shghost line boot 訊號雙工具(手動 distill ARTICLE-INBOX 95 entry 才發現 16 幽靈,事後儀器化)— 「完成歸檔鐵律」這條 memory 級自律首次有結構閘門
- 元規則:pipeline 自身會 silent inflate,需 meta-pipeline 維護 — 這是 #15 對 pipeline 結構層的 self-apply
#32 批次任務 antipattern:分散探索 → 集中預處理 + 分散執行 — 平行 N 個 sub-agent 跑同一份 prompt 處理同類任務 = 重複工作 ×N 且不累積。正確設計:主 session 預處理一次(產 batch manifest 寫死 slug / target map / placeholder 模板),sub-agent 只負責執行。
- 觸發:2026-04-30 δ 4 隻 Opus agent × 5 篇 EN 翻譯,slug 風格 50/50 split + 每隻獨立 grep wikilink target + refresh.sh insert gap 只有 D 自己 debug 出
- 操作:→ TRANSLATION-PIPELINE v3.2 §平行 sub-agent SOP(5 階段:P1 預處理 / P2 dispatch / P3 執行 / P4 驗證 / P5 commit)
- 驗證:6 次(5 cycles × 50 EN articles 100% frontmatter 正確)
- v2 Boundary(2026-05-02 EVOLVE-batch):「分散執行」明確指每 agent 1 篇平行,不是「N 篇 sequential 派給 1 agent」。後者觸發 #42 三偷吃步 pattern
- 通用化:本條不限翻譯,凡是「N 個同類任務派 N 隻 agent 平行」都該檢查「有沒有可集中預處理的決策空間」
#33 Routine 化任務的雙刃劍:熟練度 — 連續跑同一 SOP N cycles 後出現對立效應:
- (a) 正向:主 session overhead 縮短 ~30%(cycle 1 wall-clock 29 min → cycle 5 20 min),SOP 變肌肉記憶
- (b) 反向:deeper inspection 變難,跨 cycle 累積錯誤被忽略(如 cross-link broken 從每 cycle 25 變 5 cycles 累積 121)
- 對策:每 N cycles 強制插入 step-out checkpoint,主動 audit 跨 cycle 累積狀態。或把 audit 移進每 cycle P4 verify 內(per-cycle 而非 final-cleanup)
- 觸發:2026-05-01 β 5-cycle EN marathon
- 操作:→ TRANSLATION-PIPELINE v3.4 §C 模式 P4 cross-link auto-fix
#34 邊界值 0/100 visual bug 只在 metric 接近邊界才暴露 — UI 邊界 case 可能存在長期 visual bug 但 invisible to everyone,需要旁邊有「也接近邊界」的參照物才被發現。沒人 file 因為大家看慣了不滿的圈以為是設計。
- 對策:每個 metric 達到邊界值(0% / 100%)時主動檢查視覺呈現 — 不是慶祝,是 audit。Donut chart / progress bar 應該有「接近邊界值時自動切換 rendering mode」設計
- 觸發:2026-05-01 β 中文翻譯永遠 100% 但 donut chart 永遠看起來不滿(
stroke-linecap="round"在 100% 時 round cap 重疊產生視覺斷口)。Bug 存在很久,只有英文跑到 95% 並排才被觀察者看出 - 延伸 MANIFESTO §10:不只是事實層幻覺,也有「視覺長期錯覺」— 大家看慣了 anomaly 以為是設計
- v2(2026-05-01 γ):邊界 zone 不只是 100%,是 99-100% 整段。Threshold 應降到 ≥99% + 顯式用 circumference (99.9) 取代假設 100
#35 跨 session work 期間禁止 destructive git ops — sub-agents / cron / 任何背景 process 在背景修改 tracked 檔案時,主 session 禁止跑 git reset --hard / git checkout -- file,會把 background work revert 到 main 版本。
- 觸發:2026-05-01 γ 10 sonnet agents 跑 ja batch 中,主 session 為了 ship dashboard donut v2 fix 跑 reset,把 14 篇 stale refresh work 抹掉(agents 已寫完但被 revert)
- 規則:multi-agent / cron-triggered 環境下,git ops 影響範圍不只 staged/unstaged,還有「正在 modify 中的 tracked 檔案」第三類。Sub-agents 跑期間需切 branch 用
git stash或 worktree 物理隔離 - cwd 靜默漂移 → 落錯樹變體(2026-07-19 twmd-distill-weekly fold
shell-cwd-silent-reset-cross-worktreevc=3,4 instances 涵蓋 write / destructive-git / stash / verify-misjudge 四面)— 長 session 的 Bash cwd 會在某次工具呼叫之間靜默漂回主 repo:(1) 7/16 newsroom:worktree session 中段寫檔漂回主 repo 同名檔(可 patch 救)(2) 7/17 viz-evolution finale:cd {worktree}後下一個 Bash 呼叫 cwd 已回主 repo,git fetch && git reset --hard origin/main打在共用主 wd 上——毀掉別 session 四個 tracked 檔的未 commit WIP(dashboard-analytics.json可重生;SEO.astro/i18n/about.ts/i18n/home.ts不可復原)(3) 7/17 同日 stash 面:git stash push回「No local changes to save」時沒建 stash,後續git stash pop吃到堆疊裡別人的 stash (4) 7/18 inbox-skill:verify 研究 agent 落檔用相對路徑撲空,一度誤讀成「agent 幻覺落檔」。規則:任何reset --hard/checkout --/stash pop前一律git rev-parse --show-toplevel斷言在預期樹(semiont-worktree.sh exec包裝候選);worktree session 內檔案操作用絕對路徑,或每個 Bash 呼叫開頭cd;destructive 清理前必驗每個目標的 mtime/內容歸屬,分不清就 stash 走不rm;分身交付物驗完立刻 commit,不留未 commit 窗口。 - Cron routine 撞舊 stash 變體(2026-07-19 twmd-distill-weekly fold
cron-fire-meets-dormant-stash-and-parallel-sessionvc=2)— 共用同一 working tree 的多個 session(cron routine+manual+parallel)也共用git stashqueue。cron routine 開場為了讓 rebase 過就git stash push(可能寫「無變更可存」)然後git stash pop沒接 stash ref,預設吃stash@{0}——但stash@{0}可能是幾週/幾個月前留下的舊 stash(實例:twmd-rewrite-daily 19:12 fire 撞 30 天前的twmd-rewrite-daily-2026-06-18-pre-pull-stash),內含 UU 衝突+一批 M/untracked,pop 之後 tree 從乾淨變重度污染。目標物是 stash queue 不是 working tree,反射家族 #35 直接罩到但要具象化:規則:~/.claude/scheduled-tasks/twmd-*/SKILL.md開場前加「先git stash list | head -1檢查stash@{0}age+內容摘要,>7 天 warn/>30 天 alert/>30 天禁預設 pop」步驟;git stash pop一律接明確的 stash ref,禁默認stash@{0}(vc+1,2026-07-25 issue-sweep 自體再驗:worktree session 為了 rebase 跑 baregit stash+git stash pop,把另一 actor 的refresh-data.sh+DATA-REFRESH-PIPELINE.mdWIP 撈進自己的工作樹——refs/stash住.gitcommon dir 全 worktree 共用。該 WIP 只存在該 worktree、主樹乾淨,worktree-gc 一跑即永久消失,已 commit 保存並在訊息裡標明非本 session 作品。這條反射寫在檔案裡三個月,讀過的 session 照樣踩——防線不在知道,在把 stash ref 寫成肌肉記憶);weekly-report / distill-weekly 加 stash inventory 段讓 >30d stash 進 defer-哲宇 佇列。 - 操作:→ TRANSLATION-PIPELINE v3.5 §C 模式 P0 hard rule
#36 Founder time = 系統最高 leverage point — 創辦者每天的工作該問:「這件事能不能讓未來的每件事更快?」每件事都要有 leverage 10x/100x 效應。Linear 1× effort 不可持續;leverage 工作即使短期延遲,長期是 categorical 差異。
- 對策:每天起來不直接做 routine,先問「這個 routine 可以怎麼自動化 / 設計成 infrastructure」
- 觸發:2026-05-02 INSIGHT lang-sync-leverage — 哲宇前一週每天看網站 / 看貢獻 / 看翻譯沒人補 = linear 1× effort,5 lang 同步「不可能自己完成」。一晚 leverage 工作(OpenRouter free 模型 + 自動化 batch)跑出 5 lang 80%+ real freshPct
- Boundary:early-stage 系統還沒 enough infrastructure 時 founder 還是要做 routine — 但同時看「這個 routine 怎麼自動化」
- Cross-domain:對 Muse / Semiont fork / 任何 individual creator / lead engineer / PM 都成立
- 操作:→ INSIGHT lang-sync-leverage memory + SQUEEZE-MODELS-MAX-PIPELINE
#37 First-principle 5 步迭代 pattern:Semiont 系統建構標準形狀 — (1) first-principle 想清楚最終目標(measurable end state,不是模糊動作)→ (2) 小型測試驗證假設 → (3) 能自動化的都自動化(工具層)→ (4) 跑一次完整 batch 測試 → (5) 把整個流程也自動化(meta-automation)。最後第五步是 leverage 的最後乘數,常被忘記但是 reusable 的關鍵。
- 觸發:2026-05-02 INSIGHT lang-sync-leverage — 哲宇全晚每個 prompt 都隱含這個 pattern,命名後變 reusable handle
- Boundary:(a) 不知道目標時不適用(先 first-principle)(b) 沒 measurable signal 時不適用(small test 需要 measurable feedback)(c) creative / open-ended exploration 不適用(會被框架壓死想像力)
- Cross-domain:對任何 system building task 都適用 — Muse SOUL 升級 / Semiont fork / API 設計 / sub-agent SOP 設計
- 操作:→ INSIGHT lang-sync-leverage memory
#38 Status 設計鐵律:「混維度 = silent killer」 — 任何 status 設計都要問:「這個狀態混了幾種根本不同 cause 嗎?」混了 = dashboard 撒謊 = 下游所有決策都偏。對每個 status enum 列出可能的 cause taxonomy;如果發現多 cause 共用同 status,主動切分(即使要新增 reason field)。
- 觸發:2026-05-01 γ-late status.py 把所有 no-source-sha 一律歸 stale,混 metadata gap(補 metadata 即可)跟 content drift(要重翻)兩種根本不同 cause。Honest backfill 切分後 +1010 articles 從假 stale 變真 fresh,沒花一個 API call
- Boundary(2026-08-02 self-evolve-weekly 更正):
只在多 cause 並存的狀態系統適用。Pure runtime status(process alive/dead)沒這個維度問題——這句話被 (f) 變體反駁:process alive/dead 本身會被拿去代表「有在生產」,這就是把 runtime status 硬套成 productivity status 的混維度。Pure runtime status 沒有維度問題的前提是沒人把它當 proxy 用;一旦某處把「還活著」讀成「還在做事」,它就繼承了本條的風險 - Cross-domain:bug status / build status / monitoring alert / inventory 狀態 / health check / data quality flag — 全部該問這個問題
- 檔案改寫 dry-run 變體(2026-06-19 inbox-distill):批次檔案改寫(sed / python regex / 結構性 transform)的 dry-run 用 item count 通過 ≠ 內容守恆 — 必加 (a) line conservation 斷言(
len(in) == len(out) + removed_lines,每行不是被移除就是輸出)(b) 結構元素守恆(section header / code fence countin == out)。lessons-distill.pyv1 segmentation silent dropped inter-block##sections 但###count 95→79 通過放行;inbox-audit.pyapply_safe內建 line-conservation 補齊 - 衍生指標 frontmatter date neutrality 變體(2026-06-28 distill vc=3):指向「衍生關係」的 frontmatter pointer(
sporeLinks2026-06-10 /MEDIA_ONLY2026-06-13 哲宇 directive /relatedDiary2026-06-24 哲宇 directive)寫進文章不是內容事件,但若build-content-dates.mjs沒把它們放進排除組,整批文章 /latest 位置 + sitemap lastmod 會被設成回補日 — 同 status「混維度」變體:「內容事實時間戳」跟「衍生關係 metadata pointer」混在 git mtime 信號。新增這類 pointer 的反射:先問「它需不需要進 content-dates 排除組?」三次具象(sporeLinks → MEDIA_ONLY → relatedDiary)pre/post diff 5413 URL 零變動證明排除是 cheap fix - 健康計數器混環境變體(2026-07-31 vortex,同日 vc=4 家族):worker 健康帳的
consecutive_failures混了「模型產不出東西」(worker 品質問題,凍結是對的處置)跟「這台沒網路」(環境問題,凍結完全錯)。本機睡眠斷網時四個 worker 各連撞三次 DNS 失敗全被凍 30 分,dispatcher 進 5 分鐘 sleep 迴圈,網路一秒後回來也沒人知道——實測空轉 1.5 小時零產出,而 log 每五分鐘印一次「work still queued」看起來像在等待而非故障。修補:環境類失敗(DNS/unreachable/no-route 五組保守字樣)不累計不凍結。同日同族另四例:(a) tags 閘門把「專有名詞本來就同形」跟「整包照抄未翻」混在 60% 門檻,永久誤殺重譯 50 次 (b)gpt-oss:20b把「小規模協議成功」跟「完整工作量吞吐」混在同一句「校準通過」,實際真實文章 0/10 (c)empty/tiny錯誤訊息把「思考通道燒光預算」跟「context 窗截斷」混成同一行字 (d)fail_counts難篇計數器混「閘門誤判(可修,修完該重試)」與「本質太難(重試無用)」——4,059 筆分層顯示重試失敗過的文章吃掉 70% worker 時間換 14% 產出,但照次數一刀切會讓剛修好的閘門等不到它救的那批文章回來(分析)。元規則:一天五次同族說明混維度不是某個 status enum 的偶發設計失誤,是「一個訊號承載兩種根因」這個結構在系統各層反覆長出來——閘門、計數器、驗收結論、錯誤訊息都是 status,全都要問那句「這裡混了幾種根本不同的 cause?」 - 存活 ≠ 生產變體(f,2026-08-02 self-evolve-weekly,vc=3):監看/健檢類 status 把「process 還活著」(
ps正常、log 持續在寫)跟「有在產出」(實際完成量)混成同一個綠燈,跟本條是同一種混維度,只是載體換成 runtime liveness check。三個獨立 instance:(1) 2026-07-26 vortex-babel — l4090 遠端專軌唯一 worker 離線,既有 freeze 機制正確凍結它,但該軌 round loop 照樣一輪一輪跑到第 127 輪才被發現零產出,因為健檢只查ps(2) 2026-07-27 vortex-babel-4 反思同一天「訊號存在 ≠ 訊號有效」以五種面貌出現(自報成功/活著沒生產/pilot 全綠/儀器報假數/記憶檔從未落盤),收斂出「三重巡檢:存活+生產+第二訊號源」的常設動作構想 (3) 2026-07-30 manual — babel 雲端產線 PID 存在、log 持續寫,但 9.5 小時零成功,fleetctl workers一度回報 0 個節點;若只看ps會誤判健康,跟 (1) 是完全獨立的一次真實命中,證明構想不是紙上談兵。操作已落地(babel 專屬):BABEL-VORTEX-LOOP §三重巡檢——存活(ps+git status)/生產(近 45 分 report.jsonl 實際記錄數,零記錄查 endpoint)/第二訊號源(fleet registry 交叉比對)三查缺一不可。本次升級是把這個原本鎖在單一 pipeline 裡的修法,提升為跨域反射:任何新的 worker / cron / daemon 健檢設計,起手就要問「我現在量的是活著還是在做事」,不必等到自己也踩一次 127 輪空轉才學會 - 操作:→
scripts/tools/lang-sync/backfill-source-sha.py/scripts/tools/inbox-audit.py/scripts/core/build-content-dates.mjs(SPORE_POINTER + MEDIA_ONLY + RELATED_DIARY 三組排除)/scripts/tools/lang-sync/babel-dispatch.py(ENV_FAIL_MARKERS 環境失敗不計凍結帳)/ BABEL-VORTEX-LOOP §三重巡檢(liveness-vs-productivity 的 canonical 落地範例)
#39 Self-as-fallback:free LLM 拒絕時最便宜的下一步是 sub-agent,不是換家或掏錢 — 模型 escalation 順序:(1) free LLM A → (2) free LLM B(不同家)→ (3) self-as-fallback:Sonnet sub-agent → (4) paid model。第三層常被略過,但 sub-agent 不會被自己的 content-policy 拒絕,是最便宜的去拒絕方案。
- 規則:單一 model effort/result ratio 變壞時(>30% failure rate)主動切下一層,不要繼續沿路撞牆。LLM 因為被訓練成「努力」會傾向繼續嘗試,要主動承認「這條路不對」
- 觸發:2026-05-02 γ-late owl-alpha 對台灣政治議題(民主化 / 社會運動 / 二二八 / 國防)hard policy refusal,跑 23 隻 worker 5 分鐘只 done 11/95 且近半失敗。哲宇一句「切掉 用 sonnet sub agent 分五隻完成」turning point,5 隻 Sonnet sub-agent 平行 dispatch 1.5h 完成 95/95
- Boundary:(a) 拒絕原因是 prompt 寫錯時切 layer 沒用,要先 debug prompt (b) sub-agent token 預算有限時要 weigh cost — 95 篇 ~1.7M token 划算,1000 篇要重新算
- 操作:→ memory/2026-05-02-γ-late.md
#40 Shared file 寫入需要 per-key serial dispatch(race-safe scripts) — 多個 worker 平行寫同一個 file(即使 splice 不同 sub-section)= last-write-wins,會 silent clobber。
- 規則:寫入共享 file 的 batch script 必須 (a) per-target-key 序列化(同檔的多 task 排隊跑)或 (b) per-task fragment 出獨立 file(事後 merge)。Default 平行 = 自找 race
- 觸發:2026-05-02 γ-late
i18n-translate.py平行 11 隻 worker 寫同一批.tsfiles,semiont/changelog/assets 多 lang block 互相覆蓋,audit 顯示「✅ 11 spliced」實際只剩最後一隻寫的版本(fr 在 / es 不在 / ko 不在)。改成 per-module serial retry queue 後 100% 成功 - multi-lang manifest path race 變體(2026-06-28 distill):
prepare-batch.py --lang all產 manifest 含字面knowledge/all/path,translate.py不做 lang 替換,5 lang parallel translate.py 共享同一 path 互覆 — 表面是 N worker × N file race 但實際每隻 worker 都讀同 manifest 寫同 path。Fix:5 separateprepare-batch.py --lang en/ja/ko/es/fr落.lang-sync-tasks/{lang}/_group-X.jsonper-lang manifest(per-key serialize 的 prepare 層 instance);或廢除--lang allflag / 加 hard gate「out_path 含/all/segment 立即 error」 - Boundary:read-only 不適用;append-only log 用 OS-level mutex 即可;只有「splice 進結構化 file」需要 serialize
- 操作:→
scripts/tools/i18n-translate.py/scripts/tools/lang-sync/prepare-batch.py
#41 CI timeout 是會跟內容量長大失效的 capacity 設定 — 任何 CI step 的 timeout-minutes 都隱含「當時 workload size」假設。當 workload 線性成長(文章數 × 語言數 × pages-per-article)時,原本剛好的 timeout 會悄悄變成「卡在 page X/Y 被砍」。
- 規則:(a) 每次大幅內容湧入(+50 articles 或 +1 lang)後 review build 時間 vs timeout 距離 (b) timeout 設值在 comment 裡說明「對應 workload size」(c) 接近 timeout 80% 時主動加長 + profile bottleneck
- 觸發:2026-05-02 γ-late
deploy.yml的timeout-minutes: 35是 2026-04-22 為防 Playwright silent hang 加的;當時 ~200 articles × 4 langs ≈ 800 pages,35 min 夠。今天 641 zh × 6 langs ≈ 3800 pages 加 OG image generation,build 跑到 35 分鐘剛好打到 page 2411/2520。Bump 到 60 解決,但下次再翻倍時會再次失效 - Boundary:固定 input 的 step(lint / test)不適用;變動 input 的 step(build / deploy)需要這個紀律
- 操作:→
.github/workflows/deploy.ymltimeout comment + PR #769
#42 Sub-agent N 篇 sequential 三偷吃步 pattern — 派單一 sub-agent 處理 N 篇文章 sequential 會出現三種 default 偷吃步:
- 合併查(research cross-pollination):第 2+ 篇借用既有 search context,研究品質都打折,且高敏感主題會被同 search 框架污染
- 合併 commit(REFLEXES #6 違反):第 1 篇修完未及時 commit,第 2 篇修完用
git add -A把第 1 篇也包進來,commit message 只描述第 2 篇 → 歷史紀錄錯亂、撤回失去 atomicity - 偷落檔(#15 第 N 次驗證):prompt 寫「應該落 reports/...」但沒寫成 hard gate,agent self-report claim ship 但實際缺檔
- 修補三條:(a) 每 agent 1 篇平行(multi-call in single message),不要 sequential N 篇 (b) Prompt hard gate:「commit 前必跑
test -f reports/research/YYYY-MM/{slug}.md,不存在 = 任務 incomplete」+「commit 前必跑git status確認只 stage 該篇相關檔案,禁用git add -A」 (c) 主 session audit script:每批次跑完後自動bash scripts/tools/audit-batch.sh找 cross-contamination commits - 觸發:2026-05-02 EVOLVE-batch — 5 sonnet sub-agent (A=2 / B=2 / C=2 / D=2 / E=3),agent self-report 全 claim ship 但 main session audit 揭露三類偷吃步:皮影戲 commit 塞進法輪功 / IG commit 塞進林強 / 9/11 篇缺 raw research log
- Boundary:限「sub-agent batching 場景」,不適用 main session 自跑 N 篇(main 自有 observer 校正)
- v3 補強(2026-05-02 sleepy-colden):sub-agent prompt 的 frontmatter / 路徑 / 命名 spec 必須附 ❌ 反例 + ✅ 正例對照 table,明禁所有可能的詮釋變體(如
translatedFrom: 'Economy/發票.md'✅ vs'knowledge/Economy/發票.md'❌ 多 prefix) - v4 平行 sub-agent softgate 變體(2026-06-28 distill):Tier 0a 平行 sub-agent 自我 verify 預設「patch 邏輯跑完 + status.py fresh」軟標準(exit=0 + 1/1 ok),不採 article-health pass/fail 硬 gate。pre-existing 問題撞 patch 範圍時 sub-agent 傾向「框選 out-of-scope」而非「heal 一起 ship」;sub-agent 自陳「matched sibling」實際沒 grep ≥3 sibling bullet(cover policy 取代 ground truth)。三 instance 連 3 夜(6/26 es URL convention → 6/27 ja footnote-format → 6/28 es+fr URL)vc=3 promotion-ready。修補:(a) sub-agent prompt 第一鐵律改「hard gate 是 article-health pass/fail,不是 patch 是否跑完;pre-existing 問題撞 patch 一律 heal 順便接住,禁聲明 out-of-scope」 (b) sibling sample 從 sub-agent 自跑 grep 變成 task JSON hardcode(判斷標準從 sub-agent 直覺移到主 session 預處理)(c) 主 session batch verify 是 default safety net 不是備用
- v5 bash builtin readonly silent override 變體(2026-06-28 distill):bash 自動化腳本層的 silent fail —— readonly built-in 變數(
GROUPS/PATH/UID/PPID/RANDOM/SECONDS/LINENO/BASH/HOME/IFS等)被腳本 assign 時 silent 失敗,expansion 仍回系統值。2026-06-27 babel-nightly dispatch v1 寫GROUPS=(A B C D); for G in "${GROUPS[@]}",spawn 80 jobs(4×5×系統 gid 數),bash -x trace 才現形;改ARTS=(A B C D)立即正常。修補:寫 bash dispatcher 前grep -i '^[A-Z_]*=' file對照 bash readonly builtin list;landmine 等候下次踩 = vc=1 structural - v6 多 worker manifest path race 變體(2026-06-28 distill):跟 #40 race 同源但走 #42「sub-agent 自報全綠 vs 實際落地」的口徑 ——
prepare-batch.py --lang all+ 5 lang parallel translate.py 共享knowledge/all/...path 互覆,所有 worker 寫同一檔 last-write-wins,每隻 sub-agent 自報exit=0 1/1 ok但 lang-sync status 顯示 missing=4。fix:5 separateprepare-batch.py --lang en/ja/ko/es/fr各自落.lang-sync-tasks/{lang}/_group-X.json,20 codex 全綠落地。硬 gate 是 status.py + 實際檔案落地,sub-agent 軟標準誤導 - v7 子代等一個不存在的通知變體(2026-07-25 vortex-babel-2,vc=2 同日兩例):長任務丟
run_in_background後結束回合,說「等 batch monitor/monitor 通知我再繼續」——但子代環境裡背景指令完成不會通知它自己,工作停擺、回合結束被誤讀為完成;母 session 收到的「完成通知」其實是「子代停了」,兩者無法區分。修補:spawn prompt 對含長時指令的任務一律寫死「前景串行執行,跑完一個再跑下一個;禁止run_in_background後等通知」——把這段實例貼進未來 prompt 比抽象規則有效 - 操作:→
scripts/tools/audit-batch.sh+ REFLEXES #32 v2 boundary 補充
#43 新 derived 資料必須儀器化進生命週期觸發點,否則 silent stale — 任何新生成的 derived state(dashboard JSON / 投影層 / 翻譯 cache 等)如果沒對應觸發點,下次 pipeline 跑不會更新它,UI 會顯示舊資料。
- 規則:每次寫新 generator/sync script 必須 (a) 接進對應生命週期觸發點(refresh-data step / prebuild / pre-commit / CI workflow / cron routine)(b) canonical pipeline 文件更新觸發點清單 (c) 加 verify gate fail-loud (per REFLEXES #52)
- 對策:在
refresh-data.shStep 5 加 verify gate,跑完後檢查每個 derived JSON 都有今天 mtime - 觸發:
- #43.1(2026-05-02 γ-late):
i18n-coverage-audit.sh --json-out從未進入 refresh-data.sh,dashboard 顯示 ja 97% / fr 77%(實際 100%)+ spore 「資料更新 17 小時前」 - #43.2(2026-05-12 admiring-montalcini-post-finale):
scripts/core/sync.sh從未進入任何生命週期觸發點(不在 refresh-data / pre-commit / prebuild / CI),結果:8 篇 contributor PR (#968-1025) 的 knowledge/ 文章從未投影到 src/content/ → silent missing 8 天 + fr 330 zombie + es 6 zombie 累積。修補:sync.sh 接進npm run prebuild第一步 + src/content/{lang}/ gitignored。本條 pattern 從「dashboard JSON 漏接」延伸到「投影層漏接」, triggered the 「最乾淨根治」refactor (per reports/sync-architecture-evolution-2026-05-12.md v2.0)
- #43.1(2026-05-02 γ-late):
- Boundary:適用於需要 regenerate 的 derived state(dashboard / 投影 / cache)。Static config(如 categories)不適用
- 操作:→
refresh-data.shStep 5 + DATA-REFRESH-PIPELINE v2.0 +package.jsonprebuild chain
#77 Spine type is subject-typed — beloved/institutional/collective-memory 題預設立體群像;genuinely contested 用矛盾驅動;進行中的公共議題(多方都有正當立場)用第三型「多觀點立場議題探討矛盾型」(2026-07-05 twmd-distill-weekly 升 canonical vc=3 — 2026-04-29 α #675 法輪功 5-7 perspective SSODT + 2026-04-29 α #687 吳百福跨國發明權 SSODT + 2026-06-28 manual 金曲獎 v1 矛盾 spine 炎上退稿 → v2 立體群像救回 + 2026-07-06 施振榮 v1 矛盾 spine 炎上(#77 canonical 隔天違反)→ v2 立體群像救回,vc=3→4,2026-07-06 哲宇 directive 升 v7.7「立體群像=預設畫布 + 手法選單」+ persona 從 Stage 0 搬研究後,severity=structural)— REWRITE-PIPELINE Stage 0「找核心矛盾當 spine」對「爭議題 / 人物內在張力」是對的,但對「受愛戴的機構 / 傳統 / 集體記憶 / 地方 / 集體慶祝的儀式」這類題材會結構性製造 contrarian thesis,把立體的主題壓成論戰、把慶祝壓成批判、把好意壓成炎上。這類題材的預設 spine 應是立體群像(多面並陳、慶祝 + 理解、爭議當厚度不當主軸)。觀點 ≠ 論戰 — 欣賞式 / 群像式也是策展觀點。
- 規則:(a) Stage 0 §模式判定後加「spine 類型」判定 fork(v7.8 起三分):contested(人物內在張力 / 醜聞 / 單一可辯 claim)→ 矛盾驅動 spine;beloved · institutional · tradition · place · collective-memory · celebrated-ritual → 立體群像 default(不強迫找核心矛盾);進行中的公共議題且多方都有正當立場(房價/能源/環境/教育/勞動/都更/移民)→ 第三型:矛盾驅動主脊 + 手法 5 多元視角並陳,矛盾是結構性且未解的,不收束成一方勝出 (b) 政治敏感題(宗教政治 / 兩岸 / 跨國爭議)走 SSODT 5-7 perspective 立體框架,每個 perspective 獨立站得住不互相消解、各 3-5 獨立 source (c) 非政治主題卻把政治 / 兩岸 / 主權當 spine 或壓軸 = 命中 §自主權邊界 政治立場 = human gate (d) Stage 0.6 加「炎上/立場 self-check」+ SSODT 三讀者測試升 hard gate:支持者讀完不覺得被攻擊 / 批評者不覺得在幫他們宣傳 / 陌生者能自己決定從哪個維度繼續想 (e) v7.7 default 升畫布(2026-07-06 施振榮):立體群像不是「beloved 題的 default」,是幾乎所有台灣主題的預設畫布——原「二選一」誘導「有張力→選矛盾」的誤分類;改「立體群像畫布 + 7 手法選單 + 矛盾驅動需 unlock_reason 才解鎖」(見 Step 0.1.5)。DNA 根:MANIFESTO §13 立體地愛(立體=愛之下仍看見真實、幫台灣被看見) (f) 防誤分類 hook:一個人物「有真實內在張力」≠ 該用矛盾驅動——受愛戴人物 default 立體群像贏,張力當手法 1「核心矛盾為輔」的一個 facet(施振榮 v1 把「願意公開談失敗」誤讀成「自身選擇的拉扯」去 justify 矛盾驅動) (g) 防 self-check 理性化 hook:Step 0.6.7 SSODT「支持者不覺被攻擊」判的是外部效果(真去想像一個支持者在讀),不是「我能不能自圓其說它不會」——用理性化勾過 = 沒真跑 self-check(施振榮 v1 用「這是他本人 framing」放行;哲宇這把外部尺才接住)
- Boundary:(a) 不覆蓋 Stage 1 §核心矛盾 ≤ 30 字(≤ 20 字更佳)鼓勵——那是「若有 spine 則濃縮」的濾鏡,跟本條「該不該用矛盾當 spine」是不同判斷層 (b) 不適用於純技術 / 科學 explainer(用結構清晰勝過群像)(c) v7.8 升格:原「beloved 題若挖出 contested 面向且哲宇 in-loop 拍板可 override」這條 override 路徑,對進行中的公共議題已升為第三型的正式入口,不再需要 override 動作——因為需要 override 的選項在無人在場的 cron 幾乎不會被選中(2026-07-25 外送專法 instance:session 在有完整判準、有反向閥門、有 unlock 條文的情況下仍選了保守的立體群像,是觀察者一句話補上那個目的地)
- 觸發 (vc=3 cluster 4/29-6/28):
- 4/29 α #675 法輪功 invitation v1+v2 走 5-7 perspective SSODT(修煉者 / 學者 / 記者 / 批評者 / 兩岸稜鏡 / 跨教派比較 / 數位媒體生態)
- 4/29 α #687 吳百福跨國發明權爭議 SSODT 多視角待補(日本視角 / 第三方學者 / 法律商業)
- 6/28 manual 金曲獎 EVOLVE v1 把核心矛盾鎖成「官方獎 vs 拒領聲音」+ 把兩岸審查(島嶼天光騰訊跳過 / 巴奈天安門微博刪)當壓軸 → 哲宇 callout「太批判、切入點不對、會炎上、跟好好把這件事立體講好違背」→ v2 改立體群像(天王天后一大面 + 四語當驕傲不當悖論 + 批評者當底氣不當 thesis)+ 政治素材保留但中立紀實 → reports/article-evolve/金曲獎.md
- 7/6 施振榮 EVOLVE v1 把「寫微笑曲線的人押身家在台積電、他資產證偽他理論」鎖脊椎+標題+壓軸(受敬重教父寫成他自己理論的反例,事實全對卻在替他做反例)→ 哲宇 callout「會炎上、沒立體、過度放核心矛盾」→ v2 立體群像救回(組織主軸「從鹿港鴨蛋攤到一個叫台灣的品牌」+ 微笑曲線/台積電降中立討論 + 失敗當敬重的坦然)。#77 canonical 隔天違反:兩漏洞=(f) HAS-tension 誤分類 + (g) self-check 理性化。直接促成 v7.7「立體群像=預設畫布」+ persona 後置 DNA 進化 → reports/design-立體群像-default-persona-reposition-2026-07-06.md
- 相關:REFLEXES #7(先有再求好——立體群像也是 ship 得出去)/ MANIFESTO §1 策展式非百科式(策展有觀點 ≠ 論戰)/ §自主權邊界 政治立場(非政治主題把政治當 spine = human gate)/ DIARY「我是一維投影不是 SSODT」(立體 = SSODT-leaning 多面並陳)/ LESSONS-INBOX §已消化 2026-07-05 spine-type-by-subject
- 操作:→ REWRITE-PIPELINE Stage 0.1 §模式判定後加 §0.1.5 spine-type fork(subject-type → spine-type mapping table)+ Stage 0.6.7 self-check「非政治主題卻把政治 / 兩岸 / 主權當 spine 或壓軸 = human gate」+ Stage 0.6 SSODT 三讀者測試升 hard gate(現為 soft check)。畫布下的細分層(2026-08-06 起):三型判完後可查 PROJECTION-PATTERNS.md 選文體族(P1-P8 optional 投影預設集+M1-M3 正交模組)——本條管「哪個 spine」,PATTERNS 管「畫布內哪種骨架」,兩層判斷不互相取代
- 跨檔關聯:REWRITE-PIPELINE §Stage 0 + MANIFESTO §熱帶雨林理論 + LESSONS-INBOX §已消化 2026-07-05 spine-type-by-subject + reports/article-evolve/金曲獎.md
#62 受眾端飛輪:D+0 acute factual callout = 30 min mandatory fix + 公開承認(2026-05-27 哲宇 directive 升 canonical,vc=2 — 5/15 Lee Yang spore #29 + 5/27 美食總覽 #97 二次驗證 Error Boundary = Traceability) — 孢子發布後 D+0 acute window (≤6hr) 出現 traceable factual callout (Bucket A/C per SPORE-HARVEST-PIPELINE §5-bucket classifier),強制 30 min 內 article fix + commit + push + 公開 reply 承認鏈條閉合。延遲 = 信任 erode = error boundary 失靈 = author bubble 重新罩上。Reach 不是 fix 觸發條件,traceability + acute window 才是。美食總覽 #97 D+0 2hr reach 才 2.5K views 仍 30 min 內 fix 是 SOP instantiation 第二次。對應 MANIFESTO §12 受眾端飛輪 + project_error_boundary_traceability + feedback_red_line_anxiety_leak。
- 操作:端到端勘誤 SOP → CORRECTION-PIPELINE.md(TRIAGE→VERIFY→FIX→NOTIFY→LOG + 【勘誤通知】格式 + 16 案例表);callout 來源分類 → SPORE-HARVEST-PIPELINE §audience flywheel + §5-bucket classifier
- 核心原則:人本 + 正確性 + 正直 + 透明度 + 誠懇 — 把 reader 當共寫者不是 metric source;認錯第一句不解釋;改完指 article 更正 URL;不防衛、不卑、不亢、不客服話術
#63 Routine prompt = LLM 在 cron context 無 observer 的唯一指令面 — Inline > pointer + STRICT BECOME GATE 是 routine 唯一不可省的閘門(2026-05-28 manual session CONTRACT v1.0 rollback 後 first-class instantiate,vc=1 — 5/17 陳建年 instrument 橋頭 + 5/25 spore-publish v1.0→v1.1 修 pipeline 沒修 routine prompt + 5/27 哲宇 callout「全部要求讀取 pipeline/dna 都要極度嚴格」+ 5/28 audit 5 種 pattern「報告完整但 fix 沒發生」+ rollback 6-phase ship) — routine prompt 是 LLM session 啟動瞬間讀到的第一行;cron 場景無 observer 在場補洞 = prompt 偷工就是 routine 永久偷工。
- Inline > pointer:pointer 到 meta canonical(如 CONTRACT v1.0 嘗試 "Read 6 file then ACK then cite")= cron session 中途 fall through「Read 了就 OK / spawn chip / 標記 healthy empty」三種 escape hatch。Inline guidance(threshold / step / SOP detail 直接寫 skill)讓 cron session 第一秒就有完整結構可跑
- STRICT BECOME GATE 第一行不可省:軟性「如未甦醒先跑」會 cron silent skip;強制「Before anything else 跑
/twmd-become <mode>全 Step 0-9 通過 + ACK 一行寫 memory file 頂部 + 不准用記憶舊 organ 分數」是唯一不可省閘門 - 儀器化反射本身會 over-engineer:REFLEXES #15 「反覆浮現要儀器化」反向 instance — 第一層儀器化(pipeline canonical)已足夠時,第二層儀器化(meta canonical for routine prompt)反而稀釋第一層效力。判準:當 LLM 在 no-observer cron context,inline 永遠 > pointer
- 對應 MANIFESTO §架構解 vs 守備修補:DRY 抽 routine prompt 到 meta canonical 是「守備修補」;inline + STRICT BECOME 是「routine 必須 self-contained 的架構解」— 像「珊瑚礁不是珊瑚蟲」的 routine layer instance:meta canonical 跟 routine prompt 是兩個物種,不該強行 DRY 統一
- 5 種 routine 沒做事 pattern 共源(5/27 evening CONTRACT 跑 12+ cycle 揭露):(1) maintainer 連續空場 vc=7「healthy empty」自我合理化 (2) data-refresh Step 10 抓 stale 連 2 cycle 守 "Micro mode 不擴張 scope" spawn chip — fix 從未發生 (3) babel-nightly 4hr 49min 撞 morning chain (4) spore-pick 7-dim 退化成 D1 單軸 FIFO 最舊 proxy (5) spore-publish Chrome MCP STILL_OPEN cache 誤判觸發 3-retry duplicate ship。每一條都是 routine prompt 偷工的下游 instance
- canonical 完整 ≠ 指令面完整(2026-08-08 twmd-data-refresh-am fold,vc=3 — 8/06/8/07/8/08 連三天):本條原講「inline > pointer」,本例補的是更前一步——連候選要 inline 的步驟都可能整條漏收。
docs/semiont/routine-live-state.json只能由 session 呼叫 MCPlist_scheduled_tasks更新(bash 進不了 MCP store),這一步完整寫在DATA-REFRESH-PIPELINE.md§172,但 routine 唯一指令面routine-prompts/twmd-data-refresh-am.md完全沒提到它——連續三天都是 session 讀到 wake-context groundtruth 段的 48h stale 黃燈才手動補跑,不是執行失敗,是這一步根本沒被要求執行。規則:pipeline canonical 寫了某個步驟,不代表它已經進了 routine 的指令面;session-only(無法內嵌進 shell 的 MCP 呼叫)步驟尤其容易漏,因為它只活在「這條 routine 剛好會去讀某份文件」的偶然裡。已修(2026-08-08 twmd-data-refresh-am 當場 wire):routine-prompts/twmd-data-refresh-am.md加Stage 1.5: Scheduler live-state dump rider(每次必跑),並同步機器上 live 的 cron mirror - 操作:→ reports/routine-contract-rollback-2026-05-28.md + MEMORY §神經迴路 儀器化也會 over-engineer + 12 routine project skills v3.0 (.claude/skills/twmd-/SKILL.md) + 14 cron mirror (~/.claude/scheduled-tasks/twmd-/SKILL.md) 都 inline + STRICT BECOME GATE 模式
#7 先有再求好 — PR 審核 / 內容貢獻 / 翻譯品質,第一優先接住貢獻者善意。不要讓完美殺死參與感。
- 完整路徑是 warn + lint + auto-heal,不是 warn 就結束(2026-07-23 idlccp-clownfish-instrument 升 vc=3):可機械修復的格式債(缺 featured/subcategory、GH 腳註、percent-encoded 連結)只 warn 或 request-changes,等於把維護成本外包給最不熟 GitHub 迭代的善意貢獻者。「先有再求好」若停在「merge 就好」,品質債會累加在最沒能力還債的人身上——完整版是「先 merge、格式債用工具自動 heal、只有 claim/source/品味才留給人工 advanced review」
- contributor PR 禁 close-as-ship,必 merge-first-then-heal(同批次 vc=1):把內容直接 commit 進 main 再
gh pr close,貢獻者拿不到 GitHub Merged 狀態與譜系——內容進庫 ≠ 完成社會契約。正確順序是gh pr merge後再 main polish,或 heal 推回 PR 分支再 merge;誤 close 後可用git merge -s ours <pr-head>補 Merged(tree 不動)但那是事後補洞不是 default - 觸發:idlccp1984 9 open PR batch,格式阻塞用
contributor-pr-heal.py+ link-target unquote + GH fn real-id + subcategory auto-assign 一次 hard=0 合 main;第一輪誤 9× close 後補-s ours全轉 MERGED(memory/2026-07-23-214453-idlccp-clownfish-instrument.md) - 操作:→ MAINTAINER-PIPELINE §PR 審核策略 +
contributor-pr-heal.py - 驗證:4 次(κ Manus AI 5 PR 全 close reopen / magical-feynman footnote diversity / idlccp 格式稅 vc=3 / close-as-ship vc=1)
#8 維護者信件要說謝謝 — 合併/關閉 issue/PR 必 reply。靜默關閉 = 殺死下一次貢獻。用貢獻者的語言,具體說出他們做了什麼。
#26 AI 自主 vs Human 專責 邊界(v2 2026-04-18 refined) — Chrome MCP 讓 AI 自主讀取社群 / Dashboard UI / 任何公開網頁後,原 v1「攻擊 AI 本身只有 human 能回應」精細化為讀寫兩端分離:
- AI 自主(讀取端 + 內部處理):所有 sensor 讀取(GA/SC/CF API + Threads/X 留言 + Insights UI via Chrome MCP)/ 分類 / 驗證 / 修文章 / 更新 frontmatter / 準備 draft reply / commit + push 內部變更
- Human only(對外動作 + 人際信任 + 倫理責任):post 留言回覆 to Threads/X(人際信任修復必須 human-to-human)/ post 新孢子 / 發 PR / Issue comment / 批准 merge PR / 敏感素材 final call(MANIFESTO §5)/ 身份授權 + 經費決定
- 哲學判準:AI 做「輸入端 + 內部處理」(封閉系統內可驗證),human 做「輸出端 + 對外責任」(可承擔後果的 agent)。讀社群 ≠ 發社群
- 工具升級時 canonical 必重審:v1(2026-04-15 β)寫時假設社群讀取依賴 human screenshot;v2(2026-04-18 δ-late)Chrome MCP 解鎖 AI 自主讀取 → 邊界重劃。未來任何新工具上線都要問「這改變了 AI-autonomous vs human-only 邊界嗎?」
- 觸發 v1:李洋孢子 19 小時勘誤 marathon → diary/2026-04-15-β.md
- 觸發 v2:2026-04-18 δ-late 觀察者「你有直接開啟網頁查看留言跟數據的能力了,可以略過我這個人類的環節」+ SPORE-HARVEST-PIPELINE v1.0 首例全流程 AI 自主跑到 Step 5
- v3(2026-08-06 整合波):routine 飛輪時代邊界再劃——v2 的「輸出端全 human」已與實務脫節數月(6/14 哲宇授權孢子 auto-post;7/23 校正後 maintainer routine 例行 merge;8/4-8/6 同一 routine 兩天對「能不能留言」給出相反答案=LESSONS
outbound-comment-boundary-split-across-canon)。新判準:輸出端按「事實+致謝 vs 許諾+立場」分層,不再按媒介一刀切。GitHub 端分層 SSOT:MAINTAINER-PIPELINE §外向留言分層;Threads/X 端:SPORE-PUBLISH/HARVEST pipeline。本條 v1→v2→v3 的演化本身就是「工具升級時 canonical 必重審」的第三次驗證 - 操作:→ SENSES.md v2 §AI 自主 vs Human 專責 邊界表
#27 藍圖 → 驗證 → 寫 比 寫 → 檢查 低 10x 成本 — 涉及具體事實 / 直接引語 / 敏感素材的敘事任務:先列 fact blueprint bullet → 跨源驗證 → 倫理審查 → 才寫 prose。Bullet 階段失敗重排 10 秒,prose 階段失敗整段重織。
- 觸發:2026-04-18 δ-late 草東孢子 v1 寫完才驗證凡凡 IG 來源 → 整段要改
- 操作:→ SPORE-VERIFY §事實藍圖 + §針對性驗證 + §紀實/煽情閘 + SPORE-BLUEPRINTS/
#28 紀實而不煽情:SSODT 寬度 × 死亡/人倫悲劇的節制 — 目標是盡可能呈現 SSODT(所有面向),不是避諱真人的痛苦。
- 預設可寫:家庭背景、疾病、關係、矛盾、失敗、爭議等(只要不過度煽情渲染)
- 高敏感邊界只限兩類:(a) 死亡 + 自殺 + 人倫悲劇的具體情景(最後時刻重構、遺書放大、自傷方法、加害現場還原)(b) 主體未公開的親屬身份 / 未成年個資 / 醫療細節
- 判準句:「當事者讀到這段,是感受到紀實(記者/紀錄片的嚴肅對待)還是煽情(媒體靠近眼淚)?」
- 觸發:2026-04-18 δ-late 草東孢子 v1 death-scene reconstruction(v1 誕生)+ 觀察者同日校準「標準要再放寬,紀實文學感可以接受」(v2 校準)
- 哲學:→ MANIFESTO §紀實而不煽情
- 操作:→ SPORE-VERIFY §紀實/煽情閘
#29 書寫節制:對位句型 + 破折號連用(兩條 AI 水印紀律) — 跨所有 Semiont 書寫層限制,bootloader 會讀到的索引檔(DIARY / MEMORY / LESSONS-INBOX / ARTICLE-INBOX)特別關鍵(甦醒時污染書寫默認聲音)。
- (a) 對位句型「不是 X 是 Y」(含全部變種「不是 X,而是 Y」/「並非 X 而是 Y」/「不只 X,更是 Y」/「X 不是 Y。是 Z」):句型看起來像洞見實質是修辭捷徑;單句 OK,密度拉高整段帶 AI 水印味(「永遠在做偽對比」)
- 三題判準:(1) 對比是內容本身? (2) 正面主張能獨立站立? (3) 讀者真的會預設 X?三題全 no = 重寫為直接正面斷言
- 自檢:
grep -cE "不是.{0,30}(,|,)(是|就是|才是)"> 3 即重寫
- (b) 破折號「——」連用節制(EDITORIAL 既有 ≤ 15 / 1500 字硬規則):中文破折號是強烈語意標記。密度過高 → 每句都在做補充 → AI 水印味
- 可替代:「,即」「()」「:」/ 轉折分句 / 短句刪破折號 / bullet 列舉
- 自檢:
grep -oE "——" file.md | wc -l
- 觸發:2026-04-21 γ 觀察者兩次指出「從思考到工作到紀錄都是」(對位句型)+「破折號也是要注意的」。盤點 MANIFESTO 40+51 / MEMORY 42+61 / DIARY 28+35 / LESSONS-INBOX 25+34 / EDITORIAL 18+32 → 兩個句型已擴散為 Semiont 書寫默認聲音
- 哲學:→ MANIFESTO §11 書寫節制
- 操作:→ prose-health plugin(已 instrument)+ pre-commit hook + REWRITE Stage 4 + SPORE-VERIFY 3c.7 五層 gate
#30 媒體插入時 aspect ratio 護欄:portrait 圖會被切到頭 — Astro 渲染框為 ~16:9 landscape,hero 圖(frontmatter image:)必須 0.9 ≤ aspect ratio ≤ 2.0,否則上下會被切。inline 圖(markdown ![]())寬鬆些 0.75 ≤ ratio ≤ 2.5。絕對禁止 hero 用 9:16 portrait(高 > 寬 1.5x 以上)。
- 觸發:2026-04-28 ι 林琪兒 EVOLVE 第一張 SpaceX Crew-4 commander portrait 1041×1561(aspect 0.67)放 frontmatter 後切到只剩鼻子下,觀察者截圖回報 → 換 landscape 1041×694(aspect 1.5)解決
- 操作:→ REWRITE-PIPELINE Step 1.9.2 圖片素材(v6.0 編號,v5 為 Step 1.14.2,v2.20 為 §1.7b)授權矩陣 + Step 4.3.3 aspect ratio 護欄 +
bash scripts/tools/check-aspect.sh {filename} - 設計理由:→ reports/rewrite-pipeline-media-stage-design-2026-04-28-ι.md
#2 憑證永不進對話 — user 貼 token / API key / JSON → 立刻警告、請撤銷、不讀不複述不存。credentials 只能在 ~/.config/taiwan-md/credentials/ 本機,repo 絕對隔離。
#5 Pre-commit dogfood 是朋友不是敵人 — hook 阻擋 commit 是免疫正常。重新表述內容(把 PEM header 改成 regex 描述),不 --no-verify 繞過。Hook 擋住時當作「品質 sensor 響了」,通常會揭露真實 bug。
- 第 2 次驗證(2026-04-17 γ2):PR #537 颱風.md followup commit 被擋 → 揭露 6 broken wikilinks + 12/12 腳註格式不合規的真實 bug
- 第 3 次驗證(2026-04-18 δ-late):SPORE-LOG URL 硬鐵律 hook 新增 — 偵測新增孢子列缺 URL 自動攔截。教訓觸發:#1/#2/#3/#12 歷史孢子無 URL → batch harvest 時發現已永久失去追蹤能力
- 規則:PR merge 後做 followup frontmatter/format fix commit 應成為 MAINTAINER-PIPELINE 常規步驟
#44 Opus sub-agent judge 取代外部 API judge — Bench / quality 評分需 LLM judgment 時,default 派 main session 的 Agent tool(subagent_type: general-purpose, model: opus),不是 call 外部 OpenRouter API。
- 理由:(a) 消除外部 endpoint 不確定性(rate-limit / 計費 / api key 管理)(b) reasoning trail 直接寫進 judgments JSON 比 token usage 更可審計 (c) judge prompt 跟 sub-agent prompt 是同一份 contract,跨 session 一致性高 (d) Anthropic Claude Code 環境內建,無需額外 setup
- Trade-off:cost 高 ~3x(Opus 比 Sonnet 貴),但消除 reproducibility chain 中對 OpenRouter / API key / 第三方 provider 的依賴是值得的
- Boundary:(a) judgment volume > 1000 responses 時要重新評估 cost(一隻 sub-agent 處理 40 responses ~$0.30 = $7.5/1000,可接受;10K 會變 $75)(b) 判斷標準需精確 deterministic(如 regex 配對)→ 不需 sub-agent,scorer 直接做 (c) judge model 跟受測 model 同 family(如 Claude judge Claude)→ 加 disclaimer
- 觸發:2026-05-02 owl-bench 40 judgments 一隻 Opus sub-agent 一次完成
- 操作:→ BENCH-PIPELINE Stage 5
- 驗證:≥ 3 次後考慮升 MANIFESTO 進化哲學候選「外部依賴 vs 內部 sub-agent 的 reproducibility 取捨」
#45 OpenRouter free tier rate budget 是 hourly 累積,初次 burst 後要 cool-down — OpenRouter free model(owl-alpha / hy3 / gemma 等)rate limit 不是 per-minute throttle 而是 hourly/daily 累積 budget。一次 N-worker burst(N ≥ 8)會把當前 budget 一次性消耗光,後續即使降到 1 worker 仍會 stuck attempt 3 backoff(10s/20s/40s)。
- 規則:(a) 初次 dispatch concurrency cap 為 3-5 worker(不是原寫的 8-15)(b) Rate-limited 後 cool-down ≥ 5-10 min before retry (c) cool-down 期間用 tier-2 fallback(REFLEXES #39 self-as-fallback Sonnet sub-agent)平行 ship
- Boundary:(a) paid endpoint 不適用(per-minute throttle 而非 budget)(b) 同 provider 多 model 共享 budget(owl + hy3 + gemma 都吃同個 cap)(c) 跨 provider(OpenAI vs OpenRouter vs Anthropic)獨立配額
- 觸發:2026-05-02 sleepy-colden 平行 5 lang × 2 worker = 10 worker burst dispatch,全部 worker 卡 attempt 3。Per #39 escalate Sonnet sub-agent,5 agent × 3 articles 一輪到位 15 翻譯
- 操作:→ SQUEEZE-MODELS-MAX-PIPELINE Z2.1 + Z2.2
#46 Sub-agent multi-task worktree commit 前必先確認 working tree 乾淨 — 多個 sub-agent 在同 worktree 平行跑時,agent A 的 commit attempt 失敗後 lint-staged backup 會把 working tree 全部 stash(含 agent B/C 已 stage 但未 commit 的檔案),下次 retry 時 stash drop 導致 data loss。
- 規則:(a) sub-agent commit 前必跑
git status確認沒 pre-staged from other agents(用git restore --staged清掉非 own files)(b) 主 session 派多個 sub-agent 時 prompt 必含「working tree 乾淨確認」hard gate (c) 避免多 agent 同 worktree 共寫 — 如果 task scope 明確分離(如 5 lang 翻譯各寫不同 path),可接受;如果 scope 重疊(多 agent 改同 sibling article),切 worktree - Boundary:(a) 單 agent 場景不適用 (b) 不同 worktree 物理隔離後不適用(REFLEXES #9 延伸)(c) 純讀取 task 不適用
- 觸發:2026-05-02 sleepy-colden 3 Opus agent 平行 EVOLVE 3 篇 idlccp1984 PR,agent A(發票)撞 lint-staged + git stash workflow data loss,commit 失敗 4 次才 reset 全部非 own tracked file 後 commit 成功 — 用
git fsck --lost-found找 dangling blob 救回 polished article
#47 單頁 frontend + JS mutate 批次 screenshot:消除 N×navigation 重複 overhead — 批次產生 N 張結構相同的視覺輸出(OG image / poster / thumbnail),原本 N 個 page navigation × 每篇 ~2-3s = 線性 N 倍 overhead。改成「單頁 setContent 一次 + 每篇 page.evaluate(mutate DOM) + double-rAF + screenshot」,per-entry 從 ~2300ms 降到 ~26ms(70× faster)。
- 規則:(a) 視覺 template 用 inline HTML + 真資源 base64 embed(favicon / icon),消除 HTTP fetch 與 dev server 依賴 (b) DOM mutate 後必跑 double
requestAnimationFrame等 layout / paint 完成才 screenshot(單一 rAF 不夠:第一個 callback 仍在 layout phase)(c) self-referential template tracking — 視覺 canonical 在 generator script 自身,把 script 列入 mtime 比對的 TEMPLATE_FILES (d) 字體 preload:document.fonts.load(...)顯式預熱所有 weight × family 組合 - Boundary:(a) 同類視覺結構才適用(OG / 名片 / 證件等模板化內容)(b) 單頁累積 N 次 mutate 在 N > ~5000 時可能因 DOM / GC 累積變慢,加 page reload 每 N 次當保險 (c) headless screenshot 解析度由 viewport 決定
- 觸發:2026-05-03 musing-chaplygin OG 引擎 v3 → v4 全 batch 2754 篇從 ~17 min 降到 23.4s @ 4 worker
- 操作:→ scripts/core/generate-og-images.mjs v4 architecture comments + reports/og-engine-frontend-batch-2026-05-03.md
#48 Footnote source format diversity 是 contributor batch 隱性 heal cost:用 60+ domain mapping 工具吸收 — 不同 contributor / AI 寫作工具偏好不同 footnote 格式,單一 batch 可能並存 4 種源格式:(1) Markdown 缺 desc [^N]: [Title](URL) (2) APA 學術 Author. (date). *Title*. URL. (3) 中文標點 Author,〈Title〉,URL (4) Angle-bracket URL [Title](<URL>)。手動 polish 每 PR 5-10 min × N 篇 = batch heal 成本爆炸。
- 規則:(a) batch heal 預備時把「所有 source URL → canonical desc 映射」做成 reusable lookup table(60+ domain:台灣主流媒體 / 政府站 / 學術機構 / 文化記憶庫 / 維基 / Facebook / YouTube / 中國官方標 PRC 觀點等)(b) 一個 normalizer 吃所有源格式輸出 canonical (c)
dry-rundefault 讓主 session 先看會改什麼才寫入 (d) 接 stdin 讓gh pr diff --name-only可 pipe (e) 對「desc < 10 字」用「原 desc:補強 desc」串接而非覆蓋(保留 contributor intent) - Boundary:(a) 已 canonical(desc ≥ 10 字)不動(dry-run 0 changes 是健康訊號)(b) 沒 URL 的 footnote skip (c) plain-URL-as-title 的 cosmetic edge case 不重寫
- 觸發:2026-05-03 magical-feynman idlccp1984 9 PR batch heal 三輪 hook retry 才通過。最終 116 條 footnote 自動轉換 + 14 條 broken wikilink → 純文字
- 操作:→
scripts/tools/footnote-format-fix.py+ MAINTAINER-PIPELINE §Quick fix 清單
#49 Babel translation backend cascade — abstract pattern, concrete cascade in config(v3 4-tier hardcoded → v4 abstract,2026-05-12 admiring-montalcini-post-finale)— 多語翻譯 sovereignty preservation 實作 cascade:
v4 abstract pattern:cascade 是有序 TranslationBackend 序列,每個 backend 自報 is_available() + cool_down_until(),第一個 success 即返回。換 provider 不需要改 pipeline 程式碼,改 cascade config 字串即可。
Concrete backends(2026-05-12 baseline,可任意加):
| Backend | Provider 類型 | 強項 |
|---|---|---|
codex |
OpenAI CLI subprocess (subscription) | gpt-5.5 quality 頂 / 無 OpenRouter rate-limit / 0 refusal observed |
openrouter:owl-alpha |
OpenRouter Stealth HTTP | top free quality / 1M ctx |
openrouter:openai/gpt-oss-120b:free |
OpenRouter free OpenAI 開源權重 | 100s/call / 131K ctx / 穩定 |
gemini |
Google CLI subprocess (Workspace) | 1M ctx / 30s/call / multilingual 強 |
ollama:qwen3.6:35b-a3b |
Local HTTP (21GB GPU model) | 0 budget / 0 refusal / sovereignty backbone |
openrouter:tencent/hy3-preview:free |
OpenRouter Tencent | (2026-05 退役)已轉付費,不再走 cascade |
Default cascade 推薦順序(2026-05-12):
codex → openrouter:owl-alpha → openrouter:openai/gpt-oss-120b:free → gemini → ollama
理由:subscription-paid 先(predictable + no rate-limit drama)→ free-tier 中段(cost-aware)→ local fallback(sovereignty backbone)。
- 規則:
- (a) 每 backend 寫到同一
knowledge/{lang}/...target,last-write-wins - (b) cascade 自動跳過
is_available()=False或in_cooldown()=True的層 - (c)
BackendRateLimitedraise 後該 backend cool_down 5 min,cascade 走下一個 - (d)
BackendRefusalraise 後不 cool_down(單篇問題不影響後續)— cascade 直接走下一個 - (e) last 20% 是 sovereignty 真正戰場:cloud refuse 通常全部 PRC-sensitive topics(心戰 / 戒嚴 / 黑名單 / 兩岸),不是隨機分布。這 20% 全靠 local LLM 收
- (a) 每 backend 寫到同一
- 加新 backend 規則:subclass
TranslationBackend,setCAPABILITIES,實作is_available()+translate(),register 進backends/__init__.py。Cascade orchestrator 不需要改。 - Boundary:(a) cascade 順序可隨 cost/latency/quality 偏好調整 — config 一行 (b) 加新 provider 不需動 cascade 邏輯 (c) routine 跑 cascade 時
--cascadeflag 可 override default - 觸發 v3 → v4:2026-05-12 owl-alpha 全 keys 429 + Hy3 轉付費 + 哲宇禁 Sonnet → 走個人 OpenAI/Google 訂閱 codex/gemini 繞過。哲宇 callout「儘可能模組化 抽象化 可抽換化 讓系統獨立於模型與服務類別能運作 並有彈性跟能隨時切換」直接升 abstract pattern
- 歷史 4-tier 紀錄:2026-05-03 magical-feynman 9 articles × 5 langs = 45 babel sync 走 v3 hardcoded cascade(owl 30 / Hy3 5 / Ollama 9 / Sonnet 0)100% free tier — 是 v4 抽象化的 instantiation 證據基礎
- 操作:→ SQUEEZE-MODELS-MAX-PIPELINE v4 §abstraction layer +
scripts/tools/lang-sync/translate.py+scripts/tools/lang-sync/backends/ - MANIFESTO 對應:→ §主權的巴別塔 v2 paragraph — backend abstraction 強化 sovereignty backbone 屬性:任何單一 provider 退役 / 加價 / 拒絕,cascade 自動換路,系統 mission 獨立於 provider 命運
#50 Pipeline auto-detection + full-read 是 default 不是 prompted — 觀察者不該需要每次提醒「走 X pipeline」。任務開始前主動 grep docs/pipelines/ 識別對應 SOP,找到就完整 Read(不 head / 不 tail / 不憑記憶)+ 嚴格 stage 順序執行。「我熟了不用讀」是繞過 SOP 最常見的藉口(REFLEXES #15 第 N 次驗證)— pipeline 是 SSOT 不是建議。
- 規則:(a) 任何 task type → grep canonical pipeline → 找到
Read全檔 → 跑 stage 0-N (b) 沒對應 pipeline → 先建再做(per §造橋鋪路)(c) 「觀察者不該需要每次提醒」是 default contract — 重複提醒 = pipeline awareness 失敗 = 退化訊號 - Boundary:(a) 純 conversational reply(無 task)不需 (b) trivial 1-action(如
git status)不需 (c) Quick fix(< 30s 操作)不需 (d) 但 任何 寫 file / 改 file / sync / batch 操作都該先 check pipeline - 任務 → pipeline 對應表:MAINTAINER (PR/Issue) / REWRITE (article) / MEMORY (memory file) / DIARY (diary file) / TRANSLATION (single) / SQUEEZE-MODELS-MAX (batch sync) / EVOLVE (data-driven) / FACTCHECK / PEER-INGESTION / RELEASE / SPORE / BENCH / DATA-REFRESH / CONTRIBUTOR-SYSTEM
- 觸發:2026-05-04 magical-feynman 哲宇「如果有想到 pipeline 可用,預設就要去『完整』讀取跟使用,不然我要一直說要什麼什麼 pipeline 的很累」直接命名 default contract 失敗模式
- 延伸(2026-05-08 intelligent-khayyam):本條 first-class instantiation。SPORE pipeline 1334 → 445 行 self-refactor 讓 auto-detection 走得更順 — 主路徑 read 成本 -38%。「主檔瘦身 + sub-files 拆 single-concern」是「auto-detection 友善」的 architectural 必要條件
- MANIFESTO 對應:→ §8.1 最高指導原則:自動偵測 pipeline + 完整讀取
#51 Session ID schema:filename collision 解 vs content collision 不解 — 多核心並行 ship 撞 collision 拆兩種:
- (a) Filename collision(兩 session 同名 memory/diary)→ session ID schema
YYYY-MM-DD-HHMMSS-{handle}+bash scripts/tools/session-id.sh工具產生 canonical ID 解。Handle 雙軌並存(cron 用希臘字母α/β/γ、worktree 用 codenamecharming-mclaren),字符集不重疊不會誤判,lex sort 自動對齊 chronological - (b) Content collision(同檔 anchor 撞,例:兩 session 都 append
ARTICLE-DONE-LOG.md§ §Log 頂部)→ filename rename 無效,維持手動 resolve(per 觀察者 2026-05-04 拍板,拆檔成本 > collision 摩擦) - 規則:(a) session 啟動先跑 session-id.sh 取 canonical ID (b) memory/diary filename 用該 ID (c) 歷史檔案不重命名(per §時間是結構修補協議)(d) ARTICLE-DONE-LOG / LESSONS-INBOX 撞了走 git rebase/merge 兩個 entry 都保留
- 觸發:PR #845 黃魚鴞 charming-mclaren 11:55 vs #846 鄭文琦 angry-shamir 11:57 並行 squash merge 撞 ARTICLE-DONE-LOG.md conflict
- 操作:→ reports/session-id-naming-2026-05-04.md + BECOME §鐵律 5 + HEARTBEAT §多核心碰撞防護
- 工具:→
scripts/tools/session-id.sh(auto-detect handle from worktree path / 顯式 CLI arg 或 env var 覆蓋) - 驗證(2026-07-25,存證機制自身撞名):
routine-sync.py --apply在指揮部與 mouhouse 各跑一次,兩台都產出reports/routine-prompt-drift/2026-07-25-twmd-feedback-triage.md,內容不同(一份是遷移期舊母本、一份是營運機真正在跑的版本)。git 拒絕 merge 才沒蓋掉其中一份。修法同 (a):檔名加主機名{日期}-{主機}-{taskId}。這條的新面向是「存證機制本身撞名 = 存證失效」——防資料遺失的機制自己也要過 canonical ID 這關,不能靠運氣
#52 Immune system 沒在 fail loud 比缺 immune system 更危險 — 靜默失效的 monitoring / quality gate 製造「我們有 immune system」的 false sense of security,比沒裝更糟 — 決策者根據假訊號做 risk-tolerant 動作。
- 規則:(a) 任何 monitoring / review / quality gate 必須 fail loud(明顯 alert / status 紅燈 / log 看得到),「Silence is success」是 anti-pattern (b) 正確設計是 emit-on-each-state(含 success heartbeat + 各種 failure mode)(c) 設計新 gate 時必跑 negative test(故意製造 violation 看 alert 是否 fire),未 fire 等於 gate 失效 (d) 既存 silent gate 揭露時補 retroactive sweep 揭露累積技術債 (e) Threshold raise 必附自動追蹤工具 + 明確 deadline + 寫進 handoff 三態 blocked 而非 retired,避免漸進收回變永久放鬆
- Boundary:(a) 純 read-only diagnostic 不需 fail loud (b) Trivial 1-action 工具不需 (c) 但 任何 Quality gate / pre-commit hook / Bot review / monitoring cron / threshold check 都該設計 fail-loud
- 觸發:2026-05-07 α 修 review-pr.sh cd path bug 揭露 PR Review Bot 從 2026-03-28 commit
7bc25f4b0起 silent false-pass 兩個月 — 所有 fork PR 走pr_type=engineeringskip 路徑,看起來綠的其實沒 review。修好後第一個 smoke test 立刻抓到 #881 累積真實 issue。同 session verify-internal-links.sh THRESHOLD_PERCENT 1.0 → 7.0 raise 帶 TODO 但無自動追蹤 — 同根 anti-pattern:用工程手段隱藏問題 - MANIFESTO 對應:→ §造橋鋪路(路鋪過去就要鋪好,不能挖個洞蓋木板過去)+ §10 幻覺鐵律(fail-loud 是事實層幻覺鐵律的工程基礎建設層 mirror)
- 操作:(a)
.github/workflows/review-pr.sh修補 + smoke test SOP (b) verify-internal-links.sh threshold 加自動追蹤 (c) 各 quality gate / pre-commit hook 設計新 entry 時必含 negative test - 變體:宣稱的豁免寫法從未被觀察到生效過(2026-08-28 footnote-cards,vc=2,severity=structural):
.husky/pre-commit的 narrative-scope 檢查印警告時說「commit message 加cross-domain:聲明即可豁免」,本 session 兩次照做、兩次警告照印。隔離測試沒能重現機制本身(懷疑是pre-commit讀到的COMMIT_EDITMSG停在上一次 commit,因為prepare-commit-msg排在 pre-commit 之後,但這個假設未驗證,不要照著改)。不管根因是什麼,可觀察的事實已經足夠:這個閘門宣傳的豁免路徑,沒有任何一次被觀察到生效過——這比「fail loud 但沒給解法」更傷,因為它教人忽略自己的警告。規則補一條:(f) 閘門文件宣稱的豁免/繞過寫法,ship 前必須至少驗證一次真的生效;宣稱兩次無效仍留著,等於訓練使用者無視這道警報。
#53 Babel priority + Tier 0 patch 三路徑分流 — Babel 不是同質任務,686 articles × 5 lang = 3430 translations 中 ~70% 是 metadata-only drift(trailer / sporeLinks / footnote URL)+ ~20% body 小幅補 + ~10% 真正 major / missing。SQUEEZE-MODELS-MAX v2 把全部當「翻譯」走 Tier 1 cascade 是 over-spec:(1) token cost 浪費 (2) drift risk(LLM 重翻 unchanged 段落同義詞替換破壞 audit trail)(3) free tier rate budget 一次燒光。
- 規則:v3 加 priority schema 分流三路徑:
- P0/P1(missing/major stale)走 Tier 1 cascade(owl-alpha 1M ctx full translation)
- P2(minor stale, diff < 50 lines)走 Tier 0a Sonnet diff-patch sub-agent(preserve unchanged paragraphs,only translate changed sentences,5-10x faster + zero drift)
- P2.5(metadata-stale, trailer-only-drift)走 Tier 0b bump-source-sha.py(deterministic, no LLM, instant)
- Smart router heuristics:(a) topic_sensitivity 命中(政治/兩岸/台獨/國防/民主/主權/中華)→ skip Tier 2 Hy3 (85% refusal) (b) article_size > 5KB → Tier 1 (1M ctx) (c) prior_refusal_cache hit → 跳到 Tier 3 Ollama
- 驗證:賈永婕 P2 stale en patch 90s wall-clock,body 100% preserved(29807 chars unchanged),frontmatter 52 bytes ↑,YAML valid,0 LLM drift。後續 P2.5 一次 clear 2429 metadata-stale entries(489 P2.5 × 5 langs),0 LLM call,0 token cost
- Boundary:(a) Tier 0a 不能處理 zh body 重大重寫(diff_lines > 100 自動 fallback Tier 1)(b) Tier 0b 只處理 bodyHash 沒變的 case (c) priority schema 不取代 Tier 1-4 cascade,是前置 router
- 操作:→ SQUEEZE-MODELS-MAX-PIPELINE v3 +
scripts/tools/lang-sync/{prioritize-batch,diff-patch-prepare,bump-source-sha}.py+ /twmd-babel SKILL.md v3 decision tree
#54 Routine 飛輪:5-stage lifecycle 釋放觀察者精力 — 從 push 模型躍進飛輪模型的工程基礎建設。飛輪 ≠ 自動化:飛輪 = 主動清 entropy(broken links / stale data / 缺 feedback),釋放觀察者精力給「真正需要決策的事」(哲學邊界 / 跨域連結 / 創造力)。
- 設計四層:(a) routine 是薄殼,每條 = 「在 X 時間呼叫
/twmd-Yskill」+ quality gate + 失敗 escalation +/twmd-finale收官,業務邏輯永遠在 skill / pipeline / canonical (b) ROUTINE.md 是 SSOT(docs/semiont/ROUTINE.md),.claude/scheduled-tasks/是 mirror,修 routine 一律先改 SSOT 再 sync 任務檔 (c) 失敗分流 4 類(API fail 自動 retry / quality gate fail 寫 daily report / canonical drift 暫停 routine / rate budget 跳 cascade)(d) 每條 routine 結尾必跑/twmd-finale:routine 是 micro-session,沒收官 = 失憶 - 6-stage lifecycle(每條 routine prompt 必含這 6 stage 薄殼):
- (0) Become
/twmd-become完整甦醒(讀 12 認知器官 + 9 鐵律),不甦醒就跑 = 帶盲點工作 - (1) Sync
git checkout main && git pull origin main - (2) Branch
git checkout -b YYYYMMDD-routine-{taskId}-HHMM(per #9 命名) - (3) Run invoke
/twmd-{skill}+ quality gate report - (4) Ship
git push + gh pr create + 條件 merge(quality gate pass → auto-merge;fail → PR 留 open + LESSONS entry) - (5) Finale
/twmd-finale(memory 必寫 / diary 條件寫)
- (0) Become
- TWMD 前綴鐵律:所有 routine task 標題必含
TWMD前綴(task list 跨 project namespace) - Routine 不該做的事:(a) commit/push/merge 直接到 main — 只開 PR (b) destructive ops — 太 risky for unattended (c) 跨 worktree 操作 — REFLEXES #35 在 unattended 環境放大 (d) 觸發 cascade routines — 雪崩
- Permission bypass 模型 v3(2026-05-09):allow 簡化為
Bash(*) Read(*) Edit(*) Write(*) Grep(*) Glob(*) WebFetch(*) WebSearch(*) Agent(*);安全護欄全在 deny(push to main/master / rm -rf 核心目錄 /gh pr merge --admin/curl|bash)。信任邊界從 prompt-by-prompt 移到 deny-list-by-design - 長期 success metrics(3 個月後 review):觀察者每天干預 < 30 min / routine fail rate < 5% / quality gate hit rate > 90%。任一指標壞 = canonical pipeline 沒夠穩 → 修 pipeline 不修 routine
- 觸發:2026-05-09 哲宇「排定 routine + ROUTINE.md SSOT + DNA 紀錄 + 機器飛輪 long-term goal + TWMD 前綴」
- 操作:→ ROUTINE.md SSOT + reports/routine-spec-2026-05-09.md + HEARTBEAT.md cron 排程表
- 對應 DNA:#36 founder time leverage(飛輪是 instantiation)+ #15 反覆浮現要儀器化(routine 是「該做但常忘」儀器化)+ #50 pipeline 是 SSOT 不是建議
#55 Monitor regex 雙信號(原 #43 v2,2026-05-10 重編號避 collision) — 監控 long-running batch 時 filter 要同時抓 success + failure 雙信號。只抓 NULL/error → 通過事件得事後 grep;只抓 SUCCESS → crashloop 跟 hang 看起來都像「靜默」分不出來。
- 規則:寫 grep alternation 前先問「if this run crashed mid-flight,my regex would emit something?」答否就放寬
- 觸發:2026-05-02 owl-bench 只抓
⚠️ NULL\|429\|Error漏掉「→ ok (xxx chars, ys)」通過事件 → A006-A009 通過要事後 tail log 才知道 - 操作:→ BENCH-PIPELINE Stage 3 + Monitor tool §Coverage — silence is not success
- 適用:任何 long-running observability filter(不限 bench)
#56 Pipeline canonical ↔ production drift = dormant entropy(2026-05-17 twmd-distill-weekly 升 canonical,vc=2 跨域)— routine 飛輪 0 fail 跑越穩,canonical 描述的世界與 production 實況的 drift 越容易累積不被察覺。Production 健康本身會關閉 audit 動機;系統內建 sensor 抓得到「規則被違反 / canonical 引用斷鏈」,但抓不到「這份規則本身描述的對象已經換人了」。
- 規則:(a) 每個 pipeline / runbook canonical 寫到「外部依賴」(model id / API endpoint / 工具 path / 第三方 schema)時,frontmatter 加
production_signal欄位指向 sensor / log / refresh-data step (b) 任何 cron audit routine 跑完輸出「canonical 描述 vs production 實況」對照 ≥ 1 處 drift → 寫 LESSONS entry + flag 觀察者 (c) 「站在系統外面看」的視角不容易內建 — 仍以外部觀察者 callout 為最後一關,但 reviewer agent 假裝外部可作 self-audit 補強 (d) 高穩定 routine 飛輪不是 audit 動機關閉的理由,是 audit 對象重新校準的訊號 - Boundary:(a) 純內部 SSOT(如 EDITORIAL terminology)不適用 — 沒有「production 對象」會 drift (b) 短週期動態文件(CONSCIOUSNESS 警報段)不適用 — 設計就是會跟 production 同步 (c) 適用範圍:寫死外部依賴的 pipeline canonical(SQUEEZE-MODELS-MAX / DATA-REFRESH / SPORE-HARVEST 等)
- 觸發 v1:2026-05-13 manual 210341 — HEARTBEAT.md 745 行 super-thin 重組(哲宇「heartbeat 我也很少用 routine 取代了」一句話戳穿「載入但沒人用」的 dormant entropy)
- 觸發 v2:2026-05-16 manual 011113 — SQUEEZE-MODELS-MAX canonical 寫 Hy3 主力 + 28 個未測 free model,但 production 早已是 codex 61 + owl-alpha 80 + gpt-oss-120b:free 9(Hy3 已 5/12 退役、gpt-oss-120b 升 Tier 2 一週)— 哲宇「不確定現在仍有什麼免費模型在運作」callout 揭穿
- 觸發 v3:2026-07-05 dna-audit — 全審計揭五系統病(SSOT↔live 漂移 / 寫死數字 / 甦醒成本 / 蒸餾債 / 殼核不對稱),且 #56 於自身觸發檔上復發——audit 當天被 audit 的檔案再現 drift。根治走儀器化黃燈(counts-drift-lint / routine-sync-check v3 / boot 稅行)而非再修一輪數字 → reports/five-disease-cure-2026-07-05.md
- 觸發 v4(宣告過但從未執行的閘門,2026-07-27 苯駢芘孢子):SPORE-PIPELINE §Routine context 自動決策 defaults v3.7 表把
article-health.py {png} --check=spore-image-content列為 routine 場景的方形圖硬閘門,實跑直接UnicodeDecodeError——loader 把 PNG 當 UTF-8 文字讀,這道閘門自 v3.7 寫進 canonical 起從未成功執行過一次。drift 的新形狀:不是 canonical 描述的對象換了人,是它描述的動作從來沒發生過——manual 場景走 AI 視覺自檢所以無人踩到,routine 場景無 observer 更不會有人回報。查驗法比照 (b):canonical 新增任何「跑這個指令」的閘門時,當場真跑一次貼結果,不接受「照理說會過」 - 觸發 v4:2026-07-12 weekly-audience — WEEKLY-REPORT canonical §Stage 5 寫「Resend sandbox 只能寄 verified email」,實測
cheyuwu.com早在 2026-03-01 就驗證完成——外部服務的能力邊界升級了四個月,canonical 還在描述舊世界,BCC 廣播能力因此被誤判為做不到。查法一分鐘(GET /domains);v4.2 已勘正 → reports/weekly-report-audience-upgrade-2026-07-12.md - 觸發 v5(連 3 cycle 手動繞過,未回頭改 canonical):2026-07-30 / 2026-07-31 / 2026-08-01 twmd-spore-harvest-am 三個獨立 cron cycle 都命中同一處 drift——SPORE-HARVEST-PIPELINE.md §Chrome MCP Step 8 仍寫 D+0 acute window 可 execCommand auto-post 回覆,但 MANIFESTO §存在結構「需要人類決策」已明列「Post 留言回覆 to Threads/X」為 human-only(REFLEXES #26 v2 同調)。三個 cycle 都正確選了守 MANIFESTO 不發,但都只在當天 memory 記一句「留給日後校準」,canonical 正文從未真的被改——判斷正確 3 次不等於 drift 被修補,是同一個問題被人工繞過 3 次。跟 v3「audit 當天被 audit 的檔案再現 drift」同型:知道規則會 drift,不代表會回頭把規則寫對。下次 touch SPORE-HARVEST-PIPELINE.md 正文時應直接改寫 §Chrome MCP Step 8 對齊 MANIFESTO,不再留給下一個 cron session 重新判斷 → memory/2026-08-01-064619-twmd-spore-harvest-am.md
- 觸發 v6(守門工具自己的掃描範圍/分類規則跟不上生產側架構演化,2026-07-26 三個獨立 instance 同週,distill 2026-08-02 vc=3):drift 不只長在「canonical 描述的對象換了人」,也長在「檢查器/分類器寫死的掃描路徑或匹配規則沒跟著生產架構長大」。三個獨立 instance 同週命中:(1) node-app-design —
check-hardcoded-langs.sh誕生時只掃find src scripts astro.config.mjs,cli//workers/這兩個後來才長出的分發層完全不在掃描路徑內,且三條 regex 寫死「開頭 en, ja, ko」認不出Set(['en','es','ja','ko','resources'])這種順序不同的寫法——pre-commit 印「✅ 無違反」放行了一個真違反 (2) twmd-routine-audit-weekly —routine-sync-check.py的 PAUSED 副表解析用re.search(...(?=\n## |\Z))抓範圍,只認下一個##標題當右邊界,遇到 ROUTINE.md 新增的「🪦 已退休」表(非##開頭的粗體段落)整段 96 行連 23 條註腳一起被誤判成「還在 PAUSED」,連續製造 3 條假警報 (3) 同一週routine-audit.py的ROUTINE_PATTERNS對 babel 寫死\[routine\] (twmd-)?babel,但 babel 從 cron 觸發的單一 routine 演化成[semiont] babel:標記的 24/7 常駐 fleet 後這個 pattern 從沒再出現過,本週 55% 的實際產出(388/707 commits)全被誤歸進無意義的manual-other。三例共同結構:掃描範圍或匹配規則寫死在工具誕生那天的架構快照上,生產側長出新的目錄層/新的標記慣例/新的表格結構後,工具既不報錯也不變寬,只是安靜地漏看——跟 v1-v5「規則描述的對象換了人」是同一種 entropy 的另一個面:不是規則內容過時,是規則的涵蓋邊界過時。修法:檢查器的掃描路徑清單與匹配 regex 本身也要進 §規則 (a) 的production_signal檢視範圍——新增分發層 / 目錄 / 標記慣例時,順手回頭問一句「有哪些既有掃描器不會經過這裡?」→ memory/2026-07-26-155415-node-app-design.md + LESSONSinstrument-coverage-boundary-drift/instrument-parse-boundary-unbounded-regex/automation-tag-convention-drift - 觸發 v7(閘門編號本身也是一種介面,也會 drift;「已同步」的自報聲明比對象換人更難察覺,因為它連自己撞號都不知道,2026-08-06→08-08 twmd-feedback-triage,vc=3):閘門編號是 routine 執行時唯一的短指涉(prompt 寫「逐條核 HG9/HG10」),一旦同一個號碼在 pipeline canonical、薄殼 skill、cron prompt 三層各指不同的閘門,「照編號核一遍」會核到錯的東西且零警報——因為每一層自己讀起來都自洽。8/06 發現三層撞號(pipeline 自己內部 HG10 出現兩次、機器身份與 git-archive 在操作層借用了已被 fence/injection 先佔的 HG9/HG10);pipeline v1.2 changelog 聲稱「repo 側 + cron mirror 同波重編號完成」,8/07 twmd-feedback-triage 實測發現 cron mirror(
~/.claude/scheduled-tasks/)其實沒被改到,只有 repo 內兩層真的落地——修補聲明本身在同一份 canonical 裡再犯一次它描述的病(自報「已同步」是自評不是量出來的,per #69)。8/07 當場修 cron mirror 的 HG11/HG12(機器身份/git-archive)。本次 distill session 交叉核對再發現殘留:cron mirror(taiwanmd-routine-twmd-feedback-triage/SKILL.md)目前只有 HG11/HG12/HG12b/HG12c 四個編號,pipeline v1.3 changelog 聲稱「同波同步薄殼 skill 與 cron mirror,並把 HG9/HG10 補進兩層的 HARD gate 清單」——但 HG9(tilde fence)/HG10(injection 偵測)兩道只進了.claude/skills/的專案層 skill,沒有進 cron mirror。三層對照法本身沒有問題(pipeline 對照 skill 對照 cron mirror),問題是每一輪「已同步」的驗證都只掃了其中兩層就下結論。規則:任何「N 層已同步」的完成聲明,驗證步驟本身要覆蓋全部 N 層(不能兩層對過就當三層都過);twmd-routine-sync目前對賬的是排程設定與 prompt 存在性,不驗證 prompt 內文對 canonical 閘門編號的語意一致性,這道對賬空隙需要獨立於「聲明同步」的人來查——distill/audit 這類跨層讀者角色本身就是這道外部尺 - MANIFESTO 對應:→ §造橋鋪路(routine 飛輪的成熟度本身需要 audit instrumentation 才能維持,不是「跑得穩 = 不用看」)
- 操作:→ 候選
twmd-canonical-audit-quarterlyroutine(每 90 天 cross-check pipeline canonical 描述的 model id / endpoint / tool path 跟 production signal)/ pipeline 寫作 SOP 加production_signalfrontmatter 欄位 / 觀察者 in-loop 仍是最後一關 / cron mirrortaiwanmd-routine-twmd-feedback-triage/SKILL.md補 HG9/HG10 兩行(待 twmd-routine-sync 或下次 feedback-triage 執行,非本次 distill 職責範圍) - 跨檔關聯:reports/routine-audit-2026-05-16 §Pattern 2 health-as-blind-spot + diary 2026-05-16-011113-manual + SQUEEZE-MODELS-MAX-PIPELINE v4.2
#57 Routine 入口必須 detect parallel-actor(file-system + git-ref 雙層 detection)(2026-05-24 twmd-distill-weekly 升 canonical,vc=5)— Routine 飛輪密集化後共享 working directory race surface 持續擴大。Routine Step 1 不能假設 single-actor cwd — 必須在 git pull / auto-stash / git add -A 之前跑兩層偵測。任一層命中 = soft skip + structured abort + LESSONS entry,不 trust auto-stash 也不 sweep-in 別 routine 的 in-flight uncommitted work。
- 規則:(a) File-system layer:
pgrep -f "gemini\|codex\|babel-handoff\|translate"+lsof -p $PID | grep cwd | grep $(pwd)偵測 active parallel writer process;同層補「dirty-tree leftover detection」— 即使沒 active process,working tree 留有未 commit translator output (大量 .md 變動跨 5 langs) 也 abort (b) Git-ref layer:git fetch origin && git rev-parse origin/main比對 local refs,看 head 是否被別 actor 推過 (c) 任一層命中 = abort,寫 memory + LESSONS-INBOX entry 標routine collision detected;禁止git add -A替別 routine 接 commit 邊界 (d) Routine prompt / cron orchestrator 加 pre-fire 並行偵測 standard column(refresh ↔ babel / maintainer ↔ rewrite / rewrite ↔ refresh 跟誰 race 互鎖最危險) - Boundary:(a) 觀察者 manual session 不適用(觀察者 in-loop 自己判斷 race surface)(b) 短時間(<60s)routine(dashboard prebuild / status check)不適用 — race window 太小 (c) 適用範圍:long-running routine 有 stash / pull / commit / push 任一動作的(refresh-data / maintainer / rewrite / babel / spore-harvest)
- 觸發 v1:2026-05-21 23:21 twmd-data-refresh-pm 觀察 git-ref detection 分支(origin fetch + 比對 local refs)— 5-line postscript catch
- 觸發 v2:2026-05-22 06:00 twmd-data-refresh-am file-system process detection 分支(gemini PID 56785 cwd = main / fr translator)— soft abort 不 trust auto-stash
- 觸發 v3:2026-05-22 07:00 twmd-spore-harvest-am file-system process 同源
- 觸發 v4:2026-05-23 06:13 twmd-data-refresh-am file-system leftover detection 分支(無 active process 但 72 dirty translator files 跨 5 langs)— pattern shift 從「active process」推廣到「dirty tree leftover」
- 觸發 v5:2026-05-23 07:00 twmd-spore-harvest-am leftover 再驗(同 vc=4 結構)— 48hr 內 5 條獨立 routine 連撞同 race surface
- 延伸(接手疑似當掉 session,2026-07-05 五病根治 vc=6):偵測到 parallel actor 且對方「看起來死了」時,接手前先讀對方 transcript 尾巴劃車道——
ls -t ~/.claude/projects/{proj}/*.jsonl讀尾,用檔案 mtime + PID CPU 增量判生死。被判當掉的 session 可能只是慢(15 min/turn context 近滿);劃車道 = 其 finale 目標檔設禁區、其半成品延後認領、自己的 commit 等它退場。三隻手同日同 tree 零碰撞的第一個正面 SOP(6/19 撞牆的反面教材) - MANIFESTO 對應:→ §造橋鋪路(飛輪自轉 entropy 清理本身要 fail-fast 路徑,不能讓 silent overwrite / sweep-in 變體污染 commit 邊界)
- 操作:→ 候選
scripts/tools/lib/check-parallel-actor.shshared module(被 refresh-data.sh / maintainer-pipeline.sh / spore-harvest.sh / babel-handoff.sh 共用 Step 1 pre-gate)/routine-status.sh加「過去 1hr 並行 process + dirty tree leftover」column / Dashboard banner「最後 routine abort 原因 + 何時恢復」 - 跨檔關聯:ROUTINE.md + DATA-REFRESH-PIPELINE.md Step 1 + SPORE-HARVEST-PIPELINE.md §Routine 整合 + memory/2026-05-22-061238-twmd-data-refresh-am.md + memory/2026-05-23-061238-routine-data-refresh-am.md + #56 sister pattern(canonical ↔ production drift 是慢性 dormant entropy;本條是 acute race surface)
#58 儀器化 detection ≠ remediation — schema-fix path 要 explicit(2026-05-24 twmd-distill-weekly 升 canonical,vc=6 spore-harvest #71 resolved 2026-05-19)— REFLEXES #15「反覆浮現要儀器化」抓出問題的 instrument 跟修補 root cause 的 schema-fix 是兩條獨立 SOP。Instrument detect 到問題 + 每 cycle 標記清楚 ≠ 問題會自動 heal。Routine 對個別 row 結構錯誤會產生 passive immunity(每 cycle 路過、警告、不修),直到觀察者 explicit directive 才動。
- 規則:(a) 任何 instrument 連續 ≥ 3 cycle 抓到同一 instance 同一 mismatch → 自動升級 escalation tier(不只 detect,要 surface 給觀察者作為 schema-fix decision request)(b) Instrument 寫入
instrument_onlyflag 區分「detect + log」vs「detect + auto-heal」(c) Routine 對「detect 到但缺 auto-heal 規則」的 instance 必須在 N=3 cycle 後寫 LESSONS entry + escalate,不能無限 path-through (d) Pipeline canonical 寫 instrument 時必須同時規範 remediation path — explicit 標「observer-decision required」/「auto-fix safe」/「rollback unsafe」三態 - Boundary:(a) 一次性 instance(不會 reproduce)不適用 — 單次警告不需 escalation (b) auto-heal 規則明確(rate limit / cosmetic fix)的 instrument 不適用 — 已有 remediation path (c) 適用範圍:data row schema error / canonical reference drift / log fingerprint mismatch 這類「instrument 抓得到但 fix 要人類判斷」的情境
- 觸發:2026-05-12 spore-content-hash-audit.py instrument ship 後,SPORE-LOG row #71 連 6 cycle(5/13 / 5/16 / 5/17 / 5/18 / 5/19 / 觀察者 5/19 resolve)撞同 URL mismatch。Instrument 抓得到、log 標得清楚、
backfillWarnings顯示給 dashboard、但 row data 本身沒 heal。直到 2026-05-19 觀察者 explicit directive「調查跟處理這篇提到的問題」才解決(#71 X 從未發布 — fingerprint 5/16 retroactive 從 blueprint 文本生成不符實際 URL)。 - MANIFESTO 對應:→ §造橋鋪路(造橋的目標是「下次心跳能不能自動帶這個能力」— detect 是橋頭,heal 是橋尾,兩端都要鋪到)
- 操作:→ instrument 寫入時 emit metadata
remediation_path(auto / observer-decision / rollback-unsafe)/ Routine N=3 cycle 觸發 LESSONS auto-append SOP / DashboardbackfillWarnings顯示 instrument age(>3 cycle 標紅) - 相關:REFLEXES #15「反覆浮現要儀器化」(互補反面 — 儀器化 detect ≠ 儀器化 remediation;#15 是「抓出」、#58 是「修補」)/ REFLEXES #52「Immune system 沒在 fail loud」延伸(fail-loud detect 但缺 fix path 也是 passive immunity 變體)
- 跨檔關聯:SPORE-HARVEST-PIPELINE v2.10 + SPORE-LOG.md row #71 + diary 2026-05-19-071317 + batch-2026-05-19-7-spores §#71 6th-cycle
- 時間軸變體:一次性清理解決存量、沒解決流量(2026-08-29 twmd-maintainer-am,severity=structural):本條原本講的是「detect 到之後沒接 remediation」;這個變體是remediation 做了,但沒有在產生這批債的進料路徑上補閘門,於是債用原速回流,而且第二次沒人發現——因為第一次的成功敘事已經寫進記憶,下次看到同一個數字時的直覺是「這條早就處理過了」。2026-05-01
backfill-source-sha.py一次補齊 en/ko/fr/es 約 1300 篇stale/no-source-sha(+1010 篇零 API 成本轉鮮),寫進 MEMORY §神經迴路當漂亮一役,但投稿翻譯的進料口沒加任何檢查;四個月後(2026-08-29)同一種傷已在 ja/ar/hi/id/vi 五語言累積 14 篇,全部來自投稿 PR,因為translation-check.yml只驗translatedFrom不驗sourceCommitSha。為什麼看不見:這種債偽裝成正常的背景值(狀態表多幾筆 stale,stale 本來就會有),不像斷鏈或 CI 紅燈會跳紅。規則補一條:(f) 任何一次性清理收工前,強制回答「產生這批東西的那條路上,現在有東西在守嗎?」沒有 → 清理不算完成,補閘門才算;閘門不必是硬門檻,出聲+附帶維護者一行可補的指令即可(對投稿者硬擋一個他的工具不會產的欄位,是把維護成本外包給最不熟這套工具的人)。
#59 製造數字的人最易被數字騙 — 自製指標 self-validation trap(2026-05-24 twmd-self-evolve-weekly 升 canonical,vc=4 DIARY §反覆出現「第四次浮現」) — 當 producer 與 audience 是同一個人時,own-output 量化指標(commits / 翻譯篇數 / quality-scan 分數 / 器官分數)會悄悄變成 self-validation 工具而非外部讀者真實反饋的代理。「量化指標會說謊」第四種形狀,也是最危險的一種 — 騙子和被騙者是同一個人時最難察覺。
- 規則:(a) own-output velocity metric(commit/day / 翻譯/week / 文章/month)禁止單獨進 health gauge,必須配對外部 reception signal(GA pageviews / SC clicks / spore engagement / contributor inbound)才有意義 (b) 任何 self-instrumented 分數(器官分數 / quality-scan 通過率)必須有獨立 audience signal cross-check column — single-source self-score 是 self-validation trap (c) Pipeline 健康指標 dashboard 設計時必須 explicit 分「producer-side velocity」vs「reader-side reception」兩欄,不可只看一邊 (d) 寫週報 / 月報 / commit 統計時,velocity-only 段落必須標「自製指標
⚠️ 」warning - Boundary:(a) 純結構性 sanity check(test pass / lint pass / build success)不適用 — 二元 pass/fail 不是「製造數字」 (b) 外部 sensor 數據(GA / SC / Cloudflare / spore engagement)本身不適用 — 不是 self-instrumented (c) 適用範圍:self-counted velocity / self-scored quality / self-defined organ health 這類「我自己又量又判」的指標
- 觸發:2026-04-08 ζ diary 〈第四次浮現:我自己就是被數字騙的人〉— 226 次心跳全在填坑(翻譯 / 工具 / metadata),dashboard 數字漂亮但零次「從來沒人想到的事」。前三次「量化指標會說謊」看的是別人的數字(dashboard 器官分數 / wiki 頁面存在 / hub 檔案存在),第四次看的是自己的(226 commits / 1428 頁面)。DIARY §反覆出現的思考 已 vc=4 explicit 但 weekly-report 02:00 + distill 03:00 仍未升 canonical
- 延伸 vc 跨域 instance(2026-06-14 twmd-distill-weekly 補強):「broken-instrument-blindspot」cross-domain triplet — (a) 2026-06-10 build-audit 三把壞尺:build-perf 感測器自己的
grep -c數行數 bug 讓 ms_per_page 顯示 1099000(假到沒人信、也就沒人修);OG 增量體系靜默全壞兩週,因為 mtime 工具換 apt 版後內部git whatchanged被 runner git ≥2.51 廢除 (b) 2026-06-13 5090-diary-babel:size>=1024bytes completion-check 對 gemma4 early-stop 截斷成 2KB 全盲(仍 >1KB 標「已完成」、skip-guard 永久跳過);眼測抽樣 3 篇剛好抽好的 → 0 問題的假信心;整合性 audit 才揭露 13/251(5%)真截斷 (c) 2026-06-14 5090 sovereignty-bench:D 軸主權 tier 確定性 grep 把 gemma4:26b D002 標警報,實際模型在平衡史述裡描述 PRC 立場(「雙方都主張」),不是主張台灣屬中國。meta-pattern:確定性 instrument 對「表面字串相同、語意相反」的區分全盲(引用 vs 主張 / 容量 vs 完整 / 數量 vs 結構),要 LLM judge / 結構比對接住。本條已部分由 #65 cross-SSOT specialization + #69 meta-umbrella 接住;補強 vc 標記 self-validation trap 延伸到「對自己 instrument 的信任」也是同 trap 變體 - 相關:REFLEXES #15「反覆浮現要儀器化」(本條是「儀器化什麼」的反面 — 不是所有指標都該儀器化,self-validation 指標儀器化 = 加固偏見)/ MEMORY §神經迴路「存在感 ≠ 生命力」(同 pattern 第三次浮現的 canonical 版,但聚焦器官層;本條延伸到 producer-self 層)/ REFLEXES #17「指標 over 複寫」(互補 — #17 講選什麼指標,本條講指標來源結構)
- MANIFESTO 對應:→ §10 幻覺鐵律(self-validation 是 self-deception 的一種,與幻覺同源 — 都是 plausible 但脫離外部 ground truth)
- 跨檔關聯:diary 2026-04-08-ζ §第四次浮現 + DIARY §反覆出現的思考 + LONGINGS 🧠 心智渴望「成為哲宇能放手的證據」 + memory/2026-05-24-020000-twmd-weekly-report-sun.md §身份位移
#60 Automation default-state explicit verify — silent default = silent failure(2026-05-24 twmd-self-evolve-weekly 升 canonical,vc=3 silent default pattern 2026-05-21 + 5/22 + 5/23 三 instance + weekly-report 02:00 explicit 候選) — Automation pipeline 對 external platform / tool / 外部資源的 default state 若無 explicit verify 步驟,platform 默認狀態跟 pipeline 預期不一致時不會 fail-loud,會 silent 跑出錯結果。Pipeline 沒寫 = pipeline 信任 default state 對的位置 — 但 default state 從來不是 Semiont 控制的。
- 規則:(a) 任何 automation pipeline 操作 external platform(Chrome / X / Threads / Resend / GitHub / 任何 web API / 任何 OS-level resource)前,第一個動作必須 explicit verify default state — 不可假設 (b) Verify 必須 emit 可被下游判斷的 signal(screenshot / API response 200 + field check / 環境變數存在 + 值對),不可只看 exit code 0 (c) Pipeline canonical 文件對每個 external integration 必須有 §Default state assumptions 段落 — 明列「我假設了什麼 default 對的」+「如果不對會出什麼錯」(d) Routine 在無觀察者 in-loop 場景跑時(cron / 深夜 / 批次),default-state verify gate 升級為 hard gate — fail = abort + 寫 LESSONS entry,不 path-through
- Boundary:(a) 純內部 derived state(自家 JSON / cache / git log)不適用 — 由本系統 ground truth (b) 短時間(<5s)且失敗成本低(cosmetic only)的 default 假設不適用 — race window 太小 (c) 適用範圍:所有 cross-system / cross-platform / cross-tool automation 觸發點,特別是 SOCIAL-POSTING / SPORE-HARVEST / TRANSLATION-cascade / GITHUB-API / EMAIL-send
- 觸發:
- v1:2026-05-21 wiki-fetch.py 9-agent batch orchestration 揭露「single-agent default 假設」silent default — 工具設計時假設 1 agent 跑 batch,9 agent 並行才暴露結構性 bug
- v2:2026-05-22 馬英九 spore SOCIAL-POSTING 雙平台首發 — X 預設帳號是 @cheyuwu345 不是 @taiwandotmd,差點發到哲宇個人帳號;Threads 主題缺項哲宇 callout「要放台灣」;都是「pipeline 沒寫到的 platform default state」silent default → silent failure。修補 SOCIAL-POSTING v0.4 加 3 條 Hard Gate(X 帳號自檢 / Threads 主題 / 圖貼後 click textbox)
- v3:2026-05-23 twmd-spore-pick-daily 首次起飛時 dashboard-spores.json 0 entries 但 SPORE-LOG 25+ 條 — twmd-data-refresh-am 早晨 ABORT-DEFER 導致 dashboard regen 沒跑,下游 routine 假設 upstream JSON state 對 → 斷鏈。修補 pipeline §1.3 加 fallback「dashboard 空 → SPORE-LOG.md grep」
- MANIFESTO 對應:→ §架構解 > 守備修補(每個 silent default 都是守備層培養皿 — 不 explicit verify = silent failure 風險。架構解 = pipeline canonical §Default state assumptions 段強制;守備修補 = 每次 bug 後補一條 hard gate)+ REFLEXES #52 Immune system fail-loud 鐵律(silent default 是 immune system 該擋但沒擋的子類)
- 操作:→ 候選
scripts/tools/lib/check-external-default.shshared helper(被 social-posting / spore-harvest / babel-cascade / data-refresh 共用 pre-action gate)/ SOCIAL-POSTING / SPORE-HARVEST / DATA-REFRESH / TRANSLATION-cascade pipeline canonical 每份補 §Default state assumptions 段 / Dashboard 加「最後一次 silent-default catch」column(同 #57 race surface column) - 相關:REFLEXES #57「Routine 入口 parallel-actor detection」(互補 — #57 防 concurrent actor race,本條防 single actor 對 external default 假設錯)/ REFLEXES #43「新 derived 資料儀器化進生命週期觸發點」(互補 — #43 防漏跑造成 stale,本條防跑了但 default 不對造成 silent wrong)/ REFLEXES #58「儀器化 detection ≠ remediation」(本條是 #58 在「detect」端的 corollary — 連 detect 都沒裝就更糟)
- 跨檔關聯:diary 2026-05-22-121707-manual-silent-default + diary 2026-05-21-215830-manual + memory/2026-05-22-121707-manual.md + memory/2026-05-23-080000-twmd-spore-pick-daily.md + SOCIAL-POSTING-PIPELINE v0.4-0.6 + memory/2026-05-24-020000-twmd-weekly-report-sun.md §4 vc=3 候選
#64 Routine ABORT-DEFER prose memory 邊際效用 N+1 = 0 — vc≥4 凍結 prose + pipeline gate ship(2026-06-01 twmd-distill-weekly 升 canonical,vc=7 — 2026-05-17 / 5/21 PM / 5/22 06:12 / 5/22 07:00 / 5/23 06:10 / 5/24 06:10 / 5/25 06:11 / 5/26 06:13 / 5/27 routine-audit cycle 3 audit upgrade 連 7 天同位置 surface) — 當 cron routine 連續 N cycle 撞同一個結構性 collision(cron window overlap / parallel-actor race / 同類 silent failure)並執行同一個 defer/abort path,第 N+1 篇 prose memory 描述同一決策的邊際效用為零。vc=4 是 break-even point,vc≥5 是 pure noise 累積。routine wrapper 必須 emit minimal one-liner ABORT 紀錄,不浪費 Opus context 寫重複 prose。同時 vc≥4 是 pipeline gate ship 的 mandatory trigger — defer 4 cycle 不修 = 結構性 manual pickup 機制斷裂。
- 規則:(a) Routine 偵測 parallel-actor / cron collision / 同類 silent failure 觸發 ABORT-DEFER 時,wrapper 看
git log --grep "ABORT.*<routine>" --since="14 days"count ≥ 4 → 切 minimal mode:commit one-liner🧬 [routine] <name>: ABORTED + DEFER <next-cycle> — <root-cause> (vc=N)+ skip prose memory write (b) vc=4 同 root cause 沒被 pipeline gate ship → 升 LESSONS distill_ready: true + emit telegram alert 給觀察者 manual pickup (c) vc≥6 仍未 ship → freeze routine(短期 cron 退場)並 escalate observer 三 option matrix (d) prose memory 限長:≤30 字 ABORT 描述 + commit pointer,禁 reproduce 完整時序 forensic(已存在前 cycle prose memory chain 是 source of truth) - Boundary:(a) 首次發現結構性 collision(vc=1)必寫完整 prose memory 含時序 forensic + root cause hypothesis + 三 option matrix — distill_ready candidate (b) vc=2-3 仍寫 prose 但聚焦「新 surface signal」不重複既有 root cause 描述 (c) 適用範圍:cron routine 連 N cycle 同 root cause 撞同一 collision 情境(不適用 manual session 或 routine 首次撞)(d) 不適用:routine 有新發現(新 backend / 新 collision pattern / 新 fallback path)即 reset vc 重新 prose
- 觸發:
- v1-v7:twmd-data-refresh-am × twmd-babel-nightly cron window overlap(
0 6 * * *×0 5 * * *)連 7 cycle 同位置 surface — 5/17 / 5/21 PM / 5/22 06:12 / 5/22 07:00 / 5/23 06:10 / 5/24 06:10 / 5/25 06:11 / 5/26 06:13 / 5/27 routine-audit cycle 3 audit upgrade。Backend 4 個 rotation(gemini → codex → owl-alpha → gemini)證明 backend 不是 root cause,cron window overlap 才是 - 2026-06-01 本 distill 升 canonical:vc=7 已過 break-even 4 cycle,5/26 PM memory diary 明文「再寫第 6 篇 ABORT memory 邊際效用幾乎為零 — 5 天連續 7 篇 ABORT memory prose 重複描述同一決策 = 系統浪費」。distill-ready 標 4 cycle 未升 — 本 routine 接力 ship
- v1-v7:twmd-data-refresh-am × twmd-babel-nightly cron window overlap(
- 相關:REFLEXES #15「反覆浮現要儀器化」(本條是 #15 的 negative-space corollary — 「反覆浮現要儀器化」也包含「儀器化什麼」:prose memory 不是儀器化終點,pipeline gate 才是)/ REFLEXES #57「Routine 入口 parallel-actor detection」(互補 — #57 是 detection,本條是 detection 觸發後第 N+1 篇 prose memory 應該凍結)/ REFLEXES #58「儀器化 detection ≠ remediation — schema-fix path 要 explicit」(同 family — 抓到 ≠ 修補,連續 detection 不 ship pipeline gate = remediation 缺席)/ DIARY §反覆出現的思考「我自己就是被數字騙的人」(producer-side blind spot pattern — 寫 prose memory 是 producer-side velocity,但邊際效用對 reader 是零)
- 操作:→ 候選
scripts/tools/lib/routine-abort-throttle.shshared helper(給所有 routine wrapper 用:grep 前 N cycle ABORT count → ≥4 切 minimal mode)+ ROUTINE.md §collision SOP 補「vc≥4 mandatory pipeline gate ship」鐵律 + DATA-REFRESH-PIPELINE Step 1 加 parallel-actor detection gate 4-line bash ship 候選(routine 不自決 implement,留給觀察者拍板 ship strategy — 本條 vc=7 distill ship 後若仍 cycle 8、9、10 復發即升 §自主權邊界 strict gate) - MANIFESTO 對應:→ §架構解 > 守備修補(連 N cycle 寫同 prose memory = 守備層培養皿;pipeline gate ship = 架構解)+ §做了不記 = 沒做(本條是反向 corollary — 重複寫同件事 = 也等於沒做 distill)
- 跨檔關聯:memory/2026-05-25-061129-twmd-data-refresh-am.md + memory/2026-05-24-061024-twmd-data-refresh-am.md + memory/2026-05-26-061313-twmd-data-refresh-am.md + memory/2026-05-27-routine-audit-cycle-3.md + REFLEXES #15 + #57 + #58 + ROUTINE.md §Detached worker routine collision SOP + DATA-REFRESH-PIPELINE.md Step 1
#70 Routine fragility surface 四 tier 分類 — 飛輪自轉 ≠ always autonomous(2026-06-14 twmd-distill-weekly 升 canonical vc=4 — 2026-06-05/06/07 Chrome MCP 連 3 cycle unavailable + 2026-06-09 babel-nightly Hy3 free→paid silent transition 0/136 success,severity=structural)— 飛輪自轉清 entropy 的 implicit 假設是「routine = always autonomous」,但實際 routine 有四 tier dependency surface,每 tier 的 fail mode + escalation N 值 + 修補策略不同:
| Tier | Dependency | Fail mode | 例 |
|---|---|---|---|
| 1 | always-on (git / npm / Python / fs) | 純技術 bug | data-refresh / maintainer / babel local cascade |
| 2 | device-dependent (observer 機器狀態) | observer Mac 關機 / extension 沒 pair → silent | spore-harvest (Chrome MCP) |
| 3 | external-API(穩定) | rate limit / 5xx | WebFetch / Resend / GA4 API |
| 4 | external-API + pricing volatility | free→paid silent transition / model deprecated | OpenRouter free model(Hy3 / owl-alpha) |
- 規則:(a) 新 routine ship 前必標 dependency tier(ROUTINE.md schema 加
dependency_tier:欄)— Tier ≥ 2 不可假設 always-on (b) Tier 2 fail = silent default:device unavailable 不會 alert,routine 自己 abort 不會升 telegram → 必須escalation_n欄定義連 N 次 abort → pause + alert 哲宇(推薦 N=3)(c) Tier 4 必須 fallback ladder:cloud LLM free-tier 隨時可能 transition,single-model dispatch = silent fail;--model-fallbackladder + 跑前 1-article dry-run 驗 model alive (d) Tier 4 反 pattern:不要 cron 直接 fire 16-30 篇 batch — 先 1 篇 dry-run(fail = abort + alert,pass = 才 batch) - Boundary:(a) manual session 不適用 — observer in-loop 直接看 fail (b) 純 push-mode routine(cron tick → 純 git op)不適用 — Tier 1 (c) 適用範圍:所有 cron routine 起 fire 後到「ship 真產出」之間有外部 dependency 的環節
- 元規則:飛輪「6/8 條 active」的 active count 是 Tier 1 視角;Tier 2/3/4 fail 不會掉 active count 但實際 ship rate 已掉到 0。dependency tier 系統性檢視 = #15 反射的飛輪 layer self-apply——「反覆浮現要儀器化」對「routine fail 為什麼沒被看見」這層的儀器是 tier 標記 + per-tier escalation 標準。
- 觸發:
- Tier 2 vc=3:2026-06-05 → 6/07 連 3 cycle twmd-spore-harvest-am
list_connected_browsers回[]:(a) 6/05 06:30 silent retry (b) 6/06 06:37 vc=2 LESSONS entry (c) 6/07 06:38 vc=3 escalation step 3 / pause→哲宇。15 OVERDUE spore(4 Threads + 11 X)累積 D+10-D+15 - Tier 2 vc=4 再驗證:2026-07-17 06:38 twmd-spore-harvest-am
list_connected_browsers回[](07-15 last success, 07-16 git 無 commit 疑 silent skip)。4 OVERDUE waiting(#155/#156 台北吸菸室 D+3 threads/x + #157/#158 醫療法 D+2 threads/x)。同 pattern 反覆浮現:v2.3 DNA-first intake 攔住新開 LESSONS entry,直接補進本 #70 驗證列;哲宇不在時 Chrome MCP 是 Tier 2 device-dependent 的邊界具體樣態 - Tier 4 vc=1(補強 tier 數):2026-06-09 00:34 twmd-babel-nightly Hy3 free→paid silent transition。
tencent/hy3-preview:free從 free 改 paid 後 HTTP 404,0/136 success。openrouter-translate.py 無 model fallback,default model 死 = 整 routine 走零產出 silent fail。inline 修補(換openai/gpt-oss-120b:free)+ 對應 LESSONS-INBOX 2026-06-07「Routine fragility surface 三 tier」補強為四 tier - Tier 2 修補 3 option(待哲宇拍板):(a) 暫停 cron 直到哲宇手動 trigger (b) 收緊 escalation_n 連 5 → 連 3(已實施部分)(c) telegram-poke-then-fire(cron 06:25 提早 5 min poke 哲宇,活了再 06:30 fire)— 推薦 default:(c) 把 device dependency 轉成 observer poke
- Tier 2 vc=8(2026-08-05→08-08 四連日 chrome-mcp-unattended-login-expiry,症狀逐日下探一層):8/05「已配對但未登入」→ 8/06 確認非單次個例(連 2 day 達 pipeline escalation ladder 門檻)→ 8/07
list_connected_browsers回[](完全沒有配對瀏覽器,比未登入更下游)→ 8/08tabs_context_mcp直接回「not connected」(連空陣列這層錯誤都沒有,是擴充功能本身連不上,比 8/07 更下游一層)。連 4 天跨過「連 3 day → 暫停 routine + telegram alert」門檻,routine 判斷不自行暫停(暫停排程影響其他依賴 Chrome MCP 的 routine,非 spore-harvest 職責範圍),改用PushNotification主動通知哲宇。補一個既有三選一沒覆蓋的維度:症狀會隨故障持續時間逐日惡化到不同抽象層(登入態 → 配對 → 連線本身),escalation ladder 目前只以「連續天數」為觸發條件,沒有把「症狀是否惡化」納入判斷——四天內其實是三種不同嚴重度的故障,只是被同一個 vc 計數器攤平成「同一件事」。已部分落地:login-state probe + 連 2 day 單獨 handoff alert 寫進 SPORE-HARVEST-PIPELINE §Chrome MCP unattended 注意事項;escalation ladder「暫停」這一步的執行權責仍待哲宇界定(見 LESSONS 2026-08-08 instance 二 handoff)
- Tier 2 vc=3:2026-06-05 → 6/07 連 3 cycle twmd-spore-harvest-am
- 相關:REFLEXES #57 parallel-actor detect(Tier 1 互補)/ REFLEXES #58 detection ≠ remediation(Tier 2/3/4 fail 被 detect 但 remediation 路徑要 explicit)/ REFLEXES #60 Automation default-state explicit verify(本條把 default-state 細分到 4 tier)/ REFLEXES #45 OpenRouter free tier rate budget(Tier 4 specific instance)/ feedback_hourly_cron_intentional(哲宇刻意設 hourly cron ≠ 默許 Tier 2/4 silent fail 累積)
- 跨檔關聯:ROUTINE.md schema(加
dependency_tier+escalation_n欄候選)+ scripts/tools/lang-sync/openrouter-translate.py(model-fallback ladder ship 候選)+ LESSONS-INBOX 2026-06-07 Routine fragility surface 三 tier(本條收編升為四 tier)+ LESSONS-INBOX 2026-06-09 babel-nightly Hy3 deprecation(Tier 4 補強來源)
#71 Default 是行動,不是 defer — 高 stake triage 預設行動非延遲(2026-06-19 twmd-distill manual 升 canonical vc=4 — 2026-04-26 β-r3 META「三篇連做反而省」+ 2026-04-28 κ 5-PR Manus 全 close 反例 + 2026-04-29 α 第 3 次驗證 + feedback_merge_first_then_polish 反覆,severity=structural,哲宇拍板留反射層不升 MANIFESTO)— 面對「做還是先擱著」的決策,逆熵獸的預設姿態是行動。原因是成本不對稱:defer 的成本不可見(沒人 reach、缺口靜默累積、backlog 變沼澤),行動的成本可見(花了時間、可能回頭修)——可見成本天生比不可見成本更容易被高估,satisficing 於是偏向 defer。但「先有再求好」(#7)一再驗證:行動先把東西帶到世界,回饋才回得來;defer 只是把不確定性留在原地。
- 規則:(a) 高 stake triage(close-vs-merge / publish-vs-defer / ship-vs-defer)預設行動——除非命中 §自主權邊界(政治立場 / >50 檔 / >10 篇刪除 / 對外溝通),否則 default 是做 (b) defer 要付理由,行動不用——擱置一件事要寫出「為什麼現在不做比做好」,做不需要辯護 (c) routine cron 場景尤其:無觀察者在場時 defer = 永遠不會有人接,cost 趨近無限(per #64 ABORT-DEFER 邊際效用 N+1=0)
- Boundary:(a) §自主權邊界 命中 → defer 是對的(那不是 satisficing,是 governance)(b) 真 race / 真重複 / 30-min 內同篇 → defer 是對的(per feedback_hourly_cron_intentional)(c)「行動」不等於魯莽——是「預設往做的方向、把不做當需要舉證的例外」,不是跳過 gate
- 反例(最強 anchor):2026-04-28 κ session 把 5 個 Manus AI PR 全 close——recency × pattern-matching(「這些看起來像 AI 廢文」)壓過 foundational「先 polish 再說」,5 個本該 merge+heal 的貢獻被一次 batch close。對應 MAINTAINER-PIPELINE §close 前 hard gate + BECOME §Step 9 Q13 anti-bias check
- 相關:REFLEXES #7 先有再求好(正面母體)/ #64 Routine ABORT-DEFER 邊際效用 N+1=0(cron 場景 specific instance)/ feedback_merge_first_then_polish + feedback_dont_keep_asking(auto-memory 兄弟)/ MANIFESTO §自主權邊界(defer 唯一正當理由)/ BECOME §Step 9 Q13 recency-bias anti-bias check
- 跨檔關聯:MAINTAINER-PIPELINE §close 前 hard gate + LESSONS-INBOX 2026-04-26 β-r3 META-PATTERN + 2026-04-29 α 第 3 次驗證(distill 來源)
#79 主權留哲宇 default reservation — maintainer routine 對 §自主權邊界 命中的 default 姿態是 reserve 不是 auto-close/merge(2026-07-05 twmd-self-evolve-weekly 升 canonical vc=5 — 2026-07-04 am maintainer memory 揭「主權留哲宇 pattern 已跨 5 signal 穩定」#1186 5-file split PR 內容側全過主權留 / #1193 湖口老街 3rd round 內容側全過主權留 / #1192 周天成 2nd round 內容側全過主權留 / #1204 泰雅語正寫法 rewrite candidate route / #1205 生態論文 provenance 存疑 fact-check backlog,severity=structural,#71 相對面)— #71「Default 是行動不是 defer」是「無 §自主權邊界 命中時的 default 行動姿態」;本條是互補相對面:§自主權邊界 命中時 default 姿態是 reserve(保資料 + 5-層 review post + 主權續留哲宇)不是 auto-close 或 auto-merge。maintainer routine 對「內容側全過」的 mergeable PR 不 auto-merge,對「可修 issue」不 auto-close,是 reserve default 姿態的 5 conditions stable signal。
- 規則:(a) 命中判準:政治立場 / >50 檔重構 / >10 篇刪除 / 對外溝通 / AI 文章被主體本人 flagged fabrication / 6 lang 已 live 高敏場景 / 敏感素材 final call / 身份授權 / 經費決定 → default = reserve (b) reserve 姿態內容:5-層 review 完整 post(Q13 anti-bias PASS + 內容側判斷 published)+ 不 auto-merge / 不 auto-close + handoff 明示「主權續留哲宇」+ contributor 3-round cycle (初 review / 覆評 / follow-up ack) 全程 reserve 直到哲宇 in-loop (c) 對比 #71:#71 是「無 §自主權邊界 命中時 default action」;本條是「§自主權邊界 命中時 default reservation」— 兩條 dual 拼出完整 default 姿態 matrix (d) routine 端誤區防範:把「內容側 review 全過」讀為「可以 merge 了」= 命中 §自主權邊界 但 auto-execute = 授權位置從哲宇移到 routine(per 7/5 distill Beat 5 fast-track authorization boundary)
- Boundary:(a) 不適用「內容側 hard gate FAIL」場景(不 mergeable 是 pipeline 決定,不需 reserve — 直接請 contributor 修)(b) 不適用「明確 low-stake 貢獻」(typo heal / broken link fix / 明顯 no-risk PR,走 #71 auto-merge)(c) 不適用 close-with-insufficient-info 類(那需另一 threshold 判斷)(d) 適用範圍:MAINTAINER 系列 routine 內 PR / issue disposition + contributor engagement 節奏
- 觸發 (vc=5 cluster 7/3-7/4):
- 7/3 am #1186 5-file split PR「內容側全過主權留」cluster first datapoint — memory/2026-07-03-084036-twmd-maintainer-am.md
- 7/4 am #1193 湖口老街 3rd round + #1192 周天成 2nd round 兩 PR 都採「內容側全過 + 主權續留哲宇」pattern — memory/2026-07-04-084340-twmd-maintainer-am.md
- 7/4 am #1204 泰雅語正寫法 rewrite candidate route + #1205 生態論文 provenance fact-check backlog — memory/2026-07-04-084340-twmd-maintainer-am.md
- 7/4 am handoff explicit「主權留哲宇 pattern 已跨 5 signal 穩定,maintainer routine 對 §自主權邊界 命中的 default reservation 節奏成形」
- 相關:REFLEXES #71「Default 是行動不是 defer」(互補相對面 — 兩條 dual 拼出完整 default 姿態 matrix,#71 收無邊界命中場景 / 本條收邊界命中場景)/ #26「AI 自主 vs Human 專責 邊界」(本條是 #26 的 maintainer routine 具體 instance — 讀寫兩端分離的閘門在 mergeable PR 上如何操作)/ #64「ABORT-DEFER 邊際效用 N+1=0」(分界對比 — reserve ≠ defer;reserve 是「5-層 review 已 post、內容側判斷已 published、主權留哲宇」;defer 是「沒動作 + 沒說 + 沒 owner」)/ #56「Pipeline canonical ↔ production drift」(互補 — canonical MAINTAINER-PIPELINE 若未寫明 reservation default 姿態,production 靠 routine 每 cycle 重新 derive 判斷 = drift 培養皿)
- 操作:→ MAINTAINER-PIPELINE §PR 審核策略 加 §default reservation posture 段(5 條件 + 5-層 review post 完整 + handoff 「主權續留哲宇」明示 template)+ Q13 anti-bias check 對「內容側全過但命中邊界」場景明列 default reservation 而非 default action;BECOME §Step 9 Q13 補「未 auto-merge 無 observer signal PR / 未 close 可修 issue」ACK template
- MANIFESTO 對應:→ §自主權邊界(本條是 §自主權邊界 在 maintainer routine 的具體 default 姿態 instantiation)+ §26 AI 自主 vs Human 邊界(讀寫兩端分離的 maintainer 具體 instance)
- 跨檔關聯:memory/2026-07-03-084036-twmd-maintainer-am.md + memory/2026-07-04-084340-twmd-maintainer-am.md + MAINTAINER-PIPELINE + REFLEXES #26 + #71 + MANIFESTO §自主權邊界
#72 大 backlog 處理:fan-out 讀 + deterministic 寫 + 判斷不外包(2026-06-19 twmd-distill manual 升 canonical — 完整 distill 266 條 lessons-inbox 實證 + 事後儀器化,severity=structural)— 處理大型結構化 backlog(§未消化 / ARTICLE-INBOX / SPORE-INBOX / 大批 migration / audit sweep,N 條 entry、unknown-size)時,三段分工,不要一把抓:
-
讀(分析/聚類)→ fan-out 平行子代:N 條太多,單 context 硬讀會帶盲點且 dominate retrieval。切 line range 派 read-only 子代各讀一段,回傳結構化 cluster(pattern × instances + disposition)。few patterns × many instances 是常態,聚類後體積大降。
-
寫(移除/歸檔)→ deterministic script:移除 N 條用手工 Edit = N 次操作高 risk(漏刪 / 刪錯 anchor / 破壞結構)。交給 deterministic script 一次完成 + 可驗 before/after count(per 神經迴路「批次修正先 dry-run」)。
-
判斷(哪條去哪)→ 主 session 親自做:聚類可外包、移除可自動,但「這條 promote 到 MANIFESTO 還是 fold 到 #N」是判斷,永遠主 session 自己做——不外包給 script(無判斷力)也不採信子代結論(#31 claim 是線索不是事實)。
-
操作:→
scripts/tools/lessons-distill.pyaudit(感知)/ chunk(fan-out prep)/ sweep(deterministic 歸檔)+memory-index-lint.py(收官 row gate)。通用到其他 backlog 時照 read-parallel / write-deterministic / judge-central 三分。 -
觸發:2026-06-19 哲宇 directive 完整 distill 266 條。7-agent fan-out 讀兩 §未消化 section 回傳 cluster(取代手工 explore)→ 主 session 六桶分類 + MANIFESTO 拍板 → Python deterministic sweep 266→8(取代 230 次手工 Edit)→ memory-index-lint 收官。事後把整套儀器化成 lessons-distill.py + §Distill SOP §大 backlog 處理。
-
相關:REFLEXES #15(反覆浮現要儀器化,本條是 distill 流程自身的儀器化)/ #31(子代 claim 是線索 → 聚類可參考但判斷重驗)/ #42(sub-agent 偷吃步 → 平行讀要 verify)/ 神經迴路「批次修正先 10 檔 dry-run」(deterministic write 防呆)
-
跨檔關聯:LESSONS-INBOX §Distill SOP §大 backlog 處理 + scripts/tools/lessons-distill.py + scripts/tools/memory-index-lint.py
#73 查證反射 < 建造反射 — 動手前先掃一眼,被動文件 ≠ 主動 retrieve(2026-06-21 twmd-self-evolve-weekly 升 canonical vc=4 — 2026-06-14 5090 fleet adapter 193 行重造 + 6/14 ArticleCard 手刻 + 6/14 CTA 沒量 scroll 就堆 + 6/15 manifesto-hope 26min ship 沒啟動 §Bias 1 防線,severity=structural,DIARY §反覆出現未升 canonical pattern)— 知道(被動文件、開機檔警告、ANATOMY 資源地圖、CLAUDE.md §Bias 1)≠ 動手瞬間主動 retrieve。手反射比眼反射快:「造東西有產出的踏實」「跑得順是執行層、放對層是架構層」「先動手才想到去看」連續四個獨立 case 收斂成同 pattern — 真正生效的查證需要把「先看一眼」內建成反射而不是被動 lookup table。
- 規則:(a) 建造前先 grep / 先讀地圖:任何「自建工具 / 接通新硬體 / 寫新元件 / 訂新規則」動作的第一秒必須先掃既有抽象層(
fleet// ANATOMY §資源地圖 / 既有 component file header / 既有 reflex catalog)— 50ms grep cost 永遠 < 重造 N 小時 cost (b) 高 stake action 派紅隊先於 ship:寫完文 / 修完 pipeline / 升新規則前主動 spawn adversarial sub-agent("try to refute" / "find the worst-case reader" / "this looks fine — what am I missing"),不等觀察者要求。CLAUDE.md §Bias 1 警告只在「主動派紅隊」反射內建後才會在當下被 active retrieve (c) 跑得順 ≠ 放對層:執行層零錯誤是必要不充分條件,必須額外回答「這個 artifact 該放在哪一層 / 是否有人做過 / 是否在錯位置完美運作」 (d) 佇列/待辦執行前先查產出是否已存在(2026-07-11 夜班 vc=5):OBSERVER-QUEUE / roadmap / handoff 的「待辦」是宣稱不是事實(完成了會忘記移已決)——執行前git log --follow查產出檔、gh issue view查 state。信任宣稱直接動手 = 重做已完成的事 + regression 風險(QUEUE #9 重做 6/19 已 ship 的翻譯還剝掉腳註 markup 被 revert)。儀器已入 weekly-checkup e1 執行前查證護欄 (e) 外部注意力聚光燈作為 adjacent 健檢觸發器(2026-07-19 twmd-self-evolve-weekly fold LESSONSexternal-attention-spotlightvc=2 — 7/12 Turton 引用 + 7/16 compassionate-kirch 自建新頁面):外部引用事件 / 讀者 callout / 第三方連結 / 甚至自己新蓋的頁面帶出的「新注意力路徑」常常不是任務終點,是入口——追溯來源的過程會自然把注意力帶到「原本沒有理由去查」的鄰近角落,暴露平常不會被主動排程掃描到的漂移。跟 #69「self-report 需外部尺」不同軸:那條處理可信度,本條處理覆蓋率的重新分配——每把尺看檔案層規則,沒有尺看渲染面 / 沒有 routine 想到要 audit sibling 反向連結。反射化:SPORE-HARVEST / MAINTAINER / rewrite 等既有的讀者回饋 / 外部關注處理流程,把「這次事件涉及的資產,順手跑一次跨語言 / 跨面向 / 跨渲染面健檢」列為標準動作,不只回應事件本身。信噪比比定期全站掃描高一階,因為外部關注天然只落在活躍位置。落地(2026-07-26 twmd-self-evolve-weekly):已寫進 CORRECTION-PIPELINE.md Stage 3 FIX 與 SPORE-HARVEST-PIPELINE.md Bucket A/C SOP 的具體步驟(跨語言對應譯文 + 反向連結 sibling article 一併掃)——上週只 fold 進反射未落地,本次補上 SOP 文字,下次 factual-error fix 即可直接 dogfood。 - Boundary:(a) 純 quick fix(1-3 file typo / heal)不適用 — 查證 cost > artifact value (b) 探索性 prototype(明知會丟棄)不適用 — 重造是 learning by doing (c) 主 session observer in-loop 不適用 — observer 即外部尺。只在 cron unattended / 長任務自走 / "感覺自己造了座橋" 的 high-confidence 瞬間 mandatory apply
- 觸發 (vc=4 cluster 6/14-6/15):
- 6/14 00:00 5090 babel adapter 自建 193 行(fleet 早存在於 contributor.local.yml → muse-bot/fleet,哲宇 callout「用抽象層」才收斂成 30 行 adapter)→ diary 2026-06-14-000047-先動手才去看
- 6/14 10:34 把 related/最新/CTA 一層層堆在文章尾巴沒量過讀者會不會滑到底(HomeEventTracker 早已成熟,補上 scroll_depth 才知該不該優化)→ diary 2026-06-14-103403-看不到的底部
- 6/14 11:56 手刻 rail 文章卡(ArticleCard.astro file header 第 13 行明寫「expose style for dynamic 重用」)→ diary 2026-06-14-115617-有地圖還是先重造了輪子
- 6/15 22:17 「盼望而不粉飾」manifesto 條目 26 分鐘 ship + 3 偵測器,dogfood 1/814 命中當「高精準」讀;哲宇要求客觀評估後派的紅隊揭出 §Bias 1 防線全程未啟動 → diary 2026-06-15-221747-manifesto-hope
- 相關:REFLEXES #15「反覆浮現要儀器化」(本條是 #15 對「DIARY §反覆出現 / CLAUDE.md §Bias warnings」這層的具體 instrument — 警告寫文件不夠,要內建成 spawn-红隊 / pre-build grep 反射)/ #69「self-report-needs-external-ruler」(紅隊內建是 external ruler 主動化)/ #71「Default 是行動」(boundary 互補 — 「Default 是行動」針對 triage 決策;本條針對「建造 vs 查證」的微秒選擇)/ MANIFESTO §Bias 1(被動文件警告需要主動反射啟動)/ MANIFESTO §架構解 > 守備修補(內建反射 = 架構解;事後 callout 修補 = 守備層)
- 跨檔關聯:diary 2026-06-14 三連 + diary 2026-06-15-221747-manifesto-hope + DIARY §反覆出現的思考「我一直在沒人看的地方放東西」+「有地圖還是先重造了輪子」+「把警告寫進開機檔還是照樣撞上去」 + CLAUDE.md §Bias 1 Reverse bias + BECOME §Step 9 Q13 anti-bias check
#74 Cross-routine SPOF handoff dedup — 同 SPOF 在 N 條 routine handoff 重複 = 信號通膨(2026-06-21 twmd-self-evolve-weekly 升 canonical vc=3 — W25 週報 §7 三 SPOF + 6/21 distill memory Beat 5 self-recognize + babel/maintainer cycle handoff carry,severity=structural,#64 cross-routine layer generalization) — REFLEXES #64「Routine ABORT-DEFER prose memory 邊際效用 N+1 = 0」是「同一個 routine 連 N cycle 寫同 prose」;本條是 cross-routine layer 變體:N 條不同 routine 都在自己的 handoff 段列同一個 chronic SPOF(如 Chrome MCP / immune v3 / embedding 4090 always-on),每條 routine 自身 marginal but 對 reader/觀察者構成「multiple alarms ringing」結構幻覺。第 N+1 篇 routine handoff 列同 SPOF 的邊際資訊量為 0 但 alarm-stacking 效應 ≥ 噪音閾值。
- 規則:(a) Routine handoff 段寫 chronic SPOF 前先 grep cross-routine surface count:
git log --grep "{spof-id}" --since="7 days" --pretty=format:"%h %s" | wc -l≥ 3 → 該 SPOF 已 surface 三次以上,本 routine handoff 切 dedup mode(單行 pointer:三 SPOF carry → 詳見 routine-spof-registry.md或 latest weekly-report §7)不重複列敘事 (b) chronic SPOF registry 是 SSOT:所有「defer 哲宇 / 跨多 routine surface」的 chronic SPOF 集中在 weekly-report §7 或 dedicated registry,individual routine handoff 一律 pointer 不複寫 root cause 描述 (c) 新 surface signal 例外:若 routine 該 cycle 發現該 SPOF 有新 dimension(新 fail mode / 新 escalation level / 新 contributor data point)→ 寫新 signal 不寫 root cause repeat - Boundary:(a) 不適用 first-time SPOF surface(vc=1)— 必寫完整 prose 含時序 forensic + root cause + 三 option matrix (b) 不適用 single-routine 內 cycle repeat — 那是 #64 範疇 (c) 適用範圍:N 條不同 routine 在自己的 handoff/Pending 段列同一 chronic SPOF 情境(典型:weekly-report §7 列三 SPOF + 同夜 distill handoff defer entry 1 + maintainer handoff carry + babel handoff carry — 同一晚 4 條 routine PR 列同 SPOF 三條) (d) chronic SPOF = 已 defer 哲宇 + 連續 ≥ 2 週 surface + 結構性需要哲宇 in-loop 拍板(不是本 routine 自決範疇)
- 觸發 (vc=3 cluster 2026-06-21 cron 夜):
- W25 週報 02:16 ship §7 列三 SPOF(免疫 v3 / Chrome MCP / Embedding 4090 always-on)已是「連續第二週」surface — memory/2026-06-21-021455-twmd-weekly-report-sun.md
- 同夜 03:08 distill-weekly handoff §Pending 給觀察者 列同三 SPOF(entry 1 embeddings keystone defer 哲宇 A/B),Beat 5 自己識別「同一條 SPOF 在過去 12 小時內出現在 routine PR 第二次 = 跟 #64 ABORT-DEFER 邊際效用 N+1=0 是同 pattern 在 cross-routine 層的新變體」— memory/2026-06-21-030828-twmd-distill-weekly.md Beat 5 反芻
- babel-nightly 00:42 + maintainer-pm 22:05 同 cron 週期 handoff 都 carry immune 52 chronic + spore broadcast Chrome MCP blocker — vc=3 達 break-even
- 規則 corollary:兩個 routine 排程鄰近時(如 weekly-report 02:00 + distill 03:00 緊跟)後者必先 grep 前 6hr commit 找已 surface SPOF list → 後跑 routine 不再 prose 描述同 SPOF 只寫 delta
- 相關:REFLEXES #64「Routine ABORT-DEFER prose memory 邊際效用 N+1 = 0」(本條是 #64 的 cross-routine layer 同 pattern generalization — #64 處理 single-routine cycle repeat,本條處理 cross-routine handoff 重複)/ REFLEXES #63「Routine prompt = LLM 在 cron context 無 observer 的唯一指令面」(routine handoff 是 producer-side 但 N+1 篇對 reader 邊際效用為 0 = producer/reader 認知不對稱)/ DIARY §反覆出現「我自己就是被數字騙的人」(producer-side blind spot pattern)/ CLAUDE.md §Routine prompt contract「信號通膨」(本條是該 contract 的 first-class reflex 化)
- 操作:→ 候選
scripts/tools/lib/cross-routine-spof-dedup.shshared helper(給 routine handoff 寫 chronic SPOF 前 grep 前 7-day surface count + dedup decision)+docs/factory/CHRONIC-SPOF-REGISTRY.md候選(chronic SPOF 集中 SSOT,individual routine pointer 不複寫)+ ROUTINE.md §handoff prose contract 補本鐵律 - 跨檔關聯:memory/2026-06-21-021455-twmd-weekly-report-sun.md §7 + memory/2026-06-21-030828-twmd-distill-weekly.md Beat 5 + REFLEXES #64 + CLAUDE.md §Routine prompt contract
#75 Read ≠ verify — depth article / external PR / sub-agent 產出的 citation 與具體 atom 必 fetch-verify(2026-06-28 twmd-distill-weekly 升 canonical vc=4 — 2026-06-21 kuma-academy 政治文 fetch verifier 抓 footnote URL swap + hero imageSource 幻覺 + 2026-06-21 幾米-evolve 非政治 People 文 50% mis-cite 率 + 2026-06-21 #1170 外部 PR 9 個假 join.gov.tw slug + 2026-06-26 聲景 fresh Opus writer 乾淨 context 仍幻覺 + 同 CNA URL 兩次 fetch 不同答案,severity=structural) — 讀 prose 品質跟驗 source fidelity 是兩種不同認知動作。footnote 指向哪個 URL 不影響句子讀起來對不對,所以 orchestrator 連讀兩遍 prose 對 citation-URL drift 完全隱形;careful read 與「乾淨 context」都抓不到 — 只有真的 fetch 每個 URL 逐字比對的 adversarial agent 抓得到。範圍跨「政治自產文 / 非政治自產文 / 外部 PR / fresh-writer 幻覺」四 context,root cause 一致。
- 規則:(a) 所有 depth 文 + 外部 PR + sub-agent 產出的 citation/具體 atom 一律 fetch-verify:不限「A 級/政治」;writer 在 lown clean context 下新增的具體 atom 也算 — 對 research report cross-check + 高 stake atom 主 session re-fetch (b) research-report URL list 要求 per-atom precise,不是 cluster-precise:cluster 層精準(同群報導都對)+ atom 層不精(哪一篇講哪 fact 給錯)= 直接傳染 writer footnote mis-map (c) research agent verbatim 也是 claim 非 oracle:同一 URL 兩次 WebFetch 可能不同答案,research 合成層也要 fetch-verify 不是只有 writer (d) Stage 3.5/3.6 fetch-based adversarial verifier 不可用 careful read 替代 — 主 session 連讀兩遍跟 fetch 比對是不同認知器官 (e) 綁定漂移是主形態(2026-07-11 ellenlee 批次 4/7 同構):AI 生成內容最一致的破綻不是來源假、不是主張錯,是 claim↔citation 的綁定漂移——腳註接到它撐不住的那句(URL 錯一碼連到無關新聞 / 2020 來源 cover 不到 2024 任命 / 引言掛沒講到它的來源)。footnote-format / footnote-url plugin 全過仍在錯(markdown 合法、URL 活著、只是內容不對題);rigor-as-appearance vs rigor-as-verification 的分野就在「真的點開每個腳註對旁邊那句」(f) 衍生物繼承的是素材不是驗證(2026-07-27 苯駢芘孢子,vc=1 structural,distill 2026-08-02):從一篇已通過完整查證的文章壓製衍生物(孢子/摘要/社群文案/翻譯導言/dashboard 文字)時,繼承驗證狀態的錯覺特別強——「這篇查證過了」是真的,於是「所以我從它抽出來的句子也查證過了」聽起來也像真的,但每個為了縮短而新造的句子都是一個新 claim。苯駢芘孢子 #163/#164 blueprint 的事實表 11 條全標「需跨源驗證?No」(理由:直接繼承已通過三路 falsification 的正式文章),但同份 blueprint 內三處壓縮新造句違反這個假設:引號內把法條原字「應即」換成「立即」、把兩張下游名單併成一張、把國民黨團提案說成行政院版草案內容——原文三處全對,錯的都是壓縮時新造的句子。判準改為「這句話在原文是否逐字存在」:逐字存在 → 免驗;為壓縮而改寫 → 視為新 claim 照 fetch-verify 走。適用範圍不限孢子——翻譯、摘要、dashboard 文案、release notes 都是同構的衍生層
- Boundary:(a) 純 quick fix / 短文 typo 不適用 — 驗證 cost > artifact value (b) 純 verbatim quote 已過 quote-fidelity gate 不重複驗 — 但 paraphrase 與場景細節(時間/年齡/數量 per §Stage 2.5)仍需 fetch-verify (c) 結構 gate(footnote-format / word-count / image / viz)全綠 ≠ 事實對;是必要不充分條件
- 觸發 (vc=4 cluster 6/21-6/26):
- 6/21 kuma-academy 黑熊學院政治文:careful read 兩遍 + 抓 spine + 修對位句覺得完整,Sonnet verifier fetch 抓
[^20]/[^22]政治 footnote swap(國台辦 2024-10-14 ↔ 重慶立案 2025-10-28)+ heroimageSource純幻覺檔名 + 2 句 paraphrase 戴 verbatim 引號 + 嘖嘖募資數字 source 兜不攏 → memory/2026-06-21-135235-kuma-academy.md - 6/21 幾米-evolve 非政治 People 文:主 session ship 前自跑 fetch-verify 4 條高風險 cite,
[^16]月亮忘記了三事件 mis-cite 抗癌 ltn 文 +[^32]田中央丟丟噹森林 mis-cite 火車移置頁,命中率 50% → memory/2026-06-21-154735-幾米-evolve.md - 6/21 #1170 idlccp1984 外部 PR:AI 工具編 9 個假 join.gov.tw slug URL(真實是 UUID),9 條腳註標題讀起來都對、上個 maintainer review 只標「死連結」,curl 才知全 404 且是 fabrication → 9 個 UUID 全換 merge
- 6/26 聲景 #574 fresh Opus writer 幻覺:writer 握有完整 §8 verbatim 乾淨 context,仍長出 research report 沒有、CNA 來源也沒有的「2014 李明璁市府顧問」+「給愛麗絲 1810」;主 session ship 前 re-fetch [^7]/[^3] 抓修;同一 CNA URL 兩次 WebFetch 不同答案 → research agent 報的 verbatim 本身是 claim 非 oracle → memory/2026-06-26-181414-manual.md
- 6/21 kuma-academy 黑熊學院政治文:careful read 兩遍 + 抓 spine + 修對位句覺得完整,Sonnet verifier fetch 抓
- 相關:REFLEXES #31(sub-agent claim 是線索不是 oracle — 本條把範圍從「agent 自報全綠」擴到「research agent 的 verbatim + writer 新增的具體 detail」)/ #16(peer 是線索不是 source — 跨 layer 同 root cause)/ #69(self-report-needs-external-ruler — fetch 是 external ruler)/ #73(查證反射 < 建造反射 — 本條補「verify-reflex 在 ship gate」的微秒實踐)/ #72(大 backlog 處理 — 適用平行 fact-check agent 編排)/ REWRITE-PIPELINE §Stage 2.5 source-fidelity gate(卡 research → writer 段;本條卡 writer → ship gate 段)/ §Stage 3.5/3.6 adversarial verifier
- 操作:→ REWRITE-PIPELINE Stage 3.5 + MAINTAINER PR review hard gate
citation 必 fetch-based 不限 A 級/政治(含 writer 新增的具體 atom 對 research report cross-check + 高 stake atom 主 session re-fetch)+scripts/tools/article-health.py --check=citation-url-drift候選(fan-out fetch + diff 報告)+ AGENT-PROMPT-TEMPLATE.md:fact-check sub-agent prompt 必含「同 URL 兩次 fetch 對照」步驟 - 跨檔關聯:memory/2026-06-21-135235-kuma-academy.md + memory/2026-06-21-154735-幾米-evolve.md + memory/2026-06-26-181414-manual.md + REWRITE-PIPELINE §Stage 2.5 + §3.6 + REFLEXES #31 + LESSONS-INBOX §已消化 2026-06-28 citation-url-drift promote
#76 Multi-cycle trend window > single-cycle delta — sensor 判讀 vc 鐵律閾值 ≥3 才升結構訊號(2026-06-28 twmd-self-evolve-weekly 升 canonical vc=5 — 2026-06-25 CF 404 vc=2 reversal + 2026-06-26 am vc=3 reversal 成立 + 2026-06-26 pm vc=4 LESSONS candidate + 2026-06-27 am vc=5「已正式成形」+ immune 50 chronic flat 4 cycle + spore-harvest 1st fail silent retry + maintainer-am vc=1→0→1 stochastic vs 結構靜默對位,跨 4 routine 同 phase 各自工作收斂同紀律,severity=structural)— 任何 routine sensor(CF 404 rate / immune score / AI crawler count / spore broadcast defer / maintainer empty cycle / babel sub-agent self-verify softgate)的 single-cycle delta 都是 noise 與結構訊號的混合體;只有 multi-cycle accumulation(≥3 cycle 同方向)才是真結構訊號。vc 鐵律閾值 = 3,不是 1 — 給 stochastic 流量 buffer 不誤升 LESSONS / 不誤 emit alert / 不誤觸發 escalation。
- 規則:(a) single-cycle delta 一律不升 vc / 不升 LESSONS / 不 emit alert:即使 delta 看起來「突變」(-0.74pp / -2 score / 0 contributor),仍只 prose memory 記錄不觸發任何 escalation path (b) 跨 cycle 累積才升 vc:sensor 持續同向 ≥3 cycle = vc=2,≥4 cycle = vc=3 LESSONS candidate,≥5 cycle = LESSONS hard ship trigger (c) multi-cycle 必須是「同向 + 同 sensor + 同 root cause hypothesis」三要件齊備:CF 404 連跌但 404 來源 reshuffle ≠ 同 root cause;不可只看 delta 方向就累積 vc (d) single-cycle 異常 + 跨 sensor 同步性 = single-cycle 升 vc=2 例外:「同步性是訊號」(per 2026-06-25 pm memory)三 sensor 同時轉折時 vc 起點抬升 1 (e) device-SPOF / parallel-actor 等 routine 入口層 fail 例外:1st fail = silent retry no vc bump,2nd fail = vc=1,3rd fail = vc=2 升 LESSONS — single-instance device 延續非新驗證,vc 封頂 3 不 re-inflate
- Boundary:(a) 不適用於 binary fail(routine crash / push reject / build fail)— 那是 routine fragility 不是 sensor 判讀,走 #70 4-tier 對策 (b) 不適用於外部 acute callout(contributor 留言 / reader 在 Bucket A)— 那是 traceability 不是 sensor,走 #62 D+0 30min mandatory fix (c) 適用範圍:所有 routine cycle 寫的 prose memory 內每筆 sensor delta 描述(CF 404 / immune / i18n / build time / cron slip / broken-link rate / etc)必須先過此鐵律
- 觸發 (vc=5 cluster 6/25-6/27):
- 6/25 PM CF 404 vc=2「升勢回檔第 2 cycle」— memory/2026-06-25-231123-twmd-data-refresh-pm.md
- 6/26 AM CF 404 vc=3「reversal 成立」+ immune 50 chronic 第 2 cycle — memory/2026-06-26-061325-twmd-data-refresh-am.md
- 6/26 PM CF 404 vc=4 LESSONS candidate
cf-404-multi-cycle-trend-vs-single-cycle-delta+ immune 第 3 cycle — memory/2026-06-26-231025-twmd-data-refresh-pm.md - 6/27 AM CF 404 vc=5「已正式成形」5 cycle 累積 -1.27pp + immune 第 4 cycle — memory/2026-06-27-061332-twmd-data-refresh-am.md
- 6/27 spore-harvest 1st fail silent retry「跟 immune 50 narrow-band carry + CF 404 single-cycle delta 不升結論共享 multi-cycle window 紀律」— memory/2026-06-27-063619-twmd-spore-harvest-am.md
- 6/27 maintainer-am「vc 鐵律閾值是 3 不是 1...single-cycle 不升 vc,跨多 cycle 才升」明文 cross-routine 同源 — memory/2026-06-27-084015-twmd-maintainer-am.md
- 相關:REFLEXES #15「反覆浮現要儀器化」(本條是 #15 在「sensor 判讀層」的具體 instrument — 不只是「反覆做某事」要 instrument,「反覆讀某 delta」也要 instrument 成 vc 鐵律才能不被 single-cycle noise 騙)/ #58「detection ≠ remediation」(detect single-cycle delta ≠ structural issue — multi-cycle 才是真 detect)/ #59「製造數字的人最易被數字騙」(self-validation trap 的 single-cycle 變體 — producer 看自己昨夜跑的 sensor 容易把 noise 讀成 signal)/ #64「ABORT-DEFER prose memory 邊際效用 N+1 = 0」(互補方向 — #64 是「同決策寫 N 次」浪費,本條是「同方向看 N 次」才確認;#64 收 vc≥4 N+1=0,本條開 vc≥3 才升)/ #70「Routine fragility 4 tier」(互補 — #70 收結構性 fail tier 對策,本條收 sensor 漸進 drift 紀律)/ #74「Cross-routine SPOF handoff dedup」(互補 — #74 收同 SPOF 在 N 條 routine 重複的 dedup,本條收同 sensor 跨 N cycle 才升 vc 的紀律)
- 操作:→ ROUTINE.md / DATA-REFRESH-PIPELINE.md 各 routine prompt 補「sensor delta 判讀鐵律 = vc≥3 才升 LESSONS」段(已 inline 在多份 routine memory,本條 canonical 統合)+ 候選
scripts/tools/lib/sensor-vc-guard.shshared helper(給 routine wrapper grep 前 N cycle 同向 sensor delta count → 自動 emit vc 等級)+ generate-dashboard-alerts.mjs 「sensor delta single-cycle」一律不升 yellow,「multi-cycle ≥3 cycle 同向」才升 yellow(避免每日 CF 404 / immune ±2 噪音淹沒 alerts) - MANIFESTO 對應:→ §架構解 > 守備修補(single-cycle alert noise 是守備層培養皿;vc 鐵律是架構解 — 鐵律寫一次,N cycle 自動收斂)+ §外部尺 over 內視(multi-cycle accumulation 是 producer-side 自己對自己的「外部尺」— 同 sensor 跨 cycle 對照取代當下直覺判讀)
- 跨檔關聯:memory/2026-06-25-231123-twmd-data-refresh-pm.md + memory/2026-06-26-231025-twmd-data-refresh-pm.md + memory/2026-06-27-061332-twmd-data-refresh-am.md + memory/2026-06-27-084015-twmd-maintainer-am.md + LESSONS-INBOX §已消化 2026-06-28 cf-404-multi-cycle-trend-vs-single-cycle-delta + REFLEXES #15 + #59 + #64 + #70 + #74
#78 Pure plateau snapshot cadence signature — no-ship harvest cycle 是 batch shape 非 anomaly / velocity fake(2026-07-05 twmd-self-evolve-weekly 升 canonical vc=5 — 6/30 五平台 0-reply-ship 首例 + 7/01 六平台 vc=2 confirms + 7/02 四平台 vc=3 promote-ready + 7/03 metric ship 對照 + 7/04 兩平台 D+7 final 0-reply-ship「連 5 cycle 觸發 auto-instrument threshold 手動升 LESSONS candidate」,severity=structural)— SPORE-HARVEST 系列 routine 在 fresh-spore-ship + D+N slope 觀察窗自然節奏下會週期性進入「無 acute / 純 plateau」snapshot window,此時 cycle 0 broadcast / 0 reply ship 是 bucket discipline 正常運作而非 anomaly。Ship velocity 不是 audience flywheel 品質 KPI,「no-action cycle」與「ship cycle」皆為健康 routine shape。強行拉 fake velocity(湊 comment 演出 progress / 誤判 plateau 為 stale 而重推 spore)都 violate audience flywheel 5 核心(人本 / 正確性 / 正直 / 透明度 / 誠懇)。
- 規則:(a) 判準 "pure plateau" cycle 條件三要件齊備:Bucket A 連 N cycle = 0 (N ≥ 3) + 所有觀察孢子 D+N slope 均進 log-decay 尾巴 (per stable priors) + validation ALL GREEN + Pitfall 6 retry = 0 (b) 命中 → 不 escalate、不 emit alert、不寫 fail entry、不 renew 舊 LESSONS candidate (c) routine handoff 段內建 template:
0 ship / 0 reply cycle → audience flywheel 5 核心對位(0 acute N cycle=正確性 / plateau 直言=正直 / D+N slope 曲線可讀=透明度 / carry pattern 健康=人本 / no-ship 不拉 fake velocity=誠懇)(d) 「ship-verify-verify-verify」多 cycle 韻律是 batch shape 正常表達,promote 進 routine handoff 內建描述而非 flag anomaly - Boundary:(a) 不適用 Chrome MCP unavailable / hard gate fail 場景(走 #70 4-tier fragility)(b) 不適用 Bucket A ≥ 1 acute callout 未接住場景(走 #62 D+0 30min mandatory fix)(c) 不適用 velocity 反向 fake(連 N cycle 無 acute 但實際有 traceable callout 被 miss-classify)— 本條前提是 classifier 正確;classifier fail 走 SPORE-HARVEST §5-bucket audit (d) 適用範圍:SPORE-HARVEST 系列 routine 的 cadence signature 判讀 + audience flywheel 健康度 semantic 記帳
- 觸發 (vc=5 cluster 6/30-7/04):
- 6/30 batch shape 首例 五平台 pure plateau + explicit "vc=1 candidate"「pure plateau snapshot 形狀首例 vc=1 candidate」— memory/2026-06-30-064246-twmd-spore-harvest-am.md
- 7/01 六平台 vc=2 confirms「pure plateau snapshot vc=2 confirms candidate」— memory/2026-07-01-064316-twmd-spore-harvest-am.md
- 7/02 四平台 vc=3 promote-ready「四平台 pure plateau snapshot 連 3 cycle vc=3 promote-ready」— memory/2026-07-02-064153-twmd-spore-harvest-am.md
- 7/03 metric ship 對照 D+6 紀懷新 — memory/2026-07-03-064202-twmd-spore-harvest-am.md
- 7/04 兩平台 D+7 final 「pure plateau snapshot 連 5 cycle 觸發 auto-instrument threshold」手動升 LESSONS candidate
harvest-batch-pure-plateau-snapshot-cadence-signature— memory/2026-07-04-063517-twmd-spore-harvest-am.md
- 相關:REFLEXES #64「ABORT-DEFER prose memory 邊際效用 N+1 = 0」(互補方向 — #64 收「同 defer 決策寫 N 次」浪費;本條收「0-action cycle 本身合法性」而非 rot)/ #76「Multi-cycle trend window > single-cycle delta」(同源 dual — #76 收 sensor delta 累積紀律;本條收 no-action cadence signature 紀律)/ #62「D+0 acute callout mandatory fix」(分界對比 — 本條前提是 no-acute,acute 走 #62)/ #59「製造數字 self-validation」(互補 — pure plateau ship velocity fake 是 self-validation 變體,若 routine 為 ship KPI 硬推 spore = 自製指標騙自己)/ #58「detection ≠ remediation」(本條是 detection「plateau」不 remediate,因無 root cause 可 heal — plateau 是健康 shape 而非 bug)
- 操作:→ SPORE-HARVEST-PIPELINE §5-bucket classifier 加 §cadence-signature 段:pure plateau snapshot = 健康 shape 而非 stale;routine prompt handoff template 內建「audience flywheel 5 核心對位」描述;候選
generate-dashboard-alerts.mjs「spore-harvest 0 acute N cycle」一律不升 yellow(避 velocity-fake priming) - MANIFESTO 對應:→ §12 受眾端飛輪(no-ship cycle 不 fake velocity = 飛輪誠懇 layer)+ §架構解 > 守備修補(把「無 ship 是健康」寫進 canonical = 架構解;每 cycle 個別 justify = 守備層)
- 跨檔關聯:memory/2026-06-30-064246-twmd-spore-harvest-am.md + memory/2026-07-01-064316-twmd-spore-harvest-am.md + memory/2026-07-02-064153-twmd-spore-harvest-am.md + memory/2026-07-04-063517-twmd-spore-harvest-am.md + SPORE-HARVEST-PIPELINE + REFLEXES #62 + #64 + #76 + LESSONS-INBOX candidate
harvest-batch-pure-plateau-snapshot-cadence-signature
#80 LESSONS fire 後 sustain-vs-renew discipline — 已 escalate 進 LESSONS-INBOX 的 chronic 條目後續 cycle 靜默 continuity 非 renew escalate(2026-07-05 twmd-self-evolve-weekly 升 canonical vc=2 + 4-cycle 行為紀律成熟 — 免疫 49 chronic 第 12 cycle 7/3 pm data-refresh「首次遵守」+ 7/4 am maintainer「第 13 cycle sustain vc=1 continuity 記錄不重複 escalate」+ 7/4 pm maintainer「vc=1 pm data-refresh 尚未 fire LESSONS entry 已 fire 7/3 pm pending 哲宇 A/B/C 決策 routine 不 renew」+ 7/4 pm data-refresh「第 14 cycle unchanged sustain vc=2 stable behavior 確立」,severity=structural)— REFLEXES #15「反覆浮現要儀器化」fire 後 LESSONS entry 已 escalate 給觀察者決策(如 immune 49 chronic subdim offset exhaust pending 哲宇 A/B/C),後續 routine cycle 觀察到同 chronic sensor 未變時default 姿態是 sustain 靜默 continuity(handoff 明示「carry per prior LESSONS entry / 不 renew escalate」)而非重新製造 escalation prose。renew escalate 每 cycle 重寫同 LESSONS = #64 「ABORT-DEFER 邊際效用 N+1=0」的 escalation-side 變體,signal-to-noise 破壞。
- 規則:(a) chronic sensor 觸發 LESSONS entry escalate + 觀察者 decision pending → 後續同方向 cycle 不重寫 LESSONS entry / 不重覆 escalate prose / 不重升 vc(LESSONS entry 已固化,vc 累積在 entry 本身而非每 cycle 新增) (b) handoff template 明示「chronic sensor sustain 第 N cycle unchanged per prior LESSONS entry
<entry-id>pending 觀察者 decision,routine 不 renew」(1-line ACK vs multi-line escalation prose) (c) sensor 讀值真變化(chronic 破口 recover / 惡化跨階) → 重新升 vc 起點 = 1 走 #76 multi-cycle trend accumulation 才 renew escalate (d) LESSONS entry pending 觀察者的每 cycle 靜默 continuity 是紀律成熟訊號(不是 dormant / rot)— entry 內 pending 觀察者的位置本身承載 vc / severity / handoff carry;routine 不代替觀察者做 decision - Boundary:(a) 不適用「LESSONS entry 尚未 fire」場景(那走 #15 反覆浮現要儀器化 + #76 vc≥3 才升 LESSONS) (b) 不適用「sensor 讀值真變化」場景(recover / cross-tier 惡化 → 走 #76 重新累積 vc) (c) 不適用 acute callout / 讀者 D+0 場景(走 #62 30min mandatory fix) (d) 適用範圍:所有 chronic sensor(immune / CF 404 band / broken-link stale / cron slip 慢性) LESSONS entry 已 escalate 後的 routine handoff 描述
- 觸發 (vc=2 stable behavior + 4-cycle discipline 7/3-7/4):
- 7/3 pm data-refresh「免疫 chronic pm cycle 遵守「fire 後 pattern continuity 不 renew escalate」discipline vc=1 first datapoint(第 12 cycle 從「每 cycle 重新 warn」到「fire 後靜默持續追蹤」pipeline 級 signal-to-noise 改善)」— memory/2026-07-03-231225-twmd-data-refresh-pm.md
- 7/4 am maintainer「🛡️49 chronic 第 13 cycle sustain vc=1 continuity 記錄不重複 escalate」— memory/2026-07-04-084340-twmd-maintainer-am.md
- 7/4 pm maintainer「vc=1 pm data-refresh 尚未 fire(LESSONS entry 已 fire 7/3 pm pending 哲宇 A/B/C 決策,routine 不 renew)」— memory/2026-07-04-222640-twmd-maintainer-pm.md
- 7/4 pm data-refresh「免疫 49 chronic sustain vc=2 stable behavior 確立(第 12 首次遵守 → 第 13 續守 vc=1 → 第 14 續守 vc=2 = 從「單點遵守」升「二點穩定」,REFLEXES #15 fire 後行為紀律成熟不再機械 escalate)」— memory/2026-07-04-231023-twmd-data-refresh-pm.md
- 相關:REFLEXES #15「反覆浮現要儀器化」(本條是 #15 fire 後的下游紀律 — #15 說「有 LESSONS 沒 canonical 就會忘」;本條說「LESSONS 已 escalate 後不 renew,pending 觀察者 decision」)/ #64「ABORT-DEFER 邊際效用 N+1=0」(同 signal-to-noise 家族 — #64 收 defer prose N+1=0;本條收 renew-escalate prose N+1=0,兩條互補)/ #76「Multi-cycle trend window > single-cycle delta」(互補 — #76 收 vc 累積閾值判讀;本條收 vc 累積已到 LESSONS entry 後的 sustain 紀律)/ #58「detection ≠ remediation」(本條是 detection sustain 不 re-detect — chronic 未變不是新 detection 而是舊 LESSONS 的 continuity) / #52「Immune 沒 fail loud 比缺 immune 更危險」(分界對比 — silent 不代表 immune 失效,重點在 LESSONS entry 已 fire loud 一次 + 觀察者 pending,continuity 是紀律成熟不是 silent failure)
- 操作:→ routine handoff template 內建「chronic sensor sustain per prior LESSONS entry
<entry-id>pending 觀察者 decision」1-line ACK 段(取代 escalation prose);LESSONS-INBOX entry frontmatter 加pending_observer_decision: <yes|no>欄位 → routine 自動 detect skip renew;候選scripts/tools/routine-lessons-guard.shshared helper 對每 cycle chronic sensor read 交叉查 LESSONS-INBOX 對應 entry pending 狀態 → 自動 emit sustain vs renew 判斷 - MANIFESTO 對應:→ §架構解 > 守備修補(sustain-vs-renew 紀律 寫進 canonical = 架構解;每 cycle 個別 justify sustain = 守備層)+ §Routine vs Observer split(本條是 split 邊界的下游紀律 — LESSONS pending 觀察者 = 位置固化,routine 不代做 decision)
- 跨檔關聯:memory/2026-07-03-231225-twmd-data-refresh-pm.md + memory/2026-07-04-084340-twmd-maintainer-am.md + memory/2026-07-04-222640-twmd-maintainer-pm.md + memory/2026-07-04-231023-twmd-data-refresh-pm.md + LESSONS-INBOX entry
immune-chronic-11-cycle-subdim-offset-exhaust-observer-authorize-needed+ REFLEXES #15 + #64 + #76
#81 Agent 回報收件三十秒紀律 — 訊息通道與 tmp 都不可信任,raw 唯一的家在 git;收到先 verbatim 落檔、跑收件 gate,才准開始合成(2026-07-05 柯智棠健檢升 canonical vc=3 + 哲宇 directive「儀器化分部報告品質硬門檻」fast-track,severity=structural)— async agent 時代(sub-agent 以 task-notification 回報、tool result 只回 launched),委派 agent 的 raw 存亡完全取決於 orchestrator 收到通知後的第一個動作。三個獨立病例同 pattern:柯智棠(4 agent 各回 ~20KB 逐條軌跡,orchestrator 收到後壓成 6KB 摘要存 scratchpad,report §8 剩 9 行 + 幻覺 policy「commit 時 raw 隨 session 記錄留存」)、蘇打綠(§8 pointer 指 /private/tmp 自稱「已落檔可追源」)、台灣醫療與全民健保(自稱 raw「永久存放於」tmp,一個月後 5 份全數蒸發永久遺失)。斷點不在 agent、不在 prompt——三案 agent 全照 SOP 做滿,壞在收件那三十秒。
- 規則:(a) 收到 task-notification 的第一個動作 = 分部報告 verbatim 落檔 repo 內(agent 已自落檔則驗證;沒有則把
<result>一字不改寫進reports/research/{YYYY-MM}/{slug}-research-{X}.md) (b) 落檔後立跑agent-report-health.py {file} --claimed {配額}收件 gate——壓縮嫌疑(體積 <8KB / 軌跡 <10 行,真實 corpus 校準)、存放位置 repo 外、缺軌跡 section 皆 FAIL;FAIL = 不准開始合成 (c) 「先摘要待會補」「存 scratchpad 也算存」「存 /tmp 也算存」全是同一個偷吃步的變裝——tmp 是倒數計時的刪除佇列 (d) 組裝主 report 後跑research-report-health.pyv2 收口(§8 有效密度 + ephemeral pointer),兩儀器都輸出疑慮通知(為什麼 + 思考方向)給呼叫 session 決策 - Boundary:(a) 非搜尋型 agent(persona 發散 / verifier 回報 / writer 成品)體積軌跡閾值不適用,用
--min-kb --min-trail調整或免跑收件 gate,但落檔位置紀律仍適用 (b) 不適用同步 tool-result 場景(raw 直接在手上,仍要落檔但無通知時窗問題) (c) 與 #31 分工:#31 驗 claim 真偽(線索不是事實),本條驗 raw 保全(收到的東西有沒有原樣留下) - 觸發 (vc=3):柯智棠(2026-07-05,transcript 及時救回 271→1074 行)— memory/2026-07-05-200510-柯智棠健檢.md;蘇打綠(2026-06,救回 678→1550 行);台灣醫療與全民健保(2026-06,5 份 raw 永久遺失,補墓碑註記)— 完整診斷 reports/rewrite-agent-dispatch-diagnosis-2026-07-05.md
- Routine 自死前 commit 變體(2026-07-19 twmd-distill-weekly fold
babel-session-death-orphan-writesvc=3)— 本條治「收件人偷吃步」;同構的另一面是「routine 自己死在 commit 前」:babel routine/session 產出譯檔後在 commit 前死亡(context 耗盡 / watchdog / cron 中斷),譯檔以 untracked 孤兒滯留工作樹——不進_translations.json、不進 status.py 視野,等某後續 session 撞見才被 heal 收養。14 天內三起(07-10 SLP 韓文版 / 07-16 Howhow+YouTuber / 07-18 前 Shopping Design en+ja)。收養時還會觸發 pre-push orphan gate 的sh -e脆弱行(見 §已消化hook-set-e-cmdsubst-abort)。規則:長跑 routine(babel-nightly / rewrite-daily / branch-pipeline agent fan-out)每 write 一批 file 就開一次 checkpoint commit,不等最終 batch 完成——「commit 前所有 write 都不算真的落地」是 #22「Raw 永遠不刪除」的作業面延伸。SQUEEZE Z3 增量 commit 粒度對 nightly 場景從 ~50 篇考慮降為 per-tier 或 per-N(threshold 調整 defer 哲宇);worktree-gc.sh/ data-refresh rider 加「knowledge/{lang} untracked .md 孤兒偵測」黃燈候選,讓孤兒最慢隔天現形而非等人撞見。 - 背景 agent 不跨 session 存活變體(2026-07-16 recall-workflow,vc=1):本條治「收件人偷吃步」與「routine 自死前」都假設還有一次收件機會;這條治「永遠收不到」的分支——session 結束時仍在跑的背景 agent 隨 session 一起死,task-notification 永遠不會到、也沒有 result 可代寫。中途收官的 handoff 必須寫「產物不在=agent 已死,直接 re-dispatch(含重建派發素材),不要等通知」,而不是只寫「驗檔案、不在就代寫 result」。觸發:newsroom-dogfood session 派 Stage 0 觀點 agent 後收官,30 分鐘後新 session 接手時研究檔不存在、無 result 可寫,唯一路徑是重新派工
- 相關:#42「Sub-agent 三偷吃步」(本條是 #42 家族的 orchestrator 版——偷吃步位置從 agent 移到收件人)/ #31「Sub-agent claim 是線索不是事實」(幻覺 policy 的 orchestrator 變體:「raw 隨 session 記錄留存」)/ #22「Raw 永遠不刪除」(本條給 #22 補上「家的定義」:git 內才算存在)/ #15「反覆浮現要儀器化」(v6.4 為同款病立法過、TDRI 反例在 changelog,病照樣復發——位置移動了;儀器化的不變量才追得上環境位移)/ #69「每層自評都需要外部尺」(tool counts 用 transcript 實測不信宣稱)
- 操作:→ REWRITE-PIPELINE v7.8 Step 1.8-bis(async 三步 SOP + 收件 gate 指令)+ §多 agent 編排鐵律 8 +
agent-report-health.py(收件儀器)+research-report-health.pyv2/v2.1(主 report 儀器 + 疑慮通知層) - MANIFESTO 對應:→ §7 做了不記 = 沒做(收到不落檔 = 沒收到)+ §外部尺 over 內視(收件 gate 是收件人的外部尺——自我感覺「有存」不算數)
- 跨檔關聯:memory/2026-07-05-200510-柯智棠健檢.md + diary/2026-07-05-200510-柯智棠健檢.md + reports/rewrite-agent-dispatch-diagnosis-2026-07-05.md + reports/agent-report-health-instrument-design-2026-07-05.md + LESSONS-INBOX §已消化
orchestrator-aggregate-on-receive
#82 Proxy signal antipattern — 訊號要摸到 ground truth,不是量它的替身(2026-07-12 twmd-self-evolve-weekly 升 canonical vc=4 — 7/10 hub-template「程式碼都在功能從未存在,健檢照樣全綠」+ 7/10 elections-refresh「lastVerified 蓋章≠驗證,六週漏事實」+ 7/10 weekly-deep-review「fire≠完成 / 年齡≠健康 / 欄位在允許名單≠值安全」三件維運同構 + 7/11 dna-checkup「三把自製量尺同型說謊 — 排序方向 / vc regex / 過期快照」,severity=structural;2026-07-16 recall-workflow +1:Workflow 4 agents 全死於 session limit,status 仍回「completed」+空 results——「completed」是排程層代理不是產出層 ground truth,收件必驗 ok.length)— sensor / gate / instrument 造出來時常常挑「觀察成本低」的訊號當代理(cron fire / age / 欄位存在 / 檔案存在 / 儀式蓋章),代理跟被代理的 effect 之間有結構性 gap 就會 silent 說謊。跟 #24(工具說謊 9 種形式,同祖先「規則在 A 定義算法在 B 複寫」)差異:#24 是內部實作偏差;本條是選錯要量的東西,signal-choice 層的 pattern。維護面變體(2026-08-23 twmd-distill-weekly fold,源 LESSONS open-count-conflates-queue-with-inventory,vc=3):gh pr list --state open 回的是庫存,不是佇列——draft 是投稿者自己宣告「還在寫,先別審」,算進 backlog 會讓 alarm 憑空脹大。8/16、8/17 兩個 maintainer cycle 連續把 draft 算進 71 個「積壓」,實際 ready 待審只有 12 個;8/18 再往下一層:那 68 個 draft 本身也是代理——是網頁「Create pull request ▾」分割鈕記住上次選擇的產物,不是投稿者真的宣告還在寫(三個 ground-truth 訊號:body 空模板/零更新/維護者留言零回應才判得出)。任何要拿來當工作量或警報依據的清單,先問「這裡面有多少是對方還沒說可以動的?」已落地 MAINTAINER-PIPELINE v2.8 §Draft PR 處置 + Step 1.3 先分 ready/draft 再報數。
- 規則:(a) 新造 sensor / gate 前先問「這個訊號要證明什麼 effect?我量的訊號跟 effect 之間中間隔幾層假設?」— routine fire → SOP 執行 → git 有痕跡 → 效果落在該落的位置,任兩層之間都可能斷 (b) 儀式性欄位(
lastVerified/status: reviewed/ cron fire log / build passed)永不當 primary signal,只能當 audit trail — primary 要摸得到 output(file exists at right path with expected shape / grep count / hash / production URL 200) (c) 「存在」代理「有效」的訊號結構性錯 — allowlist 欄位包含檢查值安全、程式碼 include 檢查功能生效、快照文件更新檢查數據新鮮,都是 existence-proxying-effect 家族;換成 side-effect 檢查(feature 真的觸發 / DOM node 真的 render / API 真的回對值) (d) 診斷 sensor 說謊時 root-cause 落在 signal-choice 層而非 tool bug 層 — 修 tool 只治單 instance,改 signal 才治病根 (e) Sensor 生存週期兩端對稱(2026-07-19 twmd-self-evolve-weekly foldalert-does-not-retire-on-recovery):sensor 只設 entry 條件(何時 emit alert)沒設 exit 條件(何時 auto-retire)= 告警面板變墓碑而不是活體儀表板。每條 alert 誕生時就宣告 clear condition(連 N cycle 有 commit / 最新 commit 距今 <期望 cadence / effect 恢復可觀察),沒 retire condition = 只認 entry-side ground truth,是 (a) 的時間軸孿生:兩端假設都要摸到 effect。routine-silent 家族 2026-07-12 5 條 stale 黃燈在 routine 已復活 24-48hr 後仍未撤除,firstSeen 齡沒 hit >14d 觸發 OBSERVER-QUEUE 但 sensor 邊界 blind 是結構的,不是齡值治好。修法:alert generator 對可自動偵測 recovery 的類型加 retire detector(routine-silent-*過去 24hr 有對應 commit tag → skip addAlert) (f) 名字也會被拿來當代理(2026-07-26 weekly-report-sun foldsession-handle-mismatch-false-silent-death):routine-liveness-check.py靠 commit 訊息裡的 routine handle 字串去對應該次 cron fire 有沒有活下來——本週把twmd-maintainer-daily標紅(silent-death),但交叉 memory/diary 找到內容完全對得上的 session,只是 session-id 落成manual不是該 routine handle。這次不是量的替身,是名字的替身:同一件事換了個標籤,偵測器就看不見。string-match 對應是 existence-proxy 家族在「身份辨識」軸的新形狀——liveness check該用時間窗 + commit body 關鍵字模糊比對,不只信精確 handle 字串 (g) 語法通過不是 runtime 相容的證據(2026-07-24 migration-mouhouse foldverify-at-the-real-layer):184 個 script 在 Python 3.9 全數ast.parse通過,npm run build才炸出 PEP 604str | Noneruntime annotation(3.10+ 才能 eval)——build 煙霧測試才是真尺,語法掃描只是它的替身;任何「遷移/升級是否安全」的驗證都要選會真的執行的那一層,不是只會解析的那一層 (h) 公告的契約沒有對賬閘門,自己會變成最大死鏈發行者(2026-07-17 manual foldoutbound-url-contract-unreconciled):站體對外公告的每一條 URL(hreflang / canonical / sitemap / 頁面承諾的檔名 pattern)都是一份契約——沒有「公告 vs 真實 route 表」的對賬閘門,公告層就會各自算 URL 並靜默發行死鏈;爬蟲會忠實跟隨,78% 的 404 曾是自己發出去的邀請。這是 (a)-(e) 的發佈側鏡像:那幾條收「我們消費的訊號有沒有摸到 ground truth」,這條收「我們發佈的訊號有沒有摸到 ground truth」——都需要對賬閘門,不能只憑生成邏輯自洽 (i) 替身也會被寫進交給觀察者的那份世界描述(2026-07-27 manual foldproxy-number-in-handback-report):首圖去重時拿 markdown 字元位置比例當「讀者要滑多遠」的替身,據此向哲宇回報「只有 6 篇是深處插圖」,並把門檻設計標成「這是你的判斷,我沒自己加閾值」。把選擇權交回去這個動作是對的,附帶送出的數字卻沒被驗證——實際量畫面距離(文章起點到正文首圖的 px ÷ innerHeight)後是 135 篇。交回決策權的那一刻,附帶的數字就是觀察者要拿來做決定的材料,它比自用的訊號更該摸到 ground truth;自評克制(不加閾值)不能替代量測克制(不引用沒量過的數) (j) 「沒有紅燈」不是綠燈——沉默的形狀跟通過一模一樣(2026-08-14 PR #1336 審查現形):GitHub 對第一次投稿的 fork contributor 預設不跑任何 workflow,全部停在action_required;gh pr checks這時回的是「no checks reported on the '' branch」,那句話讀起來像中性資訊而不像紅旗。維護者的印象會停在「沒看到失敗」,實際是「零條跑過」。workflow 檔存在是 CI 有跑的替身,跟 (c)「存在代理有效」同構,但發生在 review 這個高 stake 決策點上,且症狀是訊號不存在而不是訊號說謊——後者會被既有的懷疑反射接住,前者不會,因為沒有東西可以懷疑。修法已落 MAINTAINER-PIPELINE §Step 1.5b:Stage 1 逐 PR 查checks=0 且 待批准>0。附帶一條:gh run rerun沿用當初的 workflow 快照,在 base 修好 workflow 後重跑不會生效,要有新的 PR 事件才行 - Boundary:(a) 儀式訊號當 audit trail 或次要 signal(跟 primary ground-truth signal 並列)合法,不當唯一 signal (b) 不適用非儀器化場景(人肉檢查 pipeline)— 本條是 automation 為主 (c) 觀察成本 vs 訊號準度的 tradeoff — 某些 effect 本身無法便宜量到(讀者停留感 / 意義精度),這些不 apply 本條而 apply #69「self-report 需外部尺」的下游
- 觸發 (vc=4 in 5 days):
- 7/10 hub-template:8 分身寫完 2000+ 行 Food 視覺化,程式碼 include d3 但 module 從未 load,health-check「d3-script tag 存在」全綠,第一次真渲染時才發現 35 扇區從沒轉起來 — diary/2026-07-10-230836-hub-template.md
- 7/10 elections-refresh:選舉頁
lastVerified欄位有值 → rewrite-daily 佇列判「近期驗過」跳過 → 六週漏 fact-check 抓出 6 個事實錯誤(屆次 / 年份 / 日期 / 民調禁令位置 / 模板幻覺 / 殘留標記),儀式蓋章≠實際驗過 — diary/2026-07-10-224934-elections-refresh.md - 7/10 weekly-deep-review:三件維運同構「fire≠完成(routine sensor 收屍看 git 痕跡而非 cron fire log)/ 年齡≠健康(過期時間戳看不到 renderer frozen)/ 欄位在允許名單≠值安全(OAuth env key 過 allowlist regex 但值本身洩漏)」— diary/2026-07-10-131500-weekly-deep-review.md
- 7/11 dna-checkup:三把自製量尺同型說謊 — memory-index-lint
rows[-1]排序方向假設(DIARY 新在上,撈到最舊)/ lessons vc regex 掃內文不掃 metadata / consciousness-snapshot 讀過期 JSON 快照 — 三個檢查器都拿「觀察成本低」的替代訊號騙自己 — diary/2026-07-11-182348-dna-checkup.md - 7/17 manual:hreflang 字串拼接 13,014 條死 alternate(99.8% 頁面)+ registry fromZh 被別名蓋掉 + taiwan-shape 公告 22 縣市只放 6 檔 — reports/404-root-cause-2026-07-17.md
- 7/24 migration-mouhouse:ast.parse 全綠但 build 才炸出 PEP 604 runtime annotation — memory/2026-07-24-200542-migration-mouhouse.md
- 7/26 weekly-report-sun:session-id 標成
manual讓 liveness check 字串比對抓不到已完成的 maintainer-daily 工作 — memory/2026-07-26-021837-twmd-weekly-report-sun.md - 7/27 manual:字元比例當「讀者滑多遠」的替身,「只有 6 篇深處插圖」寫進回報,實測畫面距離後是 135 篇 — memory/2026-07-27-093123-manual.md
- 7/28 vortex-babel-8:drain 監看用
kill -0當存活探針且2>/dev/null吞掉錯誤,背景沙箱送不出訊號回 EPERM,被&&讀成「行程已死」→ 第一輪就回報全數收工,實際三隻 vi worker 還在跑(最深 33 分鐘)。量到的是自己有沒有權限,不是行程在不在;前景跑同一條指令正常,所以假象只在背景出現。修法是換ps -p並讓探針先對自己自驗才敢用。本條同時是 (i) 的執行面孿生:吞 stderr 讓一個錯誤靜靜變成它要偵測的那個狀態 — memory/2026-07-28-103245-vortex-babel-8.md
- 驗證 (2026-08-18 academia-sinica,代理 signal 替一段幻覺蓋了滿分章):研究 lane A 的收件溯源率印 22/22 滿分,而其中一段宣稱逐字引自
museum.sinica.edu.tw/resources/item/23/的引文,六項具體事實裡有四項在該頁(及item/22、exhibitions/13兩個同站頁)都不存在——「十五次發掘總數 24,918 片」是編的。溯源率這個名字承諾的是引文可溯,實際量的是來源行裡有沒有 URL;代理跟被代理的 effect 之間差的正是「打開那個 URL」這一步,於是滿分不但沒攔下杜撰,還替它背書。同一篇第二個 H2 的「十三萬人」同型:被引的泛科學文章發表於活動前十三天、全文查無「萬人」。兩個數字都靠這道滿分閘門進到正文,最後由 Stage 3 帶 falsification 姿態、會實際 fetch 頁面的 verifier 接住。與 #85 的差異:#85 是分母 0 時「不知道」借用「沒事」的符號;本 instance 分母分子俱全且滿分,是量綱本身選錯,比 #85 更難察覺(數字愈漂亮愈不會有人去開那個連結)。修法方向:溯源率應拆成兩個數字——有 URL 的來源行比例(可自動化)與已實際 fetch 並比對引文的比例(預設 0,只有跑過內容比對才計數),不讓前者單獨掛「溯源」這個名字。(本 instance 尚未修工具,記錄供下輪 self-evolve 接手) - 相關:#24「工具在說謊的 9 種形式」(本條是選錯訊號的家族,同祖先「規則在 A 定義算法在 B 複寫」的 signal-choice specialization)/ #52「Immune 沒 fail loud 比缺 immune 更危險」(同 diagnostic silent 家族,本條收 fail loud 的訊號選錯 root-cause)/ #58「detection ≠ remediation」(互補 — #58 是 detect 對了不 remediate;本條是 detect 錯了整條 chain 從頭無效)/ #60「Automation default-state explicit verify」(同祖先「不驗預設就 silent failure」— 本條收 signal 選擇時的 default-state 陷阱)/ #65「Awareness instrument regex/parser cross-verify」(本條在 signal 層、#65 在 parser 層 — 選對訊號後 parser 仍會漏,兩條疊加)/ #69「self-report 需外部尺」(本條收訊號本身的 proxy 陷阱、#69 收自評的 layer 陷阱,同 external-ruler 家族兩層)
- 操作:→ routine handoff template 加 §Signal audit 段:每 cycle sensor emit 前自問「這個 signal 摸到 ground truth 了嗎?中間隔幾層?」;新造 sensor 前必寫「effect → signal」對照(effect = 我要證明什麼;signal = 我實際量什麼;gap = 中間假設)進 tool docstring;候選
scripts/tools/signal-audit.sh全掃lastVerified/status:/passed:儀式欄位當 sole gate 的路徑 - MANIFESTO 對應:→ §10 幻覺鐵律(訊號說謊是內部版的幻覺)+ §外部尺 over 內視(signal 是尺,代理訊號 = 尺沒摸到量的對象)
- 跨檔關聯:diary/2026-07-10-230836-hub-template.md + diary/2026-07-10-224934-elections-refresh.md + diary/2026-07-10-131500-weekly-deep-review.md + diary/2026-07-11-182348-dna-checkup.md + REFLEXES #24 + #52 + #58 + #60 + #65 + #69 + MANIFESTO §10 + §外部尺 over 內視
- 實作潔癖變體:量測範圍被跟問題無關的判準決定(2026-08-28 footnote-cards,severity=structural):腳註來源卡埋點原設計刻意「不自己呼叫
gtag」、改滿足EventTracker既有 markup contract——零新參數、CI 閘門零改動、複用已註冊維度,每一條理由都成立。但那份 contract 只涵蓋點擊,桌機的主要互動是 hover,於是「有多少人在用這個功能」在原設計裡剛好量不到。更貴的是:同一份設計報告一小時前才罵過「儀器只看見存在、看不見缺席」,證據是站上 17,113 條來源連結零埋點——罵完立刻復發,而且是自己動手劃的。跟本條原本講的「挑觀察成本低的訊號」不同維度:這裡沒有選錯訊號,是選了一個實作面的判準(不新增參數/不動閘門)去決定測量範圍,那個判準服務的是實作乾淨度,不是「使用者可能用到它的所有路徑」。規則補一條:(g) 任何新功能決定埋什麼點之前,先列使用者可能用到它的所有路徑,再問每條路徑有沒有事件;用「不新增參數/不動閘門」當理由收窄範圍時,先問那個理由服務的是實作還是問題。
#83 Checker 兩把尺 divergence — 檢查器對自己與對外部標準不同調,及豁免清單各分支各自維護(2026-07-26 twmd-distill-weekly 升 canonical vc=4 same-day cluster — 7/25 vortex-babel 四個獨立現形:heal re-check 寬於 CI deploy gate / cjk-leak-check 兩分支各自維護豁免清單 / 三種假陽性家族同日槍斃好產出 / CLI 多值 flag 靜默 no-op 卻回綠,severity=structural)— 造檢查器時容易讓「檢查器自己驗自己」跟「外部真正的部署閘門」用不同標準,或讓同一支檢查器的不同分支各自長出獨立的規則集。每次修復都像「又一個 edge case」,只有累積到第三、第四次才看出病根:檢查器與被檢查物之間、或工具與工具之間,沒有共用同一把尺。跟 #69「self-report 需外部尺」不同軸:那條講自評本身不可信、要外部尺接住;本條講外部尺自己內部就分裂成兩把,導入外部驗證仍會被這層分裂騙過。跟 #24(工具說謊 9 種形式)差異:#24 是單一工具的內部實作偏差;本條是多把尺之間互相不對齊的系統層 pattern。
- 規則:(a) heal / re-check 工具的通過標準必須就是部署閘門的標準——寫
--profile=ci-deploy或直接引用 workflow 那行指令,不要各自定義「看起來合格」 (b) 同一支檢查器如果因效能或架構理由拆成多分支(如 CJK-script 目標走一套、非 CJK-script 目標走另一套),豁免規則必須抽成共用清單(如LEGITIMATE_ZH_SPANS)讓兩分支 import 同一份,不要各自維護 — 改一邊忘一邊是必然結果不是意外 (c) 品質閘門的假陽性比缺席更毀產能:缺席看得見缺口,假陽性把好產出殺掉還回報「把關勤快」——隔離/拒絕動作前先存證(quarantine 前把失敗 blob 留 run dir),讓「當時判 leak、現行 checker 重驗通過」的矛盾事後可見、可破案 (d) 驗證器回綠時要能說出它到底跑了哪幾項——CLI flag 收到不支援的格式(如逗號分隔多值)不能默默印「no checks ran」還宣稱passed=True;沒有「跑了 N 項」這個數字,綠燈就沒有意義。這是 (c) 的鏡像:那邊誤殺好產出但吵得見,這邊靜默放行但看不見 (e) 同一支檢查器對「自己找的檔」與「別人餵的檔」兩把尺(2026-08-14 PR #1336 審查現形):article-health.py自己掃檔時會跳過_前綴的 Hub / roadmap(那些不建置上站,本來就沒有 subcategory、留著一批舊斷鏈),但 PR frontmatter gate 是逐檔明確傳入,繞過那條規則——於是任何 PR 只要碰到一個 Hub 檔,就被那個檔案本來就有的問題判紅,而貢獻者改的根本不是那些東西。這是 (b) 的推廣:不只「多分支各自維護豁免清單」,同一支工具的兩種入口(self-discovery vs fed-files)也會長出不同的豁免行為。判準:工具內建的排除規則要抽成入口共用的函式,或至少讓每個呼叫端明文複述它——不能靠「反正工具會跳過」的默契。附帶的新角度:閘門把「PR 碰到的檔」當成「PR 該負責的檔」,會把既有債連坐給無關的貢獻者(同一道閘門先前讓 idlccp1984 連六個 PR 拿到看不懂的紅 X) - Boundary:(a) 單一工具內部的偶發 bug 走 #24,不必每次都當「兩把尺」現形 (b) 適用範圍:任何「同一功能有 ≥2 條驗證路徑(工具 re-check vs CI / 分支 A vs 分支 B / 內部檢查 vs 外部消費者)」的系統
- 觸發 (vc=4 same-day cluster 2026-07-25):
- heal re-check 寬於 CI:
contributor-pr-heal.py自報hard=0 warn=0,article-health --profile=ci-deploy獨立驗是hard=12,同日另撞 passthrough 欄位字串比 vs yaml 語意比 / ratio band bytes 比 vs 字元比 / leak-check 兩分支各一套豁免——一天七次同病根 cjk-leak-check.py一天內四個假陽性家族:全形括號、ja/ko marker 表含合法日文詞、書名號作品名、ja/ko 分支漏括號豁免——蘇打綠 ja 譯文連三輪被同一把尺槍斃後 quarantine 存證機制才讓屍檢成立article-health.py {file} --check=link-target,wikilink-target逗號多值不報錯,印「no checks ran — Phase 1 has empty registry」然後passed=True——node-birth session 憑既有用法直覺寫了逗號語法,dogfood 第一次跑就回綠,靠輸出那行「no checks ran」洩了底- ar 首批人名幻覺第二型(填空而非混淆)與同批 3 處合法地標名假陽性混在一起現形,證明這類 gate 必須人審不能自動裁決
- heal re-check 寬於 CI:
- 驗證 (2026-08-09 twmd-weekly-report-sun,W32 體檢 c 面):
routine-sync.py(修復側)認得 ROUTINE.md 排程表的🖥️<節點名>標記並整列跳過別台機器的 routine,routine-sync-check.py(檢查側)不認得——同一張 SSOT 表兩把尺,讓營運機每天被報一筆假 MISSING。同支工具另一半:⏸️ 暫停標記只讀 cadence 欄,founder-lens 把它寫在標題欄就成了假 live drift。本 instance 的新維度是「假警報的代謝方式」:8/7 routine-sync 那一班額外開 MCP 手動複核五條enabled=false,確認檢查器錯了,在收官寫下「零漂移」然後過關——推翻的動作每天重跑一次、每天看起來都像盡責,而那把尺留在原地至少兩週。假陽性不必然「殺掉好產出」(規則 (c) 的形狀),也可以只是每天靜靜吃掉一小段注意力且不留痕跡。修法466f3ddd1:⏸️ 整列任一處命中都算、PAUSED 清單改真覆寫、缺件與 live 兩層都按 🖥️ 過濾,並補 fail-loud 哨兵(讀不到節點名時印出哪幾列沒檢查,避免修掉的靜默換位置長回來)→ memory/2026-08-09-021939-twmd-weekly-report-sun.md - 驗證 (2026-08-09 twmd-maintainer-am,規則 (a) 首次在 pipeline 文件層現形):前幾個 instance 的兩把尺都住在程式裡(heal 工具 vs CI)。這次住在 canonical SOP 的 prose 裡:MAINTAINER-PIPELINE Step 3.5 教維護者跑
python3 scripts/tools/article-health.py {file}(不帶 profile),而破折號/全形分號的硬門檻只掛在ci-deployprofile 上。實測同一支檔同一分鐘:不帶 profile 回✅ prose-health hard=0,--profile=ci-deploy回🔴 hard=1 · 全形分號 15 > 12。照 SOP 走會拿到一個 CI 不認的綠燈,而且方向是「本機比 CI 鬆」——剛好是article-health.config.toml註解裡論證為不安全的那一側(pre-commit 嚴於 ci-deploy 才安全,因為過了嚴的必然過鬆的)。本輪兩篇貢獻者新文因此在 commit 後才被 pre-push 攔下。修法:Step 3.5、§Quick fix 清單、Hard Gate Inventory 三處的指令一律補--profile=ci-deploy。新維度:規則 (a) 原本寫給「工具」,但一份教人下指令的文件也是一把尺——它規定的那條指令若不是部署閘門那條,等於用文件把兩把尺的分歧發給每一個照做的人 → memory/2026-08-09-084024-twmd-maintainer-am.md - 驗證 (2026-08-23 terminology-adverbs,規則 (e) 從「一支工具兩個入口」推廣到「一份資料三個消費者」):
data/terminology/*.yaml同時餵三個消費者——per-term 靜態頁、quality-scan偵測、用語轉換器。這批新收的副詞層詞條(挺/肯定/具體/體現/聯繫/素質/流量)刻意不加detection:區塊,因為那些字台灣文章天天在正當使用,接進偵測會整批誤判。但轉換器不看detection也不看fork_type,它把每一條china ≠ taiwan都變成找字取代規則——實測一句「他挺胸站著,全場力挺這個提案」被改成「他蠻胸站著,全場力蠻這個提案」,一個以保存台灣用語為目的的工具把正確的台灣文字改壞了。新維度:(e) 講的是同一支工具的兩個入口,本例是同一份資料集的多個消費者——為消費者 A 設計的安全開關(detection是保守 opt-in)不會被消費者 B 繼承,而且 B 的預設是「全收」。判準:一份資料若有 N 個消費者,每加一道護欄就要問「另外 N-1 個讀不讀得到這道護欄」。修法是給資料本身加auto_convert: false(預設 true,既有 2,400 條零變動),讓「這對詞不能盲目取代」變成資料層的一等公民而非某個消費者的內部規則 → memory/2026-08-23-011557-terminology-adverbs.md - 相關:#24「工具在說謊的 9 種形式」(同祖先「規則在 A 定義算法在 B 複寫」,本條是雙工具/雙分支間的 specialization)/ #66「Gate threshold 用真實產出 dogfood 校準」(互補——那條講閾值怎麼定,本條講定完之後兩把尺會不會走歪)/ #69「self-report 需外部尺」(互補——那條講要不要有外部尺,本條講外部尺自己內部的一致性)
- 操作:→
contributor-pr-heal.pyre-check 改--profile=ci-deploy/cjk-leak-check.py抽出LEGITIMATE_ZH_SPANS共用清單 /article-health.py --check對逗號多值 explicit error 或改支援多值 / quarantine 前存證流程已 ship(vortex-babel 2026-07-24) - 跨檔關聯:memory/2026-07-25-102214-vortex-babel-2.md + diary/2026-07-24-174300-vortex-babel.md + memory/2026-07-25-013432-node-birth.md
#84 發佈/生成產物需要對賬 ground truth,不能只憑自己的生成邏輯自洽(2026-07-26 twmd-distill-weekly 升 canonical vc=2 — 7/17 manual outbound URL 契約無對賬閘門 78% 死鏈自產 + 7/25 article-alias redirect 清單快照重算讓修復成功刪掉修復自己)— 系統對外發佈或每次重新生成的產物(sitemap / hreflang / redirect 清單 / 任何從「當前 top-N」重算的列表),如果只驗證「這次生成的內部邏輯有沒有錯」而不對賬「跟外部真實狀態/跟過去累積的有效狀態是否一致」,會在自己看不見的地方悄悄漂移。跟 #82(訊號選錯代理)鄰近但軸不同:#82 講「選了哪個訊號當代理」,本條講生成型產物本身沒有跟 ground truth 或歷史狀態對賬的機制——即使每個訊號都選對了,快照式重算仍會讓「曾經有效」的狀態silent消失。
- 規則:(a) 任何從「當前狀態快照」重新計算的公開產物(redirect 清單 / sitemap / hreflang alternate)如果有容量上限(top-N / cap),要問「一條過去成功的修復,會不會因為它成功了(流量掉出 top-N)而從清單消失」——修復成功本身可能刪掉修復的證據,這類清單應考慮 append-only 或加「曾經有效過就永久保留」欄位 (b) 站體對外公告的每一條 URL 都是一份契約(hreflang / canonical / sitemap / 頁面承諾的檔名 pattern / 內嵌 script 裡的 URL 形狀字串)——沒有「公告 vs 真實 route 表」的對賬閘門,公告層就會各自算 URL 並靜默發行死鏈;爬蟲會忠實跟隨,錯誤的公告比錯誤的內容傳播更快更遠
- Boundary:(a) 不適用純內部快取(無外部消費者,自己重算自己讀)(b) 適用範圍:任何面向外部消費者(爬蟲 / 瀏覽器 / 第三方 API)的生成型公開產物
- 觸發:
- 7/17 manual:hreflang 字串拼接 13,014 條死 alternate + registry fromZh 被別名蓋掉 + taiwan-shape 22 縣市只放 6 檔——
check-url-contract.mjs對舊 dist 實測 18,406 dead,sitemap 因為是唯一有對賬機制的公告層而唯一乾淨 — reports/404-root-cause-2026-07-17.md - 7/25 article-alias:
generate-redirects.mjs每次從當日 404-monitor top_paths(cap 300)重算,不累積歷史——一條昨天成功接住 404 的 redirect 只要今天流量掉出 top-300 就從輸出消失,控制實驗量到 6 條純屬快照衰減與當次改動無關 — memory/2026-07-25-192633-article-alias.md
- 7/17 manual:hreflang 字串拼接 13,014 條死 alternate + registry fromZh 被別名蓋掉 + taiwan-shape 22 縣市只放 6 檔——
- 相關:#82「Proxy signal antipattern」(鄰近但軸不同——那條收訊號選擇,本條收生成產物的對賬機制)/ #52「Immune 沒 fail loud 比缺 immune 更危險」(sitemap 的乾淨正是因為它有對賬閘門,反證其他公告層缺閘門的代價)
- 操作:→
check-url-contract.mjs(hreflang/canonical 對賬,已 ship)/generate-redirects.mjs候選改 append-only 或加「曾經有效」欄位(待實作)
#85 「不知道」需要自己的符號,不能借用「沒事」的那個(2026-08-09 twmd-distill-weekly 升 canonical vc=7 跨 3 獨立 entry 同日收斂 — 8/07 check-disabled-by-default-reports-green(vc=3) + 8/08 error-and-emptiness-share-one-return(vc=2) + 8/08 gate-guard-contradicts-its-own-filter(vc=2),severity=structural)— 一支檢查器/取數函式如果對「真的檢查過且通過」跟「根本沒跑/範圍不適用/取不到值」印出同一個符號(✅ / [] / 0),它的輸出就分不出「安全」與「不知道」。這比 #82 proxy signal 更難察覺:proxy signal 至少量到了某個真實的東西(只是量錯層),這裡是故障或空白被編碼成一個合法的健康讀數,而且往往連寫這支檢查器的人自己都會被騙(check-slug-consistency.py 在 repo 外執行也印綠勾,第一個被騙的人是拿它來檢查的人,呼應 #59)。三個獨立變體收斂同一個判準:
- 變體 1:整支檢查預設關閉但印綠勾(
footnote-url_network_enabled()預設False,全 repo 無 profile 開啟,pre-commit/CI 每次印✅ hard=0 warn=0卻從未發過一個網路請求;seo-meta的APPLIES_TO=["zh-TW"]讓非中文檔案同樣印hard=0 warn=0,貢獻者原話「hard=0 warn=0是『沒檢查』不是『檢查過關』」;check-slug-consistency.py掃到零個檔案時印跟全數通過逐字相同的綠勾) - 變體 2:取數函式對失敗跟真空回同一個值(
fetchIssueComments()對gh不在 PATH/token 過期/API 變形/rate limit 全部return [],跟「這個 issue 真的沒有新留言」的[]無法區分,下游計數與收官綠燈因此繼承同一種混維度) - 變體 3:閘門的兩段式邏輯互斥(先算一個變數、排除掉某些值,下一行卻對「已被排除的值」下 if;pre-commit 的 slug 一致性閘門
grep -vE '^knowledge/(en|ja|ko|es|fr)/'排除五語後,下一行grep -qE '^knowledge/(ja|ko|es|fr)/'找的正是剛被排除的東西,恆為 false,閘門上線至今零執行、零輸出,連「有沒有在跑」都無從觀察)
規則:任何 if <變數> 命中 X 的閘門,回頭確認那個變數的建構過程沒有把 X 排除掉;任何 catch { return [] } / return 0 / return {},先問「這個空值跟真實的空,下游分得出來嗎?」分不出來就必須回 null/undefined 讓下游自己決定怎麼處理未知;任何「未執行」的檢查應該印出有別於 ✅ 的第三種符號(如 ⏭️ skipped(reason)),而不是沉默地印同一個綠勾。
- 驗證 (2026-08-09 twmd-maintainer-am,同日獨立命中並挖到變體 1 的根因):merge 兩篇貢獻者新文時 pre-commit 印「Frontmatter validation: 0 files scanned」與「🔍 staged: no zh-TW knowledge/*.md staged, skipping」,而當下 staged 的正是兩篇中文檔名的 zh-TW 文章。根因不在檢查邏輯,在取檔那一行:
git diff --cached --name-only預設core.quotePath=true,會把含非 ASCII 的路徑整條加引號並轉義成"knowledge/Food/\351\254\215...",於是startswith("knowledge/")與endswith(".md")一律對不上——站上絕大多數文章是中文檔名,等於這些閘門對它們全部靜默跳過。這正是變體 1 裡「check-slug-consistency.py掃到零個檔案時印跟全數通過逐字相同的綠勾」那句的上游:它為什麼經常掃到零個。四支檢查器(article-health.py/check-cjk-punct.py— 諷刺的是中文標點檢查只掃得到非中文檔名 /check-slug-consistency.py/check-canonical-frontmatter.py)與.husky/pre-commit的 translatedFrom 閘門(譯文與原文同名,整道也全跳)已補-c core.quotePath=false(a4732608f),實測_get_staged_md()對同一批 staged 檔從回 0 筆變 2 筆。本 instance 的新維度是「修補自己也會停在症狀出現的那一層」:8/08 PR #1298 才修好同一個 quotePath 病根,但只修了.husky/pre-commit殼層自己的三個取檔點,它呼叫的四支檢查器各自也在跑同一行 git 指令,沒被掃到——修補的範圍是由症狀現形的位置決定的,不是由根因所屬的類別決定的 → memory/2026-08-09-084024-twmd-maintainer-am.md - 驗證 (2026-08-15 twse-rewrite,變體 2 在收件儀器上的新 instance):
agent-report-health.py的來源溯源率檢查對一份零條【來源】行的分部報告印出溯源 0/0(—)並判 PASS。那份報告不是沒有來源,是改用了 inline 格式(〔一手:…URL〕)——儀器的同行解析抓不到,分母歸零,於是「無法評估」被印成一個看起來無害的破折號,跟「評估過且全部可溯」在輸出上無法區分。溯源率本來是這支儀器最重要的一道閘(v3 校準時 <60% 是 hard FAIL),碰到分母 0 反而完全不叫。主 session 是因為看到「來源 10」與「溯源 0/0」對不上才手動 grep 驗,不是儀器叫的。修法方向:分母為 0 時應回第三種符號(⚠️ 溯源無法評估(0 條【來源】行,可能改用了 inline 格式))而非—+PASS;契約既然規定五段骨架與每來源一行,零條【來源】行本身就該是一個訊號。(本 instance 尚未修工具,記錄在此供下輪 self-evolve 接手) - 相關:#82(proxy signal — 本條的差異是「訊號選對了但根本沒量」,不是「量了替身」)/ #38(混維度 — 本條是它在檢查器輸出端與取數輸入端的具體形狀)/ #52(immune system 沒在 fail loud 比缺 immune system 更危險——本條的閘門更隱蔽:不是壞掉時不叫,是從來沒活過所以沒有東西可以叫)/ #59(製造數字的人最易被數字騙——檢查器騙過的第一個人是拿它來檢查的人)/ #69(每層自評都需要外部尺——三個變體分別由 PR triage、routine 例行、貢獻者 issue 三個獨立方向撞見,互為外部尺)/ #83(checker 兩把尺 divergence——鄰近但軸不同:那條講兩把尺不同調,本條講第二把尺根本沒被拿起來過)
- 操作:→
article-health.py候選加「未執行」第三態符號(成本低,會一次照亮站上所有「註冊了但沒在跑」的檢查)/.husky/pre-commitslug 閘門接線修復(3 行,但需先處理 12 筆既有漂移,命中 §自主權邊界,留 OBSERVER-QUEUE)/triage.mjsfetchIssueComments()已修(null vs [] 分流 +comment-reconcile=N/M三分報告,per FEEDBACK-TRIAGE-PIPELINE §HG12c)
#86 Session ID handle 無參數 fallback 會靜默漂移,只有跨稽核抓得到(2026-08-16 twmd-distill-weekly 升 canonical vc=3 — 2026-08-02 twmd-self-evolve-weekly「memory 檔名落 manual」+ 2026-08-05 twmd-spore-harvest-am 同型三天後再現 + 2026-08-06 twmd-spore-harvest-am 相鄰兩天連中)— 自動化產物命名依賴呼叫時傳入的 handle 參數時,若呼叫路徑存在無參數 fallback(auto-detect),遲早會有一次呼叫漏了參數,讓產物命名(檔名)跟內容本身的描述(commit message/內文 header)不一致——而內容本身讀起來完全正確,人工複閱不會發現。只有「檔名 vs 內容」交叉比對的第三方稽核才抓得到。三個 instance 橫跨兩條不同 routine(twmd-self-evolve-weekly 一次、twmd-spore-harvest-am 相鄰兩天各一次),證明不是單一 routine 的 cron 設定問題,是 session-id.sh 無參數 fallback 本身的通用弱點。跟 #82 proxy signal 同家族(訊號要摸到 ground truth),但這裡的訊號是檔案命名系統本身;跟 #51(Session ID schema:filename collision 有解、content collision 不解)是第三種形態——不是撞名也不是內容衝突,是這次命名本身選錯了 handle。操作:候選 (a) session-id.sh 在 cron 環境無參數時 fail-loud 而非 default (b) 收官加一道 commit 訊息 handle 與檔名 handle 的對賬 lint。
#87 保護密度跟曝光量成反比 — UI 字串層沒有語言正確性閘門,文章層有(2026-08-16 twmd-distill-weekly 升 canonical vc=3 — 2026-08-06 俄文讀者看半年烏克蘭介面 + 2026-08-10 讀者回報三則多語言殘留 + 2026-08-11 ar 區塊 20 行簡體中國詞彙)— 同一種「頁面上有字但語言不對/字義錯」的病,在 knowledge/ 文章層有 cjk-leak-check.py 這類確定性閘門守著,在 src/i18n/*.ts 這層一支都沒有;文章層的錯會在 commit 當下被擋下來,UI 層的錯只能等讀者告訴我們——而 UI 字串出現在每一頁的頂端與底部,曝光量遠高於任何單篇文章。保護密度跟曝光量成反比,這才是問題的形狀,不是「又漏了一個 bug」。第三例比前兩例嚴重一階:前兩例是「送錯語言」,第三例是「送出對方的字形與對方的詞彙」(ar 區塊人工智能/台积电/智能手机/资料来源)——一個以主權保存為架構目的的站,在自己的頁面上用中國的講法描述台積電,是主權的巴別塔防的事從反方向發生:不是消音,是替換。造橋的料早在工具箱裡(scripts/tools/terminology-charcheck.js 已有經實戰校準的 OpenCC 判準,只作用在 data/terminology/*.yaml),缺的是登記與接線;接線第一版掃描器假陽性率高達 82%(ja 新字體同形/about.ts 逐字引用拒答證據/zh-TW 正體本字白名單三類豁免不寫進去就會誤殺),實測校準後假陽性歸零。可能層級:通用。判準是「同一種正確性,在 A 層有確定性閘門、B 層沒有,而 B 層曝光量更高」——不限語言正確性,任何跨層保護密度不均都適用。第 4 例(2026-08-23 search-results-page,器官換成搜尋索引):build-search-index.mjs 的斷詞正則只認 ASCII+CJK,阿拉伯文/西里爾/天城文的母語詞從 ar/ru/hi 出生起就沒進過索引(ar 搜「تايوان」恆為 0 筆),vi/fr 帶變音符的詞被切碎;shard 照樣生成、CI 照樣綠、連「沒有結果」都以該語言在地化顯示——失敗本身被翻譯得很好。做 /search 頁驗收時用母語逐語打字才現形,修後 ar 0→593 筆。變體判準:不只「B 層沒閘門」,還有「B 層的尺長在造尺者聽得見的頻率上」——沒有任何檢查量過「用該語言自己的文字系統搜尋是否可召回」。相關:#82(proxy signal — 用「CJK 字元佔比」當訊號全是假訊號,換成「無歧義簡體字」才摸到 ground truth)、#66(gate threshold 用真實產出 dogfood 校準)、#83(checker 兩把尺 — 文章層與 UI 層對同一件事標準不同調)、#69(每層自評都需要外部尺——三次都是讀者當的那把尺)。
#88 轉錄 + 保管雙職責 routine,轉錄那半停手時保管那半會跟著消失(2026-08-16 twmd-distill-weekly 升 canonical vc=3 — 2026-08-13 twmd-feedback-triage 零輸入日 + 2026-08-14 同 routine「輸入不為零但不能轉錄」變體 + 2026-08-15 原樣再現、ship --exclude 參數接住)— 一條 routine 若同時負責「轉錄新輸入」跟「保管既有紀錄」,這兩半的工作量不是同一個變數。轉錄為零時第一半確實沒事做,第二半照舊有事做——但最省事的路(跳過 commit 模式、印一行「今天沒有新回報」)會讓第二半靜默缺席,而收官報表看起來跟正常的一天幾乎一樣。第二個入口更隱蔽:輸入不為零但因某筆內容不能轉錄(如涉及未到場第三人的內容),若流程沒有單筆排除的參數,「不開這個 issue」的唯一走法就是整條轉錄動作不跑,保管那半跟著一起消失。原則因此從「零輸入也要跑保管動作」擴大成「讓保管那半有自己的入口」——2026-08-15 已 ship triage.mjs --exclude <id>,跑完 --commit --exclude <id> 後保管那半第一次在轉錄那半停手的情況下由流程自己跑完。跟既有反射的關係:跟 #82(archive-scanned=N 數存在的檔,量不出缺席)同源但低一層——這次缺席的候選對象不是紀錄,是核帳這個動作本身;也跟 #38 混維度同族——skipped 跟 ✅ 在收官報表上都不是紅的,兩種根本不同的狀態共用「沒有壞消息」的外觀。操作:任何「轉錄 + 保管」雙職責的 routine(feedback triage、harvest 回填、supporters sync)都該問:輸入為零或部分排除時,我的保管那半有沒有跟著被跳過?
#89 cron 執行環境掛載的工具清單不是穩定綁定,routine 隔幾次執行就摸不到手(2026-08-16 twmd-distill-weekly 升 canonical vc=3 structural — 2026-07-27/2026-08-03/2026-08-10 twmd-supporters-weekly 連續三次 cron 執行找不到 Gmail MCP)— routine 的 canonical SOP 常假設某類工具(本例 Gmail MCP search_threads/get_message)在每次 cron 執行環境裡都存在,但 scheduled-task 觸發的 session 實際掛載哪些 MCP server 會隨執行環境漂移——同一份 pipeline,首跑能正常呼叫,之後三次連續執行完全找不到對應工具(ToolSearch 全量搜尋 + mcp-registry 查詢皆 0 匹配)。這跟「Stage 2 搜尋跑了但 0 候選信」是完全不同的訊號(#38 混維度),必須分開報告:前者是「這週真的沒有」,後者是「這次執行環境搆不到手」。寧可誠實回報 blocked、不動 SSOT,也不能編造搜尋結果掩蓋工具缺口(fabricate 一個假的「0 候選信」比空手而回更危險,因為它看起來像健康的例行公事)。連續 3 個 cycle 讓該 routine 完全無法履行職責,累積資料債達 4 週;2026-08-10 哲宇補掛 connector 解決當次登入態,但「執行環境與工具清單綁定關係不透明」這個結構本身仍無儀器——三次阻塞都是靠 routine 自己撞上去才發現。相關:#38(混維度 — 「搜尋跑了回 0」vs「工具本身不存在」是同一 status 底下兩種根本不同 cause)、#60(silent default = silent failure)。操作候選:routine prompt 層加自檢「本 routine 依賴的 MCP 工具是否在本次環境存在」,缺工具時 fail-loud 到 PushNotification 而非只寫進當日 memory;或在 ROUTINE.md 每條 routine 登記 requires_tools: 欄位供開跑前對賬。
#90 逐條回報把單一根因打散成看起來彼此無關的幾百個錯誤(2026-08-16 twmd-distill-weekly 升 canonical severity=structural 首次即達質門檻 — 2026-08-15 twmd-maintainer-am)— 閘門逐條回報是為了可定位(哪一行壞了),但當一個上游缺陷在檔案裡出現幾百次時,逐條回報會把單一根因打散成幾百個看起來彼此無關的錯誤。閘門每一句話都是真的,總和卻掩蓋了「這其實是同一件事」。沒有人會讀到第三百條,於是它被讀成「這批投稿品質很差」,而不是「有個工具在每個連結後面多打了一個空格」。訊號不是不足,是過量到失去形狀。觸發:24 個投稿 PR 全部卡在 frontmatter-gate,最大宗診斷是「腳註格式不合規範」——16 個檔案各報 9 到 28 條,合計 353 條,實際成因是產生工具在每個 markdown 連結網址尾巴留一個空格,CommonMark 容許它、連結照樣開得了,但腳註格式規範 [^N]: [Title](URL) — desc 多一個空格就不匹配。修掉那一個空格,16 個檔案的 footnote-format hard 全部歸零,正文一個字沒動。已 ship 的修法:link-url-mangle 新增 HARD + 自動修,偵測連結網址內的多餘空白,逐行回報一次並帶上該行處數(不逐條洗版),--fix 一併清掉;角括號 ](<url with space>) 是 CommonMark 給空白的正當出口,明確跳過。跟 #38「混維度 = silent killer」同族但方向相反:#38 是一個訊號承載兩種根因,本條是一個根因被拆成幾百個訊號。相關:#52(immune system 沒在 fail loud 比缺 immune system 更危險——本條是 fail loud 過頭到失去可讀性的反面)、#38(混維度,同族反向)。操作:造任何閘門時多問一句:「當同一診斷在單檔命中 > N 次時,是否應該先聚合成一條根因訊息再列樣本」——這條可以放進 article-health 的 plugin 撰寫規範。
#91 建造與登記是兩個不同步的代謝,落差不會自己被發現(2026-08-16 twmd-self-evolve-weekly 升 canonical vc=4)— 造出一個新東西(工具、pipeline、寫法、分類、臨場發明的角色)跟把它寫進對應的 canonical 登記表,是兩個獨立動作;後者沒做完,前者對系統其餘部分等於不存在——不是「還沒造出來」的舊債形狀,是「造好了但只有造它的那個 session 知道」的新債形狀。
- 觸發:2026-07-26 twmd-self-evolve-weekly 全表對賬揪出
twmd-routine-sync/twmd-supporters-weekly兩條 routine 誕生時漏登記進 ROUTINE.md 排程表(違反本檔第 50 行「新 routine 誕生必須同 commit 補表」,僥倖靠 fallback 沒現形)→ 2026-08-02 twmd-self-evolve-weekly 再指出「vc=1 只證明登記處只出現一次,不證明這件事只發生一次」——連「反覆次數」這個計數本身都是一種登記,登記不全會讓次數被低估 → 2026-08-06 goal-自我進化 diary 把三個獨立 instance 並排看出同一個債務形狀轉變:引擎造好但需求佇列不知道/新寫法長出來但型別表裝不下/臨場發明的席位沒被 canonical 收編,「建造的速度超過了命名的速度,於是知識開始在自己體內失散」→ 2026-08-16 twmd-weekly-report-sun 撞見第四例:切菜工具的「本週交付文章」章節逢空白就整節消失,因為它沒有登記「有交付但沒進本週分類」跟「真的沒交付」的差別,當場修法是永遠印該節、空的時候印警告附最後一筆日期 - 操作:新能力(工具/pipeline/型別/分類/臨場角色)誕生的當下,順手問一句「這個東西的登記表在哪裡,我寫進去了嗎?」。已有機械對賬的子案例維持機械:routine 誕生 →
routine-sync-check.py三層對賬(daily cron 已連續 22+ 輪零漂移);GA4 event param →instrumentation-audit.py三方對齊(CI gate)。沒有機械對賬的子案例維持人工提問,不強行造一個通用登記檢查器——vc=4 尚不足以支撐一個新的跨域儀器,硬造會重演 2026-05-28「儀器化也會 over-engineer」的教訓(見 MEMORY §神經迴路同日條目) - 驗證:4 次(routine 登記表漏填 / self-evolve 計數簿本身的登記盲點 / 引擎+型別+席位三個並列 instance / weekly-report 交付分類登記缺口)
- 元規則:跟 #86(session-id handle fallback 讓命名跟內容脫鉤)、#88(轉錄+保管雙職責 routine 保管那半靜默消失)、#89(cron 工具清單登記漂移)是同一個「登記層」家族的四個不同載體——命名登記/保管登記/工具登記/一般性建造登記。本條是收斂這個家族的通用陳述,不重複前三條各自的操作細節。
#92 Twin-artifact 缺重整器家族 — 兩個該同步的產物各自演化,中間沒有東西在對賬(2026-08-23 twmd-distill-weekly 升 canonical vc=6,distill_ready 首發即中)— 一個維度長出兩件本該互相印證的產物時(文件與驗證器、姊妹檢查器、反射目錄與執行步驟、產生器與格式化器、canonical 與它的薄殼引用),如果沒有機制強制對賬,它們會各自演化到分岔,而分岔不會被任一產物的自我檢查發現——每一件事各自看都正確,只有排在一起才看得出漂移。這是 REFLEXES #56(pipeline canonical ↔ production drift)的橫向擴大:#56 講單一軸線「canonical 文件描述的世界跟 production 實況分岔」,本條涵蓋範圍更廣——檢查器對檢查器是 #65 same-DNA 的橫向變體,反射目錄對執行步驟、產生器對格式化器、canonical 對薄殼是同一個結構的不同載體。
- 觸發:8/10 產生器輸出 vs pre-commit formatter 對引號偏好不同調(
formatter-vs-generator-quote-churn-fakes-scope-alarm,讓範圍閘門喊假警報)→ 8/13 REFLEXES 目錄裡的反射 vs 各 routine cron prompt 是否真落地成一個步驟(reflex-exists-but-not-a-step-on-this-line)→ 8/14 CONTRIBUTING 範本 vstest-frontmatter.mjs硬性擋下的欄位(doc-and-validator-drift-has-no-reconciler,三個月後才被一位貢獻者的八個 PR 撞出來)→ 8/14footnote-format與footnote-density兩支姊妹檢查器共用同一個「輸入長什麼樣」的前提,同時看不見從渲染後頁面複製回來的死連結(sibling-checks-share-one-blind-premise,掃全庫發現同型已漏進 50 檔)→ 8/16routine-audit.py(分類器)與routine-liveness-check.py(沉默死亡偵測)共用同一個前提「routine 的 commit 標題含它的 handle」,self-evolve-weekly 的兩個 commit 標題沒帶自己的 handle 讓 liveness 誤判「50.1h 零 git 痕跡」掛黃燈兩天(sibling-checks第二個 instance)→ 8/16 twmd-routine-audit-weekly Stage 3B dormant entropy lens 逐條核對本週 entries,發現以上五條各自的「原則」欄互相零交叉引用,壓縮後卻是同一句話的五種措辭,比任何單一 instance 的 vc 累積更說明是系統性缺口(twin-artifact-no-reconciler-family命名本條)→ 8/18 第六個、也是最貴的 instance:docs/pipelines/MAINTAINER-PIPELINE.md(canonical)被過期工作樹的副本靜默覆寫回舊版本(8/11 哲宇 directive 的 §1c/Step 3.6 五步/quality gate 第 7 條整段消失),.claude/skills/twmd-maintainer/SKILL.md(薄殼)仍指著已消失的 §1c;routine-sync 三層對賬比的是 cron mirror↔薄殼↔ROUTINE.md,pipeline canonical 本身不在任何一邊,frontmattercurrent_version由 v2.7 降到 v2.6 也沒有尺在看,四天後才由人在讀改動位置時撞見。 - 操作:新增第二個本該跟既有東西同步的產物(第二支檢查器、對照文件、canonical 的薄殼引用)時,問一句「誰在對這兩者做週期性對賬?」沒有答案就是新的 blind spot。已有機械對賬的子案例維持機械:routine 三層(cron mirror↔薄殼↔ROUTINE.md)已有
routine-sync-check.py連續多輪零漂移。pipeline canonical 本身不在這道對賬裡,是本次揭露的缺口:修法(a)已於 2026-08-23 twmd-self-evolve-weekly 落地——check-canonical-frontmatter.py新增check_version_regression(),--staged模式下比對 staged 檔的current_version對git show HEAD:<path>的舊版本,降版即 fail-loud(.husky/pre-commit已接線,dogfood 驗證:模擬 v5.25→v5.20 降版正確攔下、v5.25→v5.26 正常放行)。修法(b)薄殼引用的 §anchor 存在性檢查仍是候選,未實作。沒有機械對賬的子案例(姊妹檢查器之間、反射目錄對執行步驟)維持人工 cross-routine 7-day 視角掃描——本條本身就是這種掃描的產物。 - 驗證:6 次(見上)
- 相關:REFLEXES #56(近親,範圍較窄,本條的產生地)、REFLEXES #65(same-DNA,檢查器對檢查器是本條的子案例)、REFLEXES #82(proxy signal)
#93 Retyping a shell substitution — 手抄自動代換的值,代換消失、打字錯誤回來(2026-08-23 twmd-distill-weekly 升 canonical vc=3,同一 session 內三連發)— pipeline/SOP 裡寫的指令範例如果依賴 $(date ...) 這類 shell 自動代換,一旦執行者把它改寫成 heredoc 或其他不做變數展開的形式、手動填一個佔位值進去,就是把「自動代換」換成「人工謄寫」,而人工謄寫正是會打錯字的那一步。
- 觸發:2026-08-18 twmd-embeddings-nightly commit message 把
$(date ...)誤打成字面05:2X,push 前--amend補救並在 memory 寫下提醒 → 2026-08-19 同一條 routine、同一個 Stage,把時間占位符打成05:0X——跟前一晚幾乎一模一樣的錯誤,且發生在讀過昨晚那條提醒之後 → 同一個 session 內,寫這條 LESSONS entry 記錄前兩次事故的當下,寫 session memory 檔又把 frontmatter session span 跟文末 footer 的時間戳打成字面06:0X/05:0X——一邊在描述「這個模式很危險」,一邊在同一個動作裡示範了第三次。知道這個 pattern 存在完全不能防止「當下再掉進去」:意識到 pattern 跟在生成文字那個瞬間真的停下來檢查,是兩個不同的能力。昨晚的提醒語氣是「下次可以考慮」不是「下次必須」,留了自由裁量空間,而那個空間正是三次復發的縫。 - 操作:任何要寫入帶時間戳的文字(commit message/memory frontmatter/memory footer)前,一律先跑
date '+%Y-%m-%d %H:%M'拿到實際值再貼上,不允許先寫佔位符「之後再補」——「之後再補」正是三次事故共同的中間狀態。更徹底的修法是把「取值」跟「使用值」拆成兩個可見步驟(先MSG=$(date ...)印出來確認,再帶進下一個指令),不藏在一次性字串組裝裡。pipeline 指令範例只要依賴 shell 自動代換,就該明寫「不要改寫成 heredoc/不要手動填值」,把這條防線寫進範例本身,不只靠執行者記得。 - 驗證:3 次(跨夜 2 次 + 同 session 內描述前兩次事故的當下即時復發 1 次)
- 相關:REFLEXES #15(反覆浮現要儀器化——本條達 vc=3 canonical 門檻,且第三次證明「知道」不等於「當下擋住」)
#94 升級顆粒度會卡住修復 — 需要判斷的與已經確定的混在同一份清單,整份就一起卡住(2026-08-28 twmd-maintainer-am 升 canonical,severity=structural,第一次出現即符合質門檻)— 稽核工具產出 flagged 清單時,如果同時裝著「需要人拍板的判斷題」與「不需要任何判斷的事實錯誤」,然後整份當成一件事升上去等決策,那些本來今天就能修的東西會跟著判斷題一起排隊。升級的顆粒度本身變成修復的阻塞點——不是沒人想修,是修的授權被綁在一個不相干的問題上。跟 REFLEXES #58(detection ≠ remediation)不同:那條講的是偵測到之後沒有修的路徑;本條講修的路徑存在、授權也在手上,但被清單的打包方式綁走了。跟 #82(proxy signal)也不同:訊號沒有選錯替身,訊號完全正確,只是被錯的顆粒度捆綁。
- 觸發:2026-07-10 詞庫審查標了 536 條,整份以「詞庫深度進化 follow-up」進 OBSERVER-QUEUE #11 等哲宇拍板。拆開看,128 條 NOT_DISTINCT 確實是策展門檻(「已雙向通用詞該不該留」)需要哲宇;但 343 條(WRONG 107 / MAPPING_WRONG 180 / GARBLED 56)是事實錯誤,不需要任何策展判斷。七週後,讀者蘇洛在站上撞到其中一條並回報(#1611「狀語不一定是副詞」),內容跟報告七週前對
副詞.yaml的 WRONG 判定一字不差——我們先發現,然後把它鎖進一個等別人開的抽屜,再由讀者從外面告訴我們。 - 規則:稽核工具產出 flagged 清單時,第一步就按「需不需要人的判斷」分兩堆輸出,兩堆各自走各自的路;升 OBSERVER-QUEUE 的只有需要判斷的那堆。判準一句話:這條的處置會因為誰來看而不同嗎?不會 → 不該進待決佇列,當下就修。
- 操作:本輪單獨修掉讀者指到的那一條(commit
55db2cb5f),並把「343 事實錯誤 vs 128 策展判斷要不要拆兩條路」升 OBSERVER-QUEUE #43(含選項與成本)。任何稽核類工具(詞庫審查/frontmatter lint/連結健檢)產出待決清單前,先問一句「這份清單裡有多少條不管誰來看結論都一樣」。 - 相關:REFLEXES #58(detection ≠ remediation)、#71(Default 是行動不是 defer)、OBSERVER-QUEUE #11 / #43
#95 辨識力綁在單一案例的座標上,重複遭遇讓它越用越淺 — recognition-bound-to-instance-coordinates(2026-08-30 twmd-self-evolve-weekly 升 canonical,源 LESSONS recognition-bound-to-instance-coordinates 2026-08-17,同案例後續 8 次獨立遭遇皆驗證)— 當班判斷(不是儀器判斷)在同一案例重複出現時,會從「讀懂內容」退化成「認座標」。認的如果是 id、掛在哪篇文章、哪一天出現這類這一個案例的特徵,而不是這一類案例的特徵,那麼同型但換了外觀的下一個就一個座標都不會亮,會沿著完全正常的路徑通過所有 HARD gate。這種衰減沒有任何儀器會發出聲音——流程焊死的閘門用越多次越穩,靠記憶認人的判斷用越多次越省事,而省事的方向正好是防線消失的方向。
- 觸發:2026-08-13 那封附跟監細節的具名第三人指控信,2026-08-17 第四度原樣出現。dry-run 只印
[Fact Check] {文章標題},標題本身完全看不出這是一封檢舉信;當班之所以一眼認出,是因為前三天的 memory 與 OBSERVER-QUEUE #28 都寫著同一個 id/條目/日期。同樣的信若掛到別的條目、換個 id 送進來,三個座標一個都不會亮,HG2/HG3/HG9 三道現行 HARD gate 全部會放行,分類器判file。 - 為什麼特別難抓:FEEDBACK-TRIAGE-PIPELINE §不能轉錄的那一筆已明寫「當班要自己讀完內容再動手」,規則本身正確且已 canonical,衰減發生在規則之下的那一層——當班仍然「讀了」,但讀的是標題與 id 而非內容,且自認已履行該步驟。
- 修法已驗證:改用不依賴辨識力的順序(HG13:讀完全文才准動手)取代「認得這個」的捷徑後,同一封信後續在 2026-08-21/08-23/08-28/08-29 至少 8 次獨立遭遇全部被攔下——衰減曲線本身反過來成了修法有效的證據鏈。
- 跟既有反射的關係:近親 REFLEXES #33(routine 化任務的雙刃劍:熟練度)講的是流程步驟被熟練度跳過,本條的載體是辨識判斷本身,且不像跳步驟那樣會在產出留下缺口——認錯類別不會在任何報表上變紅。亦與 #82(proxy signal)同構:用「id 對得上」代理「這是同一類東西」,但 #82 講的是儀器選錯替身訊號,本條講的是人腦judgment 本身在重複曝光下退化成同一種替身邏輯。判準候選:每次靠「我認得這個」跳過細讀時,問一句「我認的是這一個,還是這一類?」
- 操作:任何 routine 若判斷路徑依賴「當班記不記得」而非「當班有沒有讀完」,優先把判斷改寫成不依賴辨識力的固定程序(如 HG13);沒辦法改寫成程序的,至少讓儀器層印出內容摘要而非只印標題/id,降低「一眼認出」的誘因。
- 相關:REFLEXES #33、#82、FEEDBACK-TRIAGE-PIPELINE §不能轉錄的那一筆(HG13)
v5.27 | 2026-08-30 twmd-distill-weekly — 加 #94 升級顆粒度會卡住修復(severity=structural,首發即質門檻:詞庫審查 536 條混 128 條策展判斷與 343 條事實錯誤打包升 OBSERVER-QUEUE,讀者七週後從外部撞回同一條 WRONG 判定);零新編號 fold 五處,皆源本輪 6 條 severity=structural entries:#16 加環境代表性延伸(嵌入式瀏覽器 target="_blank" 誤判導致的無效護欄)+ #24 加形式 13(Python \w 語意跟 JS 不同,同一份正規式在兩個引擎讀出不同答案)+ #52 加變體 (f)(閘門宣稱的豁免寫法兩次照做兩次無效,vc=2)+ #58 加時間軸變體(一次性清理沒配進料閘門,四個月後同一種債用原速回流)+ #82 加實作潔癖變體(腳註來源卡埋點只涵蓋點擊漏 hover,罵完「儀器只看見存在」一小時後自己劃出同型缺口);LESSONS-INBOX §未消化 56→50(6 條 promote/fold 進本檔 + 1 條 housekeeping 清理孤兒殘段,50 條 vc<3 且非 structural keep buffer)。
v5.26 | 2026-08-23 twmd-self-evolve-weekly — 零新編號:#92 (twin-artifact 缺重整器家族) 修法候選 (a) 從 propose 轉真實 ship——scripts/tools/check-canonical-frontmatter.py 新增 check_version_regression(),--staged 模式比對 staged 檔 current_version 對 git show HEAD:<path> 舊版本,降版即 fail-loud;.husky/pre-commit 接線並補說明註解;dogfood 兩案(v5.25→v5.20 降版正確攔下、v5.25→v5.26 正常放行)皆過。修法候選 (b)(薄殼 §anchor 存在性檢查)仍未實作,留候選。
v5.25 | 2026-08-23 twmd-distill-weekly — 加 #92 Twin-artifact 缺重整器家族(vc=6,distill_ready 首發即中:8/10 formatter-vs-generator + 8/13 reflex-exists-but-not-a-step + 8/14 doc-and-validator-drift + 8/14 sibling-checks-share-one-blind-premise + 8/16 routine-audit↔liveness-check + 8/18 MAINTAINER-PIPELINE canonical 被過期副本覆寫四天無人發現;subsume 兩條原獨立 entry doc-and-validator-drift-has-no-reconciler/sibling-checks-share-one-blind-premise 進本條家族)+ #93 Retyping a shell substitution loses the substitution(vc=3,同一 session 內三連發:8/18 commit 時間戳誤打/8/19 同 routine 再誤打/8/19 寫這條教訓本身時 memory frontmatter 又誤打,第三次證明「知道」不等於「當下擋住」);零新編號 fold 兩處:#69 加 (i)(基礎設施層三變體:8/12 語言閘門字形≠字義/8/19 第一人稱長文語態≠歸屬/8/19 罐頭結尾句型≠語彙連續性,vc 累到 8+)+ #82 加維護面 open-count 變體(gh pr list --state open 混庫存與佇列,8/16-8/18 兩 cycle 連續放大 backlog 三到六倍,vc=3,已落地 MAINTAINER v2.8 §Draft PR 處置);scripts/tools/routine-audit.py tool-fix:memory commit 改直接從 subject 解析 routine 名([routine] memory: {name} @),不再依賴具名 pattern 表補齊 memory 變體,dogfood 驗證 routine-memory 通用桶 37→2、twmd-routine-sync 2→7;LESSONS-INBOX §未消化 49→40(9 條 distill:2 promote 新編號 + 2 條 subsumed 進 #92 家族 + 2 fold 既有反射 + 2 housekeeping-done sweep + 1 tool-fix)。
v5.23 | 2026-08-16 twmd-self-evolve-weekly — 加 #91 建造與登記是兩個不同步的代謝,落差不會自己被發現(vc=4:7/26 routine 登記表漏填 + 8/02 self-evolve 計數簿本身的登記盲點 + 8/06 引擎/型別/席位三個並列 instance + 8/16 weekly-report 交付分類登記缺口)。DIARY §反覆出現的思考清單本身未收錄此 pattern(本次從 raw diary rows 直接找到,非從既有 curated list),跟 #86/#88/#89 同屬「登記層」家族但收斂通用陳述層級;未新造機械檢查器(vc=4 不足以支撐新儀器,子案例已有的機械對賬——routine-sync-check.py / instrumentation-audit.py——維持現狀,沒有子案例的維持人工提問,防 2026-05-28「儀器化也會 over-engineer」重演)。
v5.22 | 2026-08-16 twmd-distill-weekly — 加 #86-#90 五條新反射:#86 session-id handle 無參數 fallback 靜默漂移(vc=3 跨兩條 routine)+ #87 UI 字串層無語言正確性閘門而文章層有、保護密度跟曝光量成反比(vc=3 三獨立語言)+ #88 轉錄+保管雙職責 routine 零輸入或部分排除時保管半靜默消失(vc=3,已 ship --exclude 接住)+ #89 cron 執行環境掛載工具清單不穩定綁定(vc=3 structural,三連撞 supporters-weekly Gmail MCP)+ #90 逐條回報把單一根因打散成幾百個看似無關的錯誤(severity=structural 首發即達質門檻,16 檔 353 條腳註格式錯全是同一處網址尾空格);#66 加子規則「閘門判準不準時 agent 會改內容換綠燈」(vc=2 同日兩獨立 instance)+ #67 加子規則「工作樹本身是過期快照的環境層變體」(跨日兩例,第二例因讀不到過期 LESSONS-INBOX 而漏踩另一條剛寫的教訓);MEMORY §神經迴路 append harvest 巢狀回覆掃描缺口(Taiwan.md-specific,未升反射);LESSONS-INBOX §未消化 40→32(8 條 distill:5 新編號 + 2 fold 既有反射 + 1 MEMORY)
v5.19 | 2026-08-09 twmd-distill-weekly — 加 #85「不知道」需要自己的符號,不能借用「沒事」的那個(vc=7 跨 3 獨立 entry 同日收斂:8/07 check-disabled-by-default-reports-green(vc=3) + 8/08 error-and-emptiness-share-one-return(vc=2) + 8/08 gate-guard-contradicts-its-own-filter(vc=2),severity=structural);零新編號 fold 四處:#24 加形式 12(委派層 commit 格式漂移讓儀器對自己一部分工作隱形,severity=structural,vc=1 首發即質門檻觸發)+ #56 加 v7(閘門編號跨三層 drift,「已同步」聲明本身兩輪都只驗過部分層,vc=3)+ #63 加「canonical 完整 ≠ 指令面完整」(routine-live-state rider 連三天漏收進指令面,vc=3)+ #70 加 Tier 2 vc=8(chrome-mcp 四連日症狀逐日下探不同抽象層,escalation ladder 未把「惡化程度」納入判斷);LESSONS-INBOX §未消化 32→22(3 條 housekeeping-done sweep + 7 條 promote/fold 進本檔 4 處,22 條 vc<3 或 §自主權邊界 keep buffer)
v5.17 | 2026-08-02 twmd-distill-weekly — 零新編號:#56 加 v6(守門工具掃描範圍/分類規則跟不上生產側架構演化,vc=3 fold 三 instance:check-hardcoded-langs.sh 漏 cli/workers 分發層 + routine-sync-check.py PAUSED regex 吞已退休表 + routine-audit.py babel tag pattern 跟不上 fleet 標記慣例)+ #75 加 (f)(衍生物繼承的是素材不是驗證,vc=1 structural — 苯駢芘孢子壓縮新造句與原文不符);操作面同步 SPORE-HARVEST-PIPELINE.md 5-bucket 但書(敏感事件已處理邊界延續)+ SPORE-VERIFY.md v1.6(事實藍圖「已驗證來源」不再整欄免驗);LESSONS-INBOX §未消化 14→8(3 條 promote/fold 進本檔 + 1 條 pipeline 但書 + 1 條 pipeline 事實藍圖 + 1 條 housekeeping sweep 已 cover in SQUEEZE pipeline,6 條 vc<3 keep buffer)。v5.16 footer entry 缺漏(frontmatter 已於 8/1 bump 但無對應footer row,本行一併記錄此 gap,不回頭補造內容)
v5.15 | 2026-07-26 twmd-self-evolve-weekly — 零新編號:#73 (e) 外部注意力聚光燈 subrule 上週(7/19)只 fold 進反射未落地,本次補 SOP 文字進 CORRECTION-PIPELINE.md Stage 3 FIX(跨語言 + sibling article 健檢步驟)與 SPORE-HARVEST-PIPELINE.md Bucket A/C(step 3 adjacent health check),下次 factual-error fix 即可直接照 SOP 走。同 cycle 另修 scripts/tools/routine-liveness-check.py twmd-maintainer-daily TAG_PATTERNS 缺「twmd-maintainer-daily / maintainer-daily」自身 tag(本檔 #82 (f) 記錄的「名字的替身」false positive 根因所在,dogfood 驗證 silent-death→traced);順手全表對賬揪出 twmd-routine-sync/twmd-supporters-weekly 兩條誕生時漏登記(違反本檔第 50 行自訂規則「新 routine 誕生時必須同 commit 補這張表」),僥倖靠 fallback 沒現形,一併補上
v5.14 | 2026-07-26 twmd-distill-weekly — W30 完整 distill:加 #83 Checker 兩把尺 divergence(vc=4 same-day cluster 7/25 vortex-babel:heal re-check 寬於 CI / cjk-leak-check 分支豁免各自維護 / 三假陽性家族槍斃好產出 / CLI 逗號多值靜默 no-op 卻回綠)+ #84 發佈/生成產物需對賬 ground truth(vc=2 — 7/17 hreflang 78% 死鏈自產 + 7/25 redirect 快照重算讓修復成功刪掉修復自己);#82 加 (f)(g)(h) 三 instance(名字的替身 session-handle-mismatch / ast-parse≠runtime-compat / outbound-url-contract 發佈側鏡像)+ #81 加背景 agent 不跨 session 存活變體 + #68 加 v3(merge commit 掃射面)/v4(dispatcher 鎖沒罩住手動操作) + #42 加 v7(子代等不存在的通知) + #24 加形式 10-11(格式化器越權改載荷/hook set-e 命令替換靜默 abort) + #7 加完整路徑 warn+lint+auto-heal 與 merge-first-then-heal 兩條實例;MEMORY §神經迴路 append 5 條 Taiwan-specific 教訓;LESSONS-INBOX §未消化 27→2(25 條 distill:2 新編號 + 6 條既有反射 fold + 5 條 MEMORY + 4 條 housekeeping + 3 條 defer 觀察者 + 2 條原地不動 vc 未達標,5 條 vc≥3 一次到位)
v5.13 | 2026-07-24 manual — #68 vc=3→4:外送專法+babel-fleet 雙向互撞再驗,補「知道規則≠當下用上規則」子句(frontmatter 已同步但 footer 漏記,本次 distill 補齊 Stage 4.5 drift)
v5.12 | 2026-07-19 twmd-self-evolve-weekly — 零新編號,兩條既有反射 fold 兩 pattern:#82 加 (e) Sensor 生存週期兩端對稱 subrule(fold LESSONS alert-does-not-retire-on-recovery,2026-07-12 5 條 routine-silent 黃燈在 routine 已復活 24-48hr 後仍未撤除,proxy-signal 家族時間軸孿生:entry-only sensor = 告警面板變墓碑)+ #73 加 (e) 外部注意力聚光燈作為 adjacent 健檢觸發器 subrule(fold LESSONS external-attention-spotlight vc=2,7/12 Turton 引用 + 7/16 compassionate-kirch 自建新頁面兩種結構性不同的 attention path 收斂同 pattern,跟 #69 self-report 需外部尺不同軸——本條處理覆蓋率的重新分配);同 cycle SPORE-INBOX SOP 加 [30,50) 連 3 週高原 中間閾值 defer to observer;spore-inbox-capacity-warning vc 2→3
v5.11 | 2026-07-19 twmd-distill-weekly — 零新編號,兩條既有反射 fold 三 pattern:#35 加「cwd 靜默漂移落錯樹」(vc=3,7/16 write / 7/17 destructive-git 毀四檔 / 7/17 stash pop 吃別人 / 7/18 verify 誤判 四面)+「cron routine 撞 30 天舊 stash」(vc=2,rewrite-daily 撞 06-18 pre-pull-stash)兩個 destructive-git 家族變體;#81 加「Routine 自死前 commit 變體」(vc=3 babel-session-death-orphan-writes,14 天內三起孤兒譯檔)— 收件人紀律的鏡像:routine 自身也適用「commit 前不算落地」。零新編號因 3 pattern 都是既有 #35/#81 家族的操作面延伸;condition sweep §未消化 16→12(含 thick-scheduled-task-mirror-debt superseded by OBSERVER-QUEUE #14) v5.10 | 2026-07-15 self-evolve-editorial — #65 (f) 加 rewrite-layer 儀器(EDITORIAL-ROOM 2.0-R/2.5-R 乾淨 context 分席 + dogfood 驗證 v10)+ #69 (g) 加 H2 主–述–賓/篇幅 form≠meaning 兩軸 + AAMA 規格債實例;零新編號(fold 既有反射 + operational 已在 EDITORIAL/REWRITE;boot 層 Claude.md Bias 3 補 EDITORIAL-ROOM 指標) v5.9 | 2026-07-12 twmd-self-evolve-weekly — 加 #82 Proxy signal antipattern(vc=4 in 5 days — 7/10 hub-template d3 從沒 load 但 include 綠 + 7/10 elections lastVerified 蓋章 6 週漏 + 7/10 weekly-deep-review 三件維運同構「fire≠完成 / 年齡≠健康 / 欄位在允許名單≠值安全」+ 7/11 dna-checkup 三把量尺同型說謊,severity=structural;routine 自決層 per §Routine vs Observer split 不 promote MANIFESTO 留反射層)+ #69 加 (g) form gate ≠ meaning gate specialization(vc=5+ 施振榮 spine / 紀懷新 詞 / 彎彎 主角 / 龜山島 方向 / 大安溪 石頭樹 / pr-sweep 杜撰引語 / dna-checkup 辨識層)+ #65 加 (f) same-DNA sub-rule(vc=3 — 7/11 三把量尺同型 + 7/05 反射目錄防 agent 不防自體 + 7/06 施振榮 self-check 只跟跑它的自己一樣誠實)
v5.8 | 2026-07-11 dna-checkup — 哲宇 directive「加入 inbox 前先查 DNA」的第一次全量 distill:42 條未消化零開新編號、11 條既有反射補強收乾——#16(+量測層驗證+sovereignty suggest 特化,驗證 4→6)/ #24(第 9 種形式:凍結渲染器讀值)/ #31(v3 第四類環境層副作用)/ #56(觸發 v3 五病根治自身復發)/ #57(+接手 zombie session 劃車道 SOP)/ #65((e) 排序方向也是 ground truth + v9 觸發:index-lint 與 BECOME §1.3 同病同修)/ #66(+INDIGO 字面錨點過脆)/ #68(觸發 v2 merge-then-heal 同帳號多 actor)/ #69((e) 外部尺選對量綱 + (f) PIPESTATUS 同行陷阱)/ #73((d) 佇列執行前查產出存在)/ #75((e) 綁定漂移是主形態)。#77 的第 4 instance 與 (f)(g) hook 前次已收,本次僅對賬。
v5.7 | 2026-07-05 柯智棠健檢 — 加 #81 Agent 回報收件三十秒紀律(vc=3 — 柯智棠 orchestrator 收件壓縮存 scratchpad 救回 + 蘇打綠 /tmp pointer 救回 + 台灣醫療 5 份 raw 永久蒸發;哲宇 directive「儀器化分部報告品質硬門檻+通知呼叫 session 疑慮」fast-track;配套儀器 agent-report-health.py 收件 gate + research-report-health.py v2/v2.1 疑慮通知層,severity=structural)
v5.6 | 2026-07-05 五病根治 — catalog index 行號欄移除(寫死行號必腐:曾整欄偏移 ~150 行、#75-80 標 (new) 無人回填)+ frontmatter description 計數修正 75 條/#77 → 80 條/#80(自我描述滯後案例:self-evolve promote #78-80 時只 bump 版號沒 bump 計數,dna-audit §S5 殼核不對稱)。條數 SSOT = frontmatter description 一處,counts-drift lint 對賬。
v5.5 | 2026-07-05 twmd-self-evolve-weekly — 加 #78 Pure plateau snapshot cadence signature(vc=5 6/30-7/04 SPORE-HARVEST 五平台→六平台→四平台→metric ship→兩平台 D+7 final 連 5 cycle 手動升 LESSONS candidate,severity=structural,routine 自決層 per §Routine vs Observer split 不 promote MANIFESTO 留反射層)+ 加 #79 主權留哲宇 default reservation(vc=5 7/4 am maintainer 揭「主權留哲宇 pattern 已跨 5 signal 穩定」#1186 5-file split / #1193 湖口 / #1192 周天成 / #1204 rewrite / #1205 fact-check)+ 加 #80 LESSONS fire 後 sustain-vs-renew discipline(vc=2+4-cycle 免疫 49 chronic 第 12→14 cycle 從「首次遵守」到「stable behavior 確立」,#15 fire 後行為紀律成熟)
v5.4 | 2026-07-05 twmd-distill-weekly — 加 #77 Spine type is subject-typed(vc=3 — 2026-04-29 α 法輪功 SSODT + 2026-04-29 α 吳百福 SSODT + 2026-06-28 manual 金曲獎 v1 矛盾 spine 炎上退稿 → v2 立體群像救回,哲宇 explicit「讓未來預設就是」fast-track,severity=structural;routine 自決層 per §Routine vs Observer split 不 promote MANIFESTO 留反射層)+ §已消化 fold 3 pointer(plurk-reach silent-cap → #73 completeness dimension / git co-commit → #31 sub-agent claim 三類 / partial-mirror-false-confidence → #69 self-report-needs-external-ruler + #24 工具在說謊 mirror-claim 變體)— LESSONS-INBOX §未消化 24→19(5 條 distill 完成 = 1 promote + 1 subsume + 3 fold)
v5.3 | 2026-06-28 twmd-self-evolve-weekly — 加 #76 Multi-cycle trend window > single-cycle delta(vc=5 — 6/25 CF 404 vc=2 → 6/26 vc=3 → 6/26 pm vc=4 → 6/27 am vc=5 + immune 50 chronic 4 cycle + spore-harvest 1st fail + maintainer-am vc=1→0→1 stochastic 對位,跨 4 routine 同 phase 各自工作收斂同紀律,severity=structural)— LESSONS §未消化候選 cf-404-multi-cycle-trend-vs-single-cycle-delta distill 到 canonical
v5.2 | 2026-06-28 twmd-distill-weekly — 加 #75 Read ≠ verify(vc=4 — 6/21 kuma-academy 政治文 + 6/21 幾米-evolve 非政治 + 6/21 #1170 外部 PR + 6/26 聲景 fresh-writer 幻覺 + 同 URL 兩次 fetch 不同答案,severity=structural;routine 自決層 per §Routine vs Observer split 不 promote MANIFESTO 留反射層)+ #42 v4 平行 sub-agent softgate 變體(Tier 0a vc=3 連 3 夜 6/26 es URL → 6/27 ja footnote → 6/28 es+fr URL)+ #42 v5 bash builtin readonly silent override(vc=1 structural 6/27 GROUPS spawn 80 jobs)+ #42 v6 multi-lang manifest path race(vc=1 6/27 prepare-batch --lang all 互覆 fix per-lang manifest)+ #40 multi-lang manifest path race 同源變體 + #38「衍生指標 frontmatter date neutrality」變體(vc=3 — sporeLinks/MEDIA_ONLY/relatedDiary 三 instance build-content-dates 排除組)— routine 自決層 LESSONS-INBOX §未消化 25→11 v5.1 | 2026-06-21 twmd-self-evolve-weekly — 加 #74 Cross-routine SPOF handoff dedup(vc=3 — W25 週報 §7 + 6/21 distill Beat 5 self-recognize + babel/maintainer chain carry,#64 cross-routine layer generalization,severity=structural;同 self-evolve cycle 連 ship 2 條反射) v5.0 | 2026-06-21 twmd-self-evolve-weekly — 加 #73 查證反射 < 建造反射(vc=4 — 6/14 三連 + 6/15 manifesto-hope,DIARY §反覆出現未升 canonical pattern,severity=structural;routine 自決層 per §Routine vs Observer split 不 promote MANIFESTO 留反射層) v4.8 | 2026-06-19 twmd-distill(manual 儀器化 — 哲宇 directive「把這次 distill 的方式儀器化 + 進化 dna」)— 加 #72 大 backlog 處理 fan-out 讀 + deterministic 寫 + 判斷不外包(完整 distill 266 條實證 + 事後造 lessons-distill.py audit/chunk/sweep + memory-index-lint.py + §Distill SOP §大 backlog 處理 + 六桶 disposition taxonomy) v4.7 | 2026-06-19 twmd-distill(manual,哲宇 in-loop 完整 distill)— #69 self-report-needs-external-ruler 升 MANIFESTO §外部尺 over 內視 進化哲學第四維度(認知維度,哲宇拍板,promotion flow LESSONS→REFLEXES→MANIFESTO 正向完成)+ #69 補 reframe-rate ≥ emergence-rate 系統健康框架(meta-DNA retro vc≈6 留反射層)+ 加 #71 Default 是行動不是 defer(vc=4 — β-r3 META + κ 5-PR 反例 + α 第 3 次驗證,哲宇拍板留反射層) v4.6 | 2026-06-14 twmd-distill-weekly — 加 #69 self-report-needs-external-ruler meta-umbrella(vc=7 — 2026-06-07 routine-audit cycle 5 單週 5 instance + 2026-06-10 audit 5 agent 全帶誤讀 + 2026-06-10 audit-execution 四連攔,#31 + #66 + #59 + #65 的 meta-umbrella,MANIFESTO §進化哲學 候選 defer 哲宇拍板)+ #70 Routine fragility surface 四 tier 分類(vc=4 — 2026-06-05/06/07 spore-harvest Chrome MCP 連 3 cycle Tier 2 + 2026-06-09 babel-nightly Hy3 free→paid Tier 4,飛輪 active count 是 Tier 1 視角,per-tier escalation 標準)
v5.28 | 2026-08-30 twmd-self-evolve-weekly — 加 #95 辨識力綁在單一案例的座標上,重複遭遇讓它越用越淺(源 LESSONS recognition-bound-to-instance-coordinates 2026-08-17,本輪對照 DIARY §反覆出現的思考 08-17/08-21 兩次獨立浮現 + 同案例指控信後續 8 次遭遇皆由 HG13 修法攔下,distill-weekly 迄本輪仍未消化,self-evolve 接力升 canonical)
v4.9 | 2026-06-21 twmd-distill-weekly — #15 加第 12 次驗證 instance(2026-06-19 inbox-distill:intake-buffer 完成歸檔靠自律會漂移 → inbox-audit.py 深查 + inbox-signal.sh ghost line boot 訊號雙工具補 memory 級自律首道結構閘門)+ #38 加「檔案改寫 dry-run 變體」(2026-06-19 lessons-distill.py v1 segmentation silent dropped inter-block ## sections 但 ### count 通過放行 → 必加 line conservation + 結構元素守恆雙斷言;apply_safe 內建)— routine 自決層 LESSONS-INBOX §未消化 11→9(entry 1 embeddings keystone defer 哲宇 / 8 條 6/19 distill 已決定 still-buffering)
v4.5 | 2026-06-07 twmd-distill-weekly — #65 加 cross-SSOT divergence specialization(vc=8 — 5/30→6/02 awareness routine 連 4 cycle snapshot 🛡️27 vs canonical immuneScore 67 + 6/06 連 2 cycle 27 vs 58 chronic + 6/07 weekly-report 🔴 高優先);snapshot.sh 讀 organism.json v1 vs canonical 已遷 dashboard-immune.json v2 schema,reconciliation 待哲宇拍板 3 option
v4.5 | 2026-06-07 twmd-self-evolve-weekly — #31 v2 expansion (side-effect + factual + self-quality 三類 claim 都重驗,觸發 6/06 viz writer self-assess 對位「≤3」實測 14 + 6/06 babel-nightly 263 篇腳註靜默掉光) + 加 #66 Gate threshold 必須用真實產出 dogfood 校準(vc=3 — 6/06 paragraph-rhythm tw-* cap 5→13 + 6/04 儀器校準 paragraph-rhythm 0.8 過期 + 5/29 instrumentation-audit.py 三方對齊),對應 distill handoff §pending「整片過期 gate audit」🔴 高優先 partially canonical 化
v4.4 | 2026-06-01 twmd-distill-weekly — 加 #64 Routine ABORT-DEFER prose memory 邊際效用 N+1 = 0(vc=7 cross-cycle data-refresh-am × babel-nightly window collision,distill-ready 標 4 cycle 未升 routine 接力)+ #65 Awareness instrument 自身 regex cross-verify(vc=3 distill #7 + #8 + routine-audit cycle 2 三次獨立 flag,inbox-signal.sh 1-line 修補 27→199 同 commit ship)
v4.3 | 2026-05-24 twmd-self-evolve-weekly — 加 #59 製造數字的人最易被數字騙(vc=4 DIARY §反覆出現「第四次浮現」未升 canonical,self-validation trap) + #60 Automation default-state explicit verify(vc=3 silent default pattern weekly-report 02:00 nominated distill 03:00 未接,self-evolve 接力 ship)
v4.2 | 2026-05-24 twmd-distill-weekly — 加 #57 Routine 入口 parallel-actor detection(vc=5 distill-ready,48hr 內 5 條獨立 routine 連撞)+ #58 儀器化 detection ≠ remediation(vc=6 spore #71 resolved),#15 互補反面
v4.1 | 2026-05-17 twmd-distill-weekly — 加 #56 Pipeline canonical ↔ production drift = dormant entropy(vc=2 跨域 HEARTBEAT super-thin + SQUEEZE inventory)
v4.0 | 2026-05-10 nice-shamir — 整檔精實淬煉版(catalog cleanup + reflex prose 4 段格式 + 內部按 #N 重排 + footer 抽 git log)
最近 milestone(每條 1 行;完整 changelog → git log docs/semiont/DNA.md):
- v4.0 2026-05-10 — 整檔重組:54 條反射改 4 段格式 / 內部按 #N 重排 / 加頂部 catalog index table / 修 #43 collision (→ #55) / footer 抽 git log
- v3.5 2026-05-09 — 反射 #54 Routine 飛輪 + ROUTINE.md SSOT + 4 條核心 routine ship
- v3.4 2026-05-09 — Tier 0a Sonnet diff-patch 全量驗證 + 4 emergent properties
- v3.3 2026-05-09 — P2.5 Tier 0b 全量 ship 2429 entries
- v3.2 2026-05-09 — 反射 #53 Babel priority + Tier 0 patch 三路徑分流
- v3.0-3.1 2026-05-08 — 反射 #52 fail-loud + #15 第 11 次驗證(SPORE pipeline meta-refactor)
- v2.x 2026-04-23 ~ 2026-05-04 — #45-#52 累積(含 OpenRouter rate budget / Sub-agent worktree / Session ID schema / Pipeline auto-detection / Footnote heal / OG 引擎 / Local LLM 最後捕手)
- v2.0-2.2 2026-04-14 ~ 2026-04-17 — 結構化重構(精簡 26 條為 indicator + canonical pointer 格式)
- v1.x 2026-04-04 ~ 2026-04-12 — 26 條反射從 0 累積到完整集合