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 URLhttps://aacr2026-wiki.vercel.app (public + x-robots-tag: noindex 擋 Google/Bing)
VERCEL SCOPElunhsiangyuans-projects
DRIVE1-VGq0g_nDwNi9jyCZQnw-byL9S9wEtk6 (tarball backup)

五條主軸(SSOT, 2026-04-23)

#Axisabstract 數核心 session
1Prostate cancer436AR/PSMA/mCRPC/neuroendocrine
2Lung cancer1,110TKI resistance, NSCLC/SCLC, combo immuno
3Drug development1,662ADC, bispecific/TCE, degrader, novel SM
4First-in-human / Phase I260FIH sessions, dose escalation
5AI workflow564LLMs 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 + plannings
  • ao — 重跑 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:任一章想重寫(新資料進來 / 想換角度 / 初次建構)。

Argsprostate | lung | drug-dev | fih | ai-workflow | all

Pipeline(三 LLM 編輯委員會):

  1. Opus 讀 axis filter 結果(RAW/data/wiki_axes/<axis>.json)寫 narrative v1
  2. Gemini 3.1agent -p 做 critique(抓平滑語氣、遺漏視角、事實弱點)
  3. GPT-5.4codex exec 做 fact-check(每個 AB#ControlNumber 比對原 abstract)
  4. 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

  1. Unresolved [[wikilinks]] — 掃 VAULT 每個 目標檔案是否存在
  2. AB# 合法性 — 每個引用都能在 RAW/state/ao_presentation_details.json 找到
  3. SSOT 數字一致性 — 章節內若提「436 abstracts」,比對 CLAUDE.md 的表
  4. Frontmatter 完整 — 每章有 --- tags / axis / created / word_count ---

Fail 的 lint 項目一律修,不 sync。


/wiki-sync

When:章節寫完 / 編輯過 / landing 改完,想把改動推到 live site。

Workflow

  1. (可選)跑 /wiki-lint,lint 清潔再推
  2. rsync VAULT → QUARTZ/content/
  3. npx quartz build → public/
  4. vercel --prod 部署到同一個 project(保留 SSO gate)
  5. git commit + push VAULT 到 GitHub(保留版本歷史)
  6. 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

  1. scripts/wiki_axes.py 的 AXES dict,加新 entry(title_patterns + abstract_patterns + min_hits)
  2. python3 scripts/wiki_axes.py → 新 data/wiki_axes/<name>.json
  3. 檢視 top sessions 確認篩到對的東西
  4. 更新這份 CLAUDE.md 的 SSOT 表(加一行)
  5. /wiki-chapter <name> 生成章節
  6. index.md landing 加入口連結

/wiki-query [question]

When:你想查某個主題出現在哪。

Workflow

  1. 優先 grep on VAULT(narrative 內容)
  2. 次選 grep on RAW/state/ao_presentation_details.json(原始 abstract)
  3. 若是「趨勢 / 對比」類,跑 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.md 200 行」—— 風格一次收斂,不需要 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 章