@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,20 @@
1
+ # archive/
2
+
3
+ 退役文档归档。
4
+
5
+ > 子目录划分属于**软建议**——见 [`docs/README.md`](../README.md) §5.2。
6
+
7
+ ## 何时进 archive/
8
+
9
+ - 被否决的方案
10
+ - 90 天未采纳的过程文档
11
+ - 已过期 / 已被新版替代的正式文档(保留供溯源)
12
+
13
+ ## 归档约定
14
+
15
+ - 文件名加日期前缀:`YYYY-MM-原文件名.md`
16
+ - 可选:在文件顶部加一行"已归档:原因"
17
+
18
+ ## AI 触达模式
19
+
20
+ `mode: read-only`。归档文档**不应被修改**。如需更新,应当作"新文档"放回对应编号目录。
@@ -0,0 +1,8 @@
1
+ # docs/archive/_ai-policy.yaml
2
+ # 依据 ADR-0003 §4.3
3
+
4
+ mode: read-only
5
+
6
+ notes: |
7
+ 退役文档归档。AI 可读作为历史参考,但永不写入;
8
+ 如需更新,应当作"新文档"放回对应编号目录。
@@ -0,0 +1,29 @@
1
+ # assets/
2
+
3
+ 图片、图表源、插图的归属目录。
4
+
5
+ > 区别于 `docs/design/`:design/ 是**设计真值**(Figma 主线、UI 规范);assets/ 是**叙事文档里的插图**(架构图、流程截图、Logo 等)。
6
+
7
+ ## 子目录
8
+
9
+ | 目录 | 内容 |
10
+ |------|------|
11
+ | `diagrams/` | 架构图、时序图源(draw.io、Excalidraw、PlantUML 源) |
12
+ | `images/` | 截图、Logo、其他位图 |
13
+ | `design/` | UI 设计稿(如未启用 design 角色,临时也可放这里;启用 design 角色后建议迁到 `docs/design/`) |
14
+
15
+ ## 引用方式
16
+
17
+ 在 markdown 文档中相对引用:
18
+
19
+ ```md
20
+ ![架构总览](../assets/diagrams/architecture.drawio.svg)
21
+ ```
22
+
23
+ ## Git LFS
24
+
25
+ 若仓库启用了 `gitLfs`,二进制资源(PSD / 大图 / PDF)走 LFS。规则见 [`../governance/assets.md`](../governance/assets.md)。
26
+
27
+ ## AI 触达模式
28
+
29
+ `mode: read-only`。AI 不修改资产文件;插图由作者自行维护。
@@ -0,0 +1,8 @@
1
+ # docs/assets/_ai-policy.yaml
2
+ # 依据 ADR-0003 §4.3
3
+
4
+ mode: read-only
5
+
6
+ notes: |
7
+ 图片、图表源、插图。AI 可读作为上下文,但不修改资产文件。
8
+ 完整资产规则见 docs/governance/assets.md。
@@ -0,0 +1,29 @@
1
+ # 04-后端详细设计
2
+
3
+ 后端模块详细设计的归属目录。
4
+
5
+ > 子目录划分属于**软建议**——见 [`docs/README.md`](../README.md) §5.2。
6
+
7
+ ## 一个模块一篇
8
+
9
+ 每个后端模块(用户中心、订单、消息推送等)对应一份详细设计文档。建议命名:`<模块名>.md` 或 `<模块名>/index.md`(多文件时用目录)。
10
+
11
+ > **特性关联**:若该模块对应一个跨层级特性(有 PRD),文件名使用统一 **slug**(同 [`docs/01-背景与需求/prd-<slug>.md`](../01-背景与需求/) 与 [`docs/05-前端客户端详细设计/<slug>-*`](../05-前端客户端详细设计/) 对齐)。完整规则见 [`../README.md`](../README.md) §6。
12
+
13
+ ## 典型内容
14
+
15
+ - 模块职责与边界
16
+ - 依赖的契约锚点(`contracts/openapi/api.yaml#/...`、`contracts/events/...`)
17
+ - 数据模型(指向 `contracts/dictionaries/`)
18
+ - 内部状态机(指向 `contracts/states/`,如有)
19
+ - 关键流程与时序
20
+ - 性能 / 安全 / 可观测性考量
21
+ - 测试要点(指向 `docs/07-质量与测试/test-plans/`,如启用 qa 角色)
22
+
23
+ ## 与 contracts/ 的边界
24
+
25
+ 契约说**接口形态**;本目录说**内部实现思路**。两者通过锚点链接,**不复制**契约内容。
26
+
27
+ ## AI 触达模式
28
+
29
+ `mode: suggest`。AI 在契约或代码变更时提示影响范围,由后端开发定稿。
@@ -0,0 +1,8 @@
1
+ # docs/04-后端详细设计/_ai-policy.yaml
2
+ # 依据 ADR-0003 §4.3
3
+
4
+ mode: suggest
5
+
6
+ notes: |
7
+ 后端模块详细设计。AI 在契约变更时提示同步;
8
+ 设计文档由后端开发定稿,AI 不自动改主线。
@@ -0,0 +1,21 @@
1
+ # 01-背景与需求
2
+
3
+ PRD、需求调研、竞品分析的归属目录。
4
+
5
+ ## 建议子目录(非强制,按项目调整)
6
+
7
+ > 子目录划分属于**软建议**——见 [`docs/README.md`](../README.md) §5.2。
8
+
9
+ - `prd/`:产品需求文档(按版本或主题命名)
10
+ - `research/`:用户调研、行业调研
11
+ - `competitive/`:竞品分析
12
+
13
+ 正式 PRD 进本目录;草稿 / 讨论 / 未定稿进 `docs/过程文档/drafts/`,结论固化后再回迁。
14
+
15
+ ## 命名约定(特性关联)
16
+
17
+ 跨层级特性使用同一 kebab-case **slug**;本目录的 PRD 文件名固定为 `prd-<slug>.md`。slug 一旦确立**不改名**。完整规则见 [`../README.md`](../README.md) §6。
18
+
19
+ ## AI 触达模式
20
+
21
+ `mode: suggest`。AI 在相关变更时仅在 PR 描述中提示影响范围,**不自动改**主线——产品 / 业务负责人是真值源。
@@ -0,0 +1,8 @@
1
+ # docs/01-背景与需求/_ai-policy.yaml
2
+ # 依据 ADR-0003 §4.3
3
+
4
+ mode: suggest
5
+
6
+ notes: |
7
+ PRD、调研、竞品分析。产品 / 业务是真值源;
8
+ AI 在相关变更时仅在 PR 描述中提示,不自动改主线。
@@ -0,0 +1,21 @@
1
+ # 03-工程规范与研发基础设施
2
+
3
+ 编码规范、CI/CD 说明、环境管理、本地开发指南的归属目录。
4
+
5
+ > 子目录划分属于**软建议**——见 [`docs/README.md`](../README.md) §5.2。
6
+
7
+ ## 典型内容
8
+
9
+ - 编码规范(语言、框架、命名、提交)
10
+ - CI/CD 流水线说明(与 `docs/governance/ci.md` 互补:governance 是规则,本目录是落地说明)
11
+ - 本地开发环境(依赖版本、端口、调试)
12
+ - 环境矩阵(dev / staging / prod 差异)
13
+
14
+ ## 与 `docs/governance/` 的边界
15
+
16
+ - `governance/` 是**跨项目通用规则**(CI 校验矩阵、Git 工作流、安全 SLA 等)
17
+ - 本目录是**项目专属落地**(具体的 lint 规则、本地启动步骤)
18
+
19
+ ## AI 触达模式
20
+
21
+ `mode: suggest`。规范变更影响面广,需要工程负责人确认;AI 在相关变更时仅 PR 描述提示。
@@ -0,0 +1,9 @@
1
+ # docs/03-工程规范与研发基础设施/_ai-policy.yaml
2
+ # 依据 ADR-0003 §4.3
3
+
4
+ mode: suggest
5
+
6
+ notes: |
7
+ 编码规范、CI/CD 落地说明、环境管理。
8
+ 与 docs/governance/ 互补(governance 是规则,本目录是落地说明)。
9
+ 规范变更影响广,AI 仅在 PR 描述中提示,不自动改主线。
@@ -0,0 +1,31 @@
1
+ # 05-前端客户端详细设计
2
+
3
+ 前端 / 客户端模块详细设计的归属目录(覆盖 `web/`、`mobile/`、`miniapp/`、`agent/` 各自的功能模块)。
4
+
5
+ > 子目录划分属于**软建议**——见 [`docs/README.md`](../README.md) §5.2。
6
+
7
+ ## 一个模块一篇
8
+
9
+ 按"功能 + 平台"组织,例如:
10
+
11
+ - `auth-web.md`(Web 端登录)
12
+ - `auth-miniapp.md`(小程序登录)
13
+ - `chat-mobile.md`(移动端聊天)
14
+
15
+ 或者按平台分子目录(`web/auth.md` `mobile/auth.md`),按团队习惯选。
16
+
17
+ > **特性关联**:若模块对应一个跨层级特性(有 PRD),文件名前缀使用统一 **slug**(同 [`docs/01-背景与需求/prd-<slug>.md`](../01-背景与需求/) 与 [`docs/04-后端详细设计/<slug>*`](../04-后端详细设计/) 对齐),如 `<slug>-web.md` / `<slug>/web.md`。完整规则见 [`../README.md`](../README.md) §6。
18
+
19
+ ## 典型内容
20
+
21
+ - 模块职责与边界
22
+ - 调用的契约锚点(`contracts/openapi/api.yaml#/...`)
23
+ - 路由 / 页面结构
24
+ - 状态管理(Redux / Pinia / signals 等)
25
+ - 关键交互流程
26
+ - 设计稿引用(指向 `docs/design/`,如启用 design 角色)
27
+ - 测试要点(指向 `docs/07-质量与测试/`,如启用 qa 角色)
28
+
29
+ ## AI 触达模式
30
+
31
+ `mode: suggest`。AI 在契约或代码变更时提示影响范围,由前端 / 客户端开发定稿。
@@ -0,0 +1,8 @@
1
+ # docs/05-前端客户端详细设计/_ai-policy.yaml
2
+ # 依据 ADR-0003 §4.3
3
+
4
+ mode: suggest
5
+
6
+ notes: |
7
+ 前端 / 客户端(web/mobile/miniapp/agent)模块详细设计。
8
+ AI 在契约或代码变更时提示影响范围,由前端 / 客户端开发定稿。
@@ -0,0 +1,28 @@
1
+ # governance/
2
+
3
+ 本目录承载根 `AGENTS.md` 拆出的细化政策(依据 ADR-0001)。每个文件解决一个特定主题,**互不依赖**——所有跳转入口只从 `AGENTS.md` 单向进入。
4
+
5
+ ## 文件清单
6
+
7
+ | 文件 | 主题 | 维护频率 |
8
+ |------|------|----------|
9
+ | `ci.md` | 完整 CI 校验矩阵与工具命令 | 中 |
10
+ | `security.md` | 依赖安全、漏洞扫描、许可证、SBOM、应急响应 | 中 |
11
+ | `git-workflow.md` | 分支、提交、PR 模板、CODEOWNERS | 低 |
12
+ | `assets.md` | Git LFS 配置、阈值、命名 | 低 |
13
+ | `docs-references.md` | `docs/references/` 来源元数据规则 | 极低 |
14
+ | `integrations.md` | 集成对接完整规则与维护义务 | 中(启用时) |
15
+ | `deploy-ops.md` | `ops/` 与 `deploy/` 完整边界与示例 | 中 |
16
+ | `tools-scripts.md` | `tools/` 与 `scripts/` 完整规则、升级判定 | 低 |
17
+ | `ai-access-modes.md` | AI 访问模式(五档)与 `_ai-policy.yaml` schema | 中(依据 ADR-0003) |
18
+ | `checklists.md` | 完整检查清单(开发 / 提交 / 发布 / 多应用 / 新增工具) | 高 |
19
+
20
+ ## 维护规则
21
+
22
+ - 每个文件顶部含 `last-reviewed: YYYY-MM-DD` 元数据;超过 6 个月未更新 CI 给出警告。
23
+ - 修改任何文件**必须**在同一 PR 内更新根 `AGENTS.md` 中对应摘要 / 入口(PR 模板已强制 checkbox)。
24
+ - 文件间**不得相互引用**;所有跳转入口只从 `AGENTS.md` 单向进入。如发现强耦合,说明根 AGENTS.md 漏了这个层级。
25
+
26
+ ## 权威映射
27
+
28
+ 完整的"主题 → 唯一权威"对照表见根 [`AGENTS.md`](../../AGENTS.md) §7。本文件不重复维护以避免双写漂移。
@@ -0,0 +1,13 @@
1
+ # AI 访问策略:docs/governance/
2
+ # 依据 ADR-0003 §4.3
3
+ mode: strict
4
+ on-trigger:
5
+ - "AGENTS.md"
6
+ - "docs/governance/**"
7
+ sync-action: required-sync
8
+ human-review-required: true
9
+ notes: |
10
+ governance/ 与根 AGENTS.md 必须同步。任何 governance 内的修改 PR
11
+ 必须同时更新 AGENTS.md 中对应摘要 / 入口;任何 AGENTS.md 修改
12
+ PR 必须同时更新对应 governance 文件。strict 模式下,AI 在检测到
13
+ 这两侧之一变化时主动同步另一侧。
@@ -0,0 +1,324 @@
1
+ ---
2
+ last-reviewed: <%= it.generatedAt.slice(0, 10) %>
3
+ ---
4
+
5
+ # AI 访问模式(access modes)
6
+
7
+ > 本文件是 ADR-0003 的权威细则。任何变更需先修订 ADR,再回写本文件。
8
+ >
9
+ > 本规则与 ADR-0001 §6 按需加载索引互补:按需加载解决"AI 应该读什么",本规则解决"AI 应该写什么 / 不写什么 / 怎么写"。
10
+
11
+ ## 1. 概念基础:产物所有权
12
+
13
+ 仓库里所有产物按"**谁是真值产生者**"分三类:
14
+
15
+ | 类别 | 真值源 | 例子 | 默认应配 mode |
16
+ |------|--------|------|--------------|
17
+ | **人主导**(Human-authored) | 人是真值源;AI 协助但不自决 | PRD、ADR、设计 | `suggest` 或 `on-demand` |
18
+ | **共同协作**(Co-authored) | 人和 AI 来回迭代,最终人定稿 | 后端 / 前端模块设计、集成对接 | `suggest` |
19
+ | **AI 派生**(AI-derived) | AI 是日常产生者;上游变了应主动同步 | `contracts/`、`<lang>/generated/`、宣发草稿 | `generated` 或 `strict` |
20
+
21
+ 不同所有权决定 AI 的写入边界。**产物所有权是设计访问模式的第一原则**。
22
+
23
+ ## 2. 五档触达模式
24
+
25
+ 每个目录 / 文件通过 `_ai-policy.yaml` 声明触达模式。
26
+
27
+ | 模式 | 真值源 | AI 可读 | AI 可主动写 | 触发条件 | 典型场景 |
28
+ |------|--------|---------|-------------|---------|---------|
29
+ | `strict` | AI(确定性算法) | ✅ | ✅ 直接覆盖主线,禁止手改 | 上游变 → 立即重生成;CI 校验 diff 为空 | `<lang>/generated/`、规则书面版本 bump |
30
+ | `generated` | AI(基于上游推导) | ✅ | ✅ 写主线,允许手改作为下次输入 | 上游变 → 主动更新 | `contracts/`、宣发 `drafts/` |
31
+ | `suggest` | 人 + AI 共写,人定稿 | ✅ | ❌(仅 PR 描述提示)| 上游变 → PR 描述写"可能影响 X,请确认" | 大部分 docs/、业务代码(默认) |
32
+ | `on-demand` | 人 + AI(节奏由人控) | ⚠️ 默认不读 | ⚠️ 触发关键词后才写 | 用户显式说出 trigger-keyword | 宣发主线、客户专属部署 |
33
+ | `read-only` | 外部 / 历史 | ✅ | ❌ | 永不写 | `references/`、`archive/`、`assets/` |
34
+
35
+ ### 2.1 关键区分
36
+
37
+ **`strict` vs `generated`**:
38
+ - `strict` 隐含"人不应直接改主线,否则下次重生成会冲掉"——典型如 `<lang>/generated/`
39
+ - `generated` 允许人修改主线(作为下次迭代的输入),AI 在下次生成时考虑这些人工修订
40
+
41
+ **`generated` vs `suggest`**:
42
+ - `generated` AI 主动写主线(人审稿)
43
+ - `suggest` AI 不自动写,仅 PR 描述提示
44
+
45
+ **`generated` vs `on-demand`**:
46
+ - `generated` 上游变 → AI 主动同步
47
+ - `on-demand` 必须人喊触发关键词才动
48
+
49
+ **`on-demand` vs `read-only`**:
50
+ - `on-demand` 用户主动要求时可以写
51
+ - `read-only` 永远不写
52
+
53
+ ### 2.2 核心规则
54
+
55
+ - **默认 `suggest`**:未声明 `_ai-policy.yaml` 的目录默认是 suggest。这是最安全的中间档。
56
+ - **就近覆盖**:子目录的 `_ai-policy.yaml` 覆盖父目录。
57
+ - **`strict` 与 `generated` 必须显式声明**:这两档允许 AI 写主线,绝不允许通过"默认或继承"获得(继承父目录的 generated 是允许的,但顶层声明必须显式)。
58
+ - **`generated` 必须有 `source-of-truth`**:AI 主动维护必须知道上游是谁。
59
+ - **`on-demand` 必须有 `trigger-keyword`**:用户说什么 AI 才能动。
60
+
61
+ ## 3. `_ai-policy.yaml` Schema
62
+
63
+ ```yaml
64
+ # ---- 必填字段 ----
65
+ mode: strict | generated | suggest | on-demand | read-only
66
+
67
+ # ---- generated 模式必填 ----
68
+ source-of-truth: # 上游真值源(glob 列表)
69
+ - "docs/01-背景与需求/**"
70
+ - "docs/02-系统方案与架构/**"
71
+
72
+ # ---- on-demand 模式必填 ----
73
+ trigger-keyword: "更新宣发" # 字符串或字符串数组;用户必须说出才能触发 AI 写
74
+ # 或:
75
+ # trigger-keyword:
76
+ # - "更新宣发"
77
+ # - "刷新对外材料"
78
+
79
+ # ---- strict 模式必填 ----
80
+ on-trigger: # 触发条件(路径 glob 或 keyword)
81
+ - "contracts/openapi/**"
82
+ sync-action: required-sync # required-sync | required-record | required-bump
83
+
84
+ # ---- 推荐字段(所有模式可用)----
85
+ last-aligned-with: # 上次对齐到的上游状态(generated 必填,初始可为 null)
86
+ source-commit: "abc1234" # 或 null(首次未对齐)
87
+ contracts: "v1.2.0"
88
+ features: ["用户中心 v3"]
89
+ aligned-at: "2026-05-15"
90
+ human-review-required: true # 即使触发,AI 改完也必须人审
91
+
92
+ # ---- 自由说明 ----
93
+ notes: |
94
+ 自由文字,给 AI 与人类协作者看的额外上下文。
95
+ ```
96
+
97
+ ### 3.1 文件命名
98
+
99
+ - 文件名固定为 `_ai-policy.yaml`
100
+ - 前缀 `_` 与本仓库其它惯例(`_source.yaml`、`_template.md`)一致
101
+ - Jekyll / Hugo 等 SSG 默认忽略 `_` 前缀
102
+
103
+ ### 3.2 多关键词支持
104
+
105
+ `trigger-keyword` 可以是单个字符串或字符串数组。多关键词等价(任何一个都能触发)。
106
+
107
+ ```yaml
108
+ mode: on-demand
109
+ trigger-keyword:
110
+ - "更新宣发"
111
+ - "刷新市场材料"
112
+ - "regenerate marketing"
113
+ ```
114
+
115
+ ### 3.3 `last-aligned-with` 初始值
116
+
117
+ `generated` 模式下,新创建的目录可以暂时让 `source-commit: null`。第一次 AI 生成时由 AI 填入实际 commit。
118
+
119
+ ```yaml
120
+ mode: generated
121
+ source-of-truth: ["docs/01-背景与需求/**"]
122
+ last-aligned-with:
123
+ source-commit: null
124
+ aligned-at: null
125
+ ```
126
+
127
+ ### 3.4 `expire` 字段(明确不支持)
128
+
129
+ 不支持触发关键词的过期机制。每次会话视为新的一次触发;AI 不应跨会话"记得"权限。
130
+
131
+ ## 4. 现有目录的默认模式分配
132
+
133
+ 按"产物所有权"维度分配。每个分配都遵循 ADR-0001 既有的目录定位。
134
+
135
+ ### 4.1 contracts/(AI 派生 → generated)
136
+
137
+ ```yaml
138
+ # contracts/_ai-policy.yaml
139
+ mode: generated
140
+ source-of-truth:
141
+ - "docs/01-背景与需求/**"
142
+ - "docs/02-系统方案与架构/**"
143
+ last-aligned-with:
144
+ source-commit: null
145
+ aligned-at: null
146
+ human-review-required: true
147
+ notes: |
148
+ contracts/ 是 AI 派生区:AI 根据需求与架构文档主动维护契约。
149
+ 人可以编辑契约(作为下次 AI 生成的输入语境),但应当走 PR
150
+ 让架构组评审契约的合理性。
151
+ 下列子目录有局部覆盖:
152
+ - tests/acceptance/ suggest(Gherkin 是人表达业务)
153
+ - tests/contracts/ suggest(消费端驱动,本仓库不主动)
154
+ - README.md suggest(人写说明)
155
+ ```
156
+
157
+ 子目录覆盖:
158
+
159
+ | 路径 | 模式 | 理由 |
160
+ |------|------|------|
161
+ | `contracts/README.md` | suggest(局部覆盖) | 人写的目录说明 |
162
+ | `contracts/CHANGELOG.md` | 继承 generated | AI 写条目草稿,人定稿 |
163
+ | `contracts/openapi/` | 继承 generated | AI 主动维护 |
164
+ | `contracts/dictionaries/` `states/` `errors/` `events/` `environment/` | 继承 generated | 同上 |
165
+ | `contracts/resources/examples/` `mocks/` | 继承 generated | 接口变 → 示例自动重写 |
166
+ | `contracts/tests/acceptance/` | suggest(局部覆盖) | Gherkin 人表达业务 |
167
+ | `contracts/tests/contracts/` | suggest(局部覆盖) | Pact 由消费端驱动 |
168
+ | `contracts/tests/postman-collections/` | 继承 generated | 接口变 → 集合更新 |
169
+
170
+ ### 4.2 各模块的 generated/ 子目录(机器派生 → strict)
171
+
172
+ | 路径 | 模式 |
173
+ |------|------|
174
+ | `server/generated/`(如有) | strict |
175
+ | `web/generated/` `mobile/generated/` `miniapp/generated/` `agent/generated/` | strict |
176
+
177
+ `strict` 隐含人不应手改这些目录的内容;下次重生成会冲掉手改。CI 校验 `git diff --exit-code generated/`。
178
+
179
+ ### 4.3 docs/(人主导或共写)
180
+
181
+ | 路径 | 模式 | 理由 |
182
+ |------|------|------|
183
+ | `docs/01-背景与需求/` | suggest | PRD 由产品负责 |
184
+ | `docs/02-系统方案与架构/` | suggest | ADR 历史决策;新 ADR 由人发起 |
185
+ | `docs/03-工程规范与研发基础设施/` | suggest | 规范变更影响广 |
186
+ | `docs/04-后端详细设计/` | suggest | 契约变更时 AI 提示同步 |
187
+ | `docs/05-前端客户端详细设计/` | suggest | 同上 |
188
+ | `docs/06-集成对接/` | strict | pair 存在时**必须**同步 |
189
+ | `docs/governance/` | strict | 与 AGENTS.md 必须同步 |
190
+ | `docs/assets/` | read-only | 资产不应被 AI 直接动 |
191
+ | `docs/references/` | read-only | 外部资料 |
192
+ | `docs/archive/` | read-only | 历史归档 |
193
+ | `docs/过程文档/` | suggest | 草稿区,AI 可在此处生成新内容 |
194
+
195
+ ### 4.4 应用代码与配置
196
+
197
+ | 路径 | 模式 |
198
+ |------|------|
199
+ | `server/`(除 generated/) | suggest |
200
+ | `web/` `mobile/` `miniapp/` `agent/`(除 generated/) | suggest |
201
+ | `ops/` `deploy/` `tools/` `scripts/` | suggest |
202
+ | `.kiro/` `.codex/` `.cursor/` `.claude/` | suggest |
203
+
204
+ ### 4.5 元规则
205
+
206
+ | 路径 | 模式 |
207
+ |------|------|
208
+ | `AGENTS.md` | strict |
209
+ | 任意 `_ai-policy.yaml` 自身 | 隐含 strict(架构组守门,CODEOWNERS 守护) |
210
+
211
+ ## 5. 双闸门:高风险目录的特殊保护
212
+
213
+ `docs/11-市场与对外材料/`、`docs/08-部署与现场实施/` 等"对外或不可逆"目录在 on-demand 之上再加一层结构隔离。
214
+
215
+ ### 5.1 双闸门结构(以宣发为例)
216
+
217
+ ```
218
+ docs/11-市场与对外材料/
219
+ ├── _ai-policy.yaml # mode: on-demand
220
+ ├── templates/ # 母版
221
+ │ └── _ai-policy.yaml # mode: read-only(局部覆盖)
222
+ ├── drafts/ # AI 生成草稿
223
+ │ └── _ai-policy.yaml # mode: generated(局部覆盖)
224
+ └── published/ # 正式对外版本
225
+ └── _ai-policy.yaml # mode: read-only(局部覆盖)
226
+ ```
227
+
228
+ **双闸门约束**:
229
+
230
+ 1. AI 触发更新 → 只能写在 `drafts/`
231
+ 2. 市场负责人审核 → 手动 `git mv drafts/x.pptx published/`
232
+ 3. AI **永远不能**直接写 `published/`
233
+
234
+ `drafts/` 用 `generated` 而非 `on-demand`:父目录 on-demand 的触发关键词被说出后,drafts/ 这一档允许 AI 主动写。这是**双层授权**:先关键词,再 drafts/ 写。
235
+
236
+ ### 5.2 类似模式应用
237
+
238
+ - `docs/08-部署与现场实施/`:
239
+ - `templates/` → read-only
240
+ - `customer-<id>/` → read-only(已交付不动)
241
+ - `customer-<id>/.pending/` → generated(待应用的更新)
242
+ - `docs/10-合规与安全/`:
243
+ - `evidence/` → read-only(提交后不改)
244
+ - `assessments/` → suggest
245
+
246
+ ## 6. AI 行为约束
247
+
248
+ ### 6.1 strict 模式
249
+
250
+ - AI 检测到 `on-trigger` 中列出的路径变更,立即重新生成
251
+ - 主线被覆盖;之前的人工修改如果存在,**会丢失**
252
+ - CI 校验 `git diff --exit-code` 必须为空
253
+ - 适用于**人不会修改、机器算法决定全部内容**的产物
254
+
255
+ ### 6.2 generated 模式
256
+
257
+ - AI 检测到 `source-of-truth` 中列出的路径变更,主动更新主线
258
+ - 主线允许人修改;AI 下次生成时把人的修改作为输入语境
259
+ - PR 应自动打 `auto-generated` 标签(与 `ai-generated` 协同)
260
+ - `human-review-required: true` 强制人审通过才能合并
261
+ - 每次更新后必须更新 `last-aligned-with.source-commit` 与 `aligned-at`
262
+
263
+ ### 6.3 suggest 模式
264
+
265
+ - AI 检测到上游变更影响本目录时,**仅在 PR 描述中提示**:"本变更可能影响 docs/04-后端详细设计/auth.md,请确认是否需要同步"
266
+ - AI 不自动 edit 本目录的文件
267
+ - 这是默认档;最常用
268
+
269
+ ### 6.4 on-demand 模式
270
+
271
+ - AI 默认**不读不写** on-demand 目录
272
+ - 用户必须显式说出 `trigger-keyword` 才触发 AI 行为
273
+ - 触发后 AI 可以读取并写入;写入路径如有双闸门则受 §5 限制
274
+ - AI 行为完成后**不"记忆"权限**;下一次会话需要重新触发
275
+
276
+ ### 6.5 read-only 模式
277
+
278
+ - AI 可以读取作为上下文
279
+ - AI 永不写入;任何尝试视为漏标违规
280
+ - 只有架构组在显式 PR 中可以写入(人手工)
281
+
282
+ ## 7. governance-lint 校验规则
283
+
284
+ | 检查 | 严重度 |
285
+ |------|-------|
286
+ | `_ai-policy.yaml` 可被 schema 解析 | error |
287
+ | `mode` 在五档之内 | error |
288
+ | `mode: generated` 缺 `source-of-truth` | error |
289
+ | `mode: on-demand` 缺 `trigger-keyword` | error |
290
+ | `mode: strict` 缺 `on-trigger` 或 `sync-action` | error |
291
+ | 没有 `_ai-policy.yaml`(默认 suggest) | warning |
292
+ | `last-aligned-with.aligned-at` 过期 > 90 天 | warning |
293
+ | `mode: generated` 且 `last-aligned-with.source-commit` 落后于上游 > 7 天 | warning |
294
+
295
+ 实现:`tools/governance-lint/` 扩展,新增 `--check-access-modes` flag(默认开启)。
296
+
297
+ ## 8. PR 模板更新
298
+
299
+ `docs/governance/git-workflow.md` 中的 PR 模板加一段:
300
+
301
+ ```markdown
302
+ ## AI 触达模式合规
303
+
304
+ - [ ] 本 PR 没有触及 on-demand 或 read-only 目录
305
+ - [ ] 本 PR 触及了 on-demand 目录,且我已在 PR 标题或 description 中说明触发关键词与人工审核结果
306
+ - [ ] 本 PR 触及了 read-only 目录,违反规则——已说明特殊豁免理由(需架构组批准)
307
+ - [ ] 本 PR 触及了 generated 目录(contracts/ 等),相应 last-aligned-with.source-commit 已更新
308
+ ```
309
+
310
+ ## 9. AGENTS.md 联动
311
+
312
+ §5 文档归属表加一列 "AI 触达模式"。§6 按需加载索引后追加 §6.4「AI 触达模式(access modes)」精简介绍 + 指向本文件的链接。详细联动见 ADR-0003 §6。
313
+
314
+ ## 10. 风险与对冲
315
+
316
+ | 风险 | 表现 | 对冲 |
317
+ |------|------|------|
318
+ | AI 不读 `_ai-policy.yaml` | 仍按 §6.1 路径触发表大改 | AGENTS.md §2 不可协商原则中加入;让所有 AI 工具默认遵守 |
319
+ | 用户忘了说 trigger-keyword 但 AI 仍主动改 | on-demand 失效 | governance-lint 在 PR 中检测路径,违反就阻断 |
320
+ | 配置漂移:目录搬移时 `_ai-policy.yaml` 漏带走 | AI 误判模式 | governance-lint 检查每个目录是否有 policy 文件 |
321
+ | 过度严格导致 AI 协作低效 | 用户每次都要说关键词 | 默认 suggest 已经是中间档;只有少数目录需要 on-demand |
322
+ | `_ai-policy.yaml` 本身被 AI 误改 | meta 失控 | policy 文件本身的 mode 隐含为 strict(架构组守门) |
323
+ | `generated` 模式下 AI 生成质量差 | 反而增加返工 | human-review-required: true 强制人审;CI 在 PR 阶段拦截 |
324
+ | `source-of-truth` 上游漂移 AI 没察觉 | last-aligned-with 过期 | governance-lint 7 天 warning,90 天 error |
@@ -0,0 +1,50 @@
1
+ ---
2
+ last-reviewed: <%= it.generatedAt.slice(0, 10) %>
3
+ ---
4
+
5
+ # 资产与大文件策略
6
+
7
+ ## LFS 触发阈值
8
+
9
+ - `docs/assets/` 中**单文件超过 1 MB** 的二进制文件
10
+ - 即使低于阈值,下列扩展名也强制走 LFS:`*.psd` / `*.sketch` / `*.fig` / `*.afdesign`
11
+
12
+ ## `.gitattributes` 模板
13
+
14
+ ```
15
+ * text=auto eol=lf
16
+ *.sh text eol=lf
17
+ *.ps1 text eol=crlf
18
+ *.png binary
19
+ *.jpg binary
20
+ *.jpeg binary
21
+ *.pdf binary
22
+
23
+ # Git LFS(启用 LFS 的项目)
24
+ docs/assets/**/*.png filter=lfs diff=lfs merge=lfs -text
25
+ docs/assets/**/*.psd filter=lfs diff=lfs merge=lfs -text
26
+ docs/assets/**/*.sketch filter=lfs diff=lfs merge=lfs -text
27
+ docs/assets/**/*.fig filter=lfs diff=lfs merge=lfs -text
28
+ ```
29
+
30
+ ## 优先级
31
+
32
+ 1. 文本格式图表源(PlantUML / Mermaid / drawio XML / excalidraw JSON)→ 不进 LFS
33
+ 2. 必须导出二进制时,**同时**保留源文件
34
+ 3. 截图考虑压缩(pngquant / jpegoptim)后再入仓
35
+
36
+ ## 命名约定
37
+
38
+ - `docs/assets/diagrams/<module>-<concept>.<ext>`,例:`auth-flow.drawio`
39
+ - `docs/assets/images/<context>-<index>.<ext>`,例:`onboarding-01.png`
40
+ - `docs/assets/design/<feature>-<state>.<ext>`,例:`login-error.fig`
41
+
42
+ ## 引用规则
43
+
44
+ 文档中引用资产用相对路径:
45
+
46
+ ```markdown
47
+ ![登录流程](../assets/diagrams/auth-flow.png)
48
+ ```
49
+
50
+ 不允许直接引用 LFS pointer URL。