--- description: 分析本次 git 变更,在 docs/technical/zh/ 中新建或更新对应的技术文档 argument-hint: 可选:指定要记录的主题,或留空自动从 git diff 推断 allowed-tools: ["Read", "Edit", "Write", "Bash", "Glob", "Grep"] --- # /docs — 技术文档写入工作流 ## 目标 根据当前 git 变更(或用户指定主题)在 `docs/technical/zh/` 中写入或更新技术文档,记录**为什么**这样做,而不只是记录做了什么。 ## 执行步骤 ### Step 1 — 理解变更范围 ```bash git diff HEAD --stat # 变更文件一览 git diff HEAD --name-only # 变更文件列表 git log --oneline -10 # 近期 commit 上下文 ``` 若 `$ARGUMENTS` 指定了主题,优先聚焦该主题;否则从文件列表和 diff stat 推断变更主题。不要默认读取完整仓库 diff;只对决定文档主题所需的文件读取 focused diff: ```bash git diff HEAD -- rg -n "class |def |function |export |router|@router|interface |type " ``` ### Step 2 — 确认文档范围 分析变更,判断: 1. **应写几篇文档**:单一主题写一篇,跨领域变更可拆分(如后端性能优化 + 运维启动脚本分开写) 2. **是新建还是更新**:检查 `docs/technical/zh/` 中是否已有相关文档 3. **文档命名**:按 `领域-主题-副题.md` 格式,全小写,用连字符,如: - `backend-datasources-api-performance.md` - `ops-planet-sh-startup.md` - `earth-bgp-context.md` ```bash ls docs/technical/zh/ # 查看现有文档 ``` **先输出写作计划供用户确认**(若变更明确且范围小,可直接执行): ``` 文档计划: 新建:docs/technical/zh/ops-planet-sh-startup.md — planet.sh 启动性能优化 更新:docs/technical/zh/backend-datasources-api-performance.md — 补充并行化细节 ``` ### Step 2.5 — 覆盖范围检查 写文档前必须按变更类型检查配套文档,不要只更新一篇专题文档: - 用户可见流程变化:更新 `docs/technical/zh/manual.md`,通常也更新 `docs/technical/zh/quickstart.md`。 - `manual.md`、`quickstart.md` 这类用户手册存在英文版时,同步更新 `docs/technical/en/...`,至少避免英文版与中文版互相矛盾。 - 控制台页面职责、路由入口、表格/抽屉/设置页行为变化:更新 `docs/technical/zh/frontend-admin-frontend-context.md`。 - Earth 前端行为、HUD、巡航、图层、图例、交互变化:更新 `docs/technical/zh/earth-frontend-context.md`。 - 新增 Earth 图层、调整 `renderOrder`、半径/高度偏移、深度策略、拾取策略、legend mode、图层面板顺序或启动加载顺序:更新 `docs/technical/zh/earth-render-layer-order.md`。 - Earth 图层视觉样式、颜色、图例符号语义变化:若影响样式索引,同步更新 `docs/technical/zh/earth-layer-style-reference.md`。 - 采集器、数据源、凭证、设置页、连接检查、scheduler、后端 API 变化:更新相关后端文档,优先检查 `docs/technical/zh/backend-collectors.md` 和 datasource/settings 专题文档。 - 如果某个旧 plan 的假设已经被当前实现推翻,在对应 `docs/plans/*.md` 增加现状修正或更新该段,不要让计划文档继续给出相反方向。 - 新增 technical 文档后,如果需要被发现,更新 `docs/technical/zh/README.md`。 - 对本次变更提取旧词做 stale search,例如旧 tab 名、旧路由职责、旧认证假设、改名前 UI 文案: ```bash rg -n "旧文案|旧路由职责|旧认证假设" docs/technical docs/plans ``` ### Step 3 — 写文档 遵循以下原则: **记录 WHY,不只记录 WHAT** - 好:`将戳文件从 /tmp 移到 ~/.cache/planet/,因为 WSL 重启后 /tmp 被清空` - 差:`修改了 AI_PROVIDER_BUILD_STAMP_FILE 的值` **必须包含的内容**: - 背景/问题:改动之前存在什么问题,为什么要改 - 核心设计决策及其理由 - 关键代码片段(用 diff 或 before/after 展示) - 相关文件列表 **格式要求**: - 使用 `##` 和 `###` 分级,不要超过三级 - 代码块注明语言(python / bash / typescript / sql) - 表格用于对比多个选项或列出参数 - 中文写作,技术术语保留英文原文 - `docs/technical/zh/` 中的文档不得用英文原文占位;如果存在 `docs/technical/en/` 对应文件,禁止逐字复制成中文文件 - 中文文档内部链接应指向 `docs/technical/zh/...`,除非明确引用英文专属文档 **文档结构模板**: ```markdown # 标题(说明做了什么) ## 背景 为什么要做这个改动,改动前存在什么问题。 ## 核心变更 ### 子主题一 before/after 或决策说明 + 关键代码 ### 子主题二 ... ## 相关文件 - `path/to/file.py` — 简短说明 ``` ### Step 4 — 验证 - 读一遍写好的文档,确认逻辑清晰、代码片段无明显错误 - 用 `rg --files` 或 `test -e` 确认文档中的文件路径在项目中真实存在,避免凭记忆判断: - 检查中文文档没有误复制英文版: ```bash python - <<'PY' from pathlib import Path same = [] for en in sorted(Path("docs/technical/en").glob("*.md")): zh = Path("docs/technical/zh") / en.name if zh.exists() and en.read_text() == zh.read_text(): same.append(en.name) if same: raise SystemExit("identical en/zh docs: " + ", ".join(same)) print("no identical en/zh docs") PY ``` - 检查中文文档内部链接没有继续指向无语言目录: ```bash rg -n "/home/ray/dev/linkong/planet/docs/technical/(?!zh|en)" docs/technical/zh --pcre2 ``` ```bash # 对文档中提到的关键路径做快速验证 ls ``` 如需检查大量链接,优先用确定性提取: ```bash rg -n "\]\(([^)]+)\)" docs/technical/zh/.md ``` ### Step 5 — 完成确认 输出摘要: ``` ✓ 新建:docs/technical/zh/ops-planet-sh-startup.md(约 xxx 字) ✓ 更新:docs/technical/zh/backend-datasources-api-performance.md ``` ## 注意事项 - 不要写流水账式的"改了 A、改了 B、改了 C",要写改动背后的约束和权衡 - 不要在文档中引用 PR 号、issue 号、或当前对话——这些会随时间失效 - 代码片段保持简洁,只保留说明问题的关键部分,省略无关样板代码 - 如果某个变更已有文档记录,优先在原文档中追加,而不是新建 - 文档是给未来的开发者看的,假设读者熟悉项目但不了解这次改动的背景