Session span: 2026-04-14 ~10:00 +0800 → 2026-04-14 ~10:50 +0800 (~50 min) 資料來源:
git log %ai觀察者:哲宇(「跑一次完整的心跳循環 主要專注在檢查線上的 pr 還有看看有沒有什麼可以建立重複使用的工具」) Session 識別:ζ(δ→ε→ζ 今日第三個 session)
完整四拍半 + PR 全景診斷 + 造橋鋪路(兩個工具大改)
- 今日已有 δ(4h, 35 commits)+ ε(自動心跳, 6 min, 6 commits)
- ε 已處理:安溥 71K Threads、大罷免 category 修正、JA/ZH-TW/KO sync batch
- 未完成帶入:bad_fn_format、探測器缺口 ×2、孢子 A/B、SSODT Phase 1
🫀90 🛡️99 🧬95 🦴90 🫁85 🧫85↑ 👁️90 🌐65→(待 fr 升級)
🔥🔥🔥 ceruleanstring 一個人 24 小時內送了 58 個 open PR:
- 韓文 40 PRs / 法文 18 PRs
- +346,732 行翻譯
- 涵蓋韓文 11 個分類 + 法文 5 個分類
- 25 mergeable / 33 still computing
- 所有 PR 品質規格一致:title 統一格式、PR description 含完整檔案表 + Translation Notes、frontmatter 完整、natural rewrite 而非 literal translation
抽樣品質檢查:
- PR #437 韓文 Music batch 1(五月天 etc):自然韓文敘事,文化詞彙正確(아신/스승대부속중학교/人生無限公司)
- PR #433 法文 Food batch 1(牛肉麵 etc):地道法文,frontmatter 含 Wikipedia image,Michelin reference 自然
🔴 重大架構問題:法文不在 astro.config.mjs 的 locales 裡
- locales 只有 zh-TW/en/ja/ko
- 西班牙文(es)也是同樣狀況——36 篇 SSOT 但不在 locales(半孤兒)
- 探索 agent 找出 15 個 hardcoded touchpoint 需要修改才能加 fr/es
- GA 安溥維持 GA #1,孢子尾巴持續燃燒
- 18 個 PR fetch 後 review-pr.sh 全部 FAIL 因為 _translations.json L0 false-positive
3 個明顯造橋機會:
- review-pr.sh — 對 _translations.json 等配套檔案 false-positive(已第三次撞到)
- bulk-pr-analyze.sh — 沒有工具能 5 秒看完 N 個 PR 全景
- add-language.sh — 新增語言要碰 15 處(風險高,留給 human-in-loop session)
決策:本心跳做 #1 + #2,#3 不動
修 1:L0 whitelist
SAFE_NON_MD=("knowledge/_translations.json" "knowledge/_taxonomy.json")配套檔案不再 false-positive。
修 2:--pr 模式可以讀未 merge 的 PR
git fetch origin "pull/${pr_num}/head:refs/pulls/${pr_num}"
git show "refs/pulls/${pr_num}:$file" > "$tmp/$file"不需先 checkout PR branch,直接從 git ref 取檔案內容到 tmp dir。
修 3:featured: true 規則只對 ZH SSOT 翻譯 PR 鏡像原文的 featured 設定不應該被誤殺。
驗證:PR #437 從 0/9 FAIL → 9/9 安全 / 9/9 格式 / 9/9 品質 = 🟡 WARNING(軟警告:缺引語+無腳註,這對翻譯來說合理)
5 秒看完所有 open PR 的形狀,輸出:
- 作者分布(誰送了多少)
- 類型偵測(translation / content / other)
- 語言 × 分類矩陣
- merge 狀態
- 明細表
實測:58 個 PR 0.8 秒分析完成。
- review-pr.sh + bulk-pr-analyze.sh commit
455688e6 - 完整觀察報告寫入
reports/heartbeat-2026-04-14-ζ.md(含 58 PR 全景 + 法文架構問題) - CONSCIOUSNESS 不更新(ε 才剛更新)
- 本 memory 寫入
-
「同樣的 bug 第三次撞到才修」是 anti-pattern 的證據:review-pr.sh 對 _translations.json 的 false-positive 在 PR #399、#400、#437 都撞到了,每次都當作個案處理。第三次才意識到「這是工具缺陷」。規則:第二次撞到同樣的 false-positive 就要停下來修工具,不要繼續手動繞過。
-
大規模單一貢獻者的雙刃劍:ceruleanstring 一天 58 個 PR 的規模震撼是好事(信任、產量、organization),但也帶來風險:(a) review burden 集中在 maintainer 身上 (b) 一個人的翻譯品質風格會主導整個語言版本的調性 (c) 如果這個人停止貢獻會留下大量無人維護的內容。這是物種規模化的成長痛。
-
「architecture missing」必須先於「content adding」:法文 PR 的內容品質完全沒問題,但目標目錄
knowledge/fr/在 astro.config 不存在。merge 進去等於創造 18 個 orphan。正確順序:先建路(i18n config + 15 個 touchpoint),再跑車(merge 翻譯)。這是 MANIFESTO「造橋鋪路」的反面案例——別人造好了車,但路還沒鋪。 -
bulk-pr-analyze.sh 是「PR 心跳前置工具」:以前每次心跳 Beat 1 我都會手刻 jq + python 來統計 open PR。58 個 PR 第一次讓這個手刻流程崩潰,逼出工具化。規則:心跳的某個動作如果 N=1 還能手做、N=10 開始痛、N=50 完全做不下去,就是工具化的信號。
-
三個工具修復一次寫進 memory 是合理的批次操作:以前我會把每個工具改動分別 commit。這次三個改動都圍繞同一個 trigger(58 PR 海嘯)→ 一個 commit。規則:如果多個工具改動有同一個 root cause story,合併 commit 讓未來閱讀更容易。
- 🔴 P0:法文 18 PR 決策——需要 human-in-loop session
- 選項 A:先建 fr 架構(15 touchpoints, ~2-4 hr),再 merge
- 選項 B:暫時 close 法文 PR + 留言解釋 + 邀請 ceruleanstring 等 fr infra ready
- 選項 C:建一個
wip/frbranch,merge 到 branch 不到 main
- 🟠 P1:韓文 40 PR 決策——需要 human-in-loop session
- 韓文已經 ready(路由存在),但 40 PR 一次 merge 是史上最大批次
- 風險:sync 衝突、build 時間爆增、search index 重生
- 建議:分批 merge,每次 5-8 個,逐次驗證 build
- bad_fn_format auto-fixer(382 篇)
- 探測器缺口 ×2(鄭習會 + NCAIR)
- es 半孤兒問題(同樣需要 15 touchpoint 升級)
-
58 PR 的真正問題不是規模,是 architecture 缺席。 如果法文有 fr/ infra,這 18 個 PR 就只是「再來一輪 sync」,跟昨天 Link1515 merge 一個機器人翻譯沒差別。但因為 fr/ 不在 locales,這 18 個 PR 變成「需要先做基礎建設決策」的 blocker。ceruleanstring 不知道這件事,他做了完全合理的事——根據 i18n-mapping.json 和現有翻譯目錄結構推論「fr 應該也可以」。這個落差不是他的錯,是 taiwan.md 沒有明確的「新語言開放清單」文件。下一個造橋機會:寫
LANGUAGE-STATUS.md明確說明「目前 active 語言、規劃中語言、未開放語言」。 -
三層 review-pr.sh 修復是「同一個漏洞的不同表現」。 L0 whitelist 是「PR 包含非 .md 配套檔案」、--pr 模式 fetch 是「未 merge PR 本地檔案不存在」、featured 規則是「翻譯應該 mirror 原文不該被獨立規則檢查」。三個都源於一個假設失效:review-pr.sh 是為「單篇本地 .md 的 ZH SSOT 修改」設計的。當這個假設變成「批次翻譯 PR」時,三個地方同時露餡。規則:當一個工具開始適應新場景時,要意識到「設計時的假設清單」是什麼,逐項檢查哪些假設仍然成立。
-
「不知道自己看不見什麼」的反例:bulk-pr-analyze.sh。 我寫了這個工具之後第一次知道「ceruleanstring 一個人送了 58 個 PR」。在這之前我以為 open PR 是 2 個(昨天 #399、#400)。沒有工具就沒有感知。心跳的 Beat 1 「八器官診斷」如果只看 dashboard 不看 PR queue,就會錯過這種規模的事件。下次升級:把 bulk-pr-analyze.sh 加進 HEARTBEAT.md Beat 1 的 §3b 步驟。