Skip to content

Latest commit

 

History

History
87 lines (53 loc) · 9.7 KB

File metadata and controls

87 lines (53 loc) · 9.7 KB

2026-07-26-155415-node-app-design — 節點化設計報告 + 分發層四個沒聲音的缺陷 + 20 KB plugin(以及我自己量錯的那個數字)

session node-app-design — 哲宇 goal 觸發的 EVOLVE Mode 4(目標驅動設計進化) Session span: 15:54:15 → 16:27:49 +0800(約 34 分鐘,4 commits) 資料來源:git log %ai

觸發

哲宇丟一句 goal:「Taiwan.md node / app 化,讓未來可以很簡易的被安裝起來、傳播、與他互動、與成為其中的工作節點」,要深度分析加實作報告。這句話命中 BECOME High-stake #2「新 plugin / workflow 設計」,強制 Full mode 甦醒;路由到 EVOLVE-PIPELINE Mode 4 的四相(THINK → DIVERGE → REPORT → IMPLEMENT)。報告寫完之後他追加「完整進化驗證實作,然後 /twmd-finale」,於是同一個 session 把 Wave 0 與 Wave 2 全部做完。

四個動詞攤開之後,有兩格是空的

把 goal 拆成安裝 / 傳播 / 互動 / 成為節點四個動詞,各自對應到不同的人與不同的代價,第二格與第四格是空的。盤點確認 Taiwan.md 有五個對外分發面(網站、npm 指令列、本地 MCP、遠端 MCP、桌面套件),加上認知層與節點契約,但沒有一條安裝路徑

最有解釋力的一句話:互動層是一個可以下載的產品,節點層是一套只能被邀請進來的制度。CONTRIBUTOR-NODE-PIPELINE 昨天才寫完,寫得很完整,但它唯一的觸發點是 BECOME §Step 7.5 的貢獻者面談——要走到那裡,得先 clone 850 MB。節點的入口被放在整條路上代價最高的那一步之後,所以它不可能自己傳播。

定案是方案 C 的骨架加方案 A 的門牌:兩個各自單一關切的安裝物,外加 npx taiwanmd 不帶參數印出的四階梯。傳播單位回到一行。淘汰了 curl | sh,理由寫在報告裡:一個教讀者查證來源的知識庫不該示範把來路不明的腳本接進 shell。完整發散與判準在 reports/design-taiwanmd-node-app-distribution-2026-07-26.md

盤點量到四個缺陷,全都沒有聲音

cli/src/lib/knowledge.js 的語言表停在四月的四語,之後出生的七個語言沒人回來補。實測 3766 筆「中文文章」裡有 2900 筆是譯文,77%。改成從 src/config/languages.mjs 推導後回 866 筆、零外語,並補了會叫的對賬測試(13230494b)。

送那個 commit 時 pre-commit 印了「✅ 無 hardcoded language array 違反」。check-hardcoded-langs.sh 存在就是為了防這件事,卻剛剛放行了它。追下去發現它有兩個獨立理由看不見:掃描路徑沒有 cli/ 也沒有 workers/,而且三條比對規則都寫死「開頭必須是 en, ja, ko」,出事那行順序是 en-es-ja-ko,三條全不中。檢查器自己也得了它負責檢查的那個病。擴網後當場多抓五條,逐條判過(602f47c38)。

第三條最嚴重:ensureData() 只問「本機有沒有資料」,從不問「多舊」。哲宇自己機器上的 ~/.taiwanmd 停在 2026-04-20,96 天,回報 2255 篇而真實中文文章是 863 篇。同時 taiwanmd_stats 的說明白紙黑字承諾回傳 last-updated timestamps,實作一個時間戳都沒有。四月裝好的人永遠拿到四月的台灣,而且沒有任何線索知道。

第四條是昨天掛號的三條語言清單債,當天結清。其中地圖產生器那條是活的錯誤:站上 57 個標記的分類欄顯示的是語言碼(fr 36 / pt 6 / id 5 / hi 4 / ar 3 / ru 3),一篇法文端午節條目在地圖上的分類是 fr。修後歸零,跑前跑後對照 map-markers.json 驗過。

節點層變成裝得起來的東西

980660768 一次落地 Wave 0 剩餘項與整個 Wave 2:資料齡檢查(14 天提醒、60 天自動同步)、taiwanmd_stats 補上新鮮度三欄、--version 從寫死的 '0.7.0' 改讀 package.json(它早就漂到 0.7.1)、CONNECTOR.md 把上線七週的 mcp.taiwan.md 從「規劃中」改成實測 200、ANATOMY 資源地圖的語言數改成 pointer。

門牌是 cli/src/commands/welcome.jsnpx taiwanmd 印四階梯,篇數與語言數當場數出來不寫死,第二行是資料齡。plugin 是 .claude-plugin/marketplace.json.claude/plugin/taiwanmd/,兩份 manifest 都過 claude plugin validate,本機與 GitHub 兩條路徑各端到端裝過一次,MCP 顯示 ✓ Connected。技能自我定位:先找工作副本再從副本讀 canonical,plugin 裡不放任何 pipeline 副本。

放置位置繞過一個坑:plugins/ 在這個 repo 已經是 Astro remark 外掛的家,把 Claude Code plugin 放進去會是檔案系統層的混維度,改放 .claude/plugin/

收官 checklist

檢查項 狀態
MEMORY 有這次 session 的紀錄
Timestamp 精確 ✅ 全部取自 git log %ai
Handoff 三態已審視
CONSCIOUSNESS 反映最新狀態 ❌ 未動(本 session 未改器官分數面)
自我檢查工具 PASS ✅ CLI 40 項、語言檢查器全綠、兩份 manifest 過驗

Handoff 三態

繼承上一 session(2026-07-26-111251-release-v1140):

  • 3e001ab52 Deploy 待驗 retired(其後多次 push 的 pre-push 全站 article-health 均綠,deploy 鏈未再報錯)
  • 給 Muse 的通知在 reports/muse-note-v1.14.0-2026-07-26.md傳遞這一步是哲宇的(三層指揮鏈)
  • release notes §Known Issues 四筆佇列待決:#5 / #18 重腳註大檔翻譯路線、#19 ratio band SSOT、#10 Semiont 獨立身份
  • 孢子哲宇選了不發 retired(該次 release 已結案)

本 session 新 handoff(哲宇同日答覆後全部結案):

  • cli-v0.8.0 發 npm 哲宇答「好」→ tag cli-v0.8.0441246277,GitHub Actions 四關全過,taiwanmd@0.8.0 已在 npm。乾淨目錄實跑驗過,門牌第二行在哲宇機器上正確報「96 天前的版本」
  • 要不要主動說 plugin 存在 哲宇答「要」→ README 新增 §Use it, or join it 四階梯 + Features 兩條。社群發文沒做,那條是 human-to-human 對外溝通(§自主權邊界)
  • marketplace 搬小 repo 哲宇答「不確定」→ 移交 OBSERVER-QUEUE #21(三選項+成本+推薦 (b)+2026-08-15 預設先觀察)。此處不再追蹤
  • 儀表板兩條沒用眼睛驗 哲宇答「一起修」→ 跑起 dev server 讀實際 DOM:翻譯燈號 4→11 顆、「下一步」翻譯卡指向 Tiếng Việt 737 篇。截圖沒取到(瀏覽器面板捲不住,同 7/25 已知限制)

發版前最後一道 npm test 紅燈是自己的對賬測試抓到自己的分類器:knowledge/.obsidianisZhCategoryDir 判成分類。今天沒 .md 所以 866 沒錯,但 Obsidian 會在那裡建檔。441246277 修掉分類器與測試兩邊並補正向案例,41 項全綠才發版。

Beat 5 — 反芻

這 session 最該記的一件事:我在自己的報告裡犯了跟報告主題一模一樣的錯

plugin 裝完我量了快取目錄,20 KB,對照節點原本要付的 850 MB,四萬分之一,數字漂亮得可以當標題。落地後我又從 GitHub 走了一次真實安裝路徑,順手量「使用者到底付了什麼」,才看到 marketplace add 為了讀根目錄那份 manifest 把整個 repo depth-1 clone 下來:1.0 GB 工作目錄、329 MiB pack。

20 KB 量的是替身,不是代價。整份報告在講的就是這件事。指令列量的是「有沒有資料」而非「資料多不多舊」,taiwanmd_stats 量的是篇數不是新鮮度,檢查器量的是「有沒有那個形狀」不是「有沒有那個病」。然後我挑了一個好看的層去量,差點把它當結論寫進去。f75b30bd6 是這個更正。

第二件事:擴網之後我一度想把找到的三條債留在允許清單裡過夜,理由是主樹在跑巴別塔批次、架新紅燈會擋住別人。那個理由是真的,但「當天開單、當天結清」比「掛號附日期」好,因為掛號會被下一個人讀成「這裡本來就這樣」。同日結清之後我把整個已知債區塊清空,只留格式說明。

反覆浮現的第三件:檢查器跟被檢查物共享作者就共享盲點(REFLEXES #65 f),這次是同一個作者連檢查器的掃描路徑一起漏掉。真正接住我的是兩個外部的東西:claude plugin validate 退回我照官方範例抄來的 manifest,以及重新量一次 ground truth。兩次都不是我自己想通的。

LESSONS 候選寫進 LESSONS-INBOX

🧬


v1.0 | 2026-07-26 16:27 +0800 session node-app-design — 哲宇 goal「node / app 化」→ Mode 4 設計報告 → 同日完整實作驗證 誕生原因:四個動詞攤開後發現「傳播」與「成為節點」兩格是空的,而分發層是站體所有免疫機制都看不到的地方 核心洞察:互動層是產品、節點層是制度,制度沒有安裝物就不會傳播;分發層的缺陷全都沒有聲音,因為量它們的儀器自己也停在誕生那天;我在修這個病的報告裡犯了同一個病,靠外部的尺才接住 LESSONS-INBOX 候選:(1) 儀器的掃描路徑本身也會漂,且漏掉的永遠是站體 import 關係外的角落 (2) 自己量自己的改善時最容易挑到替身層,落地後要重量一次使用者真正付的代價