Session Log
每次 session 結束後在這裡寫那次做了什麼、跑過什麼、剩什麼沒做。 下次開新 session 第一步:「讀 SESSION_LOG.md 對齊狀態。」
2026-05-23|對標 photofanz/latticework 補 5 大段 + 全面再嚴審
起源
朋友的對照站 https://photofanz.github.io/latticework/ 65 模型 / 7 學科。經對照他用 D3 + 純 SPA 的 5 大特色,挑出 5 項做進我們站:
| 段 | 內容 |
|---|---|
| C | 卡片底部加「▸ {主案例}」pin(學科色箭頭 + hairline 分隔 + sr-only a11y label「案例:」) |
| E | 新增 99_Templates/模型補卡_SOP.md — 13 常駐段 / 7 字典段;補 4 新段(為什麼商業上重要 / 實務啟示 / 常見陷阱 / 延伸思考),既有 35 卡不強制 retrofit,下次補卡(c19 / c20)才走新格式 |
| A | 新 assets/synergies.json 10 組招牌組合(Buffett 認知三柱 / 護城河三件套 / Cialdini 影響力四連擊 / 平台冷啟動三步 / 散戶虧錢四騎士 / 風險管理三防 / 產業破壞三劍客 / 激勵設計四件套 / 稀缺定價四連發 / Munger 認知校正三招),新增「招牌組合」view tab;舊 lollapalooza pairs view 改名「兩條聯動」;prep_for_quartz.py 加 model_titles 驗證腳本(typo 立刻擋)。26/35 模型覆蓋率 74%(未覆蓋 9 條:冪次法則 / 可得性捷思 / 地圖不等於領土 / 外部性 / 機會成本 / 稟賦效應 / 第一性原理 / 複利效應 / 賽局理論) |
| B | AI 推薦 view 改名「✦ 智慧推薦」+ 加 mode toggle 2 模式:即時推薦(rule-based、debounced 250ms、純前端計分、免費無限)/ ✦ AI 推薦(既有 Llama 3.3 70B、每日 60 quota)。即時模式計分公式:scenario 6/學科 4/full-name 5/full-case 4/full-summary 3/bigram 0.5-3/network neighbor 1.5/scenario partial 1.5。5 種 reason chip(scenario gold / kw mute / disc blue / net purple / tier green) |
| D | 新「關係圖譜」view — D3 force-directed graph (CDN lazy load + memoize),35 節點 + 11 lollapalooza 連結,學科 7 色節點(6 在用),常駐 8 條金邊(#d4a05a),degree-based 大小,hover 高亮鄰居 + tooltip(學科·tier·case·one_liner),drag/zoom,legend 點擊 dim 過濾,重置按鈕,dot-grid 背景 |
tab bar 最終排列
卡片牆 / 表格 / 實證個案 / 兩條聯動 / 招牌組合 / 關係圖譜 / ✦ 智慧推薦 — 7 tab 桌面寬剩 680px。
全面再嚴審 5 輪(A~E 後)
- R1 code dedupe / DRY ✅ 7 處「switch grid + select」一致 oneliner
- R2 state 管理 ✅ aiMode 切換正確、instantResults 持久
- R3 synergies 內容正確性 ✅ 10/10 組 model_titles 都在 why+case 文字中引用、build-time 驗證
- R4 a11y / mobile ⚠️→✅ graph 節點原本無 tabindex/role/aria-label/keyboard handler → 補
tabindex=0+role=button+aria-label=「{學科}·{tier}·{title},主案例 {case}」+ Enter/Space handler + focus-visible 樣式。Mobile 加 880/540 兩段 media query 縮 graph height (640→480→420)、syn-card 排版、ai-mode min-width=0 - R5 failure 衛生 ⚠️→✅
/api/recommend404 在 local dev 無 cache 導致 3 輪切 view 打 17 個 failed fetch → 加 60s_aiQuotaFailedAtfailure cache,後續同情境只剩 1 個 fetch
改動檔案
| 路徑 | 變動 |
|---|---|
assets/cards.js | +600 行(renderSynergy / renderGraph / drawGraph / ensureD3 / computeInstantRecommendations / renderInstantResult / scheduleInstantCompute / instantTokenize / state.aiMode + state.synergies + state.instantResults + a11y 修補 + failure cache) |
assets/cards.css | +280 行(mm-card-case + arrow + a11y sr-only / mm-syn-* / mm-reason-chip / mm-ai-mode / mm-g-* graph + focus + media query) |
assets/synergies.json | 新檔 10 組招牌組合 |
index.md | 加 graph + synergy + preload synergies tab、AI tab 改名「✦ 智慧推薦」 |
_scripts/prep_for_quartz.py | 加 synergies.json model_titles 驗證 |
99_Templates/模型補卡_SOP.md | 新檔 SOP |
部署狀態
- 本次 commit + push GitHub vault ✅
- 完整 deploy(vault build → quartz content → quartz build → CF Pages push)✅
- live URL https://mental-models-dzp.pages.dev
加碼:補 2 組 synergy 涵蓋 (a) 類缺口
10 組 → 12 組:
- 資源配置三件套 [機會成本 + 沉沒成本 + 二階思考],case Buffett 收掉紡織業務
- Game Theory 多方博弈三招 [賽局理論 + 囚徒困境 + 公地悲劇],case Uber/Lyft/Didi 補貼大戰
涵蓋率 26→28/35(80%)。剩 7 條未覆蓋(多屬 meta-level 思維工具或 niche),不勉強塞。
已知待辦
- 內容:剩 7 條未覆蓋(冪次法則 / 可得性捷思 / 地圖不等於領土 / 外部性 / 稟賦效應 / 第一性原理 / 複利效應),下次想擴可考慮但不急涵蓋它們
- 內容:35 既有卡可在補卡 SOP 13 段標準下逐步 retrofit(不急)
- 互動:graph view 鍵盤焦點目前是 Tab 一個個跳,沒做方向鍵 lattice 跳轉(next iter)
- URL state:
state.aiMode沒進 URL,分享?view=ai一律進 instant 模式(可接受) - mobile:graph 在 < 540 viewport 節點密度仍偏高,可考慮 default zoom-out 或 hide low-degree label
- 內容:5/26 c19、5/29 c20 兩個 HBS 個案如果在 vault 補成完整 model(從 mental-models 角度),會增加 cross-vault 連動
2026-05-16|首版完工 + Quartz build script + 內容嚴格審查
完成
結構
- 建立完整 vault:
00_入口/01_常駐工具/02_字典/03_HBS個案/04_決策模板/05_個人日誌/99_Templates/_scripts/_build - README、DEPLOY、使用指南、Latticework 核心邏輯、字典總覽 全部到位
內容(總 35 條完整 mental model + 2 HBS case + 模板 / 日誌)
- ✅ 8 條常駐工具(完整四件套 + 600-800 字白話例):逆向思考、能力圈、二階思考、確認偏誤、沉沒成本、機會成本、激勵機制、基礎機率
- ✅ 27 條字典版(P0 11 + P1 16):見 02_字典總覽
- ✅ 2 個 HBS 個案:Theranos(7 條 lollapalooza)、Kodak(6 條 lollapalooza)
- ✅ 3 個決策模板:決策前 checklist、Post-mortem、踩雷/用對紀錄
- ✅ 2 個 Templater 模板
技術設施
- ✅ Obsidian 1.12.7 本地完整運作(Dataview + Templater + Excalidraw)
- ✅ Quartz 預處理 script
_scripts/prep_for_quartz.py:Dataview 靜態化(支援 TABLE/LIST/FROM/WHERE/SORT) - ✅
DEPLOY.md:CF Workers 完整部署指南 - ✅
.gitignore、git repo init
Debug 戰役(3 層連環 bug)
- YAML inline 陣列 + CJK → Dataview 解析失敗 → 改 block style
- Python on Windows write_text 自動轉 CRLF → Dataview 不認 → 強制 LF(
write_bytes) source_pdf: HBS: Theranos(value 含冒號未引號)→ 整個 frontmatter 被丟棄 → 加雙引號
→ 細節寫進 frontmatter 約定 鐵律 3 條
內容嚴格審查(2 個審查 agent + WebSearch 驗證) 🔴 嚴重錯誤已修正:
- 基礎機率:Sherlock Holmes 引言誤植給蒙格 → 改回 Conan Doyle
- 沉沒成本:Iridium 「月費 USD 3,000」實為手機售價、重量 22 oz 非 16 oz
- 過度自信:LTCM 槓桿 25 倍 → 實為 250+ 倍(USD 48 億權益 → USD 1.25 兆部位)
- 稟賦效應:Kahneman 馬克杯買價 USD 3.50 → 實為 2.87
- 冪次法則:a16z Facebook 經典例改為 Instagram(USD 25 萬 → 7,800 萬,312 倍)
- 路徑依賴:Dvorak「快 30%」是被質疑的迷思(Liebowitz & Margolis 1990)
- 公地悲劇:鱈魚 25 年未恢復 → 實為 32 年後(2024)才有限度解禁
🟡 中等問題已修正:
- Nokia 賣 Microsoft 年份 2013 → 2014 完成交割
- Wells Fargo 罰款數字混淆 → 分清 2016/2020/2022 各筆
- 達爾文引言降為 paraphrase
- 巴菲特 95% / 60 歲 → 99% / 50 歲後(Morgan Housel)
- AMR 1992 全行業虧損 USD 38 億 → AMR 自身 9.35 億 + 1990-94 累積超過 100 億
- 菸草廣告禁播後消費「沒顯著增長」 → 微增 3% 但廣告省下變利潤
- Theranos:Ellison「領投」→「早期入股」;Isaacson 引言 → 改為媒體敘事
- Salesforce 「churn < 5%」→ 改「企業級個位數」
- 多處查無原文的蒙格引言改成 paraphrase 或刪除
已知待辦
字典版剩 30 條全 P2(場景較窄,按需要補):
- 經濟學 13、物理學 7、生物學 4、統計學 3、工程學 2、哲學 1
部署
- CF Workers 還沒實際部署,build script 已備
- 步驟詳見 DEPLOY.md
個人累積(最重要)
05_個人日誌/踩雷紀錄.md還沒寫任何個人案例05_個人日誌/用對的紀錄.md還沒寫任何個人案例- → 這是 vault 真正長期增值的地方,下次 session 開始該逐步累積
數字快照
- vault 內 .md 檔:49 個
- Quartz build 輸出:47 個 + 10 dataview blocks 靜態化
- 字典版進度:27/57(47%)
- 常駐版進度:8/8(100%)
Frontmatter 鐵律(避免之後 Dataview 解析失敗)
# ✅ 對的寫法
scenarios:
- 併購
- 招募
source_pdf: "HBS: Theranos" # 含冒號用引號
# ❌ 錯的寫法
scenarios: [併購, 招募] # inline + CJK
source_pdf: Theranos # 整個 frontmatter 會被丟棄2026-05-16(晚場)|首次部署上線 CF Pages 🎉
完成
- ✅ Quartz 4 專案建立(
mental-models-quartz/,跟 vault 同層)- clone
jackyzha0/quartz→npm install→quartz create -X new -l shortest - 設
quartz.config.ts:繁中、Noto Serif TC、棕金配色、zh-TWlocale - 關鍵 fix:移除
Plugin.Latex({...}),因為 vault 內NT$xxx會被誤判為 LaTeX math
- clone
- ✅ 建立 vault 首頁
index.md(Quartz 部署必需,根目錄一定要有) - ✅ CF Pages 部署完成
- 帳號:
albertckchien@gmail.com - Project:
mental-models - 正式 URL:https://mental-models-dzp.pages.dev
- 後台:https://dash.cloudflare.com → Workers & Pages → mental-models
- 帳號:
- ✅ 認證走 API Token,非 OAuth
wrangler loginOAuth 失敗(防火牆 / 網路問題常見)- 改用 API Token:CF dashboard → API Tokens → “Edit Cloudflare Workers” 模板
- Token 存在
mental-models-quartz/_secrets/cf_token.txt(gitignored)
- ✅ 一鍵部署腳本
mental-models-quartz/deploy.sh- 用法:
bash deploy.sh(完整)/bash deploy.sh --skip-vault/bash deploy.sh --preview - 自動跑 vault build → 同步 content → Quartz build → wrangler deploy
- 用法:
踩過的雷
- OAuth
wrangler login失敗 → 直接改 API Token,完全繞過 OAuth Project not found→ 第一次部署前要先wrangler pages project create <name> --production-branch=main- LaTeX 誤判 → 文章內
NT$5,000之類 dollar 符號會被 KaTeX 當 math,移除 plugin 解決 - port 8080 佔用 → 跑
taskkill /F /PID <pid>殺舊 node process wrangler whoami認 OAuth 失敗 / 認 token 成功 → token 從_secrets/cf_token.txt讀,用export CLOUDFLARE_API_TOKEN=$(tr -d '[:space:]' < _secrets/cf_token.txt)注入
部署後又抓到 3 個雷(晚場第二輪)
用戶反映打開正式 URL 是空頁面。逐層 debug 後抓到 3 個獨立的根因:
雷 1|index.html 是空 redirect(aliases 衝突)
- 症狀:本地
public/index.html只有 308 bytes,是<meta refresh url="./">自我循環頁 - 原因:
README.md的 frontmatter 寫了aliases: [home, index] - Quartz 的 AliasRedirects emitter 看到
indexalias → 在public/index.html寫 redirect 到 README → 蓋掉真正的content/index.md - 教訓:任何頁面都不要把
index或home加進 aliases,會跟 root index.md 撞檔名
雷 2|.gitignore 殺死 globby
- 症狀:跑
npx quartz build顯示Found 0 input files from \content“,本地明明有 49 個 md - 原因:我把
content/*加進mental-models-quartz/.gitignore想讓 git 不追蹤 content - 但 Quartz 用
globby({ gitignore: true })會自動讀 .gitignore 排除檔案 → 整個 content/ 被 globby 跳過 - 修法:規則從
.gitignore移到.git/info/exclude(git 本地 only,globby 不會讀) - 教訓:任何「build 工具讀資料夾」的場景,不能用 .gitignore 排除衍生物——要用 git local exclude
雷 3|CF Pages production URL 沒更新(branch mismatch)
- 症狀:preview URL(
v4.mental-models-dzp.pages.dev)顯示新版,正式 URL(mental-models-dzp.pages.dev)卻是舊版 - 原因:CF Pages 建專案時設
--production-branch=main,但 quartz repo 預設 branch 是v4(jackyzha0 upstream),所以每次 deploy 都推到 preview,從未推到 production - 修法:
wrangler pages deploy加--branch=main強制當 production - 教訓:CF Pages 的 production URL 只跟著 production branch;deploy 時要明確指定
這 3 個雷的順序:先發現 alias 衝突修了 → 部署後仍空 → 發現 globby 被殺修了 → 部署後 alias URL OK 但 production URL 還是舊版 → 發現 branch mismatch 修了 → 終於全部上線。
deploy.sh 已加 --branch=main,未來不會再撞這個。
新 session 接手必讀
- 部署一鍵指令:
cd /c/Users/alber/Desktop/AI_Playground/mental-models-quartz bash deploy.sh - 正式 URL:https://mental-models-dzp.pages.dev
- 改 vault 後流程:在 Obsidian 編輯 → 跑
bash deploy.sh→ 1-2 分鐘上線 - rollback:CF 後台 → Pages → mental-models → Deployments → 點舊版的 ”…” → Rollback to this deployment
- Token 在
mental-models-quartz/_secrets/cf_token.txt(gitignored、不要 commit)
Quartz config 重點(如果以後要改外觀)
quartz.config.ts→theme.colors.lightMode改顏色theme.typography改字型(用 Google Fonts)Plugin.Latex已禁用,不要重新打開(vault 內容會炸)baseUrl: "mental-models-dzp.pages.dev",改網域時記得改這個
2026-05-17|首頁改卡片牆 v1→v5 + 23 項優化路線圖
完成
首頁從 Quartz 內頁改寫成卡片牆(仿 Charlie Munger latticework 原 artifact),35 張卡片 + click to expand detail panel。
mental-models-vault/assets/cards.css(純 CSS,~11.5 KB)mental-models-vault/assets/cards.js(純 JS,~12 KB)mental-models-vault/index.md(HTML 骨架 only)mental-models-vault/_scripts/prep_for_quartz.py新增build_models_json():掃 vault 抽取 35 條模型 →_build/quartz-content/assets/models.json(45 KB)- 整體流程:vault → prep → assets/ 含 cards.css/js/models.json → Quartz Static plugin → public/assets/ → CF Pages
五輪自審優化(v1→v5):
- v1:基礎卡片網格 + detail panel
- v2:11 項(Quartz layout escape、配色對比、Lollapalooza 命名、CTA 簡化、6 大學科文案、prev/next 按過濾後、loading + 清除按鈕、keyboard a11y、卡片高度齊一、border radius、focus ring)
- v3:12 項(stats 不可點、tier chip 取代編號、detail max-height、mobile 雙欄、CTA 強化、filter active accent 色、card flex 對齊、placeholder 縮短、disabled chip 待補提示、eyebrow letter-spacing、divider 喘息、stats 固定順序)
- v4:JS/CSS 抽外部檔(解決 Quartz
<script>內容被 HTML escape 的 bug — escape 會把"變"整段 JS syntax error) - v5:13 項(CTA hint 文案、panel 寬度彈性、card title 放大、HBS 顯示「案例:xxx」、mobile backdrop + click outside、subtitle 改「35 條 · 哈佛實證案例」、search 改「概念」、Result count 強化、loading 改 6 張 shimmer skeleton、preload models.json、header spacing 壓縮、tagline 字級升、(待補)改
<small>)
三個關鍵踩雷(路線圖內務必避開)
雷 1|Quartz markdown 把 <script> 內容全部 HTML escape
- 症狀:
fetch("...")被 build 成fetch("...")→ 整段 JS syntax error → spinner 卡住 - 原因:Quartz 對 markdown 內 inline
<script>走 markdown escape pipeline,跟<style>待遇不同 - 修法:JS / CSS 一律外部檔,index.md 只放
<link><script src>reference
雷 2|首頁 frontmatter 不能寫 aliases: index
- 症狀:Quartz AliasRedirects 把
aliases: [index]變成public/index.html的 self-redirect → 蓋掉真正的 index 內容 - 修法:任何頁面 frontmatter 都不要加
index或home這類 alias
雷 3|CF Pages production URL 跟 deploy branch 綁定
- 症狀:preview URL(
v4.xxx)顯示新版,但正式 URL 永遠舊版 - 原因:CF Pages 建 project 時 production-branch=main,但 quartz repo 預設 v4
- 修法:
wrangler pages deploy必須加--branch=main(已寫進 deploy.sh)
部署狀態
| URL | 內容 | |
|---|---|---|
| 正式 | https://mental-models-dzp.pages.dev | v5(卡片牆)|2026-05-17 |
| 本地 | bash deploy.sh --preview | v5 |
🗺️ 接下來的 23 項優化路線圖(6 session 拆分)
完整審視涵蓋 5 面向:好使用 / 好查詢 / 好理解 / 好連結 / 好對照。
全部 23 項(依面向分組)
A. 好使用(4)
- U1 URL deep linking —
?model=逆向思考直接開該卡片 - U2 URL state for filter/search — 過濾與搜尋進 query string
- U3 鍵盤方向鍵在卡片間導航(←↑↓→)
- U4 最近看過清單(localStorage)
B. 好查詢(5)
- S1 搜尋擴大到 content(one_liner / scenarios / core_concept / hbs_text)
- S2 搜尋結果命中關鍵字 highlight
- S3 Tier 過濾(全部 / 常駐 / 字典)
- S4 Category 二級過濾(學科底下的子類)
- S5 Scenarios 過濾(招募 / 併購 / 產品轉型…)
C. 好理解(5)
- C1 概念視覺對比(35 張 SVG 圖解)
- C2 蒙格金句 pull-out(從 source markdown 抽 quote 高亮)
- C3 適用情境結構化(從段落改條列)
- C4 反例 / 不適用情境(要回去寫進 35 條 source)
- C5 閱讀時間估計(panel 內顯示「約 3 分鐘」)
D. 好連結(4)
- L1 反向 Lollapalooza — A 說「聯動 B」,B 自動顯示「也被 A 提及」
- L2 同 HBS 案例反向索引 — panel 加「Theranos 也觸發:權威偏誤 / 確認偏誤 / 社會認同…」chips
- L3 7 對 Lollapalooza 總覽區塊(header 下方固定區)
- L4 同 category 鄰居(思維方法 3 條互通)
E. 好對照(5)
- M1 多選對照 mode(Shift+click 加入比較區,最多 3 張並列 detail)
- M2 View 切換(grid / table 兩種視圖)
- M3 HBS 案例索引頁(獨立頁,列所有案例 + 每個觸發的模型)
- M4 7 對 Lollapalooza 專屬視圖(跟 L3 不同角度,這是頁面/區塊)
- M5 Sort options(A-Z / by tier / by discipline / by case)
拆 6 個 session
Session A:URL + 搜尋強化(純 JS,1-2 小時)
- ✅ Tasks: U1, U2, S1, S2, S3
- 影響檔案:
assets/cards.js、index.md(HTML 不變) - ROI ⭐⭐⭐⭐⭐ — 分享 / refresh / 搜尋直接從半殘變實用
Session B:反向連結(build 改)(Python + JS,1.5 小時)
- ✅ Tasks: L1, L2
- 影響檔案:
_scripts/prep_for_quartz.py(build 雙向 lollapalooza + case reverse index)、assets/cards.js(render reverse panels) - 為什麼一起:兩個都是 build 時計算反向關係 + UI 顯示新 section
Session C:多維過濾 + 鍵盤 + 排序(純 JS,1.5 小時)
- ✅ Tasks: S4, S5, M5, U3
- 影響檔案:
assets/cards.css(多 chip 樣式)、assets/cards.js(filter + sort UI)
Session D:對照與索引視圖(UI 重,2-3 小時)
- ✅ Tasks: M1, M2, M3, M4, L3, L4
- 影響檔案:
assets/cards.css、assets/cards.js大改;可能加content/案例索引.md獨立頁
Session E:內容深化 + 最近看過(要動 source markdown,2-3 小時)
- ✅ Tasks: U4, C2, C3, C5
- 影響檔案:35 條 source markdown 微調(金句、適用情境結構化)、
prep_for_quartz.py(reading_time 計算 + quote extraction)
Session F:反例 + 視覺(最慢,3+ 小時,可能拖到第 7 session)
- ✅ Tasks: C1, C4
- 影響檔案:35 條 source 加「反例」段落(C4)、35 張 SVG 圖(C1)
推薦執行順序
Session A (基礎建設) → Session B (連結) → Session C (過濾) → Session D (對照) → Session E (內容) → Session F (視覺)
↑ 最高 ROI ↑ 多週工程
新 session 接手指引
每個 session 開始時:
- 讀 SESSION_LOG.md 最後三段(這段、路線圖、踩雷紀錄)
- 確認目前 Session 編號 → 對應 tasks → 動手
- 結束時:
- 更新「✅ Tasks」打勾
- 加上「實際遇到的問題」筆記
- Commit + deploy
- 寫下「下個 session 起點」
不變的 3 條鐵律(節省下次 debug 時間)
- 不要在 index.md 寫 inline
<script>,會被 HTML escape - 不要在 frontmatter 加
aliases: index或aliases: home - deploy 必須帶
--branch=main(deploy.sh 已內建)
2026-05-17|Session A:URL + 搜尋強化 ✅
完成(5/5 tasks)
U1|URL deep linking
?model=逆向思考直接開該卡片 detail panel- 點卡片時把
model=<title>寫進 URL(history.replaceState,不污染 history)
U2|URL state for filter/search
- search、discipline filter、tier filter 全進 query string:
?q=...&filter=...&tier=...&model=... - 冷載入 URL 會還原所有狀態(input value、active chip、開啟的 detail)
- 加 popstate listener,瀏覽器上一頁/下一頁可回放狀態
S1|搜尋擴大到 content
- 從只搜
title/english/discipline/hbs_case_company→ 擴到one_liner / core_concept / scenarios(陣列 join)/ scenarios_text / hbs_case_text / category / lollapalooza_with - 中文 raw + 英文 lowercase 同時匹配
- 測試「招募」由 0 命中 → 11 命中(scenarios 內找到)
S2|搜尋命中關鍵字 highlight
- 卡片標題/英文/摘要/案例公司 + detail panel 全欄位包
<mark class="mm-hl"> - 實作走「escape 後 regex 包 mark」,零 XSS 風險
escapeRegex防 regex meta 字元爆掉,try/catch防破爛輸入
S3|Tier 過濾
- 新加一排 chip:
全部分級35 / 常駐8 / 字典27 - 樣式走 pill 形(border-radius 14px)+ 數字 inline,跟 discipline filter 視覺區隔
- 跟 discipline、search 三個 filter AND 串接
實際遇到的問題
- preview_start 認不同 worktree 的 launch.json — 必須改
.claude/worktrees/<wt>/.claude/launch.json,不是AI_Playground/.claude/launch.json - port 9101 跟 hbs-cardwall 撞 — 改用 9102
- preview_screenshot 偶發 timeout — 但 preview_eval 正常,DOM 狀態驗證 OK(console error 0 / 所有 DOM 操作回傳預期值),所以 skip 截圖
- 背景啟動 quartz serve 後忘了關 —
npx quartz build --serve預設 8080 必須先 taskkill 才能讓 preview_start 接管 - highlight 在 card 上看不到時別緊張 — 若搜尋字串只命中
scenarios_text等 card 不顯示的欄位,card 上沒 mark 是正確的;點進去 detail 才會看到 highlight
驗證紀錄
?q=招募→ 11 cards (從 scenarios 命中) ✅?q=決策→ 21 cards,12 個 mark 在卡片上 ✅- 點卡片 → URL 加
&model=機會成本,detail 開 ✅ - 點 tier=常駐 → 35 → 8(再交叉 q=決策 = 7)✅
- 直接訪問
?q=...&filter=...&tier=...&model=...cold load → 全狀態還原 ✅
部署狀態
| URL | 內容 | |
|---|---|---|
| 正式 | https://mental-models-dzp.pages.dev | Session A 完工|2026-05-17 |
下個 session 起點
Session B|反向連結(build 改)
- Tasks: L1(反向 Lollapalooza chip)、L2(同 HBS 案例反向索引)
- 影響檔案:
_scripts/prep_for_quartz.py(build 時計算反向 map)+assets/cards.js(render 兩個新 section) - 時間估:1.5 小時
2026-05-17|Session B+C+D+E 連跑|21 項純 code 優化全綠 ✅
一口氣推進 4 個 session(中間沒 break),路線圖 23 + 漏掉 3 個新點子 = 26 項裡的 21 項純 code 都收完。剩 5 項是純內容工程(C1 35 張 SVG、C2 蒙格金句、C3 適用情境結構化、C4 35 條反例、+ 路線圖外的同義詞/手勢/搜尋歷史 3 條)。
Session B|反向連結(commit 7885fad)
L1 反向 Lollapalooza — detail panel 加「也被這些模型疊加」section,掃 lollapalooza_with 邊建 reverse map。扣掉已在正向 Lolla 的避免重複顯示。
L2 HBS 案例反向索引 — prep_for_quartz.py 新增 build_hbs_cases() 從 03_深度個案/*.md frontmatter 抽 models_triggered,寫進 models.json 的 cases 陣列;detail panel 顯示「{案例名} 案例同時觸發」section(一個案例一段)。
實測沉沒成本 detail:Kodak 案例同時觸發 5 條 + Theranos 案例同時觸發 6 條 + Lolla 2 條 + 反向 Lolla 2 條,共 4 個 section。
Session C|過濾/排序/鍵盤/分享(commit 6e7b78f)
S4 category 二級:選 discipline 後浮出該學科子類 chip row(學科只有 1 個 cat 不顯示);換 discipline 自動 reset category。 S5 場景過濾:頭部 chip 列,只列被 ≥2 個模型用到的 17 條場景;單選 AND filter。 M5 排序:預設/中文 A→Z(zh-Hant locale)/字典優先/有 HBS 案例優先。 U3 鍵盤:detail 開時 ←/→ 切上下張;detail 沒開時 ↑↓←→ 在 grid focus 間移動(自動偵測 columns)。 分享按鈕:detail panel CTA 加「⎘ 複製連結」,clipboard API + textarea fallback;點完 1.6s 顯示「✓ 已複製」。
Session D|對照 + 索引 + 連結 8 項(commit a1464e0)
最重的一段。Body 區整個改造支援 5 種視圖:
- M2 表格視圖:5 欄(學科/模型/分級/一句話/案例),共用 search/filter/sort,row 也支援 Shift+click 加入對照
- M3 HBS 案例索引視圖:Theranos、Kodak 兩張卡,列觸發的模型 chip 可跳轉
- M4+L3 Lollapalooza 對視圖:抽
lollapalooza_with邊算唯一無向對(11 組),雙向展示(左 ↔ 右),點任一側打開該模型 - 全局關係圖視圖:SVG 七學科群聚布局(中心 1 個 + 周圍 6 個),35 節點 + 11 邊;常駐 r=9、字典 r=6;節點點擊跳模型
Detail panel 新加 2 個 section:
- L4 同子類其他模型(同 discipline+category)
- 對立模型「常拿來對照」:靜態 mapping 7 對(逆向↔確認偏誤、沉沒↔機會、損失↔稟賦、能力圈↔過度自信、二階↔可得性、基礎機率↔代表性、逆向↔從眾)
M1 多選對照:
- Shift+click(card 或 table row)加/移出 compare set,最多 3
- Sticky 黑底 bar 顯示 chip 列 + 並列按鈕 + 清空
- 並列彈窗:3 panel 同欄位(一句話/核心/案例/Lollapalooza/出現於案例)橫向對照
URL 加 view= / cmp=(逗號分隔 title list),冷載入回讀。
Session E(裁版)|最近看過 + 閱讀時間(commit 827dd65)
- C5 閱讀時間:
prep_for_quartz.py計算每篇 body 字元數 →body_chars;detail CTA hint 顯示「完整版約 N 分鐘」(420 字/分鐘) - U4 最近看過:localStorage 記最近 6 條看過的模型;標題下方一條 chip 列「最近看過:A B C [清除]」;點 chip 直接開該模型;chip 沿用 discipline 配色 left border
沒做的(不在 code-only 範圍)
- C1:35 張 SVG 概念圖解(純內容/設計工程)
- C2:35 條蒙格金句 pull-out(需逐條讀 source markdown 抽 quote)
- C3:適用情境結構化(要動 35 條 source markdown 段落格式)
- C4:35 條「反例 / 不適用情境」(要寫進 source markdown)
- 漏的 4 條新點子:手勢、同義詞、搜尋歷史、跨案例連結(場景較窄,先擱)
部署狀態
| URL | 內容 | |
|---|---|---|
| 正式 | https://mental-models-dzp.pages.dev | B+C+D+E 全綠|2026-05-17 |
全部 6 個 URL 參數一覽(分享連結用)
?q=<搜尋>&filter=<學科>&tier=<常駐|字典>&cat=<子類>&scn=<場景>&sort=<排序>&view=<grid|table|cases|pairs|graph>&cmp=<A,B,C>&model=<開啟的模型>
下次 session 起點
如果要繼續,剩下都是內容工作:先挑 C2 蒙格金句最划算(每條 5-10 分鐘讀 source、抽 quote 加進 frontmatter,35 條約 4 小時),其次 C3 適用情境結構化(重排段落格式),最後才是 C1 35 SVG(這條投入產出比最低)。
2026-05-17(同日續)|3 輪嚴格自審 + 25 條 polish 全綠 ✅
承上四 session 連跑(B/C/D/E)之後,用戶連喊三次「在<好使用 / 好查詢 / 好理解 / 好連結 / 好對照>幾個面向,沒有可以優化的地方了嗎?」加上中途兩個小改名請求,總共出了 25 條 polish 都收完。目前 vault 是這個 session 的最終狀態。
Polish 1 — 嚴格自審 13 條(commit a384568)
格局 4
- 視圖切換從第 6 條 strip 提到 stats 正下方;加分隔線把「卡片牆/表格」(瀏覽類)跟「HBS/同向疊加對/關係圖」(探索類)切兩組;每個 view 加 hover title
- 結果計數從獨立 strip 收進 controls 右側 inline
- 非 grid/table 視圖時自動隱藏 search/filter/sort(page 加
is-exploreclass) - Compare bar 從 sticky-top 改 fixed-bottom 圓角浮動 pill
排版 4
- Detail 連結類 section 前加細「相關模型」分組 divider
- Scenario chip 從一次展開 18 條改前 5 條 +「+ 更多 N 個」折疊
- Recent 從帶背景 box 改 slim dotted-underline 風(43px → 21px)
- CTA hint 縮短
文字 5
- view tab「Lollapalooza 對」→「同向疊加對」
- 對立 section「常拿來對照」→「反方向的對照組」(拿掉 AI 味 hint)
- Compare bar「對照 (3/3) / 並列比較 / 清空」→「對照 3 個 / 並列看 / 清空」
- Recent label「最近看過:」→「剛看過」
- detail section「同向疊加組合(Lollapalooza)」→「同向疊加組合」(拿掉括號)
Polish 2 — 第二輪自審 7 條 + Mobile audit(commit fd2d721)
格局
- Stats 7 個學科改 button,可點 toggle discipline filter(雙向同步
.mm-filter) - Compare bar 開啟時 page 加
has-compareclass,padding-bottom 64px → 120px 避免擋卡
文字
- subtitle「35 條心智模型 · 每張附哈佛實證案例」→「35 條 · 跨 7 學科 · 含 HBS 實證個案」(不再跟標題重複、不再誇大)
- Sort options 縮:「預設(常駐優先)」→「常駐優先」/「中文 A→Z」→「按名稱」
- Scenario 「全部」chip 拿掉,active 再點一次即取消
- View tab hover hint 全部縮短
Mobile(≤880 + ≤540)
- Compare bar 在 mobile 隱藏 chip 列,從 187px 高 → 48px
- Controls strip 119px(原 171px)
- View tabs ≤540 改橫向 scroll
- Stats label 字級下調
Polish 3 — 第三輪嚴格自審 5 條 + Lolla 漏網最後統一(commit 99bf8c5)
Lolla rename 漏網 6 處(用戶要求 同向疊加對 → 效用加乘組合 / Polish 中段 commit f783830):
- Cases section label「完整 Lollapalooza 個案」→「完整 HBS 個案」
- Graph hint「互列 Lollapalooza」→「兩條互列為加乘組合」
- Compare overlay row label「Lollapalooza」→「加乘組合」
- L1 hint「Lollapalooza 觸發條件」→「加乘組合的觸發條件」
- L2 hint「個案的 Lollapalooza 共 N 條」→「個案的加乘組合共 N 條」
- L1 section label「也被這些模型疊加」→「被這些模型反向引用」
- 唯一保留 Munger 詞:pairs view hint 用「Munger 講的 Lollapalooza Effect」當概念溯源
5 條 strict fixes
- F1 Graph label 5 對重疊 → 0 對:viewBox 880x620 → 1120x780、cluster 半徑 220 → 290、内圈半徑改用弧長公式(標籤平均 60px、需間距 70px → innerR = N*70/2π)
- F3 Mobile 開 detail 時 compare bar 被 detail (z:1000) 蓋住 (z:900):renderDetail 加
has-detailclass、CSS hide bar - F6 Tier filter 加 hover hint:常駐 = 詳細四件套(一句話/核心概念/適用情境/HBS 案例 600-800 字白話例)/ 字典 = 精簡卡片
- F2+F5 Empty state 強化:標題置中、列 active filter chip、雙 CTA「清除所有條件」+「只清除搜尋」
- F11 Compare set 存 localStorage:reload 後 URL 優先;無 URL 才 fallback localStorage
Polish 中段 — Lolla 改名 + HBS 案例頁兩段式(commit f783830)
用戶問:「同向疊加對好難理解,有沒有更好的詞語?」+「為何 HBS 案例分頁只有 2 個案例?」
改名:同向疊加對 → 效用加乘組合(view tab + detail section + pairs hint)
HBS 案例頁從 2 個變兩段式:
- 第一段:完整 HBS 個案(2)— Theranos / Kodak(vault 03_深度個案/ 有獨立檔,含 outcome / models_triggered)
- 第二段:卡片附帶的案例(35)— 每張模型卡片自己引用的小案例(hbs_case_company + hbs_case_text 預覽),grid 排版,點任一條跳該模型詳情
部署狀態(2026-05-17 最終)
| URL | commit | |
|---|---|---|
| 正式 | https://mental-models-dzp.pages.dev | 99bf8c5 |
全部 9 個 URL 參數一覽(分享連結用)
?q=<搜尋>&filter=<學科>&tier=<常駐|字典>&cat=<子類>&scn=<場景>&sort=<排序>&view=<grid|table|cases|pairs|graph>&cmp=<A,B,C>&model=<開啟的模型>
沒做的(不在 code-only 範圍)
- C1:35 張 SVG 概念圖解(純內容/設計工程)
- C2:35 條蒙格金句 pull-out(需逐條讀 source markdown 抽 quote)
- C3:適用情境結構化(要動 35 條 source markdown 段落格式)
- C4:35 條「反例 / 不適用情境」(要寫進 source markdown)
- 漏的 3 條新點子:手勢、同義詞、搜尋歷史(場景較窄,先擱)
下次 session 啟動指引
啟動詞:「繼續 mental-models-vault,先讀 SESSION_LOG.md 最後段對齊狀態」
新 session 第一動作:
- 讀 SESSION_LOG.md 從本段起(2026-05-17 同日續)
- 看 commit log:最新 commit 應該是
99bf8c5polish 3 - 確認部署網址:https://mental-models-dzp.pages.dev
- 如果要繼續,剩下都是內容工作 — 先挑 C2 蒙格金句最划算(每條 5-10 分鐘、35 條約 4 小時)
3 條鐵律繼續守
- 不在 index.md 寫 inline
<script>(Quartz 會 HTML escape,整段 JS 炸) - 不在 frontmatter 加
aliases: index或home(蓋掉 root index.html) - deploy.sh 必須帶
--branch=main(已寫進,CF Pages production URL 才會更新)
2026-05-17(同日加碼)|HBS 用詞誠實化 + Content 厚度 + AI 推薦上線
承上輪 3 輪自審後(commit dfeb6a9 為 log 斷點),這天又加碼 8 個 vault commits + 2 個 quartz commits。這段是今日最終終態。
動的事(依時序)
1. 913238f 隱藏 Quartz 自動標題 + HBS 用詞誠實化
- 用戶截圖:首頁頂部有 Quartz 自動 render 的「心智模型工具箱 / 2026年5月16日 / 閱讀時間 1 分鐘」跟下面 h1 重複
- 既有 CSS rule
article > .article-title沒命中(實際 DOM 是.popover-hint > .article-title)→ 直接加body[data-slug="index"] .page-header / .content-meta { display:none } - 用戶質疑:完整 HBS 個案資料來源是哪?是付費 HBS 案例嗎?
- 誠實答:vault 內 Theranos.md / Kodak.md 是基於公開來源(Bad Blood、Innovator’s Dilemma、HBO 紀錄片、WSJ 報導)的原創 Lollapalooza 分析,不是付費 HBS 案例擷取。HBS 字眼會誤導
- UI 7 處改名:view tab「HBS 案例」→「實證個案」/ subtitle「含 HBS 實證個案」→「附真實實證個案」/ cases view「完整 HBS 個案」→「深度個案」+ hint 補來源說明(Bad Blood / Innovator’s Dilemma / WSJ;非 HBS 授權內容)/ sort option / compare overlay row label / L2 hint / detail section label / tier hint
2. eb46a5d 實證個案視圖合併 + Theranos / Kodak 數字校正
- 用戶問:上面 2 個跟下面 35 個內容差不多,幹嘛分兩段?
- 統一 grid 37 條,按觸發模型數 desc 排序:Theranos (7) / Kodak (6) 自然浮頂 + span 2 cols + 漸層底色
- Theranos.md 數字校正:outcome 改「2018 年解散;Holmes 2022 年判 11 年 3 個月,2023 年入監」;body 補「2003 年創辦」「2013-2015 年估值高峰 USD 90 億」「2015 年 10 月 WSJ 揭露」「2018 年 9 月正式解散」;沉沒成本段「投了 5,000 萬」改「累計投入數千萬美元」(單一精確數字不可考)
- Kodak.md 數字校正:賣專利「5.25 億美元」補時間 + 買家(2013 年破產期間 / Apple、Google、FB、MS 聯盟);Reed Hastings 直接引述拿掉改意譯(避免造引述)
3. 48b7eb2 實證個案 cards 可點 + 關係圖 tab 移除 + 第四輪自審
- 用戶問:每張小卡點下去都沒反應、資料量少、無法理解跟模型怎麼扯
- Multi 卡(Theranos / Kodak) click → 導去
/03_深度個案/{slug}完整 Quartz 案例頁(vault 作者寫的 model × 案例對照表那邊內容豐富);Ctrl/⌘ + middle-click 新分頁;CTA 標明 - Single 卡(35 條) click → 開該模型 detail panel;CTA「→ 開啟該模型詳情」
- chip 點擊加 stopPropagation 避免雙觸發
- 關係圖 tab 移除(用戶判斷沒用):移 button / VIEWS / renderGraph + computeGraphPositions / CSS .mm-graph-* 全刪
- 自審 hint 改寫:「點 chip」→「前 2 條深度個案點卡開對照表 / 35 條 single 點卡開模型 detail」
4. 1188ae8 Detail panel 內容厚度大躍進
- 用戶問:35 個小卡點開後資料量少的可憐
- 真相:bug 在 build script 不在 source。prep_for_quartz.py 系統性截斷:HBS 個案 / 核心概念 都只抽
_first_paragraph;適用情境硬切[:300];白話例(200-260 / 600-800 字)完全沒抽 - 修:新
_clean_section_body()helper 保留 markdown 結構(bold / bullets / 子段),只移除*Source:*註記 + 「→ 個案網交叉」交叉指引行;hbs/core/scenarios 全改抽整段;新加plain_example欄位 - cards.js 新加
renderRichText()輕量 markdown renderer(段落 + bullet + 智慧分群「heading + list」並存)+applyHL()(跳過 HTML tag 只 mark 文字)+stripMd()卡片預覽用 - detail panel 加「白話例」section,全 4 section 改 rich render
- 數字對照(沉沒成本):之前 ~50 chars / 1 段 → 現在 ~1900 chars / 4 rich section / 16 list / 25 paragraph / 35 strong
5. ae480d8 Markdown 表格 + ordered list + 函式名稱衝突 bug fix
- 第五輪自審:白話例段內的 markdown 表格
| 方案 | 價格 |被 render 成<p>...<br>...</p>一坨;1. X / 2. Yordered list 也是 - 修:renderRichText 加 table block 識別(全行
|開頭 + 第二行|---|---|分隔線)+ ordered list 識別(全行N.開頭) - Bug 抓:新加的
renderTable(lines)跟既有「表格 view」renderTable(container)同名 → JS function declaration shadow → markdown table 觸發container.querySelectorAll is not a function→ detail panel 整個炸不開;改名renderMdTable避衝突 - CSS .mm-md-table 邊框/標頭、.mm-md-ol 縮排、mobile cell normal wrap
6. 41e182a ✦ AI 推薦視圖(CF Workers AI Llama 3.3 70B)
- 用戶問:能不能加個質性輸入欄位,AI 推薦適合的模型?
- 方案:Cloudflare Workers AI(免費 10K neurons/天 / 不用 API key / 用
env.AIbinding)+ 第 5 個 view tab + 輕量防護 - 後端:
functions/api/recommend.jsPages Function POST / 從同 origin/assets/model-summaries.json抓 35 條摘要(edge cache 300s)/ 呼叫@cf/meta/llama-3.3-70b-instruct-fp8-fast/ system prompt 鎖死「只能從清單挑 title + 繁中 reason + 嚴格 JSON 輸出」/extractPayload處理 CF AI 多種回傳格式(JSON mode object vs chat completion vs string)/normalizeTitle砍 LLM 可能加的「(學科・分級)」後綴 / validTitles Set validate 剔編造 - 前端:第 5 個 view tab「✦ AI 推薦」(前置 divider) / state.aiQuery / aiLoading / aiResults / aiError / textarea 1000 char + 計數 + submit / 推薦結果卡片點開該模型 detail / 3 秒 debounce
- 新加
prep_for_quartz.py輸出model-summaries.json(5KB 精簡版給 LLM context) - 實測:「團隊糾結要不要砍掉 2 年開發、月活 50 人的功能」→ 沉沒成本 / 機會成本 / 轉換成本;「面試陌生技術工程師怎麼判斷真厲害還是吹牛」→ 能力圈 / 錨定效應 / 權威偏誤
7. 78e5fc0 AI 推薦 quota 防爆量 + UI 禁用
- 用戶要 sharing 給別人看,要防止額度爆量
- CF KV namespace
MM_QUOTA(id7927a62b31424789bad92f5528339839)viawrangler kv namespace create - function 加 GET handler 回 quota 狀態 + POST 前 quota check
- MAX_DAILY = 60(保守,假設每次 ~166 neurons × 60 = 10K cap)
- KV key =
quota:YYYY-MM-DD(UTC date),36h TTL;race 容忍(少給 ≠ 超用);KV 沒綁時 fail-open - 前端:進 AI view 自動 GET quota;用完顯示紅 banner「本日 AI 推薦額度已用完,明日再來」+ textarea disabled + button 改「明日再來」+ 顯示已用 N/max;UTC 0 時重置 ≈ 台灣早上 8 點
部署狀態(2026-05-17 最終 v2)
| URL | latest vault commit | |
|---|---|---|
| 正式 | https://mental-models-dzp.pages.dev | 78e5fc0 |
URL 參數一覽(10 個維度)
?q=&filter=&tier=&cat=&scn=&sort=&view=<grid|table|cases|pairs|ai>&cmp=&model=
5 個 view tabs
| 視圖 | 用途 | |
|---|---|---|
| Browse | 卡片牆 | 35 張卡片瀏覽 |
| Browse | 表格 | 5 欄表格快速掃 |
| Explore | 實證個案 | 37 條 case grid(2 multi + 35 single) |
| Explore | 效用加乘組合 | Lollapalooza 模型對 |
| AI | ✦ AI 推薦 | 質性問題 → CF Workers AI Llama 3.3 70B 推薦 3 條 |
還沒做的(不在 code-only 範圍)
- C1:35 張 SVG 概念圖解(純設計)
- C2:35 條蒙格金句 pull-out
- C3:適用情境結構化(要動 source markdown)
- C4:35 條「反例 / 不適用情境」
- 漏的 3 條新點子:手勢、同義詞、搜尋歷史
CF Pages 新增的 infra(重要)
| 用途 | 設定點 | |
|---|---|---|
Pages Function /api/recommend | AI 推薦 endpoint(GET / POST) | mental-models-quartz/functions/api/recommend.js |
[ai] binding | env.AI 呼叫 Workers AI | wrangler.toml |
KV namespace MM_QUOTA | quota 計數器 | wrangler.toml [[kv_namespaces]] + CF dashboard |
model-summaries.json | LLM context(35 條精簡摘要) | prep_for_quartz.py build emit |
新 session 千萬注意:deploy.sh 部署時會把 wrangler.toml 的 AI binding 跟 KV binding 一起 push 上去;前提是 mental-models-quartz 目錄下要有完整 wrangler.toml。如果 binding 不見了 deploy 還是會成功但 endpoint 會壞。
4 條鐵律繼續守
- 不在 index.md 寫 inline
<script>— Quartz HTML escape 會炸 - 不在 frontmatter 加
aliases: index或home— 蓋掉 root - deploy 必須帶
--branch=main(已寫進 deploy.sh) - 新加:function 內定義 JS 函式名稱要避開既有名(renderTable 衝突教訓)
下次 session 啟動指引
啟動詞:「繼續 mental-models-vault,先讀 SESSION_LOG.md 最後段對齊狀態」
- 讀本段「2026-05-17(同日加碼)」
- 最新 vault commit 應該是
78e5fc0或更新 - 最新 quartz commit 應該是
ca2540a或更新 - 部署網址 https://mental-models-dzp.pages.dev
- 如果要繼續,剩下都是內容工程 — 先挑 C2 蒙格金句最划算(4 hours for 35 條)
- AI 推薦功能要驗:打開 ✦ AI 推薦 tab → 看「今日剩餘 N / 60」是否正常顯示
2026-05-17(最後一筆)|HBS 字眼全面退場
承上「同日加碼」段(bc59884)後,用戶截圖指出 Quartz sidebar 還寫「03_HBS個案」、URL 還是 /03_HBS%E5%80%8B%E6%A1%88/Kodak — 之前 7 處 UI 改名沒覆蓋到目錄 / md 內部 section / frontmatter / wikilinks。一次清乾淨。
cce1532 HBS 字眼全清
8 大類 38 個檔案的清理:
| 位置 | 舊 | 新 |
|---|---|---|
| 目錄 | 03_HBS個案/ | 03_深度個案/ |
| Quartz sidebar 顯示 | 「03_HBS個案」 | 「03_深度個案」 |
| 頁面 URL | /03_HBS%E5%80%8B%E6%A1%88/... | /03_%E6%B7%B1%E5%BA%A6%E5%80%8B%E6%A1%88/... |
| md section 標題(37 檔) | ## HBS 個案 | ## 實證個案 |
| frontmatter | source_pdf: "HBS: X" | source_pdf: "X" |
| wikilinks | [[03_HBS個案/X]] | [[03_深度個案/X]] |
| prep_for_quartz.py | _extract_section "HBS 個案" | "實證個案" + fallback |
| build console 訊息 | 「N 個 HBS 案例」 | 「N 個深度個案」 |
保留(內部識別用,不影響使用者看到的 UI):
- models.json schema field
hbs_case_company/hbs_case_text - Python 函式名
_extract_hbs_case/build_hbs_cases - AI 推薦頁的「非 HBS 授權內容」disclaimer(讀者誠實聲明,正面 framing)
動法
寫 Python 腳本 _scripts/rename_hbs_to_proof.py(per CLAUDE.md no-PowerShell rule)一次性執行:
shutil.move()改目錄名- 走遍所有 .md(exclude
_scripts/.obsidian/_build)做三類 replacement - Windows cp950 console 不支援中文 →
sys.stdout.reconfigure(encoding="utf-8")
實際結果:掃 51 個 md,改 41 個檔,62 處替換 + 2 個 md rename。
實測
- Build pipeline OK:35 卡片 + 2 深度個案,沉沒成本 hbs_case_text 543 字、plain_example 1007 字
- cases slugs 變
03_深度個案/Kodak/03_深度個案/Theranos - 新 URL
/03_深度個案/Kodak→ HTTP 200 - 舊 URL(cache bust 後)→ HTTP 404
部署狀態(2026-05-17 最最終)
| URL | latest commit | |
|---|---|---|
| 正式 | https://mental-models-dzp.pages.dev | vault cce1532 / quartz ca2540a |
教訓加進鐵律(共 6 條)
- 不在 index.md 寫 inline
<script> - 不在 frontmatter 加
aliases: index或home - deploy 必須帶
--branch=main - JS 函式名要避開既有名(renderTable 衝突教訓)
- Python urllib 連 CF endpoint 要設 User-Agent
- 新加:terminology rename 時要連目錄名 + md section 標題 + frontmatter + wikilinks 一起改,UI 字串改完不夠(這次 HBS 漏 4 大類)
下次 session 啟動指引
啟動詞:「繼續 mental-models-vault,先讀 SESSION_LOG.md 最後段對齊狀態」
最新狀態:
- vault commit
cce1532,quartz commitca2540a - 部署網址 https://mental-models-dzp.pages.dev
- 22 個 vault commits + 2 個 quartz commits 一天內推完
- 5 view tabs:卡片牆 / 表格 / 實證個案 / 效用加乘組合 / ✦ AI 推薦
- AI 推薦:CF Workers AI Llama 3.3 70B + KV namespace
MM_QUOTAquota 60/天
繼續要做?剩 5 條內容工程(C1 SVG / C2 金句 / C3 結構化 / C4 反例 / 3 個漏點子)— 先挑 C2 蒙格金句最划算(4 小時 / 35 條)。
模板(下次 session 結束時填這格)
## YYYY-MM-DD|<chapter 名>
### 完成
- ...
### 已知待辦
- ...
### 數字快照
- ...