AACR 2026 Personal Wiki — Operating Manual
Karpathy-pattern LLM wiki:Raw sources (scraped JSON) → narrative chapters → Obsidian vault。 目標對象:袁倫祥醫師(urologist + AI medical dev)。目標格式:narrative(讓知識留腦),不是 index。
路徑常量
| 名稱 | 路徑 |
|---|---|
| VAULT | ~/Documents/aacr2026-wiki/ |
| QUARTZ | ~/Documents/aacr2026-quartz/ (build dir;content/ 是 VAULT 的 rsync copy) |
| RAW | ~/Desktop/aacr2026/ (repo;state/ 是 scrape 原始 JSON) |
| GITHUB (scrape) | lunhsiangyuan/aacr2026-scrape (private) |
| GITHUB (wiki) | lunhsiangyuan/aacr2026-wiki (private) |
| LIVE URL | https://aacr2026-wiki.vercel.app (public + x-robots-tag: noindex 擋 Google/Bing) |
| VERCEL SCOPE | lunhsiangyuans-projects |
| DRIVE | 1-VGq0g_nDwNi9jyCZQnw-byL9S9wEtk6 (tarball backup) |
五條主軸(SSOT, 2026-04-23)
| # | Axis | abstract 數 | 核心 session |
|---|---|---|---|
| 1 | Prostate cancer | 436 | AR/PSMA/mCRPC/neuroendocrine |
| 2 | Lung cancer | 1,110 | TKI resistance, NSCLC/SCLC, combo immuno |
| 3 | Drug development | 1,662 | ADC, bispecific/TCE, degrader, novel SM |
| 4 | First-in-human / Phase I | 260 | FIH sessions, dose escalation |
| 5 | AI workflow | 564 | LLMs in clinic, Agentic AI, digital pathology |
資料來源:RAW/state/ao_presentation_details.json(7,066 abstracts + AuthorBlock + ControlNumber + Disclosure + timing)。
NEVER
- 修改
RAW/state/*.json(scrape 原始資料只讀) - 在章節頁面硬塞全部 abstract 清單(資料層在
references/) - 直接貼未經 narrative 化的 abstract 摘要(違反「留腦」原則)
- 部署到 public URL(含 4,387 姓名 + AuthorBlock + 版權 abstract)
- 刪掉
log.md歷史紀錄
ALWAYS
- 操作前讀這份 CLAUDE.md 取得 SSOT 數字
- 所有章節用 narrative 筆法(對比、人物、場景、數字有重量)
- 章節內引用 abstract 用
AB#<ControlNumber>格式 - Cross-reference 用
[[wikilinks]] - 完成一個操作後 append
log.md(zh-TW) - 繁體中文(臨床術語保留英文:ADC, NSCLC, PROTAC, PSMA, mCRPC 等)
/wiki-rescrape [scope]
When:AACR 開新 session / 發現原 scrape 有 gap / token 過期 / 要補 attendee 篩選。
Scope 參數:
tokens— 只更新 auth token(cookies 已換過時)swapcard— 重跑 Swapcard sessions + speakers + planningsao— 重跑 AbstractsOnline details(processed id 會自動 skip)axes— 重新 filter 五條軸(wiki_axes.py;改定義不用重抓原始資料)full— 上述全跑
指令:
cd ~/Desktop/aacr2026
python3 scripts/decrypt_cookies.py > raw/cookies.json # 如 Chrome 重開
python3 scripts/auth.py # 換 Swapcard access token
python3 scripts/fetch_all.py # 全量 resumable scrape
python3 scripts/wiki_axes.py # 五條軸重篩
python3 scripts/wiki_cluster.py # (可選)重新 embedding + cluster注意:Swapcard JWT 每 24hr 過期;Chrome cookie DB 會重鎖 → 從 Keychain 重解;AO backpack token 每次 fetch_all.py 啟動自取。
/wiki-chapter [axis]
When:任一章想重寫(新資料進來 / 想換角度 / 初次建構)。
Args:prostate | lung | drug-dev | fih | ai-workflow | all
Pipeline(三 LLM 編輯委員會):
- Opus 讀 axis filter 結果(
RAW/data/wiki_axes/<axis>.json)寫 narrative v1 - Gemini 3.1 用
agent -p做 critique(抓平滑語氣、遺漏視角、事實弱點) - GPT-5.4 用
codex exec做 fact-check(每個 AB#ControlNumber 比對原 abstract) - Opus 吸收 critique + fact-check 寫 v2 → 寫入
VAULT/chapters/<NN-axis>.md
CLI 例子:
claude -p "$(cat prompts/chapter_draft.md)" --model opus --allowedTools Write \
> VAULT/chapters/01-prostate.draft.md
agent -p "$(cat VAULT/chapters/01-prostate.draft.md)\n\n請點出最弱的 3 個段落" \
> critique.md
codex exec -m gpt-5.4 "$(cat prompts/factcheck.md)" > factcheck.md
claude -p "$(cat draft.md critique.md factcheck.md prompts/revise.md)" \
--model opus > VAULT/chapters/01-prostate.md/wiki-lint
When:sync / deploy 前 / 章節寫完。
Checks:
- Unresolved
[[wikilinks]]— 掃 VAULT 每個 … 目標檔案是否存在 - AB#
合法性 — 每個引用都能在 RAW/state/ao_presentation_details.json找到 - SSOT 數字一致性 — 章節內若提「436 abstracts」,比對 CLAUDE.md 的表
- Frontmatter 完整 — 每章有
--- tags / axis / created / word_count ---
Fail 的 lint 項目一律修,不 sync。
/wiki-sync
When:章節寫完 / 編輯過 / landing 改完,想把改動推到 live site。
Workflow:
- (可選)跑
/wiki-lint,lint 清潔再推 - rsync VAULT → QUARTZ/content/
npx quartz build→ public/vercel --prod部署到同一個 project(保留 SSO gate)- git commit + push VAULT 到 GitHub(保留版本歷史)
- append log.md
一鍵指令:
cd ~/Documents/aacr2026-quartz && \
rsync -a --delete --exclude='.obsidian' --exclude='.git' ~/Documents/aacr2026-wiki/ content/ && \
npx quartz build && \
vercel --prod --yes --name aacr2026-wiki --scope lunhsiangyuans-projects
# git side
cd ~/Documents/aacr2026-wiki && \
git add -A && \
git commit -m "wiki: <describe change>" && \
git push注意:
- Access 模式為 public + noindex(2026-04-23 決定)。有 URL 的人都可看;搜尋引擎不索引。
- Vercel Deployment Protection 只 gate preview-hash URL(
<project>-<hash>-<team>.vercel.app),不保護 production alias — 這是 Vercel 的設計,不是 bug。若改為 locked,要走 Pro Password Protection 或 Clerk auth middleware。 QUARTZ/vercel.json已設X-Robots-Tag: noindex, nofollow, noarchive, nosnippet+Referrer-Policy: no-referrer。每次 deploy 確認curl -sI <URL>有這兩個 header,沒了代表 vercel.json 沒生效,不可 merge。- 第一次 deploy 若
.vercel/project.json不在,會問 scope;加--scope lunhsiangyuans-projects跳過。 - Quartz build 會清
public/,是正常——不要在 public/ 手動放檔。 - 改了
quartz.config.ts的字型 / 顏色 / 插件,build 會自動 pick up。
/wiki-add-axis [name]
When:想加新軸(如 ovarian, pediatric, health-disparity)。
Workflow:
- 編
scripts/wiki_axes.py的 AXES dict,加新 entry(title_patterns + abstract_patterns + min_hits) - 跑
python3 scripts/wiki_axes.py→ 新data/wiki_axes/<name>.json - 檢視 top sessions 確認篩到對的東西
- 更新這份 CLAUDE.md 的 SSOT 表(加一行)
/wiki-chapter <name>生成章節- 在
index.mdlanding 加入口連結
/wiki-query [question]
When:你想查某個主題出現在哪。
Workflow:
- 優先 grep on VAULT(narrative 內容)
- 次選 grep on
RAW/state/ao_presentation_details.json(原始 abstract) - 若是「趨勢 / 對比」類,跑 Opus 讀相關章節做 synthesis
建構順序(zero → ready)
1. decrypt_cookies.py → raw/cookies.json
2. auth.py → raw/access_token.txt (24hr)
3. fetch_all.py → state/*.json (resumable; ~6hr 首次;之後 resume 幾分鐘)
4. wiki_axes.py → data/wiki_axes/{5 files}.json
5. wiki_cluster.py → data/clusters.json (30 KMeans clusters, optional)
6. /wiki-chapter all → chapters/01-05.md (Opus single-writer, voice-chain calibrated)
7. /wiki-lint → fix unresolved links / AB# validity
8. /wiki-sync → rsync → Quartz build → Vercel (Team SSO gated)
Pipeline lessons (實測):
- Opus 寫章節:serial 穩定,parallel > 2 會 stream stall。
- Axis JSON > 2 MB 要 priority-sample(drug_dev 用 top-300)。
- Voice calibration 的關鍵:每章 prompt 指定「先讀
chapters/01-prostate.md200 行」—— 風格一次收斂,不需要 Gemini critique + GPT fact-check 三方 ensemble(純 Opus 已達目標)。 - Vercel Deployment Protection ≠ production alias gating — preview-hash URL 有 SSO,但
<project>.vercel.app這個 alias 是 public。初次踩雷:以為 protected → 實際 6 hr public exposure。部署後必須 curl<project>.vercel.app驗證 401/404 才算安全。
Log
細節紀錄在 log.md。這份 CLAUDE.md 只放 SSOT + pipeline 定義。
- 2026-04-21 — 首次 scrape(Swapcard 登入 + AO backpack 解碼)
- 2026-04-23 01:57 — 7,066 abstracts 抓完(6 hr polite scrape)
- 2026-04-23 02:00 — private GitHub push + Drive tarball 備份
- 2026-04-23 上午 — 30-cluster + 5-axis filter 跑完
- 2026-04-23 下一步 — LLM ensemble 寫 5 章