spec-wave 2.1.1

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 (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +327 -0
  3. package/README.zh-CN.md +327 -0
  4. package/RELEASING.md +52 -0
  5. package/assets/README.md +30 -0
  6. package/assets/ci/samples/README.md +76 -0
  7. package/assets/ci/samples/hgm-ingest.yml.example +42 -0
  8. package/assets/ci/samples/lint-wiki-delta.pin.yml.example +47 -0
  9. package/assets/ci/samples/lint-wiki-delta.yml.example +49 -0
  10. package/assets/ci/samples/pytest.yml.example +49 -0
  11. package/assets/ci/samples/quality.yml.example +56 -0
  12. package/assets/ci/samples/skills-validate.yml.example +38 -0
  13. package/assets/ci/samples/tech-graph.yml.example +55 -0
  14. package/assets/coding_wiki/templates/README.md +115 -0
  15. package/assets/coding_wiki/templates/_index.md +19 -0
  16. package/assets/coding_wiki/templates/context.md +18 -0
  17. package/assets/coding_wiki/templates/stable.md +26 -0
  18. package/assets/coding_wiki/templates/topics/wiki_layout.md +13 -0
  19. package/assets/coding_wiki/templates/topics/wikilinks_export.md +13 -0
  20. package/assets/coding_wiki/templates/volatile.md +25 -0
  21. package/assets/docs/POINTER_ONBOARDING.md +9 -0
  22. package/assets/docs/POINTER_RUNBOOK_wiki_delta.md +18 -0
  23. package/assets/docs/POINTER_SDD_HAT_FLOW.md +8 -0
  24. package/assets/docs/POINTER_USER_GUIDE.md +8 -0
  25. package/assets/graph/stubs/README.md +6 -0
  26. package/assets/graph/templates/00_main.graph.yaml +72 -0
  27. package/assets/graph/templates/00_main.md +85 -0
  28. package/assets/graph/templates/01_struct.md +38 -0
  29. package/assets/graph/templates/02_version.md +7 -0
  30. package/assets/graph/templates/10_flow_MAIN.graph.yaml +105 -0
  31. package/assets/graph/templates/10_flow_MAIN.md +103 -0
  32. package/assets/graph/templates/99_mermaid_protocol.md +156 -0
  33. package/assets/graph/templates/README.md +66 -0
  34. package/assets/harness/README.md +18 -0
  35. package/assets/harness/discipline-coverage.yaml +320 -0
  36. package/assets/harness/invokes/README.md +22 -0
  37. package/assets/harness/invokes/TEMPLATE_invoke.md +61 -0
  38. package/assets/harness/lifecycle.yaml +127 -0
  39. package/assets/harness/prompts/00-orchestrator.md +91 -0
  40. package/assets/harness/prompts/10-spec-requirements.md +63 -0
  41. package/assets/harness/prompts/10-task-requirements.md +70 -0
  42. package/assets/harness/prompts/20-spec-audit.md +50 -0
  43. package/assets/harness/prompts/20-task-audit.md +90 -0
  44. package/assets/harness/prompts/30-execute-code.md +64 -0
  45. package/assets/harness/prompts/40-self-check.md +65 -0
  46. package/assets/harness/prompts/FRAGMENT_00_delegate_only_v1_zh.md +19 -0
  47. package/assets/harness/prompts/FRAGMENT_30_gate_verify_v1_zh.md +34 -0
  48. package/assets/harness/prompts/FRAGMENT_30_invoke_block_v1_zh.md +28 -0
  49. package/assets/harness/prompts/FRAGMENT_hat_reanchor_v1_zh.md +19 -0
  50. package/assets/harness/prompts/README.md +67 -0
  51. package/assets/harness/prompts/TEMPLATE_30_gate_stop.md +36 -0
  52. package/assets/harness/templates/FRAGMENT_task_domain_infer_v1_zh.md +16 -0
  53. package/assets/harness/templates/ONTOLOGY_consumer_slice_v1.md +41 -0
  54. package/assets/harness/templates/QUICKREF_v1_zh.md +35 -0
  55. package/assets/harness/templates/README.md +50 -0
  56. package/assets/harness/templates/TASK_TEMPLATE.md +133 -0
  57. package/assets/harness/templates/TASK_done_README.md +76 -0
  58. package/assets/harness/templates/TASK_epic.md +103 -0
  59. package/assets/harness/templates/TASK_graph_bootstrap.md +115 -0
  60. package/assets/harness/templates/VIEW_done_by_domain.md +66 -0
  61. package/assets/harness/templates/VIEW_done_thin_pointer.md +16 -0
  62. package/assets/ide/adapters/AGENTS.md.fragment.example +33 -0
  63. package/assets/ide/adapters/CLAUDE.md.fragment.example +32 -0
  64. package/assets/ide/adapters/README.md +57 -0
  65. package/assets/ide/adapters/cursor-harness-starter.mdc.example +39 -0
  66. package/assets/ide/commands/claude/kit/apply-standards.md +10 -0
  67. package/assets/ide/commands/claude/kit/gate-status.md +10 -0
  68. package/assets/ide/commands/claude/kit/graph-check.md +8 -0
  69. package/assets/ide/commands/claude/kit/hat-00-delegate.md +9 -0
  70. package/assets/ide/commands/claude/kit/hat-10-spec.md +9 -0
  71. package/assets/ide/commands/claude/kit/hat-10-task.md +9 -0
  72. package/assets/ide/commands/claude/kit/hat-20-spec-audit.md +9 -0
  73. package/assets/ide/commands/claude/kit/hat-20-task-audit.md +9 -0
  74. package/assets/ide/commands/claude/kit/hat-reanchor.md +8 -0
  75. package/assets/ide/commands/claude/kit/init-guide.md +16 -0
  76. package/assets/ide/commands/claude/kit/sync-prompts-guide.md +9 -0
  77. package/assets/ide/commands/claude/kit/verify.md +16 -0
  78. package/assets/ide/commands/cursor/kit-apply-standards.md +12 -0
  79. package/assets/ide/commands/cursor/kit-gate-status.md +12 -0
  80. package/assets/ide/commands/cursor/kit-graph-check.md +10 -0
  81. package/assets/ide/commands/cursor/kit-hat-00-delegate.md +11 -0
  82. package/assets/ide/commands/cursor/kit-hat-10-spec.md +11 -0
  83. package/assets/ide/commands/cursor/kit-hat-10-task.md +11 -0
  84. package/assets/ide/commands/cursor/kit-hat-20-spec-audit.md +11 -0
  85. package/assets/ide/commands/cursor/kit-hat-20-task-audit.md +11 -0
  86. package/assets/ide/commands/cursor/kit-hat-reanchor.md +10 -0
  87. package/assets/ide/commands/cursor/kit-init-guide.md +18 -0
  88. package/assets/ide/commands/cursor/kit-sync-prompts-guide.md +11 -0
  89. package/assets/ide/commands/cursor/kit-verify.md +18 -0
  90. package/assets/ide/host-adapt/README.md +113 -0
  91. package/assets/ide/host-adapt/examples/mvp-hosts.yaml +78 -0
  92. package/assets/ide/host-adapt/host-adapt.schema.json +97 -0
  93. package/assets/ide/skills-orch/README.md +16 -0
  94. package/assets/ide/skills-orch/kit-apply-standards/SKILL.md +17 -0
  95. package/assets/ide/skills-orch/kit-gate-status/SKILL.md +17 -0
  96. package/assets/ide/skills-orch/kit-hat-reanchor/SKILL.md +15 -0
  97. package/assets/ide/skills-orch/kit-init-guide/SKILL.md +23 -0
  98. package/assets/ide/skills-orch/kit-verify/SKILL.md +23 -0
  99. package/assets/ontology.yaml +113 -0
  100. package/assets/skills/README.md +37 -0
  101. package/assets/skills/harness-00-delegate-only/SKILL.md +19 -0
  102. package/assets/skills/harness-10-spec/SKILL.md +63 -0
  103. package/assets/skills/harness-10-task/SKILL.md +70 -0
  104. package/assets/skills/harness-20-spec-audit/SKILL.md +50 -0
  105. package/assets/skills/harness-20-task-audit/SKILL.md +90 -0
  106. package/assets/skills/harness-20-task-audit/references/TEMPLATE_30_gate_stop.md +36 -0
  107. package/assets/skills/harness-hat-reanchor/SKILL.md +19 -0
  108. package/assets/standards/POINTER_workspace_truth_v1_zh.md +42 -0
  109. package/assets/standards/README.md +35 -0
  110. package/assets/standards/SOURCES_v1_zh.md +49 -0
  111. package/assets/standards/TEMPLATE_CODING_BASELINE_L1_v1_zh.md +88 -0
  112. package/assets/standards/TEMPLATE_CODING_BASELINE_L2_backend_v1_zh.md +75 -0
  113. package/assets/standards/TEMPLATE_CODING_BASELINE_L2_frontend_v1_zh.md +76 -0
  114. package/bin/dsh-coding-kit.js +7 -0
  115. package/bin/specgate.js +7 -0
  116. package/bin/validate_template_compliance.py +470 -0
  117. package/cordis.patch.yml +5 -0
  118. package/lib/cli-checks.d.ts +68 -0
  119. package/lib/cli-checks.js +812 -0
  120. package/lib/cli-checks.js.map +1 -0
  121. package/lib/cli-graph-hgm.d.ts +74 -0
  122. package/lib/cli-graph-hgm.js +416 -0
  123. package/lib/cli-graph-hgm.js.map +1 -0
  124. package/lib/cli-graph-yaml.d.ts +79 -0
  125. package/lib/cli-graph-yaml.js +602 -0
  126. package/lib/cli-graph-yaml.js.map +1 -0
  127. package/lib/cli-graph.d.ts +1 -0
  128. package/lib/cli-graph.js +199 -0
  129. package/lib/cli-graph.js.map +1 -0
  130. package/lib/cli-host.d.ts +24 -0
  131. package/lib/cli-host.js +1197 -0
  132. package/lib/cli-host.js.map +1 -0
  133. package/lib/cli-lifecycle.d.ts +2 -0
  134. package/lib/cli-lifecycle.js +401 -0
  135. package/lib/cli-lifecycle.js.map +1 -0
  136. package/lib/cli-refresh-ide-blocks.d.ts +66 -0
  137. package/lib/cli-refresh-ide-blocks.js +484 -0
  138. package/lib/cli-refresh-ide-blocks.js.map +1 -0
  139. package/lib/cli-shared.d.ts +74 -0
  140. package/lib/cli-shared.js +281 -0
  141. package/lib/cli-shared.js.map +1 -0
  142. package/lib/cli-skills.d.ts +52 -0
  143. package/lib/cli-skills.js +363 -0
  144. package/lib/cli-skills.js.map +1 -0
  145. package/lib/cli-status.d.ts +2 -0
  146. package/lib/cli-status.js +251 -0
  147. package/lib/cli-status.js.map +1 -0
  148. package/lib/cli-sync-prompts.d.ts +25 -0
  149. package/lib/cli-sync-prompts.js +158 -0
  150. package/lib/cli-sync-prompts.js.map +1 -0
  151. package/lib/cli-sync.d.ts +2 -0
  152. package/lib/cli-sync.js +124 -0
  153. package/lib/cli-sync.js.map +1 -0
  154. package/lib/cli-task-extra.d.ts +53 -0
  155. package/lib/cli-task-extra.js +408 -0
  156. package/lib/cli-task-extra.js.map +1 -0
  157. package/lib/cli-timeline.d.ts +28 -0
  158. package/lib/cli-timeline.js +68 -0
  159. package/lib/cli-timeline.js.map +1 -0
  160. package/lib/cli-wiki.d.ts +21 -0
  161. package/lib/cli-wiki.js +189 -0
  162. package/lib/cli-wiki.js.map +1 -0
  163. package/lib/cli.d.ts +22 -0
  164. package/lib/cli.js +1034 -0
  165. package/lib/cli.js.map +1 -0
  166. package/lib/host-contract.d.ts +23 -0
  167. package/lib/host-contract.js +143 -0
  168. package/lib/host-contract.js.map +1 -0
  169. package/lib/index.d.ts +18 -0
  170. package/lib/index.js +290 -0
  171. package/lib/index.js.map +1 -0
  172. package/lib/yaml.d.ts +4 -0
  173. package/lib/yaml.js +10 -0
  174. package/lib/yaml.js.map +1 -0
  175. package/package.json +87 -0
@@ -0,0 +1,90 @@
1
+ ---
2
+ name: harness-20-task-audit
3
+ description: 书面审查 Harness task 文件(R 轮):对照 SPEC 核对范围/非范围/验收/failure_paths/思考轮,结论落盘 docs/harness/reviews/ 审查文。当 task 草稿完成、进入 HG-AUDIT-R1 人签之前使用。不用于:改 task 实质内容(退回 10-task);审 SPEC(用 harness-20-spec-audit);代签 human_gate(仅人)。
4
+ license: MIT
5
+ compatibility: Requires npx spec-wave CLI(task lint / verify --task)· docs/harness/reviews/ 目录约定
6
+ metadata:
7
+ hat_id: 20-task-audit
8
+ track: starter
9
+ ---
10
+
11
+ # 帽子:20-task-audit · 任务审核(Harness · Starter 子集)
12
+
13
+ > **hat_id(V2)**:**20-task-audit** = task 书面审核(**30 之前**)。
14
+ > **对应**:**10-task** · **不**审 SPEC。
15
+ > **姊妹帽**:SPEC 书面审 **[`harness-20-spec-audit/SKILL.md`](../../skills/harness-20-spec-audit/SKILL.md)**(对应 10-spec · HG-SPEC-SIGNOFF)。
16
+ > **完整版 POINTER**(Ink 工作区):`docs/harness/prompts/20-task-audit.md`
17
+ > **本文件**:嵌入用户仓 `docs/harness/prompts/` 的 **精简真值**(自 `22-task-audit.md` 改名 · V2 拆分)。
18
+
19
+ ## 身份
20
+
21
+ **任务审核** Agent:对 task 做 **书面审查**;**不实现代码**;**必须落盘** `docs/harness/reviews/`。
22
+
23
+ ## 只做什么
24
+
25
+ - 对照验收、`failure_paths`、`test_strategy`、必读列表
26
+ - **行为变更类 task**(改默认值 / 校验 / 策略门 / fallback 语义):验收标准须含「**旧测 grep 影响面**」项,缺则**退回 10-task** 补列(checklist 提醒 · 不进 `task lint` 机械闸)
27
+ - **阶段 C**:若 task §4 含思考轮 → **思考轮审查**(控制表 · 回填闭合 · early_stop 理由/风险)
28
+ - **思考审查不通过** → 审查文 **「退回 10-task」**;下一棒 **10-task**,**禁止**附 30 Prompt
29
+ - **必须** 写 `task_<slug>_audit_R<n>_YYYYMMDD.md`
30
+ - 零阻塞:写明核对项;**流程闸**与 **内容**分开写
31
+ - 有阻塞:回填清单 + task 小节标题
32
+ - 通过后在审查文写 **签收 / 关闭**(若本轮为终轮)
33
+
34
+ ## 禁止什么
35
+
36
+ - 禁止仅口头「过了」不落盘
37
+ - 有 **内容**阻塞时禁止指示 30 开工
38
+ - **`HG-AUDIT-R1` 仍为 `pending` 时禁止附「下一棒 30」可复制 Prompt**(见下节)
39
+ - 不代替 **50 复检** 做代码走查;不代替 **20-spec-audit** 审 SPEC
40
+
41
+ ## 人工闸联动(20-task-audit → 30 分界)
42
+
43
+ | 维度 | 20 R1 负责 | 维护者负责 |
44
+ |------|------------|------------|
45
+ | task **内容**可执行 | 书面审查 · 零内容阻塞 | — |
46
+ | **流程闸** `HG-AUDIT-R1` | 审查文写明 pending/approved | **签 task 表** → `approved` |
47
+ | 30 改码授权 | **不签发** | task 表 `approved` 才是真值 |
48
+
49
+ 审查通过后请维护者签 **`HG-AUDIT-R1`** → `approved`(blocks **30**)。
50
+
51
+ ### `HG-AUDIT-R1` = pending 时,审查文文末只输出
52
+
53
+ **维护者签闸清单**(禁止附 30 Prompt):
54
+
55
+ ```text
56
+ ## 维护者签闸(20 后 · 30 前)
57
+
58
+ - [ ] 已读 R1 审查结论
59
+ - [ ] 在 task 人工闸表将 HG-AUDIT-R1 改为 approved(维护者 · 日期)
60
+ - [ ] commit task 文档或确认已签
61
+ - [ ] 再下发 Harness 30 Prompt
62
+
63
+ 30 Agent 将以 task 表为准;pending 时必须拒开工(见 TEMPLATE_30_gate_stop.md)。
64
+ ```
65
+
66
+ ### `HG-AUDIT-R1` = approved 后,审查文或维护者才可附 30 Prompt
67
+
68
+ 前提在 Prompt 内写明:**task 表已 approved**(非「计划签」)。
69
+
70
+ ## 输出形状
71
+
72
+ 元信息 → 结论摘要(内容 / 流程闸分列)→ 阻塞/非阻塞 → 回填清单 → 签闸清单或(已签时)下一棒 30 Prompt
73
+
74
+ ## 交接物
75
+
76
+ - 审查 md 路径(**必须** · `docs/harness/reviews/`)
77
+ - invoke 快照:仅当 task `required_invoke_hats` / profile **含 20** 时必须落盘;默认 default 集合不含 20(与 reviews 硬闸分工)
78
+ - 按 HANDOFF 分仓 commit
79
+
80
+ ## 修订记录
81
+
82
+ | 日期 | 摘要 |
83
+ |------|------|
84
+ | 2026-07-24 | V2 拆分收编:自 `22-task-audit.md` 改名为 `20-task-audit.md`(来源:工作区 `20-task-audit.md` · 2026-06-21 v3 + 原包内人工闸联动节保留) |
85
+ | 2026-07-26 | v2.12:澄清 20 invoke 仅在 required 集合含 20 时强制;默认靠 reviews |
86
+ | 2026-08-27 | K7:checklist 增行为变更类 task「旧测 grep 影响面」提醒(非机械闸) |
87
+
88
+ ## 给 Cursor
89
+
90
+ `Harness`、`20-task-audit`、`reviews`、`_audit_`、`HG-AUDIT-R1`、`拒开工`
@@ -0,0 +1,36 @@
1
+ # 模板:30 拒开工 · 人工闸 STOP
2
+
3
+ > **用途**:`HG-AUDIT-R1` 或其它 blocks **30** 的闸为 `pending` 时,**首输出**须为本形状;**禁止**改业务码、禁止落 30 invoke。
4
+ > **复制**:Agent 按此填空;维护者演练拒开工时可对照。
5
+
6
+ ---
7
+
8
+ ## 人工闸扫描(30 · 拒开工)
9
+
10
+ | human_gate_id | task表status | 用户/invoke声称 | 一致? | blocks_30 | 30 可开工? |
11
+ |---------------|--------------|-----------------|--------|-----------|-------------|
12
+ | HG-TASK-DRAFT | {读表} | {若有} | {Y/N} | {Y/N} | … |
13
+ | **HG-AUDIT-R1** | **{读表}** | {若有} | {Y/N} | Y | **{❌ 否 / ✅ 是}** |
14
+
15
+ **冲突**:task 表 `pending` 且声称 `approved` → **拒开工**(不得采信聊天)。
16
+
17
+ **pre-30 invoke(v2.14+ 硬闸 · 本包已接线)**:`verify` 报 `missing pre-30 invoke hats` → **拒开工**——本包已接线(src/cli.ts cmdVerify · checkPre30InvokeHats · PRD_DEF-003 阶段二 T5 · test/cli-verify-invoke-hats.test.ts 钉死 · `--allow-invoke-gap` 豁免留痕);人工闸表核对口径不变。
18
+
19
+ **结论**:**拒开工** — task 表真值未满足 30 条件。
20
+
21
+ **真值依据**:`docs/tasks/active/task_*.md` 人工闸表(**聊天 Prompt 不能替代 `approved`**)+ `npx spec-wave verify --task`。
22
+
23
+ **维护者下一步**:
24
+
25
+ 1. 在 task 表将阻塞闸改为 `approved`(附维护者 · 日期)
26
+ 2. 补齐 pre-30 invoke(通常 `invoke_*_10_*`)或改 `minimal` / `--allow-invoke-gap`
27
+ 3. `git add` + `commit` task 文档(或维护者确认已签)
28
+ 4. 重新下发 Harness 30 Prompt
29
+
30
+ **禁止**:将「维护者发送 30 Prompt」或用户口头「开工」视为闸已签收。
31
+
32
+ ---
33
+
34
+ ## 给 Cursor
35
+
36
+ `Harness`、`30`、`拒开工`、`HG-AUDIT-R1`、`human_gate`
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: harness-hat-reanchor
3
+ description: 长对话帽身份丢失时先读本片段 re-anchor(hat_id / task_slug / 禁区)。当上下文脏、多轮读码后纪律漂移、或换帽后仍自称旧帽时使用。不用于:替代 prompts 全文;替代 npx spec-wave verify。
4
+ license: MIT
5
+ compatibility: Requires docs/harness/prompts/ 已 sync;机械闸仍走 CLI verify
6
+ metadata:
7
+ hat_id: reanchor
8
+ track: starter
9
+ ---
10
+
11
+ # FRAGMENT · 帽身份 Re-anchor
12
+
13
+ 上下文脏(多轮读码 / 大 diff / 口头换帽)则**先读本片段**,再继续。本片段 ≠ prompts 全文 ≠ `verify`。
14
+
15
+ - **hat_id**:{00 / 10-task / 10-spec / 20-task-audit / 20-spec-audit / 30 / 40}
16
+ - **task_slug**:{active task 文件名或「无」}
17
+ - **本帽禁区**:{从当前帽 prompts「禁止什么」抄一行}
18
+
19
+ 只做本 `hat_id` 允许的事。换帽须加载该帽 prompts **全文**。机械闸:`npx spec-wave verify`。
@@ -0,0 +1,42 @@
1
+ # POINTER · 工作区编码规范真值(示例 · 不复制全文)
2
+
3
+ | 项 | 内容 |
4
+ | --- | --- |
5
+ | **状态** | `active` |
6
+ | **日期** | 2026-06-15(A3 脱敏) |
7
+ | **性质** | **只读指针**;Starter 交付 TEMPLATE,各业务仓维护 L1/L2 **active** 条文 |
8
+
9
+ ---
10
+
11
+ ## 纪律(D-M2-04)
12
+
13
+ | 规则 | 说明 |
14
+ | --- | --- |
15
+ | **禁止双维护** | 不得将某业务仓 `docs/standards/` L1/L2 **全文**复制进 `cyning-harness` 产品仓 |
16
+ | **嵌入用户仓** | 从本目录 **TEMPLATE_*** 复制生成用户仓 `docs/standards/`;按需 **POINTER** 回链源仓 |
17
+ | **冲突** | task + 图谱 + PROJECT_CONFIG > 用户仓已嵌入 L1/L2 > 本 POINTER |
18
+
19
+ ---
20
+
21
+ ## 使用方式
22
+
23
+ 1. **默认**:仅用本目录 [`TEMPLATE_CODING_BASELINE_L1_v1_zh.md`](TEMPLATE_CODING_BASELINE_L1_v1_zh.md) 等模板
24
+ 2. **有上游规范仓时**:在用户仓 README 追加 POINTER 链(GitHub 路径 · 非本地绝对路径)
25
+ 3. **禁止** 将私有工作区 invoke / task 正文 bulk 复制进产品包
26
+
27
+ ---
28
+
29
+ ## 治理仓(可选 · 公开)
30
+
31
+ | 仓 | 用途 |
32
+ | --- | --- |
33
+ | [`cyning-ai-coding-governance`](https://github.com/Cyning12/cyning-ai-coding-governance) | 方法论 · L3/L2/L1 整合导读 · 对比研究 |
34
+
35
+ ---
36
+
37
+ ## 修订记录
38
+
39
+ | 日期 | 说明 |
40
+ | --- | --- |
41
+ | 2026-06-09 | M2 T2:TEMPLATE + POINTER 首版 |
42
+ | 2026-06-15 | A3 public push:移除私有工作区路径与 Ink 内部 task 枚举 |
@@ -0,0 +1,35 @@
1
+ # standards · 编码规范模板
2
+
3
+ 按语言栈从本目录复制到用户仓 **`docs/standards/`**。
4
+
5
+ ## v0.1 已交付(T2 · M2)
6
+
7
+ | 模板 | 状态 | 嵌入后文件名 |
8
+ |------|------|--------------|
9
+ | [`TEMPLATE_CODING_BASELINE_L1_v1_zh.md`](./TEMPLATE_CODING_BASELINE_L1_v1_zh.md) | ✅ | `CODING_BASELINE_L1_v1_zh.md` |
10
+ | [`TEMPLATE_CODING_BASELINE_L2_frontend_v1_zh.md`](./TEMPLATE_CODING_BASELINE_L2_frontend_v1_zh.md) | ✅ | `CODING_FRONTEND_L2_v1_zh.md` |
11
+ | [`TEMPLATE_CODING_BASELINE_L2_backend_v1_zh.md`](./TEMPLATE_CODING_BASELINE_L2_backend_v1_zh.md) | ✅ | `CODING_BACKEND_L2_v1_zh.md` |
12
+ | [`SOURCES_v1_zh.md`](./SOURCES_v1_zh.md) | ✅ | `SOURCES_编码规范外部参考_v1_zh.md` |
13
+ | [`POINTER_workspace_truth_v1_zh.md`](./POINTER_workspace_truth_v1_zh.md) | ✅ | 可选保留 POINTER(不复制 Ink 全文) |
14
+
15
+ ## 嵌入步骤
16
+
17
+ ```bash
18
+ mkdir -p docs/standards
19
+ cp standards/TEMPLATE_CODING_BASELINE_L1_v1_zh.md docs/standards/CODING_BASELINE_L1_v1_zh.md
20
+ # 按栈复制 L2 模板并重命名;填写「本仓落地」列
21
+ cp standards/SOURCES_v1_zh.md docs/standards/SOURCES_编码规范外部参考_v1_zh.md
22
+ ```
23
+
24
+ ## task 字段
25
+
26
+ `code_quality_bar: strict | recommended | not_applicable`
27
+
28
+ - **strict**:22/30 须对照 L2 条文 ID
29
+ - **recommended**:M2 文档演练默认
30
+ - **not_applicable**:纯文档 task 须附一行理由
31
+
32
+ ## 关联
33
+
34
+ - Onboarding:见薄指针页 [`POINTER_ONBOARDING.md`](../docs/POINTER_ONBOARDING.md)(原文不随包发布)§4
35
+ - Harness 衔接:工作区 `GUIDANCE_standards_in_harness_starter_m2_v1_zh.md` §3(POINTER,非复制)
@@ -0,0 +1,49 @@
1
+ # 编码规范 — 外部参考模板(v1)
2
+
3
+ > **用途**:复制为 `docs/standards/SOURCES_编码规范外部参考_v1_zh.md`。
4
+ > **纪律**:**引用不搬运** — 正文不进仓,只保留采纳条款与本仓落地路径。
5
+
6
+ | 项 | 内容 |
7
+ | --- | --- |
8
+ | **状态** | `draft` |
9
+ | **关联 L1** | `CODING_BASELINE_L1_v1_zh.md` |
10
+
11
+ ---
12
+
13
+ ## 1. 引用纪律
14
+
15
+ 1. **引用不搬运**:下表「来源 URL」为真值入口;修订时更新 **版本锚点**。
16
+ 2. **采纳须可执行**:「本仓落地」须指向 **文件路径、CI job 或命令**。
17
+ 3. **冲突**:与 task、`_tech_graph`、`PROJECT_CONFIG` 冲突时,以本仓真值为准。
18
+
19
+ ---
20
+
21
+ ## 2. 映射表(嵌入时填写)
22
+
23
+ | ID | 来源 | 版本锚点 | 采纳条款(摘要) | 本仓落地 |
24
+ | --- | --- | --- | --- | --- |
25
+ | REF-GOOG-CL | [Google Eng Practices — CLs](https://google.github.io/eng-practices/review/developer/) | YYYY-MM | 小步 CL、附测试说明 | PR Test plan;L1 §4 |
26
+ | REF-GOOG-CR | [Google Code Review](https://google.github.io/eng-practices/review/) | YYYY-MM | 可读性、非风格吹毛求疵 | 22 审查关注 B-01/B-02 |
27
+ | REF-PEP8 | [PEP 8](https://peps.python.org/pep-0008/) | Py x.y | 格式、命名 | _后端:ruff.toml_ |
28
+ | REF-GOOG-TS | [Google TS Style](https://google.github.io/styleguide/tsguide.html) | YYYY-MM | strict、禁 any | _前端:tsconfig + ESLint_ |
29
+ | REF-OWASP-API | [OWASP API Top 10](https://owasp.org/www-project-api-security/) | 2023 | 注入、鉴权 | B-11 |
30
+ | _REF-…_ | _待增_ | | | |
31
+
32
+ ---
33
+
34
+ ## 3. 按 L1 条文回查
35
+
36
+ | L1 条文 | 主要 REF |
37
+ | --- | --- |
38
+ | B-01~B-07 | REF-GOOG-CL, REF-GOOG-CR |
39
+ | B-08 | REF-GOOG-TS, REF-PEP8 |
40
+ | B-10 | REF-GOOG-CL |
41
+ | B-11 | REF-OWASP-API |
42
+
43
+ ---
44
+
45
+ ## 4. 修订记录
46
+
47
+ | 版本 | 日期 | 说明 |
48
+ | --- | --- | --- |
49
+ | v1.0 | YYYY-MM-DD | 从 cyning-harness SOURCES 模板嵌入 |
@@ -0,0 +1,88 @@
1
+ # 编码基线 L1 模板(语言无关 · v1)
2
+
3
+ > **用途**:复制到用户仓 `docs/standards/CODING_BASELINE_L1_v1_zh.md` 并按栈裁剪。
4
+ > **纪律**:本文件为 **脚手架模板**;Ink 工作区真值见 [`POINTER_workspace_truth_v1_zh.md`](./POINTER_workspace_truth_v1_zh.md) — **禁止** 将真值全文复制进产品仓分发包。
5
+
6
+ | 项 | 内容 |
7
+ | --- | --- |
8
+ | **状态** | `draft` — 嵌入后改 `active` 并人签 |
9
+ | **版本** | v1.0 |
10
+ | **日期** | YYYY-MM-DD |
11
+ | **维护** | 本仓 `docs/standards/` |
12
+
13
+ ---
14
+
15
+ ## 1. 适用范围
16
+
17
+ | 适用 | 不适用 |
18
+ | --- | --- |
19
+ | 本仓 **业务代码** 新增/修改 | 纯文档 task(`test_strategy: not_applicable` 且无代码) |
20
+ | Agent 与人类 PR | 第三方 vendored(除非 task 明示) |
21
+
22
+ **优先级**:**task + `_tech_graph` + PROJECT_CONFIG** > 本 L1 > 外部参考([`SOURCES_v1_zh.md`](./SOURCES_v1_zh.md))> 个人习惯。
23
+
24
+ ---
25
+
26
+ ## 2. 条文(B-01~B-12 · 填写真值)
27
+
28
+ > 每条保留 **ID**;L2 须标注 `遵循 B-xx`。下方「本仓落地」列嵌入时必填。
29
+
30
+ | ID | 原则(摘要) | 本仓落地(路径 / CI / 命令) |
31
+ | --- | --- | --- |
32
+ | **B-01** | 单一职责;函数/模块只做一件事 | _待填_ |
33
+ | **B-02** | 早返回;嵌套 ≤2 | _待填_ |
34
+ | **B-03** | 配置外置;禁止硬编码 URL/密钥 | _待填:`PROJECT_CONFIG` / `.env.example`_ |
35
+ | **B-04** | 命名即文档;与图谱/API 术语一致 | _待填_ |
36
+ | **B-05** | 错误可结构化;对齐 registry/SPEC | _待填_ |
37
+ | **B-06** | 扩展点显式;表驱动优于 if-else 链 | _待填_ |
38
+ | **B-07** | 最小 diff;禁止范围外重构 | _待填_ |
39
+ | **B-08** | 类型与契约优先;禁止滥用 `any`/裸 dict | _待填_ |
40
+ | **B-09** | 重复 ≥3 处须抽取 | _待填_ |
41
+ | **B-10** | 测试与行为绑定;`test_strategy: required` 先测后码 | _待填:pytest / vitest / …_ |
42
+ | **B-11** | 安全与密钥;输入校验 | _待填_ |
43
+ | **B-12** | 可观测钩子;禁止静默失败 | _待填_ |
44
+
45
+ ### 扩展示例(可选)
46
+
47
+ 若需展开单条说明,用三级标题 `### B-0N …`,**勿** 超过 L1 原则层(栈细节放 L2)。
48
+
49
+ ---
50
+
51
+ ## 3. 反模式速查(节选)
52
+
53
+ | ID | 反模式 | 改法 | 条文 |
54
+ | --- | --- | --- | --- |
55
+ | AP-01 | 魔法字符串 API 路径 | 常量 / env / 生成类型 | B-03, B-08 |
56
+ | AP-02 | 路由层堆业务+SQL | 下沉 service | B-01 |
57
+ | AP-03 | 深层嵌套 JSX / try | 抽 hook / 早 return | B-02 |
58
+ | AP-04 | `except Exception: pass` | 窄捕获 + 结构化错误 | B-05 |
59
+
60
+ _嵌入后按栈增补 AP-xx_
61
+
62
+ ---
63
+
64
+ ## 4. PR / 审查自检
65
+
66
+ - [ ] 无新增硬编码 URL/魔法数(B-03)
67
+ - [ ] 无密钥进仓库(B-11)
68
+ - [ ] 无范围外文件改动(B-07)
69
+ - [ ] `test_strategy: required` 时测试已绿(B-10)
70
+
71
+ ---
72
+
73
+ ## 5. 与 L2 的关系
74
+
75
+ | 层级 | 路径 | 职责 |
76
+ | --- | --- | --- |
77
+ | **L1** | 本文件 | 原则与条文 ID |
78
+ | **L2 前端** | `docs/standards/CODING_FRONTEND_L2_v1_zh.md` | 由 [`TEMPLATE_CODING_BASELINE_L2_frontend_v1_zh.md`](./TEMPLATE_CODING_BASELINE_L2_frontend_v1_zh.md) 生成 |
79
+ | **L2 后端** | `docs/standards/CODING_BACKEND_L2_v1_zh.md` | 由 [`TEMPLATE_CODING_BASELINE_L2_backend_v1_zh.md`](./TEMPLATE_CODING_BASELINE_L2_backend_v1_zh.md) 生成 |
80
+ | **L3** | `.cursor/rules` · `AGENTS.md` | ≤15 行摘要 + 链至 L1/L2 |
81
+
82
+ ---
83
+
84
+ ## 6. 修订记录
85
+
86
+ | 版本 | 日期 | 说明 |
87
+ | --- | --- | --- |
88
+ | v1.0 | YYYY-MM-DD | 从 cyning-harness 模板嵌入 |
@@ -0,0 +1,75 @@
1
+ # 编码规范 L2 模板 — 后端(Python / API · v1)
2
+
3
+ > **用途**:复制为 `docs/standards/CODING_BACKEND_L2_v1_zh.md`。
4
+ > **L1**:须链本仓 [`CODING_BASELINE_L1_v1_zh.md`](./TEMPLATE_CODING_BASELINE_L1_v1_zh.md)(嵌入后去 `TEMPLATE_` 前缀)。
5
+
6
+ | 项 | 内容 |
7
+ | --- | --- |
8
+ | **状态** | `draft` |
9
+ | **栈** | _例:Python 3.11+ · FastAPI · pytest · Ruff_ |
10
+ | **配置真值** | _待填:`docs/meta/PROJECT_CONFIG_*.md`_ |
11
+ | **图谱** | _待填:`docs/_tech_graph/`_ |
12
+
13
+ ---
14
+
15
+ ## 1. 适用范围
16
+
17
+ | 路径 | 职责 |
18
+ | --- | --- |
19
+ | `api/` 或 `src/` | HTTP 路由与领域模块 |
20
+ | `tests/` | pytest |
21
+ | _(待填)_ | _按仓裁剪_ |
22
+
23
+ ---
24
+
25
+ ## 2. 条文(P-01~P-15 · 填写真值)
26
+
27
+ 每条须含:**遵循 B-xx** + **工具规则 ID**(Ruff / mypy 等)。
28
+
29
+ | ID | 主题 | 遵循 | 本仓落地(文件 / 规则 ID) |
30
+ | --- | --- | --- | --- |
31
+ | **P-01** | 模块边界;路由薄 | B-01 | _待填_ |
32
+ | **P-02** | 早返回与异常 | B-02 | _待填_ |
33
+ | **P-03** | 环境变量单一真值模块 | B-03 | _待填:`api/rag_env.py` 或 settings_ |
34
+ | **P-04** | 命名与 import 顺序 | B-04 | _待填_ |
35
+ | **P-05** | 结构化错误 / HTTPException | B-05 | _待填:error registry_ |
36
+ | **P-06** | 分支与策略 | B-06 | _待填_ |
37
+ | **P-07** | 最小 diff | B-07 | _待填_ |
38
+ | **P-08** | 类型注解 / Pydantic | B-08 | _待填:Ruff ANN / mypy_ |
39
+ | **P-09** | 重复抽取 | B-09 | _待填_ |
40
+ | **P-10** | pytest 与 marker | B-10 | _待填_ |
41
+ | **P-11** | 安全与密钥 | B-11 | _待填_ |
42
+ | **P-12** | 日志与 trace 字段 | B-12 | _待填_ |
43
+ | **P-13** | _栈特有_ | — | _待填_ |
44
+ | **P-14** | _栈特有_ | — | _待填_ |
45
+ | **P-15** | _栈特有_ | — | _待填_ |
46
+
47
+ ### 扩展示例
48
+
49
+ ```markdown
50
+ ### P-05 结构化错误(遵循 B-05)
51
+
52
+ | 场景 | 形状 |
53
+ | --- | --- |
54
+ | HTTP | HTTPException + error_code |
55
+ | 内部 | 窄捕获;禁止 traceback 外泄 |
56
+ ```
57
+
58
+ ---
59
+
60
+ ## 3. CI 对齐
61
+
62
+ | 检查 | 命令 | workflow |
63
+ | --- | --- | --- |
64
+ | Test | _例:`pytest tests -m "not slow"`_ | _待填_ |
65
+ | Lint | _例:`ruff check`_ | _待填(可选 P4)_ |
66
+
67
+ 复制 [`ci/samples/pytest.yml.example`](../ci/samples/README.md) 并按上表改。
68
+
69
+ ---
70
+
71
+ ## 4. 修订记录
72
+
73
+ | 版本 | 日期 | 说明 |
74
+ | --- | --- | --- |
75
+ | v1.0 | YYYY-MM-DD | 从 cyning-harness L2 后端模板嵌入 |
@@ -0,0 +1,76 @@
1
+ # 编码规范 L2 模板 — 前端(TypeScript / React · v1)
2
+
3
+ > **用途**:复制为 `docs/standards/CODING_FRONTEND_L2_v1_zh.md`。
4
+ > **L1**:须链本仓 [`CODING_BASELINE_L1_v1_zh.md`](./TEMPLATE_CODING_BASELINE_L1_v1_zh.md)(嵌入后去 `TEMPLATE_` 前缀)。
5
+
6
+ | 项 | 内容 |
7
+ | --- | --- |
8
+ | **状态** | `draft` |
9
+ | **栈** | _例:Next App Router · React · TypeScript strict · pnpm · Vitest_ |
10
+ | **配置真值** | _待填:`docs/meta/PROJECT_CONFIG_*.md`_ |
11
+ | **图谱** | _待填:`docs/_tech_graph/`_ |
12
+
13
+ ---
14
+
15
+ ## 1. 适用范围
16
+
17
+ | 路径 | 职责 |
18
+ | --- | --- |
19
+ | `app/` | 页面、布局、Route Handlers(BFF) |
20
+ | `components/` | UI 组件 |
21
+ | `lib/` | 领域逻辑、工具 |
22
+ | _(待填)_ | _按仓裁剪_ |
23
+
24
+ ---
25
+
26
+ ## 2. 条文(F-01~F-14 · 填写真值)
27
+
28
+ 每条须含:**遵循 B-xx** + **工具规则 ID**(ESLint / tsconfig 等)。
29
+
30
+ | ID | 主题 | 遵循 | 本仓落地(文件 / 规则 ID) |
31
+ | --- | --- | --- | --- |
32
+ | **F-01** | 模块边界;Route Handler 薄 | B-01 | _待填_ |
33
+ | **F-02** | 早返回与条件渲染 | B-02 | _待填_ |
34
+ | **F-03** | 环境变量;`NEXT_PUBLIC_*` 纪律 | B-03 | _待填_ |
35
+ | **F-04** | 命名与 `@/` 导入 | B-04 | _待填_ |
36
+ | **F-05** | BFF 错误与日志 | B-05, B-12 | _待填_ |
37
+ | **F-06** | 分支与策略表 | B-06 | _待填_ |
38
+ | **F-07** | 最小 diff | B-07 | _待填_ |
39
+ | **F-08** | TypeScript strict | B-08 | _待填:`eslint/@typescript-eslint/no-explicit-any`_ |
40
+ | **F-09** | 重复抽取 | B-09 | _待填_ |
41
+ | **F-10** | 测试(Vitest / RTL) | B-10 | _待填_ |
42
+ | **F-11** | 安全(XSS、密钥) | B-11 | _待填_ |
43
+ | **F-12** | 可观测 | B-12 | _待填_ |
44
+ | **F-13** | _栈特有_ | — | _待填_ |
45
+ | **F-14** | _栈特有_ | — | _待填_ |
46
+
47
+ ### 扩展示例
48
+
49
+ ```markdown
50
+ ### F-03 环境变量(遵循 B-03)
51
+
52
+ | 类型 | 规则 |
53
+ | --- | --- |
54
+ | 服务端密钥 | 仅服务端模块;禁止 NEXT_PUBLIC_* |
55
+ | API 基址 | 单一真值 env + proxy 模块 |
56
+ ```
57
+
58
+ ---
59
+
60
+ ## 3. CI 对齐
61
+
62
+ | 检查 | 命令 | workflow |
63
+ | --- | --- | --- |
64
+ | Lint | _例:`pnpm lint`_ | _待填_ |
65
+ | Test | _例:`pnpm test`_ | _待填_ |
66
+ | Build | _例:`pnpm build`_ | _待填_ |
67
+
68
+ 复制 [`ci/samples/quality.yml.example`](../ci/samples/README.md) 并按上表改 job 名。
69
+
70
+ ---
71
+
72
+ ## 4. 修订记录
73
+
74
+ | 版本 | 日期 | 说明 |
75
+ | --- | --- | --- |
76
+ | v1.0 | YYYY-MM-DD | 从 cyning-harness L2 前端模板嵌入 |
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ import { runCli } from '../lib/cli.js'
3
+
4
+ runCli(process.argv.slice(2)).catch((err) => {
5
+ if (err && err.message) console.error(err.message)
6
+ process.exit(typeof err?.exitCode === 'number' ? err.exitCode : 1)
7
+ })
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ import { runCli } from '../lib/cli.js'
3
+
4
+ runCli(process.argv.slice(2)).catch((err) => {
5
+ if (err && err.message) console.error(err.message)
6
+ process.exit(typeof err?.exitCode === 'number' ? err.exitCode : 1)
7
+ })