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)

  1. YAML inline 陣列 + CJK → Dataview 解析失敗 → 改 block style
  2. Python on Windows write_text 自動轉 CRLF → Dataview 不認 → 強制 LF(write_bytes
  3. 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/quartznpm installquartz create -X new -l shortest
    • quartz.config.ts:繁中、Noto Serif TC、棕金配色、zh-TW locale
    • 關鍵 fix:移除 Plugin.Latex({...}),因為 vault 內 NT$xxx 會被誤判為 LaTeX math
  • ✅ 建立 vault 首頁 index.md(Quartz 部署必需,根目錄一定要有)
  • ✅ CF Pages 部署完成
  • ✅ 認證走 API Token,非 OAuth
    • wrangler login OAuth 失敗(防火牆 / 網路問題常見)
    • 改用 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

踩過的雷

  1. OAuth wrangler login 失敗 → 直接改 API Token,完全繞過 OAuth
  2. Project not found → 第一次部署前要先 wrangler pages project create <name> --production-branch=main
  3. LaTeX 誤判 → 文章內 NT$5,000 之類 dollar 符號會被 KaTeX 當 math,移除 plugin 解決
  4. port 8080 佔用 → 跑 taskkill /F /PID <pid> 殺舊 node process
  5. 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 看到 index alias → 在 public/index.html 寫 redirect 到 README → 蓋掉真正的 content/index.md
  • 教訓:任何頁面都不要把 indexhome 加進 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
  • 正式 URLhttps://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.tstheme.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 會把 "&quot; 整段 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(&quot;...&quot;) → 整段 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 都不要加 indexhome 這類 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.devv5(卡片牆)|2026-05-17
本地bash deploy.sh --previewv5

🗺️ 接下來的 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.jsindex.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.cssassets/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 開始時:

  1. 讀 SESSION_LOG.md 最後三段(這段路線圖踩雷紀錄
  2. 確認目前 Session 編號 → 對應 tasks → 動手
  3. 結束時:
    • 更新「✅ Tasks」打勾
    • 加上「實際遇到的問題」筆記
    • Commit + deploy
    • 寫下「下個 session 起點」

不變的 3 條鐵律(節省下次 debug 時間)

  1. 不要在 index.md 寫 inline <script>,會被 HTML escape
  2. 不要在 frontmatter 加 aliases: indexaliases: home
  3. deploy 必須帶 --branch=main(deploy.sh 已內建)

模板(下次 session 結束時填這格)

## YYYY-MM-DD|<chapter 名>

### 完成
- ...

### 已知待辦
- ...

### 數字快照
- ...