svharness 0.8.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 (134) hide show
  1. package/README.md +531 -0
  2. package/bin/cli.js +3 -0
  3. package/dist/adapters/_frontmatter.js +24 -0
  4. package/dist/adapters/claude-code.js +12 -0
  5. package/dist/adapters/codechat.js +12 -0
  6. package/dist/adapters/cursor.js +19 -0
  7. package/dist/adapters/generic.js +19 -0
  8. package/dist/adapters/index.js +26 -0
  9. package/dist/adapters/qoder.js +12 -0
  10. package/dist/commands/apply.js +272 -0
  11. package/dist/commands/init.js +420 -0
  12. package/dist/core/agent-injector.js +192 -0
  13. package/dist/core/next-steps.js +91 -0
  14. package/dist/core/render-meta.js +81 -0
  15. package/dist/core/repomix-pack.js +54 -0
  16. package/dist/core/scaffold.js +93 -0
  17. package/dist/core/state.js +80 -0
  18. package/dist/index.js +239 -0
  19. package/dist/types.js +5 -0
  20. package/dist/utils/baseline-copy.js +591 -0
  21. package/dist/utils/baseline-defaults.js +106 -0
  22. package/dist/utils/logger.js +56 -0
  23. package/dist/utils/validate-args.js +132 -0
  24. package/dist/utils/version.js +23 -0
  25. package/dist/wiki/abort.js +30 -0
  26. package/dist/wiki/config.js +79 -0
  27. package/dist/wiki/defaults.js +16 -0
  28. package/dist/wiki/envLoader.js +78 -0
  29. package/dist/wiki/index.js +29 -0
  30. package/dist/wiki/openaiCompat.js +219 -0
  31. package/dist/wiki/repowikiCanonicalSections.js +67 -0
  32. package/dist/wiki/repowikiCheckpoint.js +106 -0
  33. package/dist/wiki/repowikiConfig.js +9 -0
  34. package/dist/wiki/repowikiGit.js +73 -0
  35. package/dist/wiki/repowikiIndexer.js +824 -0
  36. package/dist/wiki/repowikiMarkdownPost.js +123 -0
  37. package/dist/wiki/repowikiMetadataContent.js +64 -0
  38. package/dist/wiki/repowikiMetadataJson.js +15 -0
  39. package/dist/wiki/repowikiScanner.js +156 -0
  40. package/dist/wiki/repowikiStructureNav.js +286 -0
  41. package/dist/wiki/repowikiStructureNormalize.js +218 -0
  42. package/dist/wiki/wikiStructureXml.js +316 -0
  43. package/dist/wiki/wikiTasksWriter.js +127 -0
  44. package/package.json +57 -0
  45. package/templates/_shared/apply-skills/harness-apply-skills-main.md +91 -0
  46. package/templates/_shared/build-rules/harness-build-rule-agent-agnostic.md +35 -0
  47. package/templates/_shared/build-rules/harness-build-rule-chinese-only.md +49 -0
  48. package/templates/_shared/build-rules/harness-build-rule-memory-write.md +31 -0
  49. package/templates/_shared/build-rules/harness-build-rule-orchestrator-flow.md +25 -0
  50. package/templates/_shared/build-rules/harness-build-rule-skills-tasks-output.md +35 -0
  51. package/templates/_shared/build-rules/harness-build-rule-specs-schema.md +32 -0
  52. package/templates/_shared/build-rules/harness-build-rule-user-interaction.md +63 -0
  53. package/templates/_shared/build-skills/harness-build-skill-knowledge-builder.md +120 -0
  54. package/templates/_shared/build-skills/harness-build-skill-orchestrator.md +87 -0
  55. package/templates/_shared/build-skills/harness-build-skill-spec-builder.md +85 -0
  56. package/templates/_shared/build-skills/harness-build-skill-wiki-writer.md +77 -0
  57. package/templates/_shared/meta/AGENTS.md.ejs +53 -0
  58. package/templates/_shared/meta/CHANGELOG.md.ejs +15 -0
  59. package/templates/_shared/meta/README.md.ejs +51 -0
  60. package/templates/_shared/meta/VERSION.ejs +1 -0
  61. package/templates/_shared/meta/harness.yaml.ejs +52 -0
  62. package/templates/_shared/skeleton/agent-env/memory/categories/.gitkeep +1 -0
  63. package/templates/_shared/skeleton/agent-env/memory/inbox/.gitkeep +1 -0
  64. package/templates/_shared/skeleton/agent-env/skills/.gitkeep +1 -0
  65. package/templates/_shared/skeleton/agent-env/tools/.gitkeep +1 -0
  66. package/templates/_shared/skeleton/assets/baseline/code/.gitkeep +1 -0
  67. package/templates/_shared/skeleton/assets/baseline/repomix/.gitkeep +1 -0
  68. package/templates/_shared/skeleton/assets/baseline/wiki/.gitkeep +1 -0
  69. package/templates/_shared/skeleton/assets/raw/.gitkeep +1 -0
  70. package/templates/_shared/skeleton/assets/requirements/.gitkeep +1 -0
  71. package/templates/_shared/skeleton/commands/install/.gitkeep +1 -0
  72. package/templates/_shared/skeleton/commands/update/.gitkeep +1 -0
  73. package/templates/_shared/skeleton/specs/behavior/schema.json +39 -0
  74. package/templates/_shared/skeleton/specs/interfaces/schema.json +38 -0
  75. package/templates/_shared/skeleton/specs/signals/schema.json +37 -0
  76. package/templates/_shared/skeleton/specs/ui/schema.json +44 -0
  77. package/templates/_shared/skeleton/tasks/templates/.gitkeep +0 -0
  78. package/templates/android-compose/skeleton/agent-env/rules/harness-compose-mandatory.mdc +49 -0
  79. package/templates/android-compose/skeleton/agent-env/rules/harness-coroutines-scope.mdc +52 -0
  80. package/templates/android-compose/skeleton/agent-env/rules/harness-hilt-injection.mdc +47 -0
  81. package/templates/android-compose/skeleton/agent-env/rules/harness-mvi-layering.mdc +58 -0
  82. package/templates/android-compose/skeleton/agent-env/skills/harness-android-architecture/SKILL.md +260 -0
  83. package/templates/android-compose/skeleton/agent-env/skills/harness-android-architecture/references/gradle-module-patterns.md +66 -0
  84. package/templates/android-compose/skeleton/agent-env/skills/harness-android-architecture/references/implementation-checklist.md +45 -0
  85. package/templates/android-compose/skeleton/agent-env/skills/harness-android-architecture/references/udf-data-flow.md +80 -0
  86. package/templates/android-compose/skeleton/agent-env/skills/harness-android-cli/SKILL.md +79 -0
  87. package/templates/android-compose/skeleton/agent-env/skills/harness-android-cli/references/interact.md +83 -0
  88. package/templates/android-compose/skeleton/agent-env/skills/harness-android-cli/references/journeys.md +97 -0
  89. package/templates/android-compose/skeleton/agent-env/skills/harness-compose-audit/SKILL.md +162 -0
  90. package/templates/android-compose/skeleton/agent-env/skills/harness-compose-audit/references/canonical-sources.md +116 -0
  91. package/templates/android-compose/skeleton/agent-env/skills/harness-compose-audit/references/diagnostics.md +182 -0
  92. package/templates/android-compose/skeleton/agent-env/skills/harness-compose-audit/references/report-template.md +135 -0
  93. package/templates/android-compose/skeleton/agent-env/skills/harness-compose-audit/references/scoring.md +277 -0
  94. package/templates/android-compose/skeleton/agent-env/skills/harness-compose-audit/references/search-playbook.md +303 -0
  95. package/templates/android-compose/skeleton/agent-env/skills/harness-compose-audit/scripts/compose-reports.init.gradle +58 -0
  96. package/templates/android-compose/skeleton/agent-env/skills/harness-compose-state/SKILL.md +196 -0
  97. package/templates/android-compose/skeleton/agent-env/skills/harness-compose-ui/SKILL.md +192 -0
  98. package/templates/android-compose/skeleton/agent-env/skills/harness-compose-ui/references/composable-api-guide.md +123 -0
  99. package/templates/android-compose/skeleton/agent-env/skills/harness-compose-ui/references/performance-recipes.md +97 -0
  100. package/templates/android-compose/skeleton/agent-env/skills/harness-compose-ui/references/state-patterns.md +93 -0
  101. package/templates/android-compose/skeleton/agent-env/skills/harness-kotlin-coroutines/SKILL.md +167 -0
  102. package/templates/android-compose/skeleton/agent-env/skills/harness-r8-analyzer/SKILL.md +45 -0
  103. package/templates/android-compose/skeleton/agent-env/skills/harness-r8-analyzer/references/CONFIGURATION.md +44 -0
  104. package/templates/android-compose/skeleton/agent-env/skills/harness-r8-analyzer/references/KEEP-RULES-IMPACT-HIERARCHY.md +83 -0
  105. package/templates/android-compose/skeleton/agent-env/skills/harness-r8-analyzer/references/REDUNDANT-RULES.md +222 -0
  106. package/templates/android-compose/skeleton/agent-env/skills/harness-r8-analyzer/references/REFLECTION-GUIDE.md +139 -0
  107. package/templates/android-compose/skeleton/agent-env/skills/harness-r8-analyzer/references/android/topic/performance/app-optimization/enable-app-optimization.md +176 -0
  108. package/templates/android-compose/skeleton/agent-env/skills/harness-r8-analyzer/references/android/training/testing/other-components/ui-automator.md +312 -0
  109. package/templates/android-compose/skeleton/agent-env/skills/harness-xml-to-compose/SKILL.md +87 -0
  110. package/templates/android-compose/skeleton/agent-env/skills/harness-xml-to-compose/references/analysis-of-the-project-and-layout.md +42 -0
  111. package/templates/android-compose/skeleton/agent-env/skills/harness-xml-to-compose/references/android/develop/ui/compose/designsystems/migrate-xml-theme-to-compose.md +168 -0
  112. package/templates/android-compose/skeleton/agent-env/skills/harness-xml-to-compose/references/android/develop/ui/compose/setup-compose-dependencies-and-compiler.md +183 -0
  113. package/templates/android-compose/skeleton/agent-env/skills/harness-xml-to-compose/references/identify-optimal-xml-candidate.md +31 -0
  114. package/templates/android-compose/skeleton/agent-env/skills/harness-xml-to-compose/references/xml-layout-migration.md +86 -0
  115. package/templates/android-xml/skeleton/agent-env/rules/seed-aidl-thread.md +29 -0
  116. package/templates/android-xml/skeleton/agent-env/rules/seed-lifecycle-awareness.md +32 -0
  117. package/templates/android-xml/skeleton/agent-env/rules/seed-mvc-layering.md +32 -0
  118. package/templates/android-xml/skeleton/agent-env/rules/seed-view-binding.md +33 -0
  119. package/templates/android-xml/skeleton/agent-env/rules/seed-xml-styling.md +27 -0
  120. package/templates/cpp/skeleton/agent-env/rules/seed-cmake-explicit-sources.md +31 -0
  121. package/templates/cpp/skeleton/agent-env/rules/seed-header-guards.md +34 -0
  122. package/templates/cpp/skeleton/agent-env/rules/seed-include-layering.md +39 -0
  123. package/templates/cpp/skeleton/agent-env/rules/seed-no-cyclic-deps.md +29 -0
  124. package/templates/cpp/skeleton/agent-env/rules/seed-raii.md +30 -0
  125. package/templates/python/skeleton/agent-env/rules/seed-context-managers.md +60 -0
  126. package/templates/python/skeleton/agent-env/rules/seed-docstrings.md +48 -0
  127. package/templates/python/skeleton/agent-env/rules/seed-import-order.md +49 -0
  128. package/templates/python/skeleton/agent-env/rules/seed-pep8-naming.md +45 -0
  129. package/templates/python/skeleton/agent-env/rules/seed-type-annotations.md +43 -0
  130. package/templates/web-react/skeleton/agent-env/rules/seed-controlled-component.md +43 -0
  131. package/templates/web-react/skeleton/agent-env/rules/seed-effect-cleanup.md +43 -0
  132. package/templates/web-react/skeleton/agent-env/rules/seed-hook-rules.md +42 -0
  133. package/templates/web-react/skeleton/agent-env/rules/seed-key-stability.md +39 -0
  134. package/templates/web-react/skeleton/agent-env/rules/seed-no-props-drilling.md +43 -0
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "svharness",
3
+ "version": "0.8.0",
4
+ "description": "CLI scaffolder for SDD-Driven Agent-Agnostic Coding Framework (harness)",
5
+ "bin": {
6
+ "svharness": "./bin/cli.js",
7
+ "svharnessbuild": "./bin/cli.js"
8
+ },
9
+ "files": [
10
+ "dist/",
11
+ "bin/",
12
+ "templates/",
13
+ "README.md"
14
+ ],
15
+ "engines": {
16
+ "node": ">=18"
17
+ },
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
21
+ "rebuild": "npm run clean && npm run build",
22
+ "prepare": "npm run build",
23
+ "prepublishOnly": "npm run build"
24
+ },
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "keywords": [
29
+ "sdd",
30
+ "harness",
31
+ "ai-agent",
32
+ "scaffolder",
33
+ "spec-driven"
34
+ ],
35
+ "author": "uidq3640",
36
+ "license": "MIT",
37
+ "dependencies": {
38
+ "commander": "^12.1.0",
39
+ "ejs": "^3.1.10",
40
+ "fs-extra": "^11.2.0",
41
+ "js-yaml": "^4.1.0",
42
+ "picocolors": "^1.1.1",
43
+ "prompts": "^2.4.2",
44
+ "repomix": "^1.14.0",
45
+ "svharnessbuild": "^0.7.0",
46
+ "tar": "^7.5.15"
47
+ },
48
+ "devDependencies": {
49
+ "@types/ejs": "^3.1.5",
50
+ "@types/fs-extra": "^11.0.4",
51
+ "@types/js-yaml": "^4.0.9",
52
+ "@types/node": "^20.14.0",
53
+ "@types/prompts": "^2.4.9",
54
+ "@types/tar": "^6.1.13",
55
+ "typescript": "^5.4.5"
56
+ }
57
+ }
@@ -0,0 +1,91 @@
1
+ ---
2
+ name: harness-apply-skills-main
3
+ description: >
4
+ 把 harness 知识层(rules / skills / specs / baseline / memory)应用到目标项目,
5
+ 完成具体功能开发。**从本 skill 正文内嵌的 `## 绑定元数据` 小节解析** `harness_root`,
6
+ 然后加载 `<harness_root>/agent-env/rules/` 作为强约束、扫描
7
+ `<harness_root>/agent-env/skills/*/SKILL.md` 作为子能力,并参考
8
+ `<harness_root>/assets/baseline/`、`<harness_root>/specs/` 产出代码。
9
+ 当用户说"应用 harness-apply-skills-main 完成 xxx 功能开发"、
10
+ "使用 harness 开发 xxx"、"基于 harness 做 xxx"、"apply harness"、
11
+ "按 harness 规范实现 xxx" 时触发。
12
+ ---
13
+
14
+ # harness-apply-skills-main(harness 应用二级调度)
15
+
16
+ 你是一个 **harness 知识层调度器**。当用户请求基于当前项目绑定的 harness
17
+ 完成功能开发时,你不直接写业务代码,而是先把 harness 的约束、能力、基线、规格
18
+ 装载到上下文,再按语义把任务路由到 harness 内部的子 skill。
19
+
20
+ > 本 skill 由 `svharnessbuild apply` 注入。harness 本体可能位于目标项目之外
21
+ > 的任意路径(方案 B:不同根),因此**所有 harness 文件引用必须通过本 skill
22
+ > 正文末尾的 `## 绑定元数据` YAML 块中的 `harness_root` 解析**,禁止假设相对
23
+ > 位置,也不要去读取外部 `binding.yaml`——它只是冗余副本,不是权威来源。
24
+
25
+ ## 输入
26
+
27
+ - **本 skill 文件内嵌的 `## 绑定元数据` YAML 块** —— 权威来源,运行时从这里读取:
28
+ - `harness_root` —— harness 目录(形如 `<name>-harness/`)的**绝对路径**
29
+ - `harness_root_rel` —— 相对目标项目根目录的路径(用于在 md 中渲染跨项目链接)
30
+ - `harness_name` —— harness 名称
31
+ - `harness_version` —— harness 构建状态版本(来自 `<harness_root>/VERSION`)
32
+ - `target_project` —— 绑定的目标项目根路径
33
+ - `agent` —— 当前 IDE / agent 标识
34
+ - `applied_at` / `applied_by` —— 绑定时间与工具版本
35
+ - (旁置,不读)`./references/binding.yaml` —— 冗余副本,仅供 `svharnessbuild`
36
+ 自身工具链(status / detach 等)解析;skill 运行时**不读它**。
37
+
38
+ ## 算法
39
+
40
+ 1. **加载绑定**:从本 skill 正文末尾的 `## 绑定元数据` 小节(fenced ```yaml 代码块)
41
+ 解析 `harness_root` 等字段。若解析失败或 `harness_root` 指向的目录不存在,
42
+ 停止并提示用户重新运行 `svharnessbuild apply --force`。
43
+
44
+ 2. **加载强约束**:枚举并读取 `<harness_root>/agent-env/rules/*.mdc` 与
45
+ `<harness_root>/agent-env/rules/*.md`(`always_on` 必须全部遵守;
46
+ `model_decision` 按本次任务语义挑选)。规则冲突时以 `always_on` 为准。
47
+
48
+ 3. **扫描子能力清单**:枚举 `<harness_root>/agent-env/skills/*/SKILL.md`,
49
+ 提取 frontmatter 的 `name` + `description`,建立本次会话可用的
50
+ **子 skill 路由表**。不要整目录朗读内容,按需要再深读。
51
+
52
+ 4. **语义路由**:根据用户任务在路由表中选择最匹配的 1 ~ N 个子 skill。
53
+ 若无匹配,回到普通实现路径,但仍必须遵守步骤 2 的规则。
54
+
55
+ 5. **查阅基线与规格**(按需):
56
+ - `<harness_root>/assets/baseline/wiki/` —— 项目知识摘要,优先用于建立上下文
57
+ - `<harness_root>/assets/baseline/code/` —— 权威参考实现;禁止引用该目录外的路径作为"参考实现"
58
+ - `<harness_root>/specs/signals|ui|behavior|interfaces/` —— 若任务与信号/UI/行为/接口相关,必须先对齐 schema
59
+ - `<harness_root>/tasks/` —— 若存在匹配的任务模板,优先复用
60
+
61
+ 6. **执行与交付**:严格在 `target_project` 下写代码,引用 harness 文件时用
62
+ 相对路径(`harness_root_rel` + 子路径)。不得把 harness 内部文件复制到
63
+ 目标项目;harness 是只读的知识源。
64
+
65
+ 7. **记忆沉淀**:若本次产生了可复用经验,按 agent-env 的 memory 规范追加到
66
+ `<harness_root>/agent-env/memory/inbox/`(如果目录存在);不确定时停住询问。
67
+
68
+ ## 守则(不得违反)
69
+
70
+ - **不得绕过本 skill 内嵌的 `## 绑定元数据` 小节**去猜测 harness 路径;路径错误必须让用户重绑定。
71
+ - **不得修改 harness 目录下的文件**(rules / skills / specs / baseline / VERSION)。
72
+ harness 是知识源,演进由 `svharnessbuild` 和 harness 内部的 maintainer skill 负责。
73
+ - **不得把 harness 的 always_on rules 当成"建议"**;它们是硬约束。
74
+ - **不得引用 `assets/baseline/code/` 之外的源码**作为"参考实现"。
75
+ - **不得把本 skill 当作业务 skill**:它只做上下文装载 + 路由,业务实现由子 skill 或
76
+ agent 本体完成。
77
+ - 所有面向用户的说明使用**中文**;字段名、类名、路径保留英文。
78
+ - 多个子 skill 有冲突结论时,显式告知用户并请其裁决,不得自行二选一。
79
+
80
+ ## 典型触发例
81
+
82
+ - "应用 harness-apply-skills-main 完成无线充电开关功能开发"
83
+ - "基于 harness 新增设置项 Fragment"
84
+ - "按 harness 规范实现新信号 CMDID 0xA3"
85
+ - "apply harness 给我做一个埋点上报"
86
+
87
+ 以上触发均需先走算法 1~5,再进入业务实现。
88
+
89
+ ## 绑定元数据(权威来源,由 svharnessbuild apply 生成,请勿手工编辑)
90
+
91
+ {{BINDING_YAML_BLOCK}}
@@ -0,0 +1,35 @@
1
+ # harness-build-rule-agent-agnostic — harness 框架 agent-agnostic 铁律
2
+
3
+ harness 是 SDD-Driven Agent-Agnostic Coding Framework。spec 层与 task 层产物必须能被任意符合协议的 agent 消费,禁止硬编码具体 agent 标识。
4
+
5
+ ## 绝对禁止
6
+
7
+ - 在 `specs/**`、`tasks/**`、`agent-env/rules/**`、`agent-env/memory/categories/**` 的内容里出现以下任一:
8
+ - 具体 agent 名(如 `qoder`、`codechat`、`cursor`、`claude-code`、`claude`、`chatgpt`、`gpt-4` 等)。
9
+ - 某一 agent 的私有指令语法(如特定 slash command、特定 frontmatter 字段)。
10
+ - 某一 agent 的私有目录路径(`.qoder/`、`.codechat/`、`.cursor/`、`.claude/` 等)。
11
+
12
+ ## 允许出现 agent 标识的位置(白名单)
13
+
14
+ - `svharnessbuild` CLI 源码与模板(负责适配注入,天然需要区分)。
15
+ - `AGENTS.md` 中的"已知 agent 适配状态"段落(描述性说明,非约束性规则)。
16
+ - `.harness-build-state.yaml` 的 `agent` 字段(单一记录当前适配的 agent)。
17
+
18
+ ## 正反例
19
+
20
+ 正例(抽象):
21
+ > 在 skill 触发时,先读取 `harness.yaml` 再决定下一步动作。
22
+
23
+ 反例(agent 绑定):
24
+ > 在 Qoder 中使用 `/harness-build-skill-orchestrator` 触发本流程。
25
+
26
+ 正例(目录中性):
27
+ > 将构建辅助 skills 放在 agent 私有 skills 目录下。
28
+
29
+ 反例(目录硬编码):
30
+ > 将构建辅助 skills 放在 `.qoder/skills/` 下。
31
+
32
+ ## 违规处理
33
+
34
+ - P4_specs、P6_skills_tasks 阶段退出前必须 grep 上述黑名单关键词,命中即阶段 FAILED。
35
+ - 历史违规条目在 P-Final_seal 前必须清理或抽象化重写。
@@ -0,0 +1,49 @@
1
+ # harness-build-rule-chinese-only — 产出内容中文强制规则
2
+
3
+ 本规则约束 harness 构建过程中所有面向用户的产出内容必须使用中文。harness 面向中文开发团队,任何 Agent 生成的文档、说明、描述必须以中文为唯一自然语言。
4
+
5
+ ## 适用范围
6
+
7
+ 以下产出**必须**使用中文撰写:
8
+
9
+ - `assets/requirements/*.requirements.yaml` 中 `description`、`acceptance` 字段
10
+ - `specs/**/*.yaml` 中所有描述性字段(如 `description`、`note`、`summary`、`purpose`)
11
+ - `agent-env/rules/**/*.md` 或 `*.mdc` 中正文段落、正反例注释、检测说明
12
+ - `agent-env/skills/*/SKILL.md` 正文及 description
13
+ - `tasks/templates/**/*.md` 正文
14
+ - `assets/baseline/wiki/**/*.md` 正文段落
15
+ - `agent-env/memory/**/*.md` 正文
16
+ - `AGENTS.md`、`README.md`、`CHANGELOG.md` 正文
17
+ - `.harness-build-state.yaml` 中 `next_action` 字段
18
+ - Agent 向用户输出的所有状态卡片、提示、确认、错误信息
19
+
20
+ ## 保留英文的范围(不译)
21
+
22
+ 以下内容**保持英文不翻译**:
23
+
24
+ - 代码(函数名、变量名、类名、方法名、包名)
25
+ - 文件路径、目录名
26
+ - 字段名(YAML key、JSON key)
27
+ - 枚举值、CMD ID、信号名
28
+ - 技术术语的标准缩写(MVC、MVVM、UDF、Hilt、AIDL、API、SDK、NDK)
29
+ - git commit hash
30
+ - schema 中的 type/format/pattern 等元数据字段
31
+
32
+ ## 正反例
33
+
34
+ 正例:
35
+ > `description: "根据 P_TMRAVA 信号显示或隐藏预约充电设置入口"`
36
+
37
+ 反例(严禁):
38
+ > `description: "Show or hide the scheduled charging settings entry based on P_TMRAVA signal"`
39
+
40
+ 正例:
41
+ > `next_action: '请将原始需求文档放入 assets/raw/ 目录后,告诉 Agent 继续构建'`
42
+
43
+ 反例(严禁):
44
+ > `next_action: 'Say "begin harness build" in your AI agent session to invoke harness-build-skill-orchestrator.'`
45
+
46
+ ## 违规处理
47
+
48
+ - P-Final_seal 前必须全量扫描上述文件,发现非中文描述即标记阶段 FAILED。
49
+ - 历史违规条目必须在中文化后才能推进到下一阶段。
@@ -0,0 +1,31 @@
1
+ # harness-build-rule-memory-write — agent-env/memory 写入规范
2
+
3
+ 本规则约束 harness 内部 `agent-env/memory/` 的流转与写入。所有 agent 在 harness 构建过程中产生的可复用经验,必须按此规范写入。
4
+
5
+ ## 目录结构(固定)
6
+
7
+ ```
8
+ agent-env/memory/
9
+ inbox/ (临时登记区:待归档条目)
10
+ categories/ (正式分类区:按主题分目录)
11
+ <category-name>/
12
+ <entry-id>.md
13
+ ```
14
+
15
+ ## 写入流程
16
+
17
+ 1. **先落 inbox**:任何新经验先以 `inbox/<timestamp>-<slug>.md` 写入,不得直接写入 categories。
18
+ 2. **分类归档**:每次构建阶段退出前,由 orchestrator 或人工将 inbox 条目分类迁入 `categories/<cat>/`,删除 inbox 源文件。
19
+ 3. **条目结构**:每条 md 顶部必须含 `title`、`category`、`keywords`、`created_at` 元信息(yaml frontmatter)。
20
+ 4. **禁止覆盖**:同名条目已存在时,必须新增新 id 或人工决议合并;禁止静默覆盖历史。
21
+
22
+ ## Agent-agnostic 约束
23
+
24
+ - 条目正文中提到具体 agent 名时,必须同时列出至少两个不同 agent 的对应动作,否则视为硬编码违规。
25
+ - 记忆条目不得把某个 agent 的内部指令语法直接写入;必须抽象为通用行为描述。
26
+
27
+ ## 触发时机
28
+
29
+ - 阶段退出时自动扫描 inbox。
30
+ - 用户显式请求"记住...""别忘了..."时写入 inbox。
31
+ - `harness-build-skill-knowledge-builder` 提取 rules 时同步产生的经验写入 inbox。
@@ -0,0 +1,25 @@
1
+ # harness-build-rule-orchestrator-flow — harness 构建阶段流程红线
2
+
3
+ 本规则约束 `harness-build-skill-orchestrator` 驱动的构建阶段准入/退出条件。任何 skill 或人工操作都不得跳过、合并或逆序执行这些阶段。
4
+
5
+ ## 阶段顺序(不得重排)
6
+
7
+ 1. **P1_wiki** — 生成 `assets/baseline/wiki/` 与 `assets/baseline/code/SAMPLES.md`。**仅当项目有 baseline 时存在此阶段**;无 baseline 时跳过。退出:wiki 页面或任务清单可回溯到具体源码。Wiki 是项目经验底座,先于需求文档生成,为后续所有阶段提供架构知识参考。
8
+ 2. **P2_raw** — 原始需求文档入库 `assets/raw/`。准入:目录存在;退出:用户已放入至少 1 份原始文档(空目录或仅含 `.gitkeep` 不满足退出条件)。用户可参考 P1_wiki 中的架构知识来撰写更精准的需求。
9
+ 3. **P3_requirements** — 由 `harness-build-skill-spec-builder` 将 raw 条目化到 `assets/requirements/`。退出:每条需求有稳定 id 与归属域。
10
+ 4. **P4_specs** — 生成 `specs/{signals,ui,behavior,interfaces}/*.yaml`。退出:全部通过 `specs/*/schema.json` 校验。
11
+ 5. **P5_rules** — 汇总架构/领域规则到 `agent-env/rules/`。退出:每条规则含正反例各一。
12
+ 6. **P6_skills_tasks** — 产出 `agent-env/skills/` 与 `tasks/templates/`。退出:每 skill 有 SKILL.md,tasks 覆盖三类典型场景。
13
+ 7. **P7_memory** — 播种 `agent-env/memory/categories/` 初始分类。退出:inbox 流转规则已落地。
14
+ 8. **P-Final_seal** — 翻转 `specs.bootstrap_mode = false`,归档。
15
+
16
+ ## 硬约束
17
+
18
+ - `.harness-build-state.yaml` 只做最小字段补丁,禁止整文件重写。
19
+ - 遇到 `BLOCKED` 阶段必须显式报出阻塞原因,不得静默跳过。
20
+ - 阶段状态流转仅允许 `PENDING → IN_PROGRESS → DONE/FAILED/BLOCKED`。
21
+ - 任一阶段退出条件未满足,`current_phase` 不得推进。
22
+ - **P1_wiki 仅在项目有 baseline 时出现**;无 baseline 时该阶段不存在,不在 state 中写入,流程从 P2_raw 开始。
23
+ - **P2_raw 退出前必须确认 `assets/raw/` 中存在用户放入的真实文档**,Agent 不得自行生成占位文件。
24
+ - **任何涉及流程变更或内容修改的操作必须经用户表单确认**(见 `harness-build-rule-user-interaction`)。
25
+ - **所有面向用户的输出必须使用中文**(见 `harness-build-rule-chinese-only`)。
@@ -0,0 +1,35 @@
1
+ # harness-build-rule-skills-tasks-output — skills 与 tasks 产出规范
2
+
3
+ 本规则约束 P6_skills_tasks 阶段产出物的结构与命名。`harness-build-skill-knowledge-builder` 与人工协作时必须遵守。
4
+
5
+ ## skills 产出
6
+
7
+ ```
8
+ agent-env/skills/
9
+ <skill-name>/
10
+ SKILL.md
11
+ ```
12
+
13
+ - 每个 skill **必须**独占一个子目录,主文件**固定命名** `SKILL.md`(大写,不得用 `skill.md` 或 `<name>.md`)。
14
+ - `SKILL.md` 顶部 yaml frontmatter 必备字段:`name`、`description`。description 中需含中英触发关键词。
15
+ - skill 名使用 `kebab-case`,前缀体现领域(如 `dsv-signal-codegen`、`harness-build-skill-orchestrator`)。
16
+
17
+ ## tasks 产出
18
+
19
+ ```
20
+ tasks/templates/
21
+ <task-category>/
22
+ <task-name>.md
23
+ ```
24
+
25
+ 必须覆盖三类典型场景(缺一不可):
26
+
27
+ 1. **新增信号/接口/数据**类(由需求驱动的增量)。
28
+ 2. **重构/适配**类(由架构/多变体驱动的存量改造)。
29
+ 3. **测试/校验**类(由质量保障驱动)。
30
+
31
+ ## 禁止事项
32
+
33
+ - skill 与 task 文档中不得硬编码任何具体 agent 的私有指令格式(见 harness-build-rule-agent-agnostic.md)。
34
+ - skill 描述中不得出现"本 agent""本工具"一类自指代,必须写明能力本身。
35
+ - 产出物必须可被任意符合 SKILL.md 规范的 agent 消费。
@@ -0,0 +1,32 @@
1
+ # harness-build-rule-specs-schema — specs 层 schema 校验铁律
2
+
3
+ 本规则约束 harness `specs/` 层的结构与校验流程。任何 spec 产出、变更、审查都必须通过对应 `schema.json`。
4
+
5
+ ## 四域固定不变
6
+
7
+ ```
8
+ specs/
9
+ signals/ (+ schema.json)
10
+ ui/ (+ schema.json)
11
+ behavior/ (+ schema.json)
12
+ interfaces/ (+ schema.json)
13
+ ```
14
+
15
+ 域名、目录名、schema 文件名均为约定名称,禁止改名或增删。任何新需求必须归入这四域之一,无法归入即提醒用户重新审视需求颗粒度。
16
+
17
+ ## 写入前置
18
+
19
+ - 写入任一 `specs/<domain>/*.yaml` 前,必须先读 `specs/<domain>/schema.json`。
20
+ - 字段增减/重命名时,`schema.json` 与对应 yaml 必须**同一提交**更新,不得分两步。
21
+ - yaml 中不得出现任何具体 agent 名(qoder/codechat/cursor/claude-code 等)— 违反 agent-agnostic 铁律。
22
+
23
+ ## 校验节点
24
+
25
+ - P3_specs 退出前:所有 yaml 逐一过 schema 校验,失败则阶段状态置 FAILED。
26
+ - 后续阶段读取 specs 时不做 schema 校验(已由 P3 把关),但仍不得修改已冻结字段。
27
+
28
+ ## 正反例
29
+
30
+ 正例:为 signals 新增一条物理信号前,先扩展 `signals/schema.json.properties`,再写 `signals/hvac.yaml`。
31
+
32
+ 反例(严禁):直接在 yaml 里新增一个未在 schema 中声明的自由字段 `agent_hint`。
@@ -0,0 +1,63 @@
1
+ # harness-build-rule-user-interaction — 用户交互铁律
2
+
3
+ 本规则约束 harness 构建过程中 Agent 与用户的交互方式。Agent 是**辅助角色**,不得替代用户做决策,不得未经确认擅自推进流程或修改内容。
4
+
5
+ ## 红线一:P2_raw 必须等待用户放入需求文档
6
+
7
+ - **P2_raw** 阶段退出条件:`assets/raw/` 目录中**必须存在用户主动放入的至少 1 份需求文档**。
8
+ - Agent **严禁**在 `assets/raw/` 为空或仅含 `.gitkeep` 时自动生成占位文档、虚拟需求或模板填充内容。
9
+ - Agent **严禁**跳过 P2_raw 直接进入 P3_requirements。若用户未提供原始文档,Agent 必须:
10
+ 1. 以表单方式提示用户:"请将原始需求文档(如 xlsx、pdf、md、txt)放入 `assets/raw/` 目录"
11
+ 2. 等待用户确认已完成文件放入后,再校验目录内容并推进阶段状态
12
+
13
+ ## 红线二:必须以表单方式与用户交互
14
+
15
+ 当 Agent 需要与用户交流信息或等待用户确认时,**必须**使用表单确认机制(如 `ask_user_question` 工具或等价的交互式表单),**禁止**仅以纯文本方式输出提示后自行继续。
16
+
17
+ 适用场景(不限于):
18
+ - 阶段准入确认:"是否继续进入 P3_requirements 阶段?"
19
+ - 文档缺失提示:"assets/raw/ 中未发现需求文档,请放入后确认"
20
+ - 阶段产出审查:"P4_specs 已生成 4 个模块的 YAML,是否通过校验?"
21
+ - 关键决策点:"是否要调整 schema?/ 是否跳过该需求?"
22
+ - 流程变更征询:"是否要将该规则纳入 P5_rules?"
23
+
24
+ **禁止的做法**:
25
+ - 在终端输出一段文字后直接继续执行下一阶段
26
+ - 假设用户"默认同意"而跳过确认
27
+ - 用纯文本输出"请确认(y/n)"然后自行判定为 y
28
+
29
+ ## 红线三:禁止未经用户同意修改 harness 构建流程或内容
30
+
31
+ Agent **不得**在以下行为上自行决定,**必须**先征求用户同意:
32
+
33
+ - 修改 `.harness-build-state.yaml` 中 `current_phase` 的跳转方向(如跳过某阶段)
34
+ - 修改 `harness.yaml` 中的 `specs.layers` 配置(增删层、改 schema 路径)
35
+ - 修改任何 `specs/*/schema.json`(字段增删、类型变更)
36
+ - 修改 `AGENTS.md` 中的构建流程步骤
37
+ - 新增、删除或重命名 `agent-env/rules/` 下的规则文件
38
+ - 调整阶段退出条件(如降低校验标准以通过某个阶段)
39
+
40
+ **允许的自主行为**(无需额外确认):
41
+ - 按 `harness-build-rule-orchestrator-flow` 规则正常推进阶段状态
42
+ - 在 specs 目录下生成符合 schema 的 YAML 文件
43
+ - 按 `harness-build-rule-memory-write` 规范写入 memory
44
+ - 最小补丁式更新 `.harness-build-state.yaml` 的 `status`/`completed_at`/`updated_at`
45
+
46
+ ## 正反例
47
+
48
+ 正例(等待用户放入文档):
49
+ > Agent 检测到 `assets/raw/` 为空,输出表单提示用户放入文档,暂停等待。
50
+
51
+ 反例(擅自生成):
52
+ > Agent 发现 `assets/raw/` 为空,自行生成 `placeholder-requirements.md` 填入后标记 P2_raw 为 DONE。
53
+
54
+ 正例(表单确认):
55
+ > Agent 完成 P4_specs 后,使用 `ask_user_question` 呈现校验结果,等待用户确认通过。
56
+
57
+ 反例(纯文本跳过):
58
+ > Agent 输出"P4_specs 已完成"后直接将阶段标记为 DONE 并推进到下一阶段。
59
+
60
+ ## 违规处理
61
+
62
+ - 任何违反上述红线的 Agent 行为,用户可随时回退该阶段状态为 FAILED。
63
+ - P-Final_seal 阶段需审查是否有过未经确认的流程修改。
@@ -0,0 +1,120 @@
1
+ ---
2
+ name: harness-build-skill-knowledge-builder
3
+ description: >
4
+ 构建 harness 的知识层(不含 wiki 正文):baseline/code 样本快照、规则正反例、
5
+ skills 与 tasks 索引。当用户说"参考代码快照"、"提取规则"、"构建 skills"、
6
+ "snapshot baseline code"、"build rules",或由 harness-build-skill-orchestrator 在阶段
7
+ P5_rules / P6_skills_tasks 委派,以及 P1_wiki 下的"样本代码挑选"子任务
8
+ 委派时触发。baseline wiki 正文撰写由独立 skill harness-build-skill-wiki-writer 负责,本 skill 不承担。
9
+ ---
10
+
11
+ # harness-build-skill-knowledge-builder(知识层构建器)
12
+
13
+ 你负责构建 harness 中**可复用的知识层**(不含 wiki 正文)——那些 specs 无法表达、但未来 task 执行时
14
+ 仍需依赖的内容:基线代码样本、编码规则、skills 与 tasks 索引。
15
+
16
+ > 职责边界:**baseline wiki 正文的逐页撰写不在本 skill 范围内**,由 harness-build-skill-wiki-writer 专职完成。
17
+ > 本 skill 只对 `assets/baseline/code/` 做"代表样本挑选"(如需要)。
18
+
19
+ ## 输入
20
+
21
+ - `__HARNESS_ROOT__specs/**` —— 必须已构建(依赖 P3 为 DONE)
22
+ - `__HARNESS_ROOT__assets/requirements/**` —— 用于将规则回溯到需求
23
+ - `__HARNESS_ROOT__assets/baseline/code/` —— CLI 的 `--baseline` 已完成全量拷贝
24
+ - `__HARNESS_ROOT__harness.yaml` —— 确认哪些知识通道当前激活
25
+
26
+ ## 本 skill 负责的阶段
27
+
28
+ ### P1 —— baseline/code(参考代码样本,可选子任务)
29
+
30
+ 目标:在 `__HARNESS_ROOT__assets/baseline/code/` 已有全量快照的基础上,**可选地**挑出"代表性样本清单"供 P5/P6 参考。
31
+
32
+ > 说明:CLI 的 `--baseline` 已将基线源码全量拷贝到 `__HARNESS_ROOT__assets/baseline/code/`;本步骤不拷贝任何文件,
33
+ > 只是在有必要时产出一份 `__HARNESS_ROOT__assets/baseline/code/SAMPLES.md` 罗列约 20 个典型样本,便于规则抽取回溯。
34
+ > 如果不需要可直接跳过。
35
+
36
+ 选型策略(硬上限:约 20 个文件):
37
+ - 每种原型挑选 1 个代表文件,而非把整个原型全部列出。
38
+ - 优先选:1 个 Controller / 1 个 Model / 1 个 Parser / 1 个 Sender / 1 个 ViewCallback /
39
+ 1 个 Activity / 1 个 Fragment / 1 个 Adapter / 1 段 build.gradle / 1 个 AIDL。
40
+ - 用相对 `__HARNESS_ROOT__assets/baseline/code/` 的路径引用,不再另外拷贝文件。
41
+
42
+ 禁止:
43
+ - **不得**重新拷贝或删除 `__HARNESS_ROOT__assets/baseline/code/` 下的任何文件。
44
+ - **不得**在本步骤内写 wiki 正文——交给 harness-build-skill-wiki-writer。
45
+
46
+ ### P5 —— 规则(正反例)
47
+
48
+ 目标:在 `__HARNESS_ROOT__agent-env/rules/` 下,为每个规则主题产出一份 markdown,将项目的硬性约束编码化。
49
+
50
+ 每个规则文件结构:
51
+
52
+ ```markdown
53
+ # <规则标题>
54
+
55
+ ## 是什么
56
+
57
+ 一段话陈述该不变式。
58
+
59
+ ## 正例
60
+
61
+ <从 __HARNESS_ROOT__assets/baseline/code/ 取出或最小改写的代码块>
62
+
63
+ ## 反例
64
+
65
+ <展示反模式的最小代码块,附注释说明为什么错>
66
+
67
+ ## 如何检测
68
+
69
+ 评审者或 Agent 如何识别违规。
70
+ ```
71
+
72
+ 种子规则(按项目实际调整):
73
+ - MVC 分层(UI 仅依赖 Controller)
74
+ - Controller 单例双重检查锁
75
+ - Parser 隔离(UI 中禁止解析 byte[])
76
+ - Listener 作为成员变量(禁止 lambda 传入 `setDataChangeListener`)
77
+ - 信号流向(车→机 / 机→车 不得绕过)
78
+
79
+ ### P6 —— skills & tasks 索引
80
+
81
+ 目标:填充 `__HARNESS_ROOT__agent-env/skills/` 与 `__HARNESS_ROOT__tasks/templates/`,放入**构建期沉淀**下来的 **运行期 skill**
82
+ (区别于 Agent IDE 中的 build-skill)。
83
+
84
+ 1. 将 P1–P5 中识别到的"反复出现的 Agent 操作"抽成 skill,放在
85
+ `__HARNESS_ROOT__agent-env/skills/<skill>/SKILL.md`,带 YAML frontmatter。
86
+ 2. 将离散的开发者工作流抽成 task 模板,放在 `__HARNESS_ROOT__tasks/templates/<task>/TASK.md`,含 inputs / steps / acceptance。
87
+ 3. Skill 与 task **应通过路径引用 specs 与规则**,不要内联其内容。
88
+
89
+ ## 状态更新
90
+
91
+ 每完成一个子阶段:
92
+ - 更新 `__HARNESS_ROOT__.harness-build-state.yaml`(P5 / P6 的 `status`;P1 的"样本清单"子任务若产出,一并记录)。
93
+ - 记录计数:`baseline_code_samples` / `rules_count` / `skills_count` / `tasks_count`。
94
+ - 刷新 `updated_at`。
95
+
96
+ ## 守则(不得违反)
97
+
98
+ - **不得撰写或编辑 baseline wiki 正文**(交给 harness-build-skill-wiki-writer)。
99
+ - **不得凭空编造架构**:所有结论必须落地到源码或 specs。无法追溯的推断一律舍弃。
100
+ - **规则必须同时有正例与反例**,否则规则文件视为不合格。
101
+ - **不得从本 skill 内编辑 specs 或 schema**。若规则与 specs 冲突,立即停止并上报 orchestrator。
102
+ - 所有对用户的说明使用中文;路径、字段名、类名保留英文。
103
+ - **必须以表单方式**与用户交互确认,禁止仅以纯文本输出后自行继续。
104
+ - **所有描述性字段必须使用中文**(见 `harness-build-rule-chinese-only`)。
105
+
106
+ ## 必须遵守的构建规则(位于 Agent rules 目录)
107
+
108
+ 本 skill 执行前必须加载并严格遵循(文件位于当前 agent 的 rules 目录,具体路径/扩展名
109
+ 随 agent 可能为 `.md` 或 `.mdc`):
110
+
111
+ - `harness-build-rule-orchestrator-flow` — 本 skill 服务 P1(样本)/P5/P6,禁止跨阶段跳步或合并。
112
+ - `harness-build-rule-skills-tasks-output` — P6 产物必须符合 skills/tasks 目录与命名规范。
113
+ - `harness-build-rule-memory-write` — 构建过程中的可复用经验按 inbox → categories 规范写入。
114
+ - `harness-build-rule-agent-agnostic` — 所有 baseline/rules/skills 产物严禁硬编码具体 agent 名。
115
+ - `harness-build-rule-specs-schema` — 引用 specs 时按四域路径,不得绕过 schema。
116
+ - `harness-build-rule-chinese-only` — 所有产出内容必须使用中文。
117
+ - `harness-build-rule-user-interaction` — 用户交互铁律:表单确认、禁止擅自修改。
118
+
119
+ 若规则文件缺失,停止工作并提示用户重新运行 `svharnessbuild init`。
120
+
@@ -0,0 +1,87 @@
1
+ ---
2
+ name: harness-build-skill-orchestrator
3
+ description: >
4
+ Harness 构建总调度。读取 __HARNESS_ROOT__.harness-build-state.yaml,报告当前阶段,路由到合适的下游 skill,
5
+ 并在每步完成后更新阶段状态。当用户说"开始构建 harness"、"继续构建 harness"、"harness 进度"、
6
+ "下一步干什么"、"begin harness build"、"continue harness build" 等时触发。
7
+ ---
8
+
9
+ # harness-build-skill-orchestrator(构建总调度)
10
+
11
+ 你是本 SDD harness 的构建总指挥。你的职责只有四件事:**读取状态 → 报告现状 → 路由到对应 skill → 更新状态**。
12
+
13
+ ## 输入
14
+
15
+ - `__HARNESS_ROOT__.harness-build-state.yaml`(状态机,权威进度来源)
16
+ - `__HARNESS_ROOT__harness.yaml`(清单:路径、版本、层配置)
17
+ - `__HARNESS_ROOT__AGENTS.md`(Agent 协作协议参考)
18
+
19
+ ## 算法
20
+
21
+ 1. 读取 `__HARNESS_ROOT__.harness-build-state.yaml`。若文件不存在,打印错误并提示用户先运行 `svharnessbuild init`。
22
+ 2. 识别 `current_phase` 及其 `status`。
23
+ 3. 对当前阶段,以"状态卡片"形式输出:
24
+ - 阶段 id + 一句话说明
25
+ - 预期产物(哪些目录下的哪些文件)
26
+ - 是否需要人工(`manual_required: true`)或需要 Agent 工作(`requires_agent: true`)
27
+ - 推荐下一步调用哪个 skill
28
+ 4. **必须以表单确认方式**询问用户是否继续,未经用户确认不得自行推进:
29
+ - **P1_wiki** — 读取 state 中该 phase 的语义字段决定行为:
30
+ - phase **不存在** → 跳过(本项目无 baseline,直接推进到 P2_raw)。
31
+ - `status: DONE`, `mode: full` → wiki 已完整,orchestrator 不再委派;如需修订委派给 `harness-build-skill-wiki-writer`。
32
+ - `status: PENDING`, `mode: outline-only` → 读 `tasks_file`(默认 `__HARNESS_ROOT__assets/baseline/wiki/TASKS.md`),
33
+ 委派给 `harness-build-skill-wiki-writer` 逐页撰写正文;全部 `[x]` 后由 orchestrator 标记 `DONE`。
34
+ - `source: cli-tasks` —— 用户选择默认 tasks-only 模式。
35
+ - `source: cli-full-degraded` —— CLI 完整生成失败后降级,页面可能已有部分草稿,优先续写。
36
+ - 可选子任务:若需要"代表样本清单"(`__HARNESS_ROOT__assets/baseline/code/SAMPLES.md`),委派给 `harness-build-skill-knowledge-builder`。
37
+ - **P2_raw** — 以表单提示用户把原始需求文档放入 `__HARNESS_ROOT__assets/raw/`。**校验目录非空且不含仅 `.gitkeep`** 后,以表单确认并标记 DONE。**严禁在目录为空时自动生成占位文档**。用户可参考 P1_wiki 中的架构知识来撰写更精准的需求。
38
+ - **P3_requirements** — 委派给 `harness-build-skill-spec-builder`(需求条目化提取到 `__HARNESS_ROOT__assets/requirements/`)。
39
+ - **P4_specs** — 委派给 `harness-build-skill-spec-builder`(生成受 schema 校验的 YAML)。
40
+ - **P5_rules** — 以表单请用户补充 `__HARNESS_ROOT__agent-env/rules/` 的正反例;Agent 可起草骨架(委派给 `harness-build-skill-knowledge-builder`)。
41
+ - **P6_skills_tasks** — 委派给 `harness-build-skill-knowledge-builder`(`__HARNESS_ROOT__agent-env/skills/` + `__HARNESS_ROOT__tasks/templates/`)。
42
+ - **P7_memory** — 以表单请用户播种 `__HARNESS_ROOT__agent-env/memory/categories/` 初始分类;Agent 可建议草稿。
43
+ - **P-Final_seal** — 提醒用户运行 `svharnessbuild seal`(后续版本提供),并将 `specs.bootstrap_mode` 翻转为 false。
44
+ 5. 每次完成后,**最小增量补丁**更新 `__HARNESS_ROOT__.harness-build-state.yaml`:
45
+ - 已完成阶段标记 `status: DONE`,填写 `completed_at`
46
+ - 将 `current_phase` 推进到下一个 PENDING 阶段
47
+ - 用一句具体可执行的建议更新 `next_action`
48
+ - 顶层 `updated_at` 刷新为当前 ISO8601 时间
49
+
50
+ ## 输出格式
51
+
52
+ 每次响应必须以状态卡片开头:
53
+
54
+ ```
55
+ 阶段: P3_specs (IN_PROGRESS)
56
+ 需要: agent
57
+ 已完成: signals (4 个模块), ui (4 个模块)
58
+ 待处理: behavior, interfaces, 校验
59
+ 下一步: harness-build-skill-spec-builder(behavior 模块)
60
+ ```
61
+
62
+ 随后**必须以表单方式**(如 `ask_user_question`)询问:"是否继续?" —— 不得仅以纯文本输出后自行继续。
63
+
64
+ ## 守则(不得违反)
65
+
66
+ - **绝不跳过阶段**。遇到 `BLOCKED` 阶段,必须显式报出阻塞原因。
67
+ - **绝不未经确认删除文件**。
68
+ - **绝不整文件重写** `__HARNESS_ROOT__.harness-build-state.yaml`,只做最小字段补丁。
69
+ - **绝不未经用户表单确认就修改构建流程或内容**(见 `harness-build-rule-user-interaction`)。
70
+ - 若状态文件 YAML 解析失败,立即停止并请求人工修复。
71
+ - 所有面向用户的输出使用中文;字段名、路径、CMD ID 等保留英文不译。
72
+
73
+ ## 必须遵守的构建规则(位于 Agent rules 目录)
74
+
75
+ 执行任何阶段前,先加载并严格遵循以下规则(文件位于当前 agent 的 rules 目录,
76
+ 如 `.qoder/rules/`、`.codechat/rules/`、`.cursor/rules/harness-build/`、
77
+ `.claude/rules/`、`.harness/rules/`,具体扩展名随 agent 可能为 `.md` 或 `.mdc`):
78
+
79
+ - `harness-build-rule-orchestrator-flow` — 构建阶段准入/退出红线,任何调度决策都必须匹配。
80
+ - `harness-build-rule-specs-schema` — P4 阶段生成的 YAML 必须通过对应 schema.json。
81
+ - `harness-build-rule-memory-write` — 若本阶段有可复用经验,按 inbox → categories 流转写入。
82
+ - `harness-build-rule-skills-tasks-output` — 委派 P6 时,产物结构/命名必须符合该规则。
83
+ - `harness-build-rule-agent-agnostic` — 产出文本中严禁出现任何具体 agent 名或其私有指令语法。
84
+ - `harness-build-rule-chinese-only` — 所有面向用户的产出内容必须使用中文。
85
+ - `harness-build-rule-user-interaction` — 用户交互铁律:等待 raw、表单确认、禁止擅自修改。
86
+
87
+ 若上述规则文件缺失,先提醒用户重新运行 `svharnessbuild init` 恢复规则注入,再继续工作。