圖表是承載重量的,不是裝飾。 只有在文字迫使讀者必須一次在心中記住整個形狀時,才使用圖表——然後選擇最小的視圖,讓他們看到形狀,而不是從句子中重建。此處所有內容在對話中都以文字區塊或 Mermaid 圖表呈現;最多只會寫入一個 artifact 檔案。
詞彙
選擇一種視圖;最多兩種。更多即是噪音。
虛擬碼 — 沒有語言干擾的邏輯。將決策簡化為其分支形狀:
on(request)
if state file locked by another writer
queue and return pending
acquire lock
write
release
呼叫樹 — 執行時期控制流程。深度顯示誰擁有流程;在有趣的邊緣處加上註解:
acquireStateFileLockSync()
resolveLockPath()
openExclusive()
writePid()
元件樹 — UI 或模組結構,直接註明重要的邊界:
<SettingsPage> (src/routes/settings)
<SessionList> (owns its fetches)
<DangerZone>
<ConfirmButton> (disabled until typed confirmation)
檔案樹 — 責任歸屬;保持淺層,每個目錄一個註解:
src/
├── hooks/ # hook registry + types
├── tools/ # MCP tool handlers
└── workflow/ # registry + projections
Mermaid — 參與者之間的互動、資料流或狀態轉換:
sequenceDiagram
participant CLI
participant Hook
participant State
CLI->>Hook: PreToolUse
Hook->>State: read mode
Hook-->>CLI: allow / deny + facts
差異比較 — 當周圍結構已經存在時,變更的形狀。將 diff 與主題匹配:
一個元件變更:
<SettingsPage>
<SessionList />
<DangerZone>
+ <ConfirmButton />
</DangerZone>
一個檔案佈局變更:
src/tools/
-└── state-tools.ts
+└── state-tools/
+ ├── handlers.ts
+ └── schema.ts
一個控制流程變更:
commit()
stage()
hashBlobs()
+ writeObject()
updateRef()
+ acquireStateFileLock()
一個狀態機變更:
on(request)
- write immediately
+ if locked
+ queue and return pending
+ acquire lock
+ write
+ release
完整區塊 — 當省略會隱藏誰擁有什麼或事物運行的順序時,顯示完整的單元一次即可,且可複製:
export function isRegistryEnabled(): boolean {
const flag = process.env.OMC_WORKFLOW_REGISTRY;
return flag !== '0' && flag !== 'false';
}
當文字用盡時
UI 佈局、前後對比,或對 Mermaid 而言過於密集的概念:撰寫一個聚焦的 HTML 檔案——圖表、資訊圖或幾張投影片——使用產品本身的顏色、字體和元件風格,填入真實的標籤和資料,在桌面和行動裝置上都能運作。使用平台開啟器(Windows 上用 start,macOS 上用 open,Linux 上用 xdg-open)開啟,然後就此打住:一個 artifact,不是一個畫廊。
紀律
- 將每個視覺元素直接放置在它所支援的兩三句話旁邊。
- 只攜帶回答當前問題所需的呼叫、檔案、屬性、狀態和邊界——每個多餘的節點都是對讀者的解碼稅。
- 如果真誠的答案可以在一句話內完成,就寫那句話。