@wneng/create-keel 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +21 -0
  3. package/dist/index.js +1479 -0
  4. package/dist/index.js.map +1 -0
  5. package/package.json +55 -0
  6. package/src/templates/.gitkeep +0 -0
  7. package/src/templates/agent-rust-desktop/files/Cargo.toml +12 -0
  8. package/src/templates/agent-rust-desktop/files/README.md +16 -0
  9. package/src/templates/agent-rust-desktop/files/generated-gitkeep +0 -0
  10. package/src/templates/agent-rust-desktop/files/main.rs +24 -0
  11. package/src/templates/agent-rust-desktop/fragment.yaml +18 -0
  12. package/src/templates/ai-claude-code/files/CLAUDE.md +19 -0
  13. package/src/templates/ai-claude-code/files/commands-README.md +7 -0
  14. package/src/templates/ai-claude-code/fragment.yaml +12 -0
  15. package/src/templates/ai-codex/files/project.md +11 -0
  16. package/src/templates/ai-codex/files/prompts-README.md +7 -0
  17. package/src/templates/ai-codex/fragment.yaml +12 -0
  18. package/src/templates/ai-cursor/files/rules-README.md +6 -0
  19. package/src/templates/ai-cursor/files/rules-project.md +15 -0
  20. package/src/templates/ai-cursor/fragment.yaml +12 -0
  21. package/src/templates/ai-kiro/files/prompts-README.md +5 -0
  22. package/src/templates/ai-kiro/files/specs-gitkeep +0 -0
  23. package/src/templates/ai-kiro/files/steering-README.md +5 -0
  24. package/src/templates/ai-kiro/files/steering-project.md +9 -0
  25. package/src/templates/ai-kiro/fragment.yaml +18 -0
  26. package/src/templates/ci-gitee/files/pipeline.yml +18 -0
  27. package/src/templates/ci-gitee/fragment.yaml +9 -0
  28. package/src/templates/ci-github/files/ci.yml +17 -0
  29. package/src/templates/ci-github/fragment.yaml +9 -0
  30. package/src/templates/contracts-base/files/CHANGELOG.md +10 -0
  31. package/src/templates/contracts-base/files/README.md +75 -0
  32. package/src/templates/contracts-base/files/_ai-policy.yaml +20 -0
  33. package/src/templates/contracts-base/files/dictionaries/domain-models.yaml +3 -0
  34. package/src/templates/contracts-base/files/dictionaries/enums.yaml +3 -0
  35. package/src/templates/contracts-base/files/environment/.env.example +3 -0
  36. package/src/templates/contracts-base/files/environment/env.schema.json +10 -0
  37. package/src/templates/contracts-base/files/errors/error-codes.yaml +6 -0
  38. package/src/templates/contracts-base/files/errors/error-response.schema.json +13 -0
  39. package/src/templates/contracts-base/files/events-gitkeep +0 -0
  40. package/src/templates/contracts-base/files/resources-examples-gitkeep +0 -0
  41. package/src/templates/contracts-base/files/resources-mocks-gitkeep +0 -0
  42. package/src/templates/contracts-base/files/states-gitkeep +0 -0
  43. package/src/templates/contracts-base/files/tests-acceptance-gitkeep +0 -0
  44. package/src/templates/contracts-base/files/tests-contracts-gitkeep +0 -0
  45. package/src/templates/contracts-base/files/tests-postman-gitkeep +0 -0
  46. package/src/templates/contracts-base/fragment.yaml +53 -0
  47. package/src/templates/contracts-events/files/asyncapi.yaml +8 -0
  48. package/src/templates/contracts-events/fragment.yaml +9 -0
  49. package/src/templates/contracts-rest/files/api.yaml +7 -0
  50. package/src/templates/contracts-rest/fragment.yaml +9 -0
  51. package/src/templates/contracts-rest-events/files/api.yaml +7 -0
  52. package/src/templates/contracts-rest-events/files/asyncapi.yaml +8 -0
  53. package/src/templates/contracts-rest-events/fragment.yaml +12 -0
  54. package/src/templates/deploy-bare-metal/files/release-checklist.md +8 -0
  55. package/src/templates/deploy-bare-metal/fragment.yaml +9 -0
  56. package/src/templates/deploy-common/files/README.md +5 -0
  57. package/src/templates/deploy-common/fragment.yaml +8 -0
  58. package/src/templates/deploy-docker-compose/files/compose.override.example.yaml +4 -0
  59. package/src/templates/deploy-docker-compose/files/docker-compose.yaml +4 -0
  60. package/src/templates/deploy-docker-compose/fragment.yaml +12 -0
  61. package/src/templates/deploy-kubernetes/files/Chart.yaml +6 -0
  62. package/src/templates/deploy-kubernetes/files/deployment.yaml +18 -0
  63. package/src/templates/deploy-kubernetes/files/namespace.yaml +4 -0
  64. package/src/templates/deploy-kubernetes/files/values.yaml +4 -0
  65. package/src/templates/deploy-kubernetes/fragment.yaml +18 -0
  66. package/src/templates/docs-skeleton/files/README.md +134 -0
  67. package/src/templates/docs-skeleton/files/arch-README.md +18 -0
  68. package/src/templates/docs-skeleton/files/arch-_ai-policy.yaml +8 -0
  69. package/src/templates/docs-skeleton/files/archive-README.md +20 -0
  70. package/src/templates/docs-skeleton/files/archive-_ai-policy.yaml +8 -0
  71. package/src/templates/docs-skeleton/files/assets-README.md +29 -0
  72. package/src/templates/docs-skeleton/files/assets-_ai-policy.yaml +8 -0
  73. package/src/templates/docs-skeleton/files/assets-design-gitkeep +0 -0
  74. package/src/templates/docs-skeleton/files/assets-diagrams-gitkeep +0 -0
  75. package/src/templates/docs-skeleton/files/assets-images-gitkeep +0 -0
  76. package/src/templates/docs-skeleton/files/be-README.md +29 -0
  77. package/src/templates/docs-skeleton/files/be-_ai-policy.yaml +8 -0
  78. package/src/templates/docs-skeleton/files/bg-README.md +21 -0
  79. package/src/templates/docs-skeleton/files/bg-_ai-policy.yaml +8 -0
  80. package/src/templates/docs-skeleton/files/eng-README.md +21 -0
  81. package/src/templates/docs-skeleton/files/eng-_ai-policy.yaml +9 -0
  82. package/src/templates/docs-skeleton/files/fe-README.md +31 -0
  83. package/src/templates/docs-skeleton/files/fe-_ai-policy.yaml +8 -0
  84. package/src/templates/docs-skeleton/files/governance-README.md +28 -0
  85. package/src/templates/docs-skeleton/files/governance-_ai-policy.yaml +13 -0
  86. package/src/templates/docs-skeleton/files/governance-ai-access-modes.md +324 -0
  87. package/src/templates/docs-skeleton/files/governance-assets.md +50 -0
  88. package/src/templates/docs-skeleton/files/governance-checklists.md +55 -0
  89. package/src/templates/docs-skeleton/files/governance-ci.md +36 -0
  90. package/src/templates/docs-skeleton/files/governance-deploy-ops.md +107 -0
  91. package/src/templates/docs-skeleton/files/governance-docs-references.md +39 -0
  92. package/src/templates/docs-skeleton/files/governance-git-workflow.md +45 -0
  93. package/src/templates/docs-skeleton/files/governance-integrations.md +66 -0
  94. package/src/templates/docs-skeleton/files/governance-security.md +69 -0
  95. package/src/templates/docs-skeleton/files/governance-tools-scripts.md +128 -0
  96. package/src/templates/docs-skeleton/files/process-docs-README.md +22 -0
  97. package/src/templates/docs-skeleton/files/process-docs-_ai-policy.yaml +10 -0
  98. package/src/templates/docs-skeleton/files/references-README.md +19 -0
  99. package/src/templates/docs-skeleton/files/references-_ai-policy.yaml +9 -0
  100. package/src/templates/docs-skeleton/files/references-legal-source.yaml +5 -0
  101. package/src/templates/docs-skeleton/files/references-standards-source.yaml +5 -0
  102. package/src/templates/docs-skeleton/files/references-vendors-source.yaml +5 -0
  103. package/src/templates/docs-skeleton/files/usage-quickstart.md +168 -0
  104. package/src/templates/docs-skeleton/fragment.yaml +129 -0
  105. package/src/templates/integrations-docs/files/README.md +53 -0
  106. package/src/templates/integrations-docs/files/_template.md +63 -0
  107. package/src/templates/integrations-docs/fragment.yaml +12 -0
  108. package/src/templates/license-apache-2/files/LICENSE +15 -0
  109. package/src/templates/license-apache-2/fragment.yaml +9 -0
  110. package/src/templates/license-mit/files/LICENSE +21 -0
  111. package/src/templates/license-mit/fragment.yaml +9 -0
  112. package/src/templates/miniapp-wechat/files/README.md +10 -0
  113. package/src/templates/miniapp-wechat/files/app.js +5 -0
  114. package/src/templates/miniapp-wechat/files/app.json +9 -0
  115. package/src/templates/miniapp-wechat/files/app.wxss +4 -0
  116. package/src/templates/miniapp-wechat/files/generated-gitkeep +0 -0
  117. package/src/templates/miniapp-wechat/files/pages-index.js +4 -0
  118. package/src/templates/miniapp-wechat/files/pages-index.json +3 -0
  119. package/src/templates/miniapp-wechat/files/pages-index.wxml +3 -0
  120. package/src/templates/miniapp-wechat/files/pages-index.wxss +10 -0
  121. package/src/templates/miniapp-wechat/files/project.config.json +13 -0
  122. package/src/templates/miniapp-wechat/files/sitemap.json +8 -0
  123. package/src/templates/miniapp-wechat/fragment.yaml +39 -0
  124. package/src/templates/mobile-flutter/files/README.md +14 -0
  125. package/src/templates/mobile-flutter/files/analysis_options.yaml +6 -0
  126. package/src/templates/mobile-flutter/files/generated-gitkeep +0 -0
  127. package/src/templates/mobile-flutter/files/main.dart +18 -0
  128. package/src/templates/mobile-flutter/files/pubspec.yaml +19 -0
  129. package/src/templates/mobile-flutter/fragment.yaml +21 -0
  130. package/src/templates/mobile-react-native/files/App.tsx +10 -0
  131. package/src/templates/mobile-react-native/files/README.md +15 -0
  132. package/src/templates/mobile-react-native/files/app.json +4 -0
  133. package/src/templates/mobile-react-native/files/generated-gitkeep +0 -0
  134. package/src/templates/mobile-react-native/files/index.js +5 -0
  135. package/src/templates/mobile-react-native/files/package.json +14 -0
  136. package/src/templates/mobile-react-native/fragment.yaml +24 -0
  137. package/src/templates/repo-skeleton/files/docs-gitkeep +0 -0
  138. package/src/templates/repo-skeleton/files/ops-README.md +6 -0
  139. package/src/templates/repo-skeleton/files/ops-k8s-gitkeep +0 -0
  140. package/src/templates/repo-skeleton/files/ops-monitoring-gitkeep +0 -0
  141. package/src/templates/repo-skeleton/files/ops-terraform-gitkeep +0 -0
  142. package/src/templates/repo-skeleton/files/scripts-README.md +11 -0
  143. package/src/templates/repo-skeleton/files/scripts-ci-gitkeep +0 -0
  144. package/src/templates/repo-skeleton/files/scripts-dev-gitkeep +0 -0
  145. package/src/templates/repo-skeleton/files/scripts-oneoff-gitkeep +0 -0
  146. package/src/templates/repo-skeleton/files/scripts-ops-gitkeep +0 -0
  147. package/src/templates/repo-skeleton/files/tools-README.md +4 -0
  148. package/src/templates/repo-skeleton/files/tools-contract-gitkeep +0 -0
  149. package/src/templates/repo-skeleton/fragment.yaml +41 -0
  150. package/src/templates/role-data/files/README.md +23 -0
  151. package/src/templates/role-data/files/_ai-policy.yaml +10 -0
  152. package/src/templates/role-data/files/dashboards-gitkeep +0 -0
  153. package/src/templates/role-data/files/data-catalog-gitkeep +0 -0
  154. package/src/templates/role-data/files/tracking-spec-gitkeep +0 -0
  155. package/src/templates/role-data/fragment.yaml +21 -0
  156. package/src/templates/role-design/files/README.md +26 -0
  157. package/src/templates/role-design/files/_ai-policy.yaml +11 -0
  158. package/src/templates/role-design/files/figma-exports-gitkeep +0 -0
  159. package/src/templates/role-design/files/ui-spec-gitkeep +0 -0
  160. package/src/templates/role-design/fragment.yaml +18 -0
  161. package/src/templates/role-field/files/README.md +33 -0
  162. package/src/templates/role-field/files/_ai-policy.yaml +13 -0
  163. package/src/templates/role-field/files/runbooks-README.md +5 -0
  164. package/src/templates/role-field/files/templates-README.md +5 -0
  165. package/src/templates/role-field/files/templates-_ai-policy.yaml +8 -0
  166. package/src/templates/role-field/fragment.yaml +21 -0
  167. package/src/templates/role-legal-security/files/README.md +33 -0
  168. package/src/templates/role-legal-security/files/_ai-policy.yaml +14 -0
  169. package/src/templates/role-legal-security/files/assessments-README.md +5 -0
  170. package/src/templates/role-legal-security/files/assessments-_ai-policy.yaml +9 -0
  171. package/src/templates/role-legal-security/files/evidence-README.md +5 -0
  172. package/src/templates/role-legal-security/files/evidence-_ai-policy.yaml +8 -0
  173. package/src/templates/role-legal-security/fragment.yaml +24 -0
  174. package/src/templates/role-marketing/files/README.md +32 -0
  175. package/src/templates/role-marketing/files/_ai-policy.yaml +14 -0
  176. package/src/templates/role-marketing/files/drafts-README.md +7 -0
  177. package/src/templates/role-marketing/files/drafts-_ai-policy.yaml +19 -0
  178. package/src/templates/role-marketing/files/published-README.md +5 -0
  179. package/src/templates/role-marketing/files/published-_ai-policy.yaml +8 -0
  180. package/src/templates/role-marketing/files/templates-README.md +5 -0
  181. package/src/templates/role-marketing/files/templates-_ai-policy.yaml +8 -0
  182. package/src/templates/role-marketing/fragment.yaml +30 -0
  183. package/src/templates/role-qa/files/README.md +20 -0
  184. package/src/templates/role-qa/files/_ai-policy.yaml +9 -0
  185. package/src/templates/role-qa/files/defects-gitkeep +0 -0
  186. package/src/templates/role-qa/files/test-cases-gitkeep +0 -0
  187. package/src/templates/role-qa/files/test-plans-gitkeep +0 -0
  188. package/src/templates/role-qa/fragment.yaml +21 -0
  189. package/src/templates/root-files/files/.editorconfig +15 -0
  190. package/src/templates/root-files/files/.gitattributes +13 -0
  191. package/src/templates/root-files/files/AGENTS.md +194 -0
  192. package/src/templates/root-files/files/README.md +16 -0
  193. package/src/templates/root-files/fragment.yaml +20 -0
  194. package/src/templates/server-go/files/README.md +3 -0
  195. package/src/templates/server-go/files/generated-gitkeep +0 -0
  196. package/src/templates/server-go/files/go.mod +3 -0
  197. package/src/templates/server-go/files/main.go +7 -0
  198. package/src/templates/server-go/fragment.yaml +18 -0
  199. package/src/templates/server-java/files/Application.java +12 -0
  200. package/src/templates/server-java/files/README.md +48 -0
  201. package/src/templates/server-java/files/application-test.yaml +17 -0
  202. package/src/templates/server-java/files/application.yaml +33 -0
  203. package/src/templates/server-java/files/generated-gitkeep +0 -0
  204. package/src/templates/server-java/files/pom.xml +97 -0
  205. package/src/templates/server-java/fragment.yaml +24 -0
  206. package/src/templates/server-node/files/README.md +6 -0
  207. package/src/templates/server-node/files/generated-gitkeep +0 -0
  208. package/src/templates/server-node/files/package.json +9 -0
  209. package/src/templates/server-node/files/src-index.ts +2 -0
  210. package/src/templates/server-node/fragment.yaml +18 -0
  211. package/src/templates/server-python/files/README.md +4 -0
  212. package/src/templates/server-python/files/app-init.py +1 -0
  213. package/src/templates/server-python/files/generated-gitkeep +0 -0
  214. package/src/templates/server-python/files/pyproject.toml +5 -0
  215. package/src/templates/server-python/fragment.yaml +18 -0
  216. package/src/templates/web-react/files/README.md +29 -0
  217. package/src/templates/web-react/files/generated-gitkeep +0 -0
  218. package/src/templates/web-react/files/index.html +12 -0
  219. package/src/templates/web-react/files/package.json +25 -0
  220. package/src/templates/web-react/files/src-App.tsx +11 -0
  221. package/src/templates/web-react/files/src-main.tsx +14 -0
  222. package/src/templates/web-react/files/tsconfig.json +20 -0
  223. package/src/templates/web-react/files/vite.config.ts +15 -0
  224. package/src/templates/web-react/fragment.yaml +30 -0
  225. package/src/templates/web-vue/files/README.md +3 -0
  226. package/src/templates/web-vue/files/generated-gitkeep +0 -0
  227. package/src/templates/web-vue/files/index.html +11 -0
  228. package/src/templates/web-vue/files/package.json +9 -0
  229. package/src/templates/web-vue/files/src-main.ts +3 -0
  230. package/src/templates/web-vue/fragment.yaml +21 -0
@@ -0,0 +1,18 @@
1
+ name: ci
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+ branches: [main]
7
+ jobs:
8
+ checks:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - name: checkout
12
+ run: echo "checkout <%= it.options.projectName %>"
13
+ - name: contract lint
14
+ run: echo "spectral lint contracts/openapi/api.yaml"
15
+ - name: json schema validate
16
+ run: echo "ajv-cli validate -s contracts/**/*.schema.json"
17
+ - name: dependency scan
18
+ run: echo "npm audit / pip-audit / trivy"
@@ -0,0 +1,9 @@
1
+ name: ci-gitee
2
+ version: 1.0.0
3
+ appliesWhen:
4
+ ci: gitee
5
+ priority: 20
6
+ files:
7
+ - from: files/pipeline.yml
8
+ to: .gitee/pipelines/ci.yml
9
+ render: true
@@ -0,0 +1,17 @@
1
+ name: ci
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+ branches: [main]
7
+ jobs:
8
+ checks:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+ - name: contract lint
13
+ run: echo "spectral lint for <%= it.options.projectName %>"
14
+ - name: json schema validate
15
+ run: echo "ajv-cli validate"
16
+ - name: dependency scan
17
+ run: echo "npm audit / pip-audit / trivy"
@@ -0,0 +1,9 @@
1
+ name: ci-github
2
+ version: 1.0.0
3
+ appliesWhen:
4
+ ci: github
5
+ priority: 20
6
+ files:
7
+ - from: files/ci.yml
8
+ to: .github/workflows/ci.yml
9
+ render: true
@@ -0,0 +1,10 @@
1
+ # Contracts Changelog
2
+
3
+ All notable changes to the contracts in this repository will be documented here.
4
+ The format follows [Keep a Changelog](https://keepachangelog.com/) and versions follow SemVer.
5
+
6
+ ## [Unreleased]
7
+
8
+ ### Added
9
+
10
+ - Initial scaffold.
@@ -0,0 +1,75 @@
1
+ # contracts/ — 契约权威
2
+
3
+ 本目录承载 **<%= it.options.projectName %>** 的机器可消费契约:所有 API、事件、错误码、领域模型、状态机、环境变量。
4
+
5
+ 任何与契约冲突的实现都视为 bug;任何修改契约的 PR 都必须在同一 PR 内更新 `CHANGELOG.md`。
6
+
7
+ ## 1. 目录结构
8
+
9
+ ```
10
+ contracts/
11
+ ├── README.md # 本文件
12
+ ├── CHANGELOG.md # 契约变更日志(CI 强制同 PR 更新)
13
+ ├── openapi/
14
+ <% if (it.options.contract === 'rest' || it.options.contract === 'rest+events') { %>│ ├── api.yaml # OpenAPI 3.x 主文件
15
+ <% } %><% if (it.options.contract === 'events-only' || it.options.contract === 'rest+events') { %>│ └── asyncapi.yaml # 消息 / 事件驱动接口
16
+ <% } %>├── dictionaries/ # 数据字典与领域模型
17
+ ├── states/ # 业务状态机(按需)
18
+ ├── errors/ # 错误规范
19
+ ├── events/ # 事件契约
20
+ ├── resources/ # 示例与 Mock
21
+ ├── environment/ # 环境契约
22
+ └── tests/ # 可执行测试契约
23
+ ```
24
+
25
+ ## 2. 进入 contracts/ 的文件要求
26
+
27
+ - **格式必须结构化、版本可控、工具或 AI 可直接消费**:YAML / JSON / Gherkin / OpenAPI / AsyncAPI / JSON Schema
28
+ - 不允许放入非结构化自由文本;唯一例外:`README.md`、`CHANGELOG.md`
29
+ - 任何变更都可能触发下游代码重新生成;PR 描述必须说明影响范围
30
+ - 示例中不得包含真实 PII;占位符规则与完整 PII 政策见 [`docs/governance/security.md`](../docs/governance/security.md)
31
+
32
+ ## 3. 命名与格式
33
+
34
+ - 文件名:`kebab-case`,例 `user-registration.yaml`
35
+ - Schema 字段名:`camelCase`
36
+ - 错误码:`DOMAIN.SUBDOMAIN.REASON` 全大写,例 `USER.AUTH.TOKEN_EXPIRED`
37
+ - 枚举值:`UPPER_SNAKE_CASE`
38
+
39
+ ## 4. 版本策略(SemVer)
40
+
41
+ - **MAJOR**:破坏性变更(删除字段、改变语义、不兼容的路径变更)
42
+ - **MINOR**:向后兼容的新增(新端点、新可选字段)
43
+ - **PATCH**:修订描述、修正示例、补充文档
44
+
45
+ 版本号位置:
46
+
47
+ - `contracts/openapi/api.yaml` 的 `info.version`
48
+ - `contracts/CHANGELOG.md` 顶部
49
+ - 独立发布时使用 Git Tag `contracts-vX.Y.Z`
50
+
51
+ ## 5. 变更日志
52
+
53
+ `contracts/CHANGELOG.md` 必须与契约变更在**同一 PR** 内更新。CI 强制校验。格式遵循 [Keep a Changelog](https://keepachangelog.com/)。
54
+
55
+ ## 6. 废弃流程
56
+
57
+ 1. schema 标注 `deprecated: true` 与 `x-sunset: YYYY-MM-DD`
58
+ 2. CHANGELOG 记录废弃原因与替代方案
59
+ 3. 至少保留一个 MINOR 版本周期(或 30 天,取较长者)后才能移除
60
+ 4. 移除时 MAJOR+1
61
+
62
+ ## 7. 契约 → 代码一致性
63
+
64
+ - 代码生成器、mock、Pact 验证脚本统一在 `tools/contract/`
65
+ - 由契约生成的代码放各模块的 `generated/` 子目录,**禁止手改**
66
+ - CI 校验"重新生成 → `git diff --exit-code generated/`",未对齐即阻断
67
+
68
+ <% if (it.options.integrations) { %>## 8. 集成对接联动
69
+
70
+ 本仓库已启用 `integrations`。契约的任何变更影响某 pair 时,**必须**在同一 PR 同步更新 `docs/06-集成对接/<pair>/`。完整规则见 `docs/governance/integrations.md`。
71
+ <% } %>
72
+
73
+ ## 9. 守门
74
+
75
+ `contracts/` 在 `CODEOWNERS` 中归 `@arch-team` 守门。任何契约变更需要架构组 review。
@@ -0,0 +1,20 @@
1
+ # AI 访问策略:contracts/
2
+ # 依据 ADR-0003 §4.1
3
+ mode: generated
4
+ source-of-truth:
5
+ - "docs/01-背景与需求/**"
6
+ - "docs/02-系统方案与架构/**"
7
+ last-aligned-with:
8
+ source-commit: null
9
+ aligned-at: null
10
+ human-review-required: true
11
+ notes: |
12
+ contracts/ 是 AI 派生区。
13
+ AI 根据 docs/01-需求 与 docs/02-架构 主动维护 OpenAPI / Schema / 错误码 / 字典 / 状态机。
14
+ 人可以编辑契约(作为下次 AI 生成的输入语境),但应当走 PR 让架构组评审契约的合理性。
15
+
16
+ 下列子目录在各自 _ai-policy.yaml 中有局部覆盖:
17
+ - tests/acceptance/ suggest(Gherkin 是人表达业务)
18
+ - tests/contracts/ suggest(消费端驱动,本仓库不主动)
19
+
20
+ README.md 与 CHANGELOG.md 沿用父策略 generated(README 视项目情况可改 suggest)。
@@ -0,0 +1,3 @@
1
+ # Domain models
2
+ # Add entities, fields, and constraints here. Field names in camelCase.
3
+ models: {}
@@ -0,0 +1,3 @@
1
+ # Global enumeration values.
2
+ # Enum values are UPPER_SNAKE_CASE.
3
+ enums: {}
@@ -0,0 +1,3 @@
1
+ # Copy this file to `.env` and fill real values.
2
+ # Keep secrets OUT of version control.
3
+ NODE_ENV=development
@@ -0,0 +1,10 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://example.com/schemas/env.json",
4
+ "title": "EnvironmentVariables",
5
+ "type": "object",
6
+ "additionalProperties": true,
7
+ "properties": {
8
+ "NODE_ENV": { "type": "string", "enum": ["development", "test", "production"] }
9
+ }
10
+ }
@@ -0,0 +1,6 @@
1
+ # Error codes
2
+ # Format: DOMAIN.SUBDOMAIN.REASON (all uppercase).
3
+ codes:
4
+ SYSTEM.INTERNAL.UNEXPECTED:
5
+ httpStatus: 500
6
+ message: "An unexpected error occurred."
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://example.com/schemas/error-response.json",
4
+ "title": "ErrorResponse",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["code", "message"],
8
+ "properties": {
9
+ "code": { "type": "string" },
10
+ "message": { "type": "string" },
11
+ "details": { "type": "object" }
12
+ }
13
+ }
@@ -0,0 +1,53 @@
1
+ name: contracts-base
2
+ version: 1.0.0
3
+ appliesWhen: {}
4
+ priority: 10
5
+ files:
6
+ - from: files/_ai-policy.yaml
7
+ to: contracts/_ai-policy.yaml
8
+ render: false
9
+ - from: files/README.md
10
+ to: contracts/README.md
11
+ render: true
12
+ - from: files/CHANGELOG.md
13
+ to: contracts/CHANGELOG.md
14
+ render: false
15
+ - from: files/dictionaries/domain-models.yaml
16
+ to: contracts/dictionaries/domain-models.yaml
17
+ render: false
18
+ - from: files/dictionaries/enums.yaml
19
+ to: contracts/dictionaries/enums.yaml
20
+ render: false
21
+ - from: files/errors/error-codes.yaml
22
+ to: contracts/errors/error-codes.yaml
23
+ render: false
24
+ - from: files/errors/error-response.schema.json
25
+ to: contracts/errors/error-response.schema.json
26
+ render: false
27
+ - from: files/environment/.env.example
28
+ to: contracts/environment/.env.example
29
+ render: false
30
+ - from: files/environment/env.schema.json
31
+ to: contracts/environment/env.schema.json
32
+ render: false
33
+ - from: files/states-gitkeep
34
+ to: contracts/states/.gitkeep
35
+ render: false
36
+ - from: files/events-gitkeep
37
+ to: contracts/events/.gitkeep
38
+ render: false
39
+ - from: files/resources-examples-gitkeep
40
+ to: contracts/resources/examples/.gitkeep
41
+ render: false
42
+ - from: files/resources-mocks-gitkeep
43
+ to: contracts/resources/mocks/.gitkeep
44
+ render: false
45
+ - from: files/tests-acceptance-gitkeep
46
+ to: contracts/tests/acceptance/.gitkeep
47
+ render: false
48
+ - from: files/tests-contracts-gitkeep
49
+ to: contracts/tests/contracts/.gitkeep
50
+ render: false
51
+ - from: files/tests-postman-gitkeep
52
+ to: contracts/tests/postman-collections/.gitkeep
53
+ render: false
@@ -0,0 +1,8 @@
1
+ asyncapi: 3.0.0
2
+ info:
3
+ title: <%= it.options.projectName %>
4
+ version: 0.1.0
5
+ description: Event-driven contract. Document publish/subscribe channels here.
6
+ channels: {}
7
+ operations: {}
8
+ components: {}
@@ -0,0 +1,9 @@
1
+ name: contracts-events
2
+ version: 1.0.0
3
+ appliesWhen:
4
+ contract: events-only
5
+ priority: 20
6
+ files:
7
+ - from: files/asyncapi.yaml
8
+ to: contracts/openapi/asyncapi.yaml
9
+ render: true
@@ -0,0 +1,7 @@
1
+ openapi: 3.1.0
2
+ info:
3
+ title: <%= it.options.projectName %>
4
+ version: 0.1.0
5
+ description: REST API contract. Edit freely; keep examples free of PII.
6
+ paths: {}
7
+ components: {}
@@ -0,0 +1,9 @@
1
+ name: contracts-rest
2
+ version: 1.0.0
3
+ appliesWhen:
4
+ contract: rest
5
+ priority: 20
6
+ files:
7
+ - from: files/api.yaml
8
+ to: contracts/openapi/api.yaml
9
+ render: true
@@ -0,0 +1,7 @@
1
+ openapi: 3.1.0
2
+ info:
3
+ title: <%= it.options.projectName %>
4
+ version: 0.1.0
5
+ description: REST API contract. Edit freely; keep examples free of PII.
6
+ paths: {}
7
+ components: {}
@@ -0,0 +1,8 @@
1
+ asyncapi: 3.0.0
2
+ info:
3
+ title: <%= it.options.projectName %>
4
+ version: 0.1.0
5
+ description: Event-driven contract. Document publish/subscribe channels here.
6
+ channels: {}
7
+ operations: {}
8
+ components: {}
@@ -0,0 +1,12 @@
1
+ name: contracts-rest-events
2
+ version: 1.0.0
3
+ appliesWhen:
4
+ contract: rest+events
5
+ priority: 20
6
+ files:
7
+ - from: files/api.yaml
8
+ to: contracts/openapi/api.yaml
9
+ render: true
10
+ - from: files/asyncapi.yaml
11
+ to: contracts/openapi/asyncapi.yaml
12
+ render: true
@@ -0,0 +1,8 @@
1
+ # Release Checklist — <%= it.options.projectName %>
2
+
3
+ - [ ] All tests pass on the target branch
4
+ - [ ] `contracts/CHANGELOG.md` entry covers this release
5
+ - [ ] Artifact built and signed
6
+ - [ ] Target host reachable and in maintenance window
7
+ - [ ] Rollback script rehearsed
8
+ - [ ] Monitoring dashboards open
@@ -0,0 +1,9 @@
1
+ name: deploy-bare-metal
2
+ version: 1.0.0
3
+ appliesWhen:
4
+ deploy: bare-metal
5
+ priority: 20
6
+ files:
7
+ - from: files/release-checklist.md
8
+ to: deploy/checklists/release-checklist.md
9
+ render: true
@@ -0,0 +1,5 @@
1
+ # deploy/
2
+
3
+ Release artifacts and per-environment configuration for
4
+ **<%= it.options.projectName %>**. The application-vs-infrastructure split
5
+ follows `AGENTS.md` §11: infrastructure lives in `ops/`.
@@ -0,0 +1,8 @@
1
+ name: deploy-common
2
+ version: 1.0.0
3
+ appliesWhen: {}
4
+ priority: 10
5
+ files:
6
+ - from: files/README.md
7
+ to: deploy/README.md
8
+ render: true
@@ -0,0 +1,4 @@
1
+ services:
2
+ app:
3
+ ports:
4
+ - "8080:8080"
@@ -0,0 +1,4 @@
1
+ services:
2
+ app:
3
+ image: <%= it.options.projectName %>:local
4
+ restart: unless-stopped
@@ -0,0 +1,12 @@
1
+ name: deploy-docker-compose
2
+ version: 1.0.0
3
+ appliesWhen:
4
+ deploy: docker-compose
5
+ priority: 20
6
+ files:
7
+ - from: files/docker-compose.yaml
8
+ to: deploy/compose/docker-compose.yaml
9
+ render: true
10
+ - from: files/compose.override.example.yaml
11
+ to: deploy/compose/compose.override.example.yaml
12
+ render: false
@@ -0,0 +1,6 @@
1
+ apiVersion: v2
2
+ name: <%= it.options.projectName %>
3
+ description: Helm chart for <%= it.options.projectName %>
4
+ type: application
5
+ version: 0.1.0
6
+ appVersion: "0.1.0"
@@ -0,0 +1,18 @@
1
+ apiVersion: apps/v1
2
+ kind: Deployment
3
+ metadata:
4
+ name: <%= it.options.projectName %>
5
+ namespace: <%= it.options.projectName %>
6
+ spec:
7
+ replicas: 1
8
+ selector:
9
+ matchLabels:
10
+ app: <%= it.options.projectName %>
11
+ template:
12
+ metadata:
13
+ labels:
14
+ app: <%= it.options.projectName %>
15
+ spec:
16
+ containers:
17
+ - name: app
18
+ image: <%= it.options.projectName %>:local
@@ -0,0 +1,4 @@
1
+ apiVersion: v1
2
+ kind: Namespace
3
+ metadata:
4
+ name: <%= it.options.projectName %>
@@ -0,0 +1,4 @@
1
+ image:
2
+ repository: <%= it.options.projectName %>
3
+ tag: local
4
+ replicaCount: 1
@@ -0,0 +1,18 @@
1
+ name: deploy-kubernetes
2
+ version: 1.0.0
3
+ appliesWhen:
4
+ deploy: kubernetes
5
+ priority: 20
6
+ files:
7
+ - from: files/namespace.yaml
8
+ to: deploy/k8s/namespace.yaml
9
+ render: true
10
+ - from: files/deployment.yaml
11
+ to: deploy/k8s/deployment.yaml
12
+ render: true
13
+ - from: files/Chart.yaml
14
+ to: deploy/helm/Chart.yaml
15
+ render: true
16
+ - from: files/values.yaml
17
+ to: deploy/helm/values.yaml
18
+ render: true
@@ -0,0 +1,134 @@
1
+ # docs/ — 文档门户
2
+
3
+ 本目录承载所有**面向人类**的文档。机器可消费的契约见 `contracts/`,协作总纲见仓库根 `AGENTS.md`。
4
+
5
+ ## 1. 目录地图
6
+
7
+ ```
8
+ docs/
9
+ ├── README.md # 本文件,文档入口
10
+ ├── 01-背景与需求/ # PRD、需求调研、竞品分析
11
+ ├── 02-系统方案与架构/ # ADR、架构提案、方案对比
12
+ ├── 03-工程规范与研发基础设施/ # 编码规范、CI/CD、环境管理
13
+ ├── 04-后端详细设计/ # 后端模块设计
14
+ ├── 05-前端客户端详细设计/ # 前端 / 客户端模块设计
15
+ <% if (it.options.integrations) { %>├── 06-集成对接/ # 跨执行环境对接(已启用)
16
+ <% } %>├── assets/ # 图片、图表源、设计稿
17
+ ├── references/ # 第三方资料(标准、厂商、合规)
18
+ ├── governance/ # 从 AGENTS.md 拆出的细化政策
19
+ ├── archive/ # 退役文档归档
20
+ └── 过程文档/ # 草稿、会议记录、调研、未定稿
21
+ ```
22
+
23
+ ## 2. 正式文档 vs 过程文档
24
+
25
+ **正式文档**:经过评审、有结论、可作为决策依据的文档。归入编号目录(`01-` 至 `06-`)。
26
+
27
+ **过程文档**:草稿、讨论、临时调研、未定稿。**只能**进 `过程文档/`。
28
+
29
+ | 阶段 | 位置 |
30
+ | --- | --- |
31
+ | 正在讨论 | `docs/过程文档/drafts/` |
32
+ | 已开会 | `docs/过程文档/meeting-notes/` |
33
+ | 技术调研 | `docs/过程文档/spike-investigations/` |
34
+ | 结论已采纳 | 提炼到对应编号目录;原文档头部加"已采纳 → 见 …" |
35
+ | 被否决 / 过期 90 天 | 移入 `docs/archive/` |
36
+
37
+ ## 3. 索引同步规则
38
+
39
+ 新增 / 修改可能影响 **启动 / 实现 / 管理** 视角的文档时,**必须同步**:
40
+
41
+ - 本文件 `docs/README.md`(更新目录地图、新增分类入口、调整子目录约定)
42
+
43
+ > 历史上 `docs/过程文档/` 曾维护三份手写索引文件(阅读顺序 / 必读清单 / 详细设计导航)。这些被 `AGENTS.md` §0 与本文件 §1、§9 完整覆盖,且无法被 lint 验证一致性,已废弃。AI 与人都用 `grep` / `fileSearch` 检索,不再依赖手维护索引。
44
+
45
+ ## 4. 文档命名规则
46
+
47
+ - 正式文档:`<编号>-<主题>.md`,例 `02-认证流程方案.md`
48
+ - ADR:`docs/02-系统方案与架构/adr-<NNNN>-<slug>.md`
49
+ - 过程文档:自由命名,但应包含日期或主题以利索引
50
+
51
+ ## 5. 子目录约定的强弱分级
52
+
53
+ 并非所有 docs/ 一级子目录的内部结构都"必守"。按强度分两类。
54
+
55
+ ### 5.1 硬约定(结构与 AI 触达模式绑定,不可调整)
56
+
57
+ 下列目录的子目录划分是**结构性必守**——它们与 ADR-0003 的 access mode 或 governance-lint 检查直接耦合,调整会触发 lint 失败或破坏双闸门:
58
+
59
+ | 目录 | 必守子目录 | 强制来源 |
60
+ |------|----------|---------|
61
+ | `06-集成对接/` | `<consumer>-to-<producer>/` 命名模式 | [`governance/integrations.md`](governance/integrations.md) |
62
+ | `07-质量与测试/` | `test-plans/` `test-cases/` `defects/` | ADR-0002 + scaffolder |
63
+ | `08-部署与现场实施/` | `templates/`(read-only) + `runbooks/` + `customer-<id>/`(read-only) + `customer-<id>/.pending/`(generated) | ADR-0002 + governance-lint |
64
+ | `10-合规与安全/` | `assessments/`(suggest) + `evidence/`(read-only) | ADR-0002 + governance-lint |
65
+ | `11-市场与对外材料/` | `templates/`(read-only) + `drafts/`(generated) + `published/`(read-only) | ADR-0002 + 双闸门 + governance-lint |
66
+ | `governance/` | 11 个固定文件名 | ADR-0001 + governance-lint |
67
+ | `assets/` | `diagrams/` + `images/` + `design/` | [`governance/assets.md`](governance/assets.md) 引用约定 |
68
+ | `references/` | `standards/` + `vendors/` + `legal/` | [`governance/docs-references.md`](governance/docs-references.md) 元数据规则 |
69
+ | `过程文档/` | `drafts/` + `meeting-notes/` + `spike-investigations/` + 三份索引 | AGENTS.md §5 |
70
+
71
+ ### 5.2 软建议(按项目实际调整)
72
+
73
+ 下列目录的内部结构在各 README 里**仅作建议**,没有 lint 检查;项目可按业务线、团队规模、写作风格自行调整:
74
+
75
+ | 目录 | 建议(非强制) |
76
+ |------|--------------|
77
+ | `01-背景与需求/` | 可分 `prd/` `research/` `competitive/`,也可扁平 |
78
+ | `02-系统方案与架构/` | 扁平,ADR 按 `adr-<NNNN>-<slug>.md` 命名 |
79
+ | `03-工程规范与研发基础设施/` | 按主题(编码规范 / CI / 环境)扁平组织 |
80
+ | `04-后端详细设计/` | 一模块一文件 `<模块>.md`,或多文件用 `<模块>/` 子目录 |
81
+ | `05-前端客户端详细设计/` | 按"功能 + 平台"或"平台 + 功能"分层,二选一 |
82
+ | `archive/` | 扁平,文件名加 `YYYY-MM-` 日期前缀 |
83
+ | `design/` | `figma-exports/` + `ui-spec/`(scaffolder 默认;可调整) |
84
+
85
+ 调整软建议目录的内部结构**不需要新 ADR**;调整硬约定目录的结构**必须**经过 ADR 修订。
86
+
87
+ ## 6. 特性关联约定
88
+
89
+ 同一特性(feature)通常会跨多个目录产出文档:PRD(01)、架构(02)、后端 / 前端设计(04 / 05)、集成(06)、测试(07)、契约(contracts/)。为了让 `grep` 一秒找全、PR review 能确认齐全:
90
+
91
+ ### 6.1 命名规则
92
+
93
+ 每个特性使用一个稳定的 **kebab-case slug**,匹配 `^[a-z0-9][a-z0-9-]{0,62}$`。slug 一旦确立**不改名**;改名等价于建新特性。
94
+
95
+ slug 出现在文件名中:
96
+
97
+ | 层级 | 文件名模式 | 示例(slug = `user-signup`)|
98
+ |------|----------|---------------------------|
99
+ | PRD(01)| `prd-<slug>.md` | `docs/01-背景与需求/prd-user-signup.md` |
100
+ | ADR(02,必要时)| `adr-<NNNN>-<slug>.md` | `docs/02-系统方案与架构/adr-0007-user-signup.md` |
101
+ | 后端设计(04)| `<slug>.md` 或 `<slug>/index.md` | `docs/04-后端详细设计/user-signup.md` |
102
+ | 前端 / 客户端(05)| `<slug>-<platform>.md` 或 `<slug>/<platform>.md` | `docs/05-前端客户端详细设计/user-signup-web.md` |
103
+ | 集成(06,启用时)| pair 内 `<slug>.md` | `docs/06-集成对接/web-to-server/user-signup.md` |
104
+ | 测试(07,启用 qa 时)| `<slug>.md` | `docs/07-质量与测试/test-plans/user-signup.md` |
105
+ | 契约 | OpenAPI 路径 / event 名 与 slug 对齐 | `contracts/openapi/api.yaml#/paths/~1auth~1signup` |
106
+
107
+ > 中文标题写在文件**内部**(H1);文件**名**保持英文 slug,便于跨工具检索。
108
+
109
+ ### 6.2 关联检查(governance-lint,warning)
110
+
111
+ `governance-lint` 扫描 `docs/01-背景与需求/prd-*.md`,对每个 `prd-<slug>.md` 检查:
112
+
113
+ - `docs/02-系统方案与架构/adr-*-<slug>.md` 或 `docs/04-后端详细设计/<slug>*` 或 `docs/05-前端客户端详细设计/<slug>*`,**至少一处**存在
114
+ - 否则产生 **warning**:`prd-<slug>.md exists but no design / ADR counterpart found`
115
+
116
+ warning 不是 error——允许"有 PRD 但还没开始设计"的过渡状态;但提醒避免漏写。反向不检查(设计 / 测试 / 契约存在但 PRD 缺失是合法的)。
117
+
118
+ ### 6.3 何时**不**强求 slug
119
+
120
+ - 跨多个特性的横切设计(如"全局错误码体系")
121
+ - 纯重构 / 性能优化(没有独立 PRD)
122
+ - 角色目录(07-11、design)的非 feature 通用内容(如通用 runbook)
123
+
124
+ ## 7. 治理细则入口
125
+
126
+ `docs/governance/` 承载从 AGENTS.md 拆出的专项规则(CI、安全、Git、资产、集成、ops/deploy、tools/scripts、checklist 等)。索引见 [`governance/README.md`](governance/README.md)。
127
+
128
+ <% if (it.options.integrations) { %>## 7. 集成对接入口
129
+
130
+ `docs/06-集成对接/` 已通过 `integrations=true` 启用。完整规则见 [`governance/integrations.md`](governance/integrations.md)。
131
+ <% } else { %>## 7. 集成对接
132
+
133
+ 本仓库未启用 `integrations`。如果未来需要与外部仓库 / 团队对接(例如本仓库只做后端,前端在另一仓库),手动建立 `docs/06-集成对接/` 并参考 [`governance/integrations.md`](governance/integrations.md)。
134
+ <% } %>
@@ -0,0 +1,18 @@
1
+ # 02-系统方案与架构
2
+
3
+ ADR(架构决策记录)、方案对比、架构提案的归属目录。
4
+
5
+ ## ADR 命名
6
+
7
+ `adr-<NNNN>-<slug>.md`,例 `adr-0001-agents-md-layering.md`。编号从 0001 起递增。
8
+
9
+ ## ADR 生命周期
10
+
11
+ 1. 草案进 `docs/过程文档/drafts/<topic>-plan.md`
12
+ 2. 评审通过后归档到本目录为 `adr-<NNNN>-<slug>.md`
13
+ 3. 在草案文件顶部加"已采纳 → 见 ADR-XXXX"指针
14
+ 4. ADR 一旦合入,**不再修改**;后续变更通过新 ADR 取代或修订
15
+
16
+ ## AI 触达模式
17
+
18
+ `mode: suggest`。已采纳的 ADR 视为历史决策;新 ADR 的发起由人主导(架构 / 技术负责人),AI 仅在相关变更时提示"可能需要新 ADR 或修订 ADR-XXXX"。
@@ -0,0 +1,8 @@
1
+ # AI 访问策略:docs/02-系统方案与架构/
2
+ # 依据 ADR-0003 §4.3
3
+ mode: suggest
4
+ notes: |
5
+ ADR 是历史决策。本目录下:
6
+ - 已采纳的 ADR 一旦合入,不再修改;后续变更通过新 ADR 取代或修订
7
+ - 新 ADR 的发起由人主导(架构 / 技术负责人)
8
+ - AI 在相关变更时仅在 PR 描述中提示"可能需要新 ADR 或修订 ADR-XXXX"