@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,168 @@
1
+ # 仓库使用清单(Quickstart)
2
+
3
+ > 本文件是新人 / AI 进入本仓库的**单点入口**。读完这一份就能开始日常工作。
4
+ > 完整规则在各权威文件,本文件只列高频场景与命令。
5
+
6
+ ## 0. 分级采用:先选档位再读后面
7
+
8
+ 本仓库的目录、access mode、roles、governance 共 11 份政策,是**按完整 To B 交付场景**设计的;不是每个项目都需要全部背上。先按下表挑一档,再读对应章节。
9
+
10
+ | 档位 | 适用 | 启用范围 | 不启用 |
11
+ |------|------|---------|--------|
12
+ | **轻量档**(lite)| 1–5 人原型 / 内部工具 / 开源库 | `docs/01–05` + `contracts/`(治理契约即可,业务契约可缓)+ `governance/` 三件套(ci / security / git-workflow)+ `01–02` 编号目录 | `docs/06–11` + `design/` + `roles` + 完整 11 份 governance + 双闸门 |
13
+ | **标准档**(standard)| 5–15 人产品研发 / SaaS | 轻量档 + `docs/06-集成对接/` + `docs/07-质量与测试/`(qa role)+ `governance/` 全套 + 业务契约 | `08-` `10-` `11-` `design` + 双闸门 |
14
+ | **完整档**(full)| To B 项目交付 / 多客户私有部署 | 全部目录 + 全部 6 个 roles + 完整 access modes + 双闸门 + on-demand trigger keywords | —— |
15
+
16
+ ### 0.1 怎么选 / 怎么切换
17
+
18
+ **新项目**:在 `npx @wneng/create-keel create` 的交互里按档位选:
19
+
20
+ ```bash
21
+ # 轻量档:后端 + 前端 + 治理三件套,禁用 integrations / roles
22
+ npx @wneng/create-keel create my-lite \
23
+ --backend node --frontend react --contract rest \
24
+ --ai kiro --license mit --ci github --yes
25
+
26
+ # 标准档:加 integrations + qa role
27
+ npx @wneng/create-keel create my-std \
28
+ --backend node --frontend react --contract rest+events \
29
+ --integrations --roles qa \
30
+ --ai kiro --license mit --ci github --yes
31
+
32
+ # 完整档:所有 roles + LFS + Helm
33
+ npx @wneng/create-keel create my-full \
34
+ --backend java --frontend react --mobile flutter --miniapp wechat \
35
+ --agent rust-desktop --deploy kubernetes --contract rest+events \
36
+ --ai kiro --license apache-2.0 --gitLfs --integrations \
37
+ --ci github --roles qa,field,data,legal-security,marketing,design \
38
+ --yes
39
+ ```
40
+
41
+ **已有项目升档**:
42
+
43
+ | 升档动作 | 操作 |
44
+ |---------|------|
45
+ | 轻量 → 标准(加 qa)| `mkdir docs/07-质量与测试`,从同版本 scaffolder 模板 copy `README.md` + `_ai-policy.yaml` + 三个 `.gitkeep` 子目录;提 PR |
46
+ | 轻量 → 标准(加 integrations)| `mkdir docs/06-集成对接`,参考 `docs/governance/integrations.md` 建第一个 pair |
47
+ | 标准 → 完整(加 field / marketing / legal-security)| 同上,但**必须**带双闸门子目录(templates/ + drafts/ + published/ 等),每层 `_ai-policy.yaml` 不能少;用 scaffolder 重新生成对应 role 的 fragment 比手工抄更安全 |
48
+
49
+ **不建议降档**:删 role 目录前要确认其下没有正在用的资料;删 integrations 目录会让现有 pair 失去 lint 守护。
50
+
51
+ > 后续 §A–§E 同时覆盖三档。轻量档可跳过明确标记 "(仅完整档)" 的小节。
52
+
53
+ ## A. 入职 5 分钟必读
54
+
55
+ 按顺序读 4 份:
56
+
57
+ 1. [`AGENTS.md`](../../AGENTS.md) —— 不可协商原则、按需加载索引、权威映射
58
+ 2. [`docs/README.md`](../README.md) —— 目录地图、子目录强弱、特性 slug
59
+ 3. [`contracts/README.md`](../../contracts/README.md) —— 契约范围、SemVer、CHANGELOG 义务(如启用 contracts)
60
+ 4. 与你角色相关的 `docs/governance/*.md` 一份(开发看 ci/security/git-workflow,QA 看 checklists 等)
61
+
62
+ 跳过:`docs/governance/README.md`(只是索引)、过程文档草稿(评审需要时再读)。
63
+
64
+ ## B. 日常场景对照表
65
+
66
+ ### B.1 PM —— 写新特性 PRD
67
+
68
+ 1. 选好 slug(kebab-case,例 `user-signup`),不改名
69
+ 2. 在 `docs/01-背景与需求/prd-user-signup.md` 写 PRD
70
+ 3. 提 PR,模板里勾"非 on-demand 目录"
71
+ 4. CI 跑 governance-lint:发 warning(缺设计 / ADR 对应文件)但不阻断 → 合入
72
+ 5. 后续后端 / 前端写设计时 warning 自动消失
73
+
74
+ ### B.2 架构 —— 起 ADR
75
+
76
+ 1. 草案写到 `docs/过程文档/drafts/<topic>-plan.md`
77
+ 2. 评审通过后归档 `docs/02-系统方案与架构/adr-<NNNN>-<slug>.md`
78
+ 3. 草案文件顶部加 `> 已采纳(YYYY-MM-DD)→ 见 ADR-XXXX`
79
+ 4. 若涉及 governance 改动,同 PR 改 governance/X.md + AGENTS.md 摘要
80
+
81
+ ### B.3 后端 —— 实现一个特性
82
+
83
+ 1. 检查 / 补 `contracts/openapi/api.yaml` 的对应路径
84
+ 2. 同 PR 更新 `contracts/CHANGELOG.md`
85
+ 3. 写 `docs/04-后端详细设计/<slug>.md`,引用契约锚点
86
+ 4. 写代码;commit message 引用契约锚点 + 设计文档
87
+ 5. 若 AI 生成:commit `feat(ai): ...` + PR 标签 `ai-generated`
88
+
89
+ ### B.4 前端 / 客户端 —— 实现一个特性
90
+
91
+ 1. 同 B.3,但落到 `docs/05-前端客户端详细设计/<slug>-<platform>.md`
92
+ 2. 设计稿在 `docs/design/`(启用 design 角色时)
93
+ 3. 不要触 read-only 区
94
+
95
+ ### B.5 QA —— 加测试计划(仅标准档 / 完整档)
96
+
97
+ 1. `docs/07-质量与测试/test-plans/<slug>.md` 写计划(启用 qa 角色时)
98
+ 2. 业务级用例:Gherkin 进 `contracts/tests/acceptance/`(可执行真值)
99
+ 3. 模块级用例:`docs/07-质量与测试/test-cases/<slug>.md`
100
+
101
+ ### B.6 现场 / 运维 —— 客户上线手册(仅完整档)
102
+
103
+ 1. 母版改动:直接动 `docs/08-部署与现场实施/templates/`(人工 read-only 例外)
104
+ 2. 新客户:手动 `mkdir docs/08-部署与现场实施/customer-acme/{,.pending/}`
105
+ 3. 用户对 AI 说**"更新部署手册"**触发后,AI 在 `.pending/` 生成草稿
106
+ 4. 实施工程师审核 → `git mv .pending/x.md ../x.md`
107
+
108
+ ### B.7 数据 —— 加埋点(仅完整档)
109
+
110
+ 1. `docs/09-数据与埋点/tracking-spec/<slug>.md` 写叙事 + 业务上下文
111
+ 2. 机器可消费部分升级到 `contracts/events/event-catalog.yaml`
112
+ 3. 不要在两处都给 schema 真值
113
+
114
+ ### B.8 法务 —— 加合规证据(仅完整档)
115
+
116
+ 1. 在编评估稿:`docs/10-合规与安全/assessments/<topic>.md`
117
+ 2. 提交后 → 人工 `git mv` 到 `docs/10-合规与安全/evidence/<topic>-<date>.md`(read-only)
118
+ 3. 触发关键词:**"更新合规证据"**
119
+
120
+ ### B.9 市场 —— 更新对外材料(仅完整档)
121
+
122
+ 1. 用户对 AI 说**"更新宣发"**或**"刷新市场材料"**
123
+ 2. AI 在 `docs/11-市场与对外材料/drafts/` 生成草稿
124
+ 3. 市场负责人审核后 `git mv drafts/x.pptx published/x.pptx`
125
+ 4. `published/` 永远 read-only
126
+
127
+ ### B.10 设计 —— 更新 UI(仅完整档)
128
+
129
+ 1. 设计稿主线在 Figma;本仓库存导出资产
130
+ 2. 触发关键词:**"更新设计稿"**
131
+ 3. `.fig` / `.sketch` 走 LFS(见 `docs/governance/assets.md`)
132
+
133
+ ### B.11 多应用切换(首次)
134
+
135
+ ```bash
136
+ mkdir server/apps/auth
137
+ git mv server/<all-files-except-meta> server/apps/auth/
138
+ mkdir server/apps/billing
139
+ # 同 PR 更新 CODEOWNERS;CI lint 强制 <env>/ 顶层不能有裸文件
140
+ ```
141
+
142
+ ## C. 关键命令
143
+
144
+ | 任务 | 命令 |
145
+ |------|------|
146
+ | 治理 lint(本地) | `node tools/governance-lint/index.js`(如已加入仓库)|
147
+ | 单元测试 / 构建 | 见各模块 `package.json` / 工具栈说明 |
148
+
149
+ ## D. 提 PR 前 60 秒自检
150
+
151
+ 读 PR 模板的 checkbox。最常踩的 5 个坑:
152
+
153
+ 1. ❌ 改 `contracts/` 没改 `contracts/CHANGELOG.md`
154
+ 2. ❌ 触 on-demand 目录但没说出 trigger keyword
155
+ 3. ❌ 直接写 `published/` / `evidence/`(read-only)
156
+ 4. ❌ AI 生成 commit 没用 `feat(ai):` 前缀
157
+ 5. ❌ 改 `docs/governance/X.md` 没同步 AGENTS.md §7 摘要
158
+
159
+ ## E. 速查锚点
160
+
161
+ | 想查 | 去 |
162
+ |-----|----|
163
+ | 改 X 时该读哪些 | `AGENTS.md` §6.1 路径触发表 |
164
+ | 每类规则的唯一权威 | `AGENTS.md` §7 权威映射 |
165
+ | 子目录硬约定 vs 软建议 | `docs/README.md` §5 |
166
+ | 特性 slug 命名规则 | `docs/README.md` §6 |
167
+ | 五档 access mode 定义 | `docs/governance/ai-access-modes.md` §2 |
168
+ | 完整 6 类 checklist | `docs/governance/checklists.md` |
@@ -0,0 +1,129 @@
1
+ name: docs-skeleton
2
+ version: 1.1.0
3
+ appliesWhen: {}
4
+ priority: 15
5
+ files:
6
+ - from: files/README.md
7
+ to: docs/README.md
8
+ render: true
9
+ # 01-背景与需求/
10
+ - from: files/bg-README.md
11
+ to: docs/01-背景与需求/README.md
12
+ render: false
13
+ - from: files/bg-_ai-policy.yaml
14
+ to: docs/01-背景与需求/_ai-policy.yaml
15
+ render: false
16
+ # 02-系统方案与架构/
17
+ - from: files/arch-README.md
18
+ to: docs/02-系统方案与架构/README.md
19
+ render: false
20
+ - from: files/arch-_ai-policy.yaml
21
+ to: docs/02-系统方案与架构/_ai-policy.yaml
22
+ render: false
23
+ # 03-工程规范与研发基础设施/
24
+ - from: files/eng-README.md
25
+ to: docs/03-工程规范与研发基础设施/README.md
26
+ render: false
27
+ - from: files/eng-_ai-policy.yaml
28
+ to: docs/03-工程规范与研发基础设施/_ai-policy.yaml
29
+ render: false
30
+ - from: files/usage-quickstart.md
31
+ to: docs/03-工程规范与研发基础设施/usage-quickstart.md
32
+ render: false
33
+ # 04-后端详细设计/
34
+ - from: files/be-README.md
35
+ to: docs/04-后端详细设计/README.md
36
+ render: false
37
+ - from: files/be-_ai-policy.yaml
38
+ to: docs/04-后端详细设计/_ai-policy.yaml
39
+ render: false
40
+ # 05-前端客户端详细设计/
41
+ - from: files/fe-README.md
42
+ to: docs/05-前端客户端详细设计/README.md
43
+ render: false
44
+ - from: files/fe-_ai-policy.yaml
45
+ to: docs/05-前端客户端详细设计/_ai-policy.yaml
46
+ render: false
47
+ # archive/
48
+ - from: files/archive-README.md
49
+ to: docs/archive/README.md
50
+ render: false
51
+ - from: files/archive-_ai-policy.yaml
52
+ to: docs/archive/_ai-policy.yaml
53
+ render: false
54
+ # assets/
55
+ - from: files/assets-README.md
56
+ to: docs/assets/README.md
57
+ render: false
58
+ - from: files/assets-_ai-policy.yaml
59
+ to: docs/assets/_ai-policy.yaml
60
+ render: false
61
+ - from: files/assets-diagrams-gitkeep
62
+ to: docs/assets/diagrams/.gitkeep
63
+ render: false
64
+ - from: files/assets-images-gitkeep
65
+ to: docs/assets/images/.gitkeep
66
+ render: false
67
+ - from: files/assets-design-gitkeep
68
+ to: docs/assets/design/.gitkeep
69
+ render: false
70
+ # references/
71
+ - from: files/references-README.md
72
+ to: docs/references/README.md
73
+ render: false
74
+ - from: files/references-_ai-policy.yaml
75
+ to: docs/references/_ai-policy.yaml
76
+ render: false
77
+ - from: files/references-standards-source.yaml
78
+ to: docs/references/standards/_source.yaml.template
79
+ render: false
80
+ - from: files/references-vendors-source.yaml
81
+ to: docs/references/vendors/_source.yaml.template
82
+ render: false
83
+ - from: files/references-legal-source.yaml
84
+ to: docs/references/legal/_source.yaml.template
85
+ render: false
86
+ # governance/
87
+ - from: files/governance-README.md
88
+ to: docs/governance/README.md
89
+ render: false
90
+ - from: files/governance-ci.md
91
+ to: docs/governance/ci.md
92
+ render: true
93
+ - from: files/governance-security.md
94
+ to: docs/governance/security.md
95
+ render: true
96
+ - from: files/governance-git-workflow.md
97
+ to: docs/governance/git-workflow.md
98
+ render: true
99
+ - from: files/governance-assets.md
100
+ to: docs/governance/assets.md
101
+ render: true
102
+ - from: files/governance-docs-references.md
103
+ to: docs/governance/docs-references.md
104
+ render: true
105
+ - from: files/governance-integrations.md
106
+ to: docs/governance/integrations.md
107
+ render: true
108
+ - from: files/governance-deploy-ops.md
109
+ to: docs/governance/deploy-ops.md
110
+ render: true
111
+ - from: files/governance-tools-scripts.md
112
+ to: docs/governance/tools-scripts.md
113
+ render: true
114
+ - from: files/governance-ai-access-modes.md
115
+ to: docs/governance/ai-access-modes.md
116
+ render: true
117
+ - from: files/governance-checklists.md
118
+ to: docs/governance/checklists.md
119
+ render: true
120
+ - from: files/governance-_ai-policy.yaml
121
+ to: docs/governance/_ai-policy.yaml
122
+ render: false
123
+ # 过程文档/
124
+ - from: files/process-docs-README.md
125
+ to: docs/过程文档/README.md
126
+ render: false
127
+ - from: files/process-docs-_ai-policy.yaml
128
+ to: docs/过程文档/_ai-policy.yaml
129
+ render: false
@@ -0,0 +1,53 @@
1
+ # 06-集成对接
2
+
3
+ 跨执行环境的对接文档(例如 `agent` ↔ `server`、`web` ↔ `server`、`mobile` ↔ `server`)。
4
+
5
+ ## 本目录的存在是**显式启用**的
6
+
7
+ 本仓库创建时选择了 `integrations = true`,所以你会看到这个目录。
8
+ 如果整个系统只在**本仓库内部**互相调用(例如前后端同仓库、无外部协作方),
9
+ 就不需要启用本目录。
10
+
11
+ 初始化没有任何 pair 子目录;只有当你主动建立与外部仓库 / 外部团队的
12
+ 对接时,才创建 `<consumer>-to-<producer>/`。
13
+
14
+ ## 与 `contracts/` 的边界
15
+
16
+ - `contracts/` 是**机器可验证的权威契约**(OpenAPI、Schema、错误码)。
17
+ - 本目录是**契约没说、但双方都必须知道**的事情(鉴权流程、连接生命周期、重试策略、版本兼容矩阵、联调 checklist)。
18
+
19
+ 不要把契约复制进本目录;始终通过**锚点引用**指向契约,例如:
20
+
21
+ ```
22
+ contracts/openapi/api.yaml#/paths/~1auth~1login
23
+ ```
24
+
25
+ ## 目录命名
26
+
27
+ - 格式:`<consumer>-to-<producer>/`
28
+ - 名字用执行环境名(`server` / `web` / `mobile` / `miniapp` / `agent`)或具体应用名
29
+ - 多应用模式下可细化到应用:`agent-cli-to-server-auth/`
30
+ - 例:`web-to-server/`、`mobile-to-server/`、`miniapp-to-server/`
31
+
32
+ ## 每个 pair 的骨架
33
+
34
+ 复制本目录下的 `_template.md`,改名为 `README.md` 或拆成多个 md 文件。
35
+ 7 章结构:
36
+
37
+ 1. 概览
38
+ 2. 鉴权与会话
39
+ 3. 连接与生命周期
40
+ 4. 数据流与一致性约束
41
+ 5. 错误分支与降级
42
+ 6. 版本兼容矩阵
43
+ 7. 联调 checklist
44
+
45
+ ## 维护义务(存在即维护)
46
+
47
+ 一旦某 pair 目录存在,修改 `contracts/` 且影响到它时必须:
48
+
49
+ - 在 PR 描述中引用对应 `docs/06-集成对接/<pair>/` 文档
50
+ - 在同一 PR 同步更新该文档(至少更新版本兼容矩阵与受影响章节)
51
+ - 在 `contracts/CHANGELOG.md` 条目中反向链接到更新后的集成文档
52
+
53
+ 否则 PR 不得合入。
@@ -0,0 +1,63 @@
1
+ # <consumer> ↔ <producer> 集成说明
2
+
3
+ > 复制本文件到 `docs/06-集成对接/<consumer>-to-<producer>/README.md`,替换占位符后使用。
4
+ > 本文件**不是契约**。契约的唯一权威在 `contracts/`,这里只写"契约没说但必须知道"的事。
5
+
6
+ ## 0. 文档元信息
7
+
8
+ - 消费端:`<consumer>`(owner:@team-a)
9
+ - 生产端:`<producer>`(owner:@team-b)
10
+ - 当前适用契约版本:`contracts/openapi/api.yaml @ v<x.y.z>`
11
+ - 最近联调日期:YYYY-MM-DD
12
+
13
+ ## 1. 概览
14
+
15
+ 这对集成解决的业务问题是什么?为什么不用现有的其它通道?
16
+
17
+ ## 2. 鉴权与会话
18
+
19
+ - 鉴权方式:<例如 OAuth2 / 签名 / 设备指纹>
20
+ - Token 生命周期、刷新策略、失效处理
21
+ - 多端并发登录的约束
22
+
23
+ 引用契约锚点:`contracts/openapi/api.yaml#/paths/~1auth~1...`
24
+
25
+ ## 3. 连接与生命周期
26
+
27
+ - 连接建立顺序(握手、能力协商、订阅)
28
+ - 心跳策略(频率、超时、服务端容忍值)
29
+ - 断线重连策略(退避、上限、幂等保证)
30
+ - 优雅关闭
31
+
32
+ ## 4. 数据流与一致性
33
+
34
+ - 幂等键规则
35
+ - 顺序保证(是否保序 / 乱序可接受性)
36
+ - 离线队列与重放
37
+ - 去重窗口
38
+
39
+ ## 5. 错误分支与降级
40
+
41
+ | 错误码 | 消费端应对 | 是否重试 | 降级路径 |
42
+ | ------ | ---------- | -------- | -------- |
43
+ | `AUTH.TOKEN_EXPIRED` | 刷新 token 后重试 | 是(一次) | 让用户重新登录 |
44
+ | `RATE.LIMITED` | 指数退避 | 是 | 本地缓存提供降级数据 |
45
+ | ... | ... | ... | ... |
46
+
47
+ ## 6. 版本兼容矩阵
48
+
49
+ | <consumer> 版本 | <producer> 版本 | 兼容 | 备注 |
50
+ | --------------- | --------------- | ---- | ---- |
51
+ | v1.0.x | v1.0.x – v1.3.x | ✅ | 初始协议 |
52
+ | v1.1.x | v1.2.x+ | ✅ | 新增字段 `xxx` |
53
+ | v2.0.x | v2.x | ✅ | 破坏性变更 |
54
+
55
+ 破坏性变更的迁移路径另附 `migration-<from>-to-<to>.md`。
56
+
57
+ ## 7. 联调 checklist
58
+
59
+ - [ ] 本地 mock server 可用(`tools/contract/mock` 或 `contracts/resources/mocks/`)
60
+ - [ ] 测试账号 / 测试设备准备就绪
61
+ - [ ] 抓包环境就绪(mitmproxy / Charles)
62
+ - [ ] 预期错误场景已测(至少 §5 的每种错误码触发一次)
63
+ - [ ] 已在目标环境跑通 happy path
@@ -0,0 +1,12 @@
1
+ name: integrations-docs
2
+ version: 1.0.0
3
+ appliesWhen:
4
+ integrations: true
5
+ priority: 20
6
+ files:
7
+ - from: files/README.md
8
+ to: docs/06-集成对接/README.md
9
+ render: true
10
+ - from: files/_template.md
11
+ to: docs/06-集成对接/_template.md
12
+ render: false
@@ -0,0 +1,15 @@
1
+ Apache License, Version 2.0
2
+
3
+ Copyright (c) <%= it.year %> <%= it.options.projectName %> authors
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not
6
+ use this file except in compliance with the License. You may obtain a copy of
7
+ the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14
+ License for the specific language governing permissions and limitations under
15
+ the License.
@@ -0,0 +1,9 @@
1
+ name: license-apache-2
2
+ version: 1.0.0
3
+ appliesWhen:
4
+ license: apache-2.0
5
+ priority: 20
6
+ files:
7
+ - from: files/LICENSE
8
+ to: LICENSE
9
+ render: true
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) <%= it.year %> <%= it.options.projectName %> authors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,9 @@
1
+ name: license-mit
2
+ version: 1.0.0
3
+ appliesWhen:
4
+ license: mit
5
+ priority: 20
6
+ files:
7
+ - from: files/LICENSE
8
+ to: LICENSE
9
+ render: true
@@ -0,0 +1,10 @@
1
+ # miniapp/
2
+
3
+ WeChat Mini Program for **<%= it.options.projectName %>**.
4
+
5
+ Import this directory in WeChat Developer Tools ("导入项目") and supply
6
+ your own AppID (replace `touristappid` in `project.config.json`).
7
+
8
+ Contract-first: all network code should consume the contracts under
9
+ `contracts/`. Generated bindings live in `miniapp/generated/` and must
10
+ not be hand-edited.
@@ -0,0 +1,5 @@
1
+ App({
2
+ onLaunch() {
3
+ // entry point; fill in global init here
4
+ },
5
+ });
@@ -0,0 +1,9 @@
1
+ {
2
+ "pages": ["pages/index/index"],
3
+ "window": {
4
+ "navigationBarBackgroundColor": "#ffffff",
5
+ "navigationBarTextStyle": "black",
6
+ "navigationBarTitleText": "miniapp"
7
+ },
8
+ "style": "v2"
9
+ }
@@ -0,0 +1,4 @@
1
+ page {
2
+ font-family: -apple-system, BlinkMacSystemFont, sans-serif;
3
+ background: #f5f5f5;
4
+ }
@@ -0,0 +1,4 @@
1
+ Page({
2
+ data: {},
3
+ onLoad() {},
4
+ });
@@ -0,0 +1,3 @@
1
+ {
2
+ "usingComponents": {}
3
+ }
@@ -0,0 +1,3 @@
1
+ <view class="container">
2
+ <text class="title">hello</text>
3
+ </view>
@@ -0,0 +1,10 @@
1
+ .container {
2
+ padding: 40rpx;
3
+ display: flex;
4
+ justify-content: center;
5
+ }
6
+
7
+ .title {
8
+ font-size: 36rpx;
9
+ color: #333;
10
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "description": "<%= it.options.projectName %> mini program",
3
+ "miniprogramRoot": "./",
4
+ "appid": "touristappid",
5
+ "projectname": "<%= it.options.projectName %>",
6
+ "setting": {
7
+ "es6": true,
8
+ "enhance": true,
9
+ "postcss": true,
10
+ "minified": true
11
+ },
12
+ "compileType": "miniprogram"
13
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "rules": [
3
+ {
4
+ "action": "allow",
5
+ "page": "*"
6
+ }
7
+ ]
8
+ }
@@ -0,0 +1,39 @@
1
+ name: miniapp-wechat
2
+ version: 1.0.0
3
+ appliesWhen:
4
+ miniapp: wechat
5
+ priority: 30
6
+ files:
7
+ - from: files/README.md
8
+ to: miniapp/README.md
9
+ render: true
10
+ - from: files/project.config.json
11
+ to: miniapp/project.config.json
12
+ render: true
13
+ - from: files/app.json
14
+ to: miniapp/app.json
15
+ render: false
16
+ - from: files/app.js
17
+ to: miniapp/app.js
18
+ render: false
19
+ - from: files/app.wxss
20
+ to: miniapp/app.wxss
21
+ render: false
22
+ - from: files/sitemap.json
23
+ to: miniapp/sitemap.json
24
+ render: false
25
+ - from: files/pages-index.wxml
26
+ to: miniapp/pages/index/index.wxml
27
+ render: false
28
+ - from: files/pages-index.wxss
29
+ to: miniapp/pages/index/index.wxss
30
+ render: false
31
+ - from: files/pages-index.js
32
+ to: miniapp/pages/index/index.js
33
+ render: false
34
+ - from: files/pages-index.json
35
+ to: miniapp/pages/index/index.json
36
+ render: false
37
+ - from: files/generated-gitkeep
38
+ to: miniapp/generated/.gitkeep
39
+ render: false
@@ -0,0 +1,14 @@
1
+ # mobile/
2
+
3
+ Flutter app for **<%= it.options.projectName %>**.
4
+
5
+ Contract-first: any code that talks to `server/` must be aligned with
6
+ `contracts/openapi/api.yaml`. Generated network bindings live in
7
+ `mobile/generated/` and are not hand-edited.
8
+
9
+ ## Build
10
+
11
+ ```
12
+ flutter pub get
13
+ flutter run
14
+ ```
@@ -0,0 +1,6 @@
1
+ include: package:flutter_lints/flutter.yaml
2
+
3
+ linter:
4
+ rules:
5
+ avoid_print: true
6
+ prefer_const_constructors: true
@@ -0,0 +1,18 @@
1
+ import 'package:flutter/material.dart';
2
+
3
+ void main() {
4
+ runApp(const App());
5
+ }
6
+
7
+ class App extends StatelessWidget {
8
+ const App({super.key});
9
+
10
+ @override
11
+ Widget build(BuildContext context) {
12
+ return const MaterialApp(
13
+ home: Scaffold(
14
+ body: Center(child: Text('hello')),
15
+ ),
16
+ );
17
+ }
18
+ }