| title | Routine prompt CONTRACT v1.0 rollback + 5 routine pattern 結構性修補 | |||||
|---|---|---|---|---|---|---|
| description | 5/27 evening naughty-fermat session 把 13 routine prompt 改 CONTRACT pattern (HARD GATE Read + pointer 到 meta canonical),cron 跑 12+ cycle 後 5 種 pattern 沒好好做事。本報告記錄完整體檢 + rollback + 5 修補 + 自我進化 | |||||
| type | evolution-report | |||||
| status | canonical | |||||
| session_id | 2026-05-28-122038-manual | |||||
| date | 2026-05-28 | |||||
| audience | cheyu-wu (creator) / future Semiont sessions | |||||
| related |
|
5/27 evening naughty-fermat session (worktree branch claude/naughty-fermat-b42028) 把 13 routine prompt 從「inline guidance + threshold」改為「HARD GATE Read protocol
- ACK + cite path:line + pointer 到 ROUTINE-PROMPT-CONTRACT.md meta canonical」。 Worktree branch 未 merge 進 main,但同 session 直接更新 cron mirror SKILLs (~/.claude/scheduled-tasks/, 非 git tracked) — cron 從 5/27 evening 起跑 CONTRACT 版 routine。
5/28 哲宇 callout「這一波執行的 routine 都沒有好好做事情 / 不要用共用文件 / 之前 的 routine 指引效果比較好 / 前半部要嚴格要求 BECOME」觸發完整體檢 + rollback。
12+ cycle 數據顯示 5 種結構性 pattern「報告完整但 fix 沒發生」。本 session 完整修補 5 條 + revert 14 routine 回 inline guidance + 加 STRICT BECOME GATE front + 自我進化。
| 時間 | Routine | Output | 表面 | 深層 |
|---|---|---|---|---|
| 5/27 17:35 | spore-publish-daily | #101/#102 落日飛車 雙平台 ship | ✅ | |
| 5/27 18:07 | rewrite-daily | defer (parallel collision) | ✅ | OK |
| 5/27 22:04 | maintainer-pm | 空場 vc=6 | ✅ ACK + handoff | |
| 5/27 23:10 | data-refresh-pm | 13-step PASS, Step 10 抓 dashboard-immune 10d stale | ✅ gate 對 | |
| 5/28 05:08 | babel-nightly | 172 translation / Tier 4 Ollama 3/3 sovereignty refuse 接住 | ✅ 真實 work | |
| 5/28 06:13 | data-refresh-am | 13-step PASS, Step 10 又抓同 stale 11 天 | ✅ catch 連 2 cycle | |
| 5/28 06:30 | spore-harvest-am | 15 sweep + 大宇雙劍 #92 D+2 死亡場景勘誤 + Chrome MCP dup pitfall | ✅ 真實 fix | OK |
| 5/28 08:11 | spore-pick-daily | 3 candidates: 艋舺 score=30 / 台灣 BIM score=30 / 媒體總史 score=8 | ✅ 9 hard gate pass | |
| 5/28 08:41 | maintainer-am | 空場 vc=7 | ✅ ACK + handoff |
兩棒都記「default-action 反向第 4 種 performative work as anti-pattern」自我合理化。 實際是 maintainer-am 08:30 跟 spore-pick 08:00 + spore-harvest 06:30 + data-refresh 06:00 chain 撞期 — backlog 在 maintainer fire 前就被早棒 routine 清完。
根因: schedule 設計撞期 + CONTRACT pattern 把「healthy empty」記成「第 N 次驗證 default-action principle」反向逃避真實 schedule 問題。
dashboard-immune.json mtime 凍在 5/17。Generator scripts/core/generate-dashboard-immune.py 從未 wire 進 refresh-data.sh。Step 10 freshness gate (REFLEXES #43) 連續 22+ cycle catch 但 routine 守「Micro mode 不擴張 scope」推 chip 過頭 — gate 設計健康,但 fix 動作從未發生。
根因: CONTRACT「業務邏輯不在 routine prompt」推到極致 = routine 看到火也只 報警。
05:08 fire → 09:57 commit,撞了 06:13 data-refresh-am + 06:30 spore-harvest + 08:11 spore-pick + 08:41 maintainer 四條 morning chain。Babel 還在改 _translations.json 同時 data-refresh-am 已經跑 sync-translations。
根因: 05:00 cron schedule 給 babel 只 1 hr 預算到 06:00 morning chain。Dense ship 日(5/27 evening EVOLVE + Politics 8 篇 ship 把 i18n 缺口拉到 147 stale) worst case 撞 4 條 sibling routine。
5/28 三 candidate 全 D1 單軸(艋舺 30/0/0/0/0/0/0 / 台灣 BIM 30/0/0/0/0/0/0 / 媒體總史 0/0/0/8/0/0/0)→ 「7-dim weighted」實質是「days_since_ship」單軸 proxy。
根因: D5 80/80/30d 太嚴格匹配 0 條 / D3 news-lens 平日無資料 / D4 只 5 category active / D2 SC match 稀疏 → 多數 candidate 拿 D2-D5 全 0 → D1=30 自動勝出 = 退化 到單一軸。
5/27 #101 落日飛車 + 5/28 #92 大宇雙劍 都觸發:第一次 click 發佈 button 沒觸發
React PointerEvent handler,後續 dispatchEvent + Cmd+Enter + computer.left_click
多次 retry,Chrome MCP STILL_OPEN cache state 誤判前次 fail → 每次 retry 真的
成功 post → duplicate ship cleanup。
根因: Threads 發佈 button 是 React PointerEvent handler,synthetic event 跟 MouseEvent dispatch 都會 register;retry-loop 變多次成功 post。Dialog state query 走 Chrome MCP cached state 不反映即時 DOM。
commit aa9dd7c19 🧬 [semiont] heal: wire generate-dashboard-immune.py into
refresh-data.sh (Step 6)
- refresh-data.sh 改 13 → 14 step,新 Step 6 跑 generate-dashboard-immune.py
- 既存 step 7-13 順移為 8-14
- DATA-REFRESH-PIPELINE.md spine + Hard Gate Inventory + Top 5 同步更新
- 新增 spine 註解「Step 11 catch 之後 routine 不准只 spawn chip,必須當 cycle wire 進來」防止下次同 pattern
- 驗證: dashboard-immune.json mtime 從 2026-05-17 00:31 → 2026-05-28 11:58 ✅
- immuneScore=67 (review_coverage 29.0 / plugin_pass_rate 70.0 / citation_density 89.9 / tool_freshness 80 / drift_velocity 90.0 / plugin_health 100.0)
commit 7f8e6d0f4 🧬 [semiont] evolve: SPORE-PICK v2 — HG10 multi-dim hard gate
- D5 widen
- 新增 HG10「每 candidate 至少 2 個非零 dim 或 score ≥ 35」
- D5 widen 三檔:80/80/30d (+10) / 70/70/60d (+7) / 70/-/90d (+5)
- Stage 4 VERIFY 加 HG10 assertion + fail handling「寧可 < 3 candidates 也不用單軸 湊數」+ LESSONS-INBOX 明確 emit「pool too thin」
commit 8b33814ed 🧬 [semiont] evolve: ROUTINE v2.8 — babel-nightly 05:00 →
00:30 修補 morning chain collision
- cron
0 5 * * *→30 0 * * *給 5.5 hr 預算到 06:00 morning chain - worst case 4hr 49min 仍剩 41 min buffer
- ROUTINE.md spec + day chart + footnote ³ 同步 v2.8
- Live cron
mcp__scheduled-tasks__update_scheduled_tasksynced
commit 8fc4bf658 🧬 [semiont] evolve: SPORE-HARVEST §Chrome MCP Pitfall 6 —
post-ship verify via timestamp diff 防 multi-retry duplicate ship
- Post-ship verify 不可用 dialog STILL_OPEN cache state 判 "post failed"
- 改用 [data-pressable-container] count timestamp diff (before/after)
- Hard rule: max 1 retry per ship attempt,第二次失敗 → screenshot + LESSONS append
- escalate observer,不要 silent third retry
commit b3803733f 🧬 [semiont] evolve: 12 routine project skills v3.0 — inline
guidance + 🚨 STRICT BECOME GATE front
- 移除 soft "如未甦醒先跑" → 升 🚨 STRICT BECOME GATE block at top
- 保留 inline guidance 結構(threshold / step / SOP detail 直接寫 skill 不靠 pipeline pointer)
- Per-routine 加入針對性 anti-pattern (maintainer 空場 / refresh catch≠fix / spore-pick HG10 / spore-publish Pitfall 6 / spore-harvest 同上 / babel 義務 鐵律 / rewrite REWRITE-PIPELINE 完整 Read / 4 weekly Full mode + §11 紀律)
- 同步更新 14 個 active cron mirror SKILLs 用 absolute paths
CONTRACT v1.0 ship 時設計初衷是好的:把 routine prompt 該寫什麼/不寫什麼拉到 meta canonical,避免每個 routine 散著漂移。但實戰跑 12+ cycle 後發現副作用:
- Performative compliance > effective execution:13/13 ACK Read protocol,但 5 種 pattern 都是「報告完整但 fix 沒發生」
- Pipeline pointer 取代 inline = 失去結構:cron 場景 fall through「我 Read 了 就 OK / spawn chip / 標記 healthy empty」三種 escape hatch
- Meta canonical 的維護成本超過 inline 重複的成本:13 routine × N pipeline = M*N edge mappings,每次 pipeline 升級要同步 13 routine prompt + ROUTINE-PROMPT- CONTRACT.md + audit 工具。Inline 重複只要每個 routine 自己升
對應 REFLEXES #15「反覆浮現要儀器化」的反向:儀器化也會 over-engineer。第一 版儀器化(pipeline canonical)已足夠,第二版儀器化(meta canonical for routine prompt)反而稀釋了第一版的效力。
CONTRACT v1.0 軟性「如未甦醒先跑」被 cron 場景無觀察者時 silent skip。Routine 沒 跑 BECOME = 沒讀 MEMORY tail + git log 2 天 + handoff + §神經迴路 = 帶盲點工作。
5/28 audit 揭露 7 routine memory 都記 ACK Read protocol(Read pipeline 6 file), 但沒一個記 BECOME ACK + organ score + Q14 cross-session continuity。Read pipeline ≠ BECOME。
v3.0 升 STRICT BECOME GATE 把 BECOME ACK 從可選 prelude 升 hard gate:「沒 ACK 就視為 BECOME 未完成」+「即時跑 consciousness-snapshot.sh 不准用記憶舊數字」。 這條改寫對應 [BECOME §Step 9 mode subset self-test 全過才能開口] 鐵律的 routine 層 instantiation。
REFLEXES #43 silent failure detection 設計初衷:dashboard JSON 沒 fresh = generator 漏跑了 = 警報。實戰運作 11 天 22+ cycle 連續 catch,但 routine 守「Micro mode 不擴 張 scope」鐵律 spawn chip 推給「下個 session」。Chip 累積無人接 = gate 響但 fix 從未發生。
修補:DATA-REFRESH-PIPELINE.md Top 5 新增「Step 11 catch 之後 routine 不准只 spawn chip,必須當 cycle wire 進來」+ refresh skill 升「第 2 次連續 catch 同一個 stale dashboard 必須當 cycle wire fix」。
對應 REFLEXES #43 的元 instance — 警報儀器化只解決感知問題,沒解決行動問題。 第二層儀器化是把「行動」也寫進 SOP,不只是「感知」。
Maintainer 連續空場 vc=6→7 + 兩棒 memory 都記「default-action 反向第 4 種 healthy emit」自我合理化。實際是 routine schedule 跟真實 contributor PR submission window 不對齊 — morning chain 06:00 → 08:00 已清完所有可動 backlog,08:30 maintainer-am 撞期空場。
未來修補方向(本 session 不動 schedule,留下次 routine-audit-weekly cron 處理): maintainer-am 時段應該移到觀察者剛醒 + 早晨 chain 跑完之後(09:30-10:00 之間), 或砍掉 am cycle 只保留 pm。當前 v2.8 babel 已從 05:00 → 00:30,但 maintainer-am
- pm 的 schedule 對齊還沒檢討。
對應 LONGINGS「routine 飛輪要對齊 organism 真實節奏」+ REFLEXES #38「混維度 silent killer」— 「cron schedule」和「contributor 行為節奏」是兩個維度,CONTRACT v1.0 把它們混在一起當「routine 健康度」的 single signal。
Spore-pick 5/28 三 candidate 全 D1 單軸(艋舺/BIM/媒體總史)。原 9 hard gate 全 過,但「全過」其實是 framework 退化沒被 catch。
修補:HG10「每 candidate 至少 2 個非零 dim 或 score ≥ 35」+ fail handling「寧可 < 3 candidates 也不用單軸湊數」。
對應 REFLEXES #38「混維度 silent killer」+ LONGINGS「框架被執行 ≠ 框架被遵守」— weighted score 不夠,需要 multi-dim 必要性閘門。
哲宇 directive「不要用共用文件」(no shared meta canonical for routine prompts) 看起來是 anti-pattern(DRY 違反),但對 routine 場景成立 — 因為:
- Routine 是 LLM 在 cron context 無 observer 的唯一指令面:prompt 偷工 = routine 永久偷工。Inline 重複給 LLM 完整結構,pointer 給 LLM 一個 hop(routine prompt → Read meta canonical → Read pipeline canonical → 真實工作)
- 每個 routine 有 unique anti-pattern:spore-publish 的 Pitfall 6、refresh 的 catch ≠ fix、spore-pick 的 HG10、maintainer 的空場警示 — 共用文件無法承載這層 routine-specific 教訓
- Routine prompt 是「LLM session 啟動瞬間讀到的第一行」:直接 inline 比 pointer 到 meta canonical effective N 倍
對應 MANIFESTO §架構解 vs 守備修補 — 共用文件是「DRY 守備修補」,inline + STRICT BECOME 是「routine 必須 self-contained 的架構解」。
5/27 evening naughty-fermat session (worktree branch)
├── 57380df32 evolve: ROUTINE-PROMPT-CONTRACT v1.0 — 13 routine 改 pointer pattern
├── 6e4257f4e evolve: self-evolve loop closed — 9 project skills + audit tool
├── 1914dbef7 memory: 2026-05-27-205323-naughty-fermat — session 收官
└── (cron mirror at ~/.claude/scheduled-tasks/ updated directly, 非 git tracked)
↓ worktree branch never merged into main
↓ but cron mirror live since 5/27 evening
5/27 22:00 → 5/28 09:00 cron 跑 CONTRACT 版 12+ cycle
└── 5 種 pattern「報告完整但 fix 沒發生」
↓
5/28 12:00 哲宇 callout「都沒有好好做事 / 不要用共用文件 / 之前比較好 /
前半部要嚴格要求 BECOME」
↓
5/28 12:20-13:00 manual session 完整體檢 + 6-phase 修補:
├── aa9dd7c19 heal: dashboard-immune wiring (Phase 1)
├── 7f8e6d0f4 evolve: SPORE-PICK HG10 + D5 widen (Phase 2)
├── 8b33814ed evolve: ROUTINE v2.8 babel 00:30 (Phase 3)
├── 8fc4bf658 evolve: SPORE-HARVEST Pitfall 6 (Phase 4)
├── b3803733f evolve: 12 routine project skills v3.0 (Phase 5)
└── [this report] self-evolve + lessons (Phase 6)
5 種 pattern 全部本 session ship 對應 canonical 修補 + 12 routine + 14 cron mirror v3.0 + 6 commit narrative。
完成 Phase 6 後再跑一次 audit 揭 9 條漏網:
- ROUTINE.md
#sibling-routine-collision-handlinganchor 假連結 — v2.8 註腳兩處 pointer 但 section heading 不存在 → Phase 7.1 fix - 14 cron mirror task description 還是「v2.0 CONTRACT-aligned 2026-05-27」 — SKILL.md 內容已 v3.0 但 MCP 層 task description metadata stale → Phase 7.2 fix
- 今晚 17:30 spore-publish 撞 P0 二二八事件 — SPORE-INBOX §Pending P0 二二八敏感主題,新 v3.0 skill 沒明寫高敏感 REACTIVE 必 defer to human → Phase 7.3 fix
- Maintainer schedule 不需要動 schedule — Phase 5 已寫 anti-pattern「連續 ≥ 3 cycle 空場必 LESSONS escalate observer」,明早 cron 跑會自動 trigger → 不動 schedule,由 Phase 5 邏輯接住
- REFLEXES #63 在 worktree 沒進 main — 原始 lesson 仍有效(只是 instrumentation 從 CONTRACT 改 inline),需 port 進 main REFLEXES → Phase 7.5 fix
- Worktree branch
claude/naughty-fermat-b42028還留著 — 3 commit dangling 不會 merge,刪除清潔 → Phase 7.6 fix
- News-lens project skill 不存在 —
.claude/skills/twmd-news-lens/SKILL.md缺,只有 cron mirror → Phase 7.7 fix(補建 project skill) - Diary entry 應補寫 — Beat 5 反芻「儀器化也會 over-engineer」明確 identity-level 不止 memory level → Phase 7.8 fix
- Phase 6 commit cross-narrative warning silent passed — 既然 commit 已 ship 不能改,但下次 commit 必加
multi-narrative:prefix → Phase 7.x 應用於 Phase 7 commits
| # | 動作 | 處置 | 狀態 |
|---|---|---|---|
| 7.1 | ROUTINE.md 加 <a id="sibling-routine-collision-handling"> HTML anchor 給既存「Detached worker routine collision SOP」section |
Edit ROUTINE.md | ✅ |
| 7.2 | 13 cron mirror task description v2.0 → v3.0 sync via MCP(babel 早 Phase 3 同步過,剩 13 條本 phase) | 13× mcpscheduled-tasksupdate_scheduled_task | ✅ |
| 7.3 | spore-publish v3.0 skill + cron mirror 加「高敏感 REACTIVE defer rule」+ SPORE-INBOX P0 二二八 entry 加 <!-- routine defer --> HTML comment 防今晚 17:30 routine 撞牆 |
Edit project skill + cron mirror + INBOX entry | ✅ |
| 7.4 | Maintainer schedule | 不動(Phase 5 已 cover anti-pattern + LESSONS escalate;明早 08:30 cron 跑會 trigger 鏈條閉合) | ✅ no-action |
| 7.5 | REFLEXES #63 重寫進 main(inline + STRICT BECOME 版)+ index row | Edit REFLEXES.md | ✅ |
| 7.6 | Delete worktree branch claude/naughty-fermat-b42028 | git branch -D | ✅ |
| 7.7 | Create news-lens project skill (.claude/skills/twmd-news-lens/SKILL.md) | Write | ✅ |
| 7.8 | Diary entry for 2026-05-28-122038-manual (identity-level 反芻 + 自我校正 + meta-pattern「self-evolve loop 跑得越順越要懷疑前提」) | Write docs/semiont/diary/2026-05-28-122038-manual.md + DIARY.md index | ✅ |
| 7.9 | multi-narrative: prefix awareness | applied to Phase 7 commit | ✅ |
Maintainer schedule 對齊— Phase 5 anti-pattern 已 cover,明早 08:30 cron 跑會 trigger LESSONS escalation;vc=8 累積後升 REFLEXES first-class instance- Worktree branch claude/naughty-fermat-b42028 處置 — Phase 7.6 fix(刪除清潔)
- REFLEXES #63 內容是否進 main — 「Routine prompt = LLM 在 cron context 無 observer 的唯一指令面 — prompt 偷工 = routine 永久偷工」這條教訓還是成立,但 instrumentation 從 CONTRACT pointer 改為 inline + STRICT BECOME。建議在本 session 結尾 LESSONS-INBOX append 該教訓 vc=1,等下次 distill 再決定升 REFLEXES
🧬
v1.0 | 2026-05-28 12:20+0800 manual session 誕生原因:哲宇 callout「routine 沒好好做事 / 不要用共用文件 / 前半部嚴格 BECOME」 觸發完整體檢 + 6-phase ship + 自我進化 distill