|
1 | 1 | # Contributing |
2 | 2 |
|
3 | | -## 开发原则 |
| 3 | +本指南主要面向共同维护和优化文档模板、OpenCode Skill 及其自动检查工具的开发者。使用现有工具生成某个模块文档,请直接阅读 [README.md](README.md) 的“为一个模块生成 Spec 文档”。 |
4 | 4 |
|
5 | | -- 实现事实以同 commit、同配置的 elaborated RTL 和 Chisel/Scala 为准。 |
6 | | -- 可选 spec 用于补充意图,不能覆盖源码证据。 |
7 | | -- 无法证实、来源冲突或疑似 RTL 缺陷必须登记为 `OPEN-*`。 |
8 | | -- 不修改 `third_party/XiangShan` 来迁就文档生成;需要兼容处理时修改本仓库工具。 |
9 | | -- `.cache/` 可删除,`evidence/` 必须随对应文档版本提交。 |
| 5 | +## 维护对象 |
10 | 6 |
|
11 | | -## 新模块 |
| 7 | +| 对象 | 路径 | 职责 | |
| 8 | +| --- | --- | --- | |
| 9 | +| 文档模板 | `templates/chip-design-document/chip_design_document_template_zh.md` | 定义交付文档的章节、字段、表格和标签 schema。 | |
| 10 | +| OpenCode Skill | `.opencode/skills/xiangshan-design-document/SKILL.md` | 指导 AI 如何取证、生成、判断版本和完成质量门禁。 | |
| 11 | +| 文档检查器 | `tools/validate_document.py` | 检查单个模块版本的结构和 evidence。 | |
| 12 | +| 仓库检查器 | `tools/validate_repository.py` | 检查跨模块链接、manifest 和模板约束。 | |
| 13 | +| RTL/图形工具 | `tools/generate_rtl.sh`、`extract_rtl_evidence.py`、`validate_mermaid.py` | 产生可复现 evidence。 | |
| 14 | +| 模板迭代记录 | `reports/template/Template_iteration_review.md` | 记录问题、决策、模板版本和回归结果。 | |
12 | 15 |
|
13 | | -为 `<Module>` 增加文档时使用以下目录: |
| 16 | +模板规定“输出长什么样”,Skill 规定“AI 如何得到正确输出”,checker 负责“把关键规则变成强制门禁”。修改其中一个时,必须评估另外两个是否需要同步。 |
14 | 17 |
|
15 | | -```text |
16 | | -inputs/<Module>/ |
17 | | -outputs/<Module>/ |
18 | | -reports/<Module>/ |
19 | | -evidence/<Module>/<version>/ |
| 18 | +## 不可破坏的契约 |
| 19 | + |
| 20 | +- 实现事实的证据优先级保持为:matching elaborated RTL > Chisel/Scala > 配置 > 可选 spec > 显式推断。 |
| 21 | +- 无法证实、来源冲突或疑似 RTL 缺陷必须登记为 `OPEN-*`,不能写成 FACT。 |
| 22 | +- I/O 必须区分 Chisel 声明与当前配置的 `Generated`/`Elided` Verilog 结果。 |
| 23 | +- 顶层状态机章节不能混入 entry 生命周期或子模块 FSM。 |
| 24 | +- `FG-API` 只能包含 Assume,`FG-COVERAGE` 只能包含 Cover。 |
| 25 | +- 每个 FC 必须有自然语言、FC 表和至少一个独立 CK。 |
| 26 | +- Mermaid 必须真实渲染,并以 source/SVG hash 防止使用过期证据。 |
| 27 | +- 历史文档和 evidence 不得在普通迭代中被覆盖。 |
| 28 | +- 不修改 XiangShan submodule 源码来迁就文档生成工具。 |
| 29 | + |
| 30 | +## 模板版本 |
| 31 | + |
| 32 | +模板顶部的 `模板结构版本` 与模块文档版本独立,使用 SemVer: |
| 33 | + |
| 34 | +| 增量 | 模板变化示例 | |
| 35 | +| --- | --- | |
| 36 | +| Major | 删除/重命名必选章节,改变 FG/FC/CK 解析结构,修改表格到旧生成器无法兼容。 | |
| 37 | +| Minor | 增加兼容字段、条件章节或新的可选/必选检查要求。 | |
| 38 | +| Patch | 增加 HTML 维护注释、修正文案或示例,不改变输出 schema。 | |
| 39 | + |
| 40 | +升级模板版本时必须: |
| 41 | + |
| 42 | +1. 更新模板顶部 `模板结构版本`。 |
| 43 | +2. 更新模板“文档控制与依据”中的 `使用模板版本` 示例。 |
| 44 | +3. 在 `Template_iteration_review.md` 说明问题、改动、兼容性和回归结果。 |
| 45 | +4. 判断已有模块是否需要生成新文档版本;不要追溯修改历史版本记录的模板号。 |
| 46 | + |
| 47 | +## Skill 修改原则 |
| 48 | + |
| 49 | +Skill 必须说明可执行工作流,而不是重复模板全部正文。重点维护: |
| 50 | + |
| 51 | +- 触发场景、仓库路径和完整交付物。 |
| 52 | +- 证据优先级与冲突处理。 |
| 53 | +- preflight、RTL elaboration、缓存和 evidence 规则。 |
| 54 | +- 文档 SemVer 选择及禁止覆盖历史。 |
| 55 | +- Bundle/I/O、参数、FSM、FG/FC/CK 和 case 的提取方法。 |
| 56 | +- Mermaid 安全写法与真实渲染要求。 |
| 57 | +- 质量报告内容、checker 命令和完成标准。 |
| 58 | + |
| 59 | +新增模板硬规则时,应同步回答: |
| 60 | + |
| 61 | +1. Skill 是否告诉 AI 如何满足它? |
| 62 | +2. checker 是否能自动发现违反规则的情况? |
| 63 | +3. quality report 是否记录了对应结果或未运行项? |
| 64 | + |
| 65 | +修改 Skill 后需要重启 OpenCode,再进行真实生成回归。 |
| 66 | + |
| 67 | +## 开发流程 |
| 68 | + |
| 69 | +### 1. 建立分支和基线 |
| 70 | + |
| 71 | +```bash |
| 72 | +git switch -c <topic-branch> |
| 73 | +make init |
| 74 | +make preflight MODULE=Sbuffer CONFIG=DefaultConfig |
| 75 | +make lint MODULE=Sbuffer VERSION=v2.0.1 |
20 | 76 | ``` |
21 | 77 |
|
22 | | -输入 spec 可省略,设计文档、质量报告、版本历史和 evidence 不可省略。 |
| 78 | +记录修改前的检查结果。不要把已有失败归因于本次改动。 |
23 | 79 |
|
24 | | -## 推荐流程 |
| 80 | +### 2. 做最小一致修改 |
25 | 81 |
|
26 | | -1. 初始化并检查环境: |
| 82 | +- 先修改模板,明确是 schema 变化还是说明变化。 |
| 83 | +- 再同步 Skill 的生成步骤和完成标准。 |
| 84 | +- 能自动检查的新规则应加入 checker,避免只依赖提示词。 |
| 85 | +- 跨平台逻辑必须同时考虑 Linux/macOS 和 x86-64/ARM64。 |
| 86 | +- 不提交 `.cache/`、XiangShan build、凭据、私有路径或 IDE 状态。 |
27 | 87 |
|
28 | | - ```bash |
29 | | - make init |
30 | | - make preflight MODULE=<Module> CONFIG=<Config> |
31 | | - ``` |
| 88 | +### 3. 使用回归模块验证 |
32 | 89 |
|
33 | | -2. 检查 `outputs/<Module>/VERSION_HISTORY.md`,按 SemVer 选择未占用版本。 |
| 90 | +Sbuffer 是当前模板和 Skill 的基准回归模块。至少执行: |
34 | 91 |
|
35 | | -3. 创建 RTL evidence: |
| 92 | +```bash |
| 93 | +# 模板自身 Mermaid 示例 |
| 94 | +rm -rf .cache/mermaid-check/template |
| 95 | +./tools/validate_mermaid.py \ |
| 96 | + --document templates/chip-design-document/chip_design_document_template_zh.md \ |
| 97 | + --output-dir .cache/mermaid-check/template |
36 | 98 |
|
37 | | - ```bash |
38 | | - make evidence MODULE=<Module> CONFIG=<Config> VERSION=<version> |
39 | | - ``` |
| 99 | +# 最新已交付模块文档 |
| 100 | +make lint MODULE=Sbuffer VERSION=v2.0.1 |
| 101 | +git diff --check |
| 102 | +``` |
40 | 103 |
|
41 | | -4. 使用 `xiangshan-design-document` Skill 生成同版本设计文档、质量报告和版本历史。 |
| 104 | +若改动会影响生成结果,应使用新文档版本完整重生成 Sbuffer,而不是改写旧版本。确认: |
42 | 105 |
|
43 | | -5. 实际渲染 Mermaid 并运行完整检查: |
| 106 | +- 设计文档、质量报告、VERSION_HISTORY 和 evidence 版本一致。 |
| 107 | +- RTL commit/config/hash 未变化时,质量报告明确说明。 |
| 108 | +- FG/FC/CK 的新增、删除或语义变化符合所选文档版本。 |
| 109 | +- 所有 Mermaid SVG 可渲染且 source hash 最新。 |
| 110 | +- XiangShan submodule 保持 clean。 |
44 | 111 |
|
45 | | - ```bash |
46 | | - make render MODULE=<Module> VERSION=<version> |
47 | | - make lint MODULE=<Module> VERSION=<version> |
48 | | - ``` |
| 112 | +### 4. 更新迭代记录 |
49 | 113 |
|
50 | | -## 版本规则 |
| 114 | +在 `reports/template/Template_iteration_review.md` 记录: |
51 | 115 |
|
52 | | -| 增量 | 使用条件 | |
53 | | -| --- | --- | |
54 | | -| Major | DUT 范围或文档 schema 出现不兼容变化。 | |
55 | | -| Minor | 接口、参数、状态、功能、FC/CK 或支持配置发生语义变化。 | |
56 | | -| Patch | 证据、OPEN 项、措辞、链接、图形或格式变化,行为契约不变。 | |
| 116 | +- 原问题和可复现方式。 |
| 117 | +- 模板、Skill、工具分别如何处理。 |
| 118 | +- 模板版本及兼容性判断。 |
| 119 | +- 使用了哪些回归模块和命令。 |
| 120 | +- 尚未覆盖的风险。 |
| 121 | + |
| 122 | +## Pull Request 要求 |
57 | 123 |
|
58 | | -模板结构版本与模块文档版本独立。生成文档必须记录所使用的模板版本。 |
| 124 | +PR 应聚焦一个模板或 Skill 问题,并说明: |
59 | 125 |
|
60 | | -历史版本不可覆盖。`--replace-evidence` 只能用于修复客观错误,并必须在新质量报告中记录原因。 |
| 126 | +- 修改动机及失败示例。 |
| 127 | +- 模板版本变化及 SemVer 理由。 |
| 128 | +- 模板、Skill、checker 是否同步;未同步时说明原因。 |
| 129 | +- 对已有文档和 UCAgent 解析的兼容性影响。 |
| 130 | +- Linux/macOS 相关影响。 |
| 131 | +- 回归命令和实际结果。 |
| 132 | +- 是否生成了新的模块回归文档/evidence。 |
61 | 133 |
|
62 | | -## Pull Request 检查 |
| 134 | +使用仓库 PR 模板,并确保: |
63 | 135 |
|
64 | | -- 说明受影响模块、文档版本、XiangShan commit 和配置。 |
65 | | -- 说明 spec 与源码的冲突及新增/关闭的 `OPEN-*`。 |
66 | | -- 提交设计文档、同版本质量报告、版本历史、RTL manifest/ports 和 Mermaid evidence。 |
67 | | -- 确认 XiangShan submodule clean;若更新 gitlink,解释升级原因和影响。 |
68 | | -- 执行 `git diff --check` 和对应版本的 `make lint`。 |
69 | | -- 不提交 `.cache/`、submodule build、凭据、私有路径或本地 IDE 配置。 |
| 136 | +- `git diff --check` 通过。 |
| 137 | +- 模板 Mermaid 示例实际渲染成功。 |
| 138 | +- `make lint MODULE=Sbuffer VERSION=<regression-version>` 通过。 |
| 139 | +- 敏感信息、缓存和 submodule build 未进入提交。 |
70 | 140 |
|
71 | 141 | ## 提交信息 |
72 | 142 |
|
73 | | -使用简洁的祈使句,说明实际变化,例如: |
| 143 | +使用简洁的祈使句描述维护动作,例如: |
74 | 144 |
|
75 | 145 | ```text |
76 | | -Add ICache design document v1.0.0 |
77 | | -Fix Mermaid rendering validation |
78 | | -Update XiangShan submodule baseline |
| 146 | +Clarify formal harness guidance |
| 147 | +Add Mermaid rendering validation |
| 148 | +Update template I/O mapping schema |
79 | 149 | ``` |
0 commit comments