图表是承载结构的,而非装饰。 只有当文字迫使阅读者一次性在脑中记住整个形状时才使用图表——然后选择最小的视图,让阅读者直接看到这个形状,而不是从句子中重构它。这里所有的内容都以文本块或 Mermaid 的形式在对话中呈现;最多只写一个制品文件。
词汇表
选择一个视图;最多两个。更多就是噪声。
伪代码 —— 不含语言噪声的逻辑。将决策简化为其分支形状:
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 注册表 + 类型
├── tools/ # MCP 工具处理器
└── workflow/ # 注册表 + 投影
Mermaid —— 参与方之间的交互、数据流或状态迁移:
sequenceDiagram
participant CLI
participant Hook
participant State
CLI->>Hook: PreToolUse
Hook->>State: read mode
Hook-->>CLI: allow / deny + facts
差异对比 —— 当周围结构已经存在时,变化的形状。将差异与主题匹配:
一个组件变更:
<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)打开它,然后停止:一个制品,而不是一个画廊。
纪律
- 将每个可视化直接放置在它所支持的两三个句子旁边。
- 只携带回答当前问题所需的调用、文件、属性、状态和边界——每一个额外的节点都是对读者的解码税。
- 如果真实的答案只需一句话就能表达,那就写出这句话。