Session Log
每次 session 結束後在這裡寫那次做了什麼、跑過什麼、剩什麼沒做。 下次開新 session 第一步:「讀 SESSION_LOG.md 對齊狀態。」
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: HBS: 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 已內建)
模板(下次 session 結束時填這格)
## YYYY-MM-DD|<chapter 名>
### 完成
- ...
### 已知待辦
- ...
### 數字快照
- ...