@dommaker/harness 1.9.0 → 1.11.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 (285) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +9 -12
  3. package/dist/cli/commands/check.d.ts +3 -3
  4. package/dist/cli/commands/check.d.ts.map +1 -1
  5. package/dist/cli/commands/check.js +41 -78
  6. package/dist/cli/commands/check.js.map +1 -1
  7. package/dist/cli/commands/constraints-report.d.ts +2 -10
  8. package/dist/cli/commands/constraints-report.d.ts.map +1 -1
  9. package/dist/cli/commands/constraints-report.js +4 -57
  10. package/dist/cli/commands/constraints-report.js.map +1 -1
  11. package/dist/cli/commands/constraints-retire.d.ts +9 -23
  12. package/dist/cli/commands/constraints-retire.d.ts.map +1 -1
  13. package/dist/cli/commands/constraints-retire.js +39 -121
  14. package/dist/cli/commands/constraints-retire.js.map +1 -1
  15. package/dist/cli/commands/constraints.d.ts +3 -8
  16. package/dist/cli/commands/constraints.d.ts.map +1 -1
  17. package/dist/cli/commands/constraints.js +8 -23
  18. package/dist/cli/commands/constraints.js.map +1 -1
  19. package/dist/cli/commands/definitions.d.ts.map +1 -1
  20. package/dist/cli/commands/definitions.js +7 -12
  21. package/dist/cli/commands/definitions.js.map +1 -1
  22. package/dist/cli/commands/init.d.ts +0 -32
  23. package/dist/cli/commands/init.d.ts.map +1 -1
  24. package/dist/cli/commands/init.js +7 -149
  25. package/dist/cli/commands/init.js.map +1 -1
  26. package/dist/cli/commands/report.d.ts.map +1 -1
  27. package/dist/cli/commands/report.js +14 -17
  28. package/dist/cli/commands/report.js.map +1 -1
  29. package/dist/cli/commands/scaffold-templates.d.ts +1 -3
  30. package/dist/cli/commands/scaffold-templates.d.ts.map +1 -1
  31. package/dist/cli/commands/scaffold-templates.js +2 -53
  32. package/dist/cli/commands/scaffold-templates.js.map +1 -1
  33. package/dist/cli/commands/scaffold.d.ts +0 -2
  34. package/dist/cli/commands/scaffold.d.ts.map +1 -1
  35. package/dist/cli/commands/scaffold.js +0 -10
  36. package/dist/cli/commands/scaffold.js.map +1 -1
  37. package/dist/cli/commands/status.js +10 -10
  38. package/dist/cli/commands/status.js.map +1 -1
  39. package/dist/cli/commands/sync-docs/agents-syncer.d.ts +0 -2
  40. package/dist/cli/commands/sync-docs/agents-syncer.d.ts.map +1 -1
  41. package/dist/cli/commands/sync-docs/agents-syncer.js +4 -23
  42. package/dist/cli/commands/sync-docs/agents-syncer.js.map +1 -1
  43. package/dist/core/constraints/capabilities-parser.d.ts.map +1 -1
  44. package/dist/core/constraints/capabilities-parser.js +16 -4
  45. package/dist/core/constraints/capabilities-parser.js.map +1 -1
  46. package/dist/core/constraints/checker.d.ts +15 -24
  47. package/dist/core/constraints/checker.d.ts.map +1 -1
  48. package/dist/core/constraints/checker.js +33 -72
  49. package/dist/core/constraints/checker.js.map +1 -1
  50. package/dist/core/constraints/checkers/docs-freshness.js +1 -1
  51. package/dist/core/constraints/checkers/docs-freshness.js.map +1 -1
  52. package/dist/core/constraints/checkers/governance-presence.d.ts +2 -1
  53. package/dist/core/constraints/checkers/governance-presence.d.ts.map +1 -1
  54. package/dist/core/constraints/checkers/governance-presence.js +4 -3
  55. package/dist/core/constraints/checkers/governance-presence.js.map +1 -1
  56. package/dist/core/constraints/checkers/index.d.ts +1 -1
  57. package/dist/core/constraints/checkers/index.d.ts.map +1 -1
  58. package/dist/core/constraints/checkers/index.js +4 -8
  59. package/dist/core/constraints/checkers/index.js.map +1 -1
  60. package/dist/core/constraints/checkers/iron-flags.d.ts +3 -4
  61. package/dist/core/constraints/checkers/iron-flags.d.ts.map +1 -1
  62. package/dist/core/constraints/checkers/iron-flags.js +4 -5
  63. package/dist/core/constraints/checkers/iron-flags.js.map +1 -1
  64. package/dist/core/constraints/checkers/no-test-simplification.js +1 -1
  65. package/dist/core/constraints/checkers/no-test-simplification.js.map +1 -1
  66. package/dist/core/constraints/checkers/types.d.ts +1 -1
  67. package/dist/core/constraints/checkers/types.js +1 -1
  68. package/dist/core/constraints/definitions/guidelines.d.ts +4 -4
  69. package/dist/core/constraints/definitions/guidelines.d.ts.map +1 -1
  70. package/dist/core/constraints/definitions/guidelines.js +9 -25
  71. package/dist/core/constraints/definitions/guidelines.js.map +1 -1
  72. package/dist/core/constraints/definitions/iron-laws.d.ts +4 -4
  73. package/dist/core/constraints/definitions/iron-laws.d.ts.map +1 -1
  74. package/dist/core/constraints/definitions/iron-laws.js +10 -81
  75. package/dist/core/constraints/definitions/iron-laws.js.map +1 -1
  76. package/dist/core/constraints/definitions.d.ts +7 -9
  77. package/dist/core/constraints/definitions.d.ts.map +1 -1
  78. package/dist/core/constraints/definitions.js +13 -16
  79. package/dist/core/constraints/definitions.js.map +1 -1
  80. package/dist/core/constraints/index.d.ts +2 -5
  81. package/dist/core/constraints/index.d.ts.map +1 -1
  82. package/dist/core/constraints/index.js +3 -13
  83. package/dist/core/constraints/index.js.map +1 -1
  84. package/dist/core/constraints/injection-writer.d.ts +10 -38
  85. package/dist/core/constraints/injection-writer.d.ts.map +1 -1
  86. package/dist/core/constraints/injection-writer.js +17 -54
  87. package/dist/core/constraints/injection-writer.js.map +1 -1
  88. package/dist/core/constraints/run-env.d.ts +1 -10
  89. package/dist/core/constraints/run-env.d.ts.map +1 -1
  90. package/dist/core/constraints/run-env.js +1 -22
  91. package/dist/core/constraints/run-env.js.map +1 -1
  92. package/dist/core/constraints/usage-report.d.ts +6 -8
  93. package/dist/core/constraints/usage-report.d.ts.map +1 -1
  94. package/dist/core/constraints/usage-report.js +6 -11
  95. package/dist/core/constraints/usage-report.js.map +1 -1
  96. package/dist/core/effective-constraints.d.ts +12 -22
  97. package/dist/core/effective-constraints.d.ts.map +1 -1
  98. package/dist/core/effective-constraints.js +13 -30
  99. package/dist/core/effective-constraints.js.map +1 -1
  100. package/dist/core/index.d.ts +2 -2
  101. package/dist/core/index.d.ts.map +1 -1
  102. package/dist/core/index.js +3 -9
  103. package/dist/core/index.js.map +1 -1
  104. package/dist/core/project-config-loader.d.ts +4 -42
  105. package/dist/core/project-config-loader.d.ts.map +1 -1
  106. package/dist/core/project-config-loader.js +16 -125
  107. package/dist/core/project-config-loader.js.map +1 -1
  108. package/dist/core/validators/passes-gate.d.ts +2 -2
  109. package/dist/core/validators/passes-gate.js +6 -6
  110. package/dist/core/validators/passes-gate.js.map +1 -1
  111. package/dist/index.d.ts +9 -10
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +21 -18
  114. package/dist/index.js.map +1 -1
  115. package/dist/knowledge/lint.d.ts +17 -0
  116. package/dist/knowledge/lint.d.ts.map +1 -1
  117. package/dist/knowledge/lint.js +52 -0
  118. package/dist/knowledge/lint.js.map +1 -1
  119. package/dist/knowledge/store.d.ts +7 -0
  120. package/dist/knowledge/store.d.ts.map +1 -1
  121. package/dist/knowledge/store.js +48 -13
  122. package/dist/knowledge/store.js.map +1 -1
  123. package/dist/knowledge/types.d.ts +5 -1
  124. package/dist/knowledge/types.d.ts.map +1 -1
  125. package/dist/knowledge/types.js +5 -1
  126. package/dist/knowledge/types.js.map +1 -1
  127. package/dist/monitoring/trace-analyzer.d.ts.map +1 -1
  128. package/dist/monitoring/trace-analyzer.js +11 -12
  129. package/dist/monitoring/trace-analyzer.js.map +1 -1
  130. package/dist/monitoring/traces.d.ts +4 -4
  131. package/dist/monitoring/traces.d.ts.map +1 -1
  132. package/dist/monitoring/traces.js +8 -8
  133. package/dist/monitoring/traces.js.map +1 -1
  134. package/dist/presets/standard.d.ts +8 -10
  135. package/dist/presets/standard.d.ts.map +1 -1
  136. package/dist/presets/standard.js +10 -16
  137. package/dist/presets/standard.js.map +1 -1
  138. package/dist/types/constraint.d.ts +24 -35
  139. package/dist/types/constraint.d.ts.map +1 -1
  140. package/dist/types/constraint.js +8 -7
  141. package/dist/types/constraint.js.map +1 -1
  142. package/dist/types/passes-gate.d.ts +5 -5
  143. package/dist/types/passes-gate.d.ts.map +1 -1
  144. package/dist/types/project-config.d.ts +8 -66
  145. package/dist/types/project-config.d.ts.map +1 -1
  146. package/dist/types/project-config.js +3 -2
  147. package/dist/types/project-config.js.map +1 -1
  148. package/dist/types/trace.d.ts +8 -10
  149. package/dist/types/trace.d.ts.map +1 -1
  150. package/package.json +2 -2
  151. package/src/CONTEXT.md +2 -2
  152. package/src/__tests__/checker-extra.test.ts +37 -61
  153. package/src/__tests__/checker.test.ts +10 -115
  154. package/src/__tests__/effective-constraints.test.ts +18 -83
  155. package/src/__tests__/iron-laws.test.ts +71 -90
  156. package/src/__tests__/passes-gate-check.test.ts +2 -2
  157. package/src/__tests__/project-config-loader-extra.test.ts +22 -123
  158. package/src/__tests__/project-config-loader.test.ts +5 -33
  159. package/src/__tests__/public-exports.test.ts +8 -7
  160. package/src/__tests__/public-type-surface.test.ts +7 -5
  161. package/src/__tests__/public-value-surface.test.ts +1 -7
  162. package/src/__tests__/skip-semantics.test.ts +21 -37
  163. package/src/__tests__/trace-analyzer-extra.test.ts +14 -14
  164. package/src/__tests__/trace-analyzer.test.ts +21 -21
  165. package/src/__tests__/trace-collector.test.ts +22 -22
  166. package/src/__tests__/traces.test.ts +27 -28
  167. package/src/__tests__/usage-report-public-export.test.ts +21 -0
  168. package/src/cli/commands/CONTEXT.md +12 -12
  169. package/src/cli/commands/__tests__/check-read-count.test.ts +4 -15
  170. package/src/cli/commands/__tests__/check-skip-output.test.ts +14 -14
  171. package/src/cli/commands/__tests__/check.test.ts +14 -31
  172. package/src/cli/commands/__tests__/constraints-report-json-flag.test.ts +101 -0
  173. package/src/cli/commands/__tests__/constraints-report.test.ts +12 -80
  174. package/src/cli/commands/__tests__/constraints-retire.test.ts +42 -231
  175. package/src/cli/commands/__tests__/init-governance-io.test.ts +12 -58
  176. package/src/cli/commands/__tests__/init-ondisk.test.ts +13 -21
  177. package/src/cli/commands/__tests__/init.test.ts +1 -16
  178. package/src/cli/commands/__tests__/numeric-flag-assembly.test.ts +1 -1
  179. package/src/cli/commands/__tests__/passes-gate-dead-options.test.ts +1 -1
  180. package/src/cli/commands/__tests__/project-path-anchoring.test.ts +2 -2
  181. package/src/cli/commands/__tests__/registry.test.ts +1 -1
  182. package/src/cli/commands/__tests__/report-extra.test.ts +4 -4
  183. package/src/cli/commands/__tests__/report.test.ts +1 -1
  184. package/src/cli/commands/__tests__/scaffold.test.ts +4 -14
  185. package/src/cli/commands/__tests__/status-analysis-wiring.test.ts +3 -3
  186. package/src/cli/commands/__tests__/status-extra.test.ts +14 -14
  187. package/src/cli/commands/__tests__/status.test.ts +12 -12
  188. package/src/cli/commands/__tests__/sync-docs-agents.test.ts +1 -1
  189. package/src/cli/commands/check.ts +43 -82
  190. package/src/cli/commands/constraints-report.ts +4 -59
  191. package/src/cli/commands/constraints-retire.ts +49 -154
  192. package/src/cli/commands/constraints.ts +11 -26
  193. package/src/cli/commands/definitions.ts +7 -12
  194. package/src/cli/commands/init.ts +8 -179
  195. package/src/cli/commands/report.ts +19 -23
  196. package/src/cli/commands/scaffold-templates.ts +1 -53
  197. package/src/cli/commands/scaffold.ts +0 -11
  198. package/src/cli/commands/status.ts +10 -10
  199. package/src/cli/commands/sync-docs/agents-syncer.ts +4 -25
  200. package/src/core/CONTEXT.md +9 -9
  201. package/src/core/constraints/__tests__/capability-counts.test.ts +5 -5
  202. package/src/core/constraints/__tests__/collect-constraints.test.ts +13 -8
  203. package/src/core/constraints/__tests__/git-evidence.test.ts +4 -7
  204. package/src/core/constraints/__tests__/injection-writer.test.ts +8 -61
  205. package/src/core/constraints/__tests__/run-env.test.ts +5 -34
  206. package/src/core/constraints/__tests__/trace-injection.test.ts +1 -1
  207. package/src/core/constraints/capabilities-parser.ts +17 -5
  208. package/src/core/constraints/checker.ts +39 -88
  209. package/src/core/constraints/checkers/__tests__/check-outcome.test.ts +5 -8
  210. package/src/core/constraints/checkers/__tests__/governance-presence.test.ts +1 -53
  211. package/src/core/constraints/checkers/__tests__/iron-flags.test.ts +5 -25
  212. package/src/core/constraints/checkers/docs-freshness.ts +1 -1
  213. package/src/core/constraints/checkers/governance-presence.ts +4 -3
  214. package/src/core/constraints/checkers/index.ts +4 -10
  215. package/src/core/constraints/checkers/iron-flags.ts +3 -12
  216. package/src/core/constraints/checkers/no-test-simplification.ts +1 -1
  217. package/src/core/constraints/checkers/types.ts +1 -1
  218. package/src/core/constraints/definitions/guidelines.ts +8 -25
  219. package/src/core/constraints/definitions/iron-laws.ts +9 -82
  220. package/src/core/constraints/definitions.ts +14 -15
  221. package/src/core/constraints/index.ts +4 -19
  222. package/src/core/constraints/injection-writer.ts +16 -61
  223. package/src/core/constraints/run-env.ts +1 -33
  224. package/src/core/constraints/usage-report.ts +9 -16
  225. package/src/core/effective-constraints.ts +14 -45
  226. package/src/core/index.ts +3 -10
  227. package/src/core/project-config-loader.ts +20 -145
  228. package/src/core/validators/passes-gate.ts +6 -6
  229. package/src/failure/CONTEXT.md +1 -1
  230. package/src/hooks/__tests__/bootstrap.test.ts +3 -5
  231. package/src/index.ts +28 -18
  232. package/src/knowledge/CONTEXT.md +4 -3
  233. package/src/knowledge/__tests__/lint.test.ts +84 -0
  234. package/src/knowledge/__tests__/store.test.ts +70 -0
  235. package/src/knowledge/lint.ts +60 -1
  236. package/src/knowledge/store.ts +48 -11
  237. package/src/knowledge/types.ts +7 -1
  238. package/src/monitoring/CONTEXT.md +1 -1
  239. package/src/monitoring/__tests__/trace-file-anchoring.test.ts +1 -1
  240. package/src/monitoring/__tests__/traces.test.ts +22 -22
  241. package/src/monitoring/trace-analyzer.ts +12 -13
  242. package/src/monitoring/traces.ts +8 -8
  243. package/src/presets/__tests__/standard.test.ts +12 -16
  244. package/src/presets/standard.ts +14 -23
  245. package/src/types/__tests__/types.test.ts +3 -3
  246. package/src/types/constraint.ts +26 -40
  247. package/src/types/passes-gate.ts +5 -5
  248. package/src/types/project-config.ts +8 -77
  249. package/src/types/trace.ts +8 -11
  250. package/dist/cli/commands/posteval-plan.d.ts +0 -15
  251. package/dist/cli/commands/posteval-plan.d.ts.map +0 -1
  252. package/dist/cli/commands/posteval-plan.js +0 -86
  253. package/dist/cli/commands/posteval-plan.js.map +0 -1
  254. package/dist/core/constraints/agent-prompt-renderer.d.ts +0 -32
  255. package/dist/core/constraints/agent-prompt-renderer.d.ts.map +0 -1
  256. package/dist/core/constraints/agent-prompt-renderer.js +0 -55
  257. package/dist/core/constraints/agent-prompt-renderer.js.map +0 -1
  258. package/dist/core/constraints/checkers/no-bypass-checkpoint.d.ts +0 -6
  259. package/dist/core/constraints/checkers/no-bypass-checkpoint.d.ts.map +0 -1
  260. package/dist/core/constraints/checkers/no-bypass-checkpoint.js +0 -40
  261. package/dist/core/constraints/checkers/no-bypass-checkpoint.js.map +0 -1
  262. package/dist/core/constraints/definitions/prompts.d.ts +0 -12
  263. package/dist/core/constraints/definitions/prompts.d.ts.map +0 -1
  264. package/dist/core/constraints/definitions/prompts.js +0 -400
  265. package/dist/core/constraints/definitions/prompts.js.map +0 -1
  266. package/dist/core/constraints/injection-drift.d.ts +0 -61
  267. package/dist/core/constraints/injection-drift.d.ts.map +0 -1
  268. package/dist/core/constraints/injection-drift.js +0 -131
  269. package/dist/core/constraints/injection-drift.js.map +0 -1
  270. package/dist/core/constraints/injection-renderer.d.ts +0 -23
  271. package/dist/core/constraints/injection-renderer.d.ts.map +0 -1
  272. package/dist/core/constraints/injection-renderer.js +0 -44
  273. package/dist/core/constraints/injection-renderer.js.map +0 -1
  274. package/src/cli/commands/__tests__/check-drift.test.ts +0 -158
  275. package/src/cli/commands/__tests__/init-injection.test.ts +0 -466
  276. package/src/cli/commands/__tests__/posteval-plan.test.ts +0 -204
  277. package/src/cli/commands/posteval-plan.ts +0 -98
  278. package/src/core/constraints/__tests__/agent-prompt-renderer.test.ts +0 -129
  279. package/src/core/constraints/__tests__/injection-drift.test.ts +0 -247
  280. package/src/core/constraints/agent-prompt-renderer.ts +0 -67
  281. package/src/core/constraints/checkers/__tests__/no-bypass-checkpoint.test.ts +0 -76
  282. package/src/core/constraints/checkers/no-bypass-checkpoint.ts +0 -40
  283. package/src/core/constraints/definitions/prompts.ts +0 -414
  284. package/src/core/constraints/injection-drift.ts +0 -142
  285. package/src/core/constraints/injection-renderer.ts +0 -44
@@ -1,11 +1,12 @@
1
1
  /**
2
2
  * 约束类型定义
3
3
  *
4
- * kind 二元模型(ADR-0001):
5
- * - check:必须带真实 checker,参与运行时检查与 trace 统计
6
- * - iron_law:绝对禁止,无例外,违背即阻止执行
7
- * - guideline:优先建议,违背发警告但不阻止
8
- * - prompt:纯文本提示,仅参与 prompt 注入,不占检查位、不产生 trace
4
+ * severity 显式模型(ADR-0029,取代 ADR-0001 的三层命名与 kind 二元模型):
5
+ * - 全部约束 kind='check':必须带真实 checker,参与运行时检查与 trace 统计
6
+ * - severity 直接写死在定义上:error = 违规即阻断;warning = 违规告警不阻断;
7
+ * info = 仅记录
8
+ * - 纯文本提示层(kind='prompt' / promptInjection / 注入段渲染)已整体关停,
9
+ * 文本规则由消费方手写治理段承接
9
10
  */
10
11
 
11
12
  /**
@@ -14,16 +15,14 @@
14
15
  export type ConstraintId = string;
15
16
 
16
17
  /**
17
- * 约束类别:check = 可执行检查;prompt = 纯文本注入
18
+ * 约束类别(ADR-0029 收窄为单值):check = 可执行检查
18
19
  */
19
- export type ConstraintKind = 'check' | 'prompt';
20
+ export type ConstraintKind = 'check';
20
21
 
21
22
  /**
22
- * 约束层级
23
- *
24
- * check 层只使用 'iron_law' | 'guideline';prompt 类统一为 'prompt'。
23
+ * 约束严重性(显式字段,取代三层 level 命名)
25
24
  */
26
- export type ConstraintLevel = 'iron_law' | 'guideline' | 'prompt';
25
+ export type ConstraintSeverity = 'error' | 'warning' | 'info';
27
26
 
28
27
  /**
29
28
  * 约束触发条件(开放扩展)
@@ -41,9 +40,8 @@ export interface Constraint {
41
40
  id: ConstraintId;
42
41
 
43
42
  /**
44
- * 约束类别(ADR-0001):
45
- * - check:必须带真实 checker,参与运行时检查
46
- * - prompt:纯文本提示,仅参与注入,不执行 checker
43
+ * 约束类别(ADR-0029):恒为 'check'——必须带真实 checker,参与运行时检查;
44
+ * 纯文本提示(kind='prompt')已随文本注入层一并关停
47
45
  */
48
46
  kind: ConstraintKind;
49
47
 
@@ -53,8 +51,8 @@ export interface Constraint {
53
51
  /** 约束消息(中文) */
54
52
  message: string;
55
53
 
56
- /** 约束层级 */
57
- level: ConstraintLevel;
54
+ /** 约束严重性:error = 违规即阻断;warning = 违规告警不阻断;info = 仅记录 */
55
+ severity: ConstraintSeverity;
58
56
 
59
57
  /** 触发条件(支持多个 trigger) */
60
58
  trigger: ConstraintTrigger | ConstraintTrigger[];
@@ -65,20 +63,8 @@ export interface Constraint {
65
63
  /** 约束描述 */
66
64
  description?: string;
67
65
 
68
- /** 软约束 prompt 注入(引导 Agent 行为的提示文本) */
69
- promptInjection?: string;
70
-
71
- /** 是否注入 Agent prompt(默认 iron_law=true, guideline=false) */
72
- injectPrompt?: boolean;
73
-
74
66
  /** 是否启用 */
75
67
  enabled?: boolean;
76
-
77
- /**
78
- * 适用场景标签(prompt 类专用,如 'agent-skill'、'llm-app')。
79
- * 未标注表示通用场景。消费端(init 注入 / studio 路由)可按标签过滤。
80
- */
81
- appliesTo?: string[];
82
68
  }
83
69
 
84
70
  /**
@@ -88,8 +74,8 @@ export interface ConstraintResult {
88
74
  /** 约束 ID */
89
75
  id: ConstraintId;
90
76
 
91
- /** 约束层级 */
92
- level: ConstraintLevel;
77
+ /** 约束严重性 */
78
+ severity: ConstraintSeverity;
93
79
 
94
80
  /** 是否满足 */
95
81
  satisfied: boolean;
@@ -186,10 +172,10 @@ export interface ConstraintContext {
186
172
  /** 是否已进行复用检查 */
187
173
  hasReuseCheck?: boolean;
188
174
 
189
- /** 是否只处理单个任务(用于 incremental_progress) */
175
+ /** 是否只处理单个任务(证据标志,当前无内置 checker 消费,供自定义约束用) */
190
176
  hasSingleTask?: boolean;
191
177
 
192
- /** 是否有需求文档(用于 no_implementation_without_requirement) */
178
+ /** 是否有需求文档(证据标志,当前无内置 checker 消费,供自定义约束用) */
193
179
  hasRequirement?: boolean;
194
180
 
195
181
  /** worktree 路径(用于 worktree 相关检查) */
@@ -203,8 +189,8 @@ export class ConstraintViolationError extends Error {
203
189
  public readonly result: ConstraintResult;
204
190
 
205
191
  constructor(result: ConstraintResult) {
206
- // 铁律违规在 checkConstraints 处直接 throw,CLI 的结构化输出块走不到这里,
207
- // error.message 是判定证据唯一的外溢面(harness#119)
192
+ // severity='error' 的违规在 checkConstraints 处直接 throw,CLI 的结构化输出块
193
+ // 走不到这里,error.message 是判定证据唯一的外溢面(harness#119)
208
194
  const detail = result.evidence?.length
209
195
  ? `:\n${result.evidence.map((line) => ` - ${line}`).join('\n')}`
210
196
  : '';
@@ -215,16 +201,16 @@ export class ConstraintViolationError extends Error {
215
201
  }
216
202
 
217
203
  /**
218
- * 约束检查结果(check 层)
204
+ * 约束检查结果(按 severity 分桶)
219
205
  */
220
206
  export interface ConstraintCheckResult {
221
- /** 铁律检查结果(必须全部通过) */
222
- ironLaws: ConstraintResult[];
207
+ /** severity='error' 的检查结果(必须全部通过) */
208
+ errors: ConstraintResult[];
223
209
 
224
- /** 指导原则检查结果(警告,不阻止) */
225
- guidelines: ConstraintResult[];
210
+ /** severity='warning' 的检查结果(警告,不阻止) */
211
+ warnings: ConstraintResult[];
226
212
 
227
- /** 是否通过(铁律全部通过) */
213
+ /** 是否通过(error 级全部通过) */
228
214
  passed: boolean;
229
215
 
230
216
  /** 警告数量 */
@@ -94,17 +94,17 @@ export interface TestResult {
94
94
  * PassesGate 验证违规
95
95
  */
96
96
  export interface PassesGateViolation {
97
- /** Iron Law ID */
97
+ /** 约束 ID */
98
98
  id: string;
99
99
 
100
- /** Iron Law 规则 */
100
+ /** 约束规则 */
101
101
  rule: string;
102
102
 
103
103
  /** 中文消息 */
104
104
  message: string;
105
105
 
106
- /** 约束层级 */
107
- level: 'iron_law';
106
+ /** 约束严重性(PassesGate 违规恒为阻断级) */
107
+ severity: 'error';
108
108
  }
109
109
 
110
110
  /**
@@ -114,7 +114,7 @@ export interface PassesGateCheckResult {
114
114
  /** 是否允许标记完成 */
115
115
  allowed: boolean;
116
116
 
117
- /** Iron Law 违规列表 */
117
+ /** 阻断级违规列表 */
118
118
  violations?: PassesGateViolation[];
119
119
 
120
120
  /** 原始测试结果 */
@@ -1,57 +1,11 @@
1
1
  /**
2
- * 项目级自定义约束配置
2
+ * 项目级约束配置
3
3
  *
4
- * 允许项目定义自己的约束,扩展或覆盖 harness 内置约束
4
+ * 允许项目启用/禁用 harness 内置约束(ADR-0029:项目自定义纯文本约束
5
+ * 已随文本注入层关停一并退役,文本规则由项目手写治理段承接)
5
6
  */
6
7
 
7
- import type { Constraint, ConstraintLevel } from './constraint';
8
-
9
- /**
10
- * 自定义约束定义
11
- */
12
- export interface CustomConstraintDefinition {
13
- /** 约束 ID */
14
- id: string;
15
-
16
- /** 约束层级(可选,缺省 guideline) */
17
- level?: ConstraintLevel;
18
-
19
- /** 约束规则(可选) */
20
- rule?: string;
21
-
22
- /** 约束消息(可选) */
23
- message?: string;
24
-
25
- /** 触发条件(可选) */
26
- trigger?: string | string[];
27
-
28
- /** 描述(可选) */
29
- description?: string;
30
-
31
- /**
32
- * Prompt 注入文本(可选)
33
- *
34
- * 自定义约束统一 kind='prompt'(无 checker),该字段是进入 CLAUDE.md
35
- * 注入段(renderConstraintsSection)的唯一通道——缺省不出现在注入段,
36
- * 与内置无 promptInjection 的 check 条目行为一致。
37
- */
38
- promptInjection?: string;
39
-
40
- /** 是否启用(可选,默认 true) */
41
- enabled?: boolean;
42
-
43
- /**
44
- * 退役元数据(studio#82 D6 统一落点)
45
- *
46
- * 存在即视为已退役:不进生效集、不注入 CLAUDE.md。恢复 = 删除该段。
47
- * 落点在 custom-constraints.yml 条目内(一处真相,不拆 config.yml 第二处)。
48
- */
49
- retired?: {
50
- at?: string;
51
- reason?: string;
52
- stats?: { total: number; fail: number; failRate: number };
53
- };
54
- }
8
+ import type { Constraint } from './constraint';
55
9
 
56
10
  /**
57
11
  * 文档同步配置
@@ -257,26 +211,12 @@ export interface ProjectConfig {
257
211
  /** CI 接线平台(harness#143,缺省 github) */
258
212
  ci?: CiConfig;
259
213
 
260
- /**
261
- * 项目适用场景标签(ADR-0001,如 'agent-skill'、'llm-app')
262
- *
263
- * 带 appliesTo 标签的 prompt 仅当 scenes 与其交集非空时进入生效集;
264
- * 无 appliesTo 的条目不受影响。缺省为空 = 场景专属 prompt 默认不注入。
265
- */
266
- scenes?: string[];
267
-
268
214
  /** 治理配置 */
269
215
  governance?: GovernanceConfig;
270
216
 
271
217
  /** 内置约束启用/禁用配置 */
272
218
  constraints?: Record<string, { enabled?: boolean }>;
273
219
 
274
- /** 自定义约束文件路径 */
275
- custom_constraints_file?: string;
276
-
277
- /** 自定义约束(直接定义) */
278
- custom_constraints?: Record<string, CustomConstraintDefinition>;
279
-
280
220
  /** Spec 验证配置 */
281
221
  spec?: {
282
222
  /** 是否启用 Spec 验证 */
@@ -291,26 +231,17 @@ export interface ProjectConfig {
291
231
  }
292
232
 
293
233
  /**
294
- * 完整的约束配置(合并内置 + 自定义)
234
+ * 完整的约束配置(合并内置 + preset 裁剪 + config.yml 禁用)
295
235
  */
296
236
  export interface MergedConstraintsConfig {
297
- /** Iron Laws(合并后) */
298
- ironLaws: Record<string, Constraint>;
299
-
300
- /** Guidelines(合并后) */
301
- guidelines: Record<string, Constraint>;
302
-
303
- /** Prompts(合并后,ADR-0001 新增;可选以兼容旧调用方,缺省回落内置 PROMPTS) */
304
- prompts?: Record<string, Constraint>;
237
+ /** 生效的约束(合并后,单桶;severity 在条目上) */
238
+ constraints: Record<string, Constraint>;
305
239
 
306
240
  /** 禁用的约束 ID */
307
241
  disabled: string[];
308
242
 
309
- /** 自定义约束 ID */
310
- custom: string[];
311
-
312
243
  /**
313
- * config.yml `constraints.<id>` 中既非内置也非自定义的未知 id(ADR-0001)
244
+ * config.yml `constraints.<id>` 中非内置的未知 id
314
245
  *
315
246
  * 例如禁用了已被本版移除的约束 id 的残留配置。生效集计算静默忽略,
316
247
  * 在此列出供诊断(lintEffectiveConfig / report)使用。
@@ -31,8 +31,8 @@ export interface ExecutionTrace {
31
31
  /** 约束 ID */
32
32
  constraintId: string;
33
33
 
34
- /** 约束层级 */
35
- level: 'iron_law' | 'guideline' | 'prompt';
34
+ /** 约束严重性(ADR-0029:显式 severity 取代三层 level 命名) */
35
+ severity: 'error' | 'warning' | 'info';
36
36
 
37
37
  /** 检查时间(Unix timestamp) */
38
38
  timestamp: number;
@@ -47,9 +47,6 @@ export interface ExecutionTrace {
47
47
  /** 操作类型(触发条件) */
48
48
  operation?: string;
49
49
 
50
- /** 严重性(从约束定义继承) */
51
- severity?: 'error' | 'warning' | 'info';
52
-
53
50
  /** 项目路径(用于区分多项目) */
54
51
  projectPath?: string;
55
52
 
@@ -84,8 +81,8 @@ export interface TraceSummary {
84
81
  /** 约束 ID */
85
82
  constraintId: string;
86
83
 
87
- /** 约束层级 */
88
- level: 'iron_law' | 'guideline' | 'prompt';
84
+ /** 约束严重性 */
85
+ severity: 'error' | 'warning' | 'info';
89
86
 
90
87
  /** 统计时间范围 */
91
88
  timeRange: {
@@ -148,8 +145,8 @@ export interface TraceAnomaly {
148
145
  /** 约束 ID */
149
146
  constraintId: string;
150
147
 
151
- /** 约束层级 */
152
- level: 'iron_law' | 'guideline' | 'prompt';
148
+ /** 约束严重性 */
149
+ severity: 'error' | 'warning' | 'info';
153
150
 
154
151
  /** 异常描述 */
155
152
  message: string;
@@ -175,8 +172,8 @@ export interface TraceFilter {
175
172
  /** 约束 ID(可选,不指定则查全部) */
176
173
  constraintId?: string;
177
174
 
178
- /** 约束层级(可选) */
179
- level?: 'iron_law' | 'guideline' | 'prompt';
175
+ /** 约束严重性(可选) */
176
+ severity?: 'error' | 'warning' | 'info';
180
177
 
181
178
  /** 结果类型(可选) */
182
179
  result?: 'pass' | 'fail' | 'skip';
@@ -1,15 +0,0 @@
1
- /**
2
- * harness posteval-plan 命令
3
- *
4
- * 调用 Studio PostEval API,验证 plan 文件的 checklist items 是否都有对应的 staged diff。
5
- * pre-commit hook 使用此命令防止"假装完成"。
6
- *
7
- * 判定经返回值外溢(架构评审候选7):API 不可用/5xx 属"未判定"→ skip(退出码面 0 不变);
8
- * 覆盖率不足与 4xx → fail,reason 指明是哪一项否决。
9
- */
10
- import { type CommandIO, type CommandResult } from '../command-contract';
11
- export interface PostEvalPlanOptions {
12
- planPath: string;
13
- }
14
- export declare function postevalPlan(options: PostEvalPlanOptions, io?: CommandIO): Promise<CommandResult>;
15
- //# sourceMappingURL=posteval-plan.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"posteval-plan.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/posteval-plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAA4B,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEnG,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;CAClB;AA6BD,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,EAC5B,EAAE,GAAE,SAAqB,GACxB,OAAO,CAAC,aAAa,CAAC,CAkDxB"}
@@ -1,86 +0,0 @@
1
- "use strict";
2
- /**
3
- * harness posteval-plan 命令
4
- *
5
- * 调用 Studio PostEval API,验证 plan 文件的 checklist items 是否都有对应的 staged diff。
6
- * pre-commit hook 使用此命令防止"假装完成"。
7
- *
8
- * 判定经返回值外溢(架构评审候选7):API 不可用/5xx 属"未判定"→ skip(退出码面 0 不变);
9
- * 覆盖率不足与 4xx → fail,reason 指明是哪一项否决。
10
- */
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.postevalPlan = postevalPlan;
16
- const chalk_1 = __importDefault(require("chalk"));
17
- const command_contract_1 = require("../command-contract");
18
- const MAX_RETRIES = 3;
19
- const RETRY_DELAY_MS = 2000;
20
- async function fetchWithRetry(url, body, retries) {
21
- let lastError;
22
- for (let i = 0; i < retries; i++) {
23
- try {
24
- const controller = new AbortController();
25
- const timeout = setTimeout(() => controller.abort(), 5000);
26
- const res = await fetch(url, {
27
- method: 'POST',
28
- headers: { 'Content-Type': 'application/json' },
29
- body,
30
- signal: controller.signal,
31
- });
32
- clearTimeout(timeout);
33
- return res;
34
- }
35
- catch (error) {
36
- lastError = error;
37
- if (i < retries - 1) {
38
- await new Promise(resolve => setTimeout(resolve, RETRY_DELAY_MS * (i + 1))); // exponential backoff
39
- }
40
- }
41
- }
42
- throw lastError;
43
- }
44
- async function postevalPlan(options, io = command_contract_1.processIO) {
45
- const apiPort = process.env.API_PORT || '3001';
46
- const url = `http://localhost:${apiPort}/api/v1/agents/post-eval/plan-coverage`;
47
- try {
48
- const res = await fetchWithRetry(url, JSON.stringify({ planPath: options.planPath }), MAX_RETRIES);
49
- if (!res.ok) {
50
- if (res.status >= 500) {
51
- // Server error — allow commit with warning (don't block on infrastructure failure)
52
- (0, command_contract_1.logError)(io, chalk_1.default.yellow(`⚠️ PostEval API unavailable (${res.status}), allowing commit with warning`));
53
- (0, command_contract_1.logError)(io, chalk_1.default.yellow(` Plan: ${options.planPath}`));
54
- return { kind: 'skip', reason: `PostEval API 服务端错误 ${res.status},未判定` };
55
- }
56
- (0, command_contract_1.logError)(io, chalk_1.default.red(`❌ PostEval API error: ${res.status} ${res.statusText}`));
57
- return { kind: 'fail', reason: `PostEval API error: ${res.status} ${res.statusText}` };
58
- }
59
- const report = await res.json();
60
- const pct = Math.round(report.completeness * 100);
61
- if (report.completeness < 1) {
62
- (0, command_contract_1.logError)(io, chalk_1.default.red(`❌ Plan coverage: ${pct}% (${report.matchedAcs.length}/${report.matchedAcs.length + report.missedAcs.length})`));
63
- if (report.missedAcs.length > 0) {
64
- (0, command_contract_1.logError)(io, chalk_1.default.red('Missed items:'));
65
- report.missedAcs.forEach((item) => (0, command_contract_1.logError)(io, chalk_1.default.red(` - ${item}`)));
66
- }
67
- return {
68
- kind: 'fail',
69
- reason: `plan coverage ${pct}% < 100%,缺 ${report.missedAcs.length} 项: ${report.missedAcs.join('; ')}`,
70
- };
71
- }
72
- (0, command_contract_1.log)(io, chalk_1.default.green(`✅ Plan coverage: ${pct}%`));
73
- return { kind: 'ok' };
74
- }
75
- catch (error) {
76
- // API unreachable after all retries — allow with warning (don't block commits on infra)
77
- (0, command_contract_1.logError)(io, chalk_1.default.yellow(`⚠️ Studio API unreachable after ${MAX_RETRIES} retries, allowing commit with warning`));
78
- (0, command_contract_1.logError)(io, chalk_1.default.yellow(` Plan: ${options.planPath}`));
79
- (0, command_contract_1.logError)(io, chalk_1.default.yellow(` Error: ${error?.code || error?.message || String(error)}`));
80
- return {
81
- kind: 'skip',
82
- reason: `Studio API 不可达(${error?.code || error?.message || String(error)}),未判定`,
83
- };
84
- }
85
- }
86
- //# sourceMappingURL=posteval-plan.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"posteval-plan.js","sourceRoot":"","sources":["../../../src/cli/commands/posteval-plan.ts"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- /**
2
- * Agent prompt 约束段渲染(H6/G6:trigger 参数化分组渲染 API)
3
- *
4
- * 收编 studio prompt-injection.ts 的渲染层:role→trigger 路由留在 studio,
5
- * 本模块只做 trigger 参数化 + 生效集过滤 + 层级分组渲染。
6
- *
7
- * 数据源 = getEffectiveConstraints(内置 → preset → config.yml 禁用 →
8
- * custom 追加 → scenes 过滤),与 init 注入、harness check 同一来源。
9
- *
10
- * 输出按层级分组:铁律 → 指导原则 → 行为提示;无 promptInjection 的约束
11
- * (如 docs_freshness)不渲染。
12
- */
13
- import type { ConstraintTrigger } from '../../types/constraint';
14
- /**
15
- * renderConstraintsByTrigger 选项
16
- */
17
- export interface RenderConstraintsByTriggerOptions {
18
- /** 项目根路径(决定 config.yml 生效集),缺省 process.cwd() */
19
- projectRoot?: string;
20
- }
21
- /**
22
- * 按触发条件渲染约束分组文本(注入 Agent system prompt 用)
23
- *
24
- * 过滤:生效集内 trigger 与入参存在交集的约束;无 promptInjection 的不渲染。
25
- * 分组:按层级 iron_law → guideline → prompt 顺序渲染为标题 + 条目列表;
26
- * 无适用约束时返回空字符串。
27
- *
28
- * @param triggers 触发条件(单个或多个;空数组返回空字符串)
29
- * @param options.projectRoot 项目根路径(决定 config.yml 生效集)
30
- */
31
- export declare function renderConstraintsByTrigger(triggers: ConstraintTrigger | ConstraintTrigger[], options?: RenderConstraintsByTriggerOptions): string;
32
- //# sourceMappingURL=agent-prompt-renderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-prompt-renderer.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/agent-prompt-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAmB,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAIjF;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AASD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,EACjD,OAAO,CAAC,EAAE,iCAAiC,GAC1C,MAAM,CAqBR"}
@@ -1,55 +0,0 @@
1
- "use strict";
2
- /**
3
- * Agent prompt 约束段渲染(H6/G6:trigger 参数化分组渲染 API)
4
- *
5
- * 收编 studio prompt-injection.ts 的渲染层:role→trigger 路由留在 studio,
6
- * 本模块只做 trigger 参数化 + 生效集过滤 + 层级分组渲染。
7
- *
8
- * 数据源 = getEffectiveConstraints(内置 → preset → config.yml 禁用 →
9
- * custom 追加 → scenes 过滤),与 init 注入、harness check 同一来源。
10
- *
11
- * 输出按层级分组:铁律 → 指导原则 → 行为提示;无 promptInjection 的约束
12
- * (如 docs_freshness)不渲染。
13
- */
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.renderConstraintsByTrigger = renderConstraintsByTrigger;
16
- const triggers_1 = require("./triggers");
17
- const effective_constraints_1 = require("../effective-constraints");
18
- /** 层级分组定义(渲染顺序即声明顺序) */
19
- const LEVEL_GROUPS = [
20
- { level: 'iron_law', heading: '### 铁律(绝对禁止,无例外)' },
21
- { level: 'guideline', heading: '### 指导原则(优先建议)' },
22
- { level: 'prompt', heading: '### 行为提示' },
23
- ];
24
- /**
25
- * 按触发条件渲染约束分组文本(注入 Agent system prompt 用)
26
- *
27
- * 过滤:生效集内 trigger 与入参存在交集的约束;无 promptInjection 的不渲染。
28
- * 分组:按层级 iron_law → guideline → prompt 顺序渲染为标题 + 条目列表;
29
- * 无适用约束时返回空字符串。
30
- *
31
- * @param triggers 触发条件(单个或多个;空数组返回空字符串)
32
- * @param options.projectRoot 项目根路径(决定 config.yml 生效集)
33
- */
34
- function renderConstraintsByTrigger(triggers, options) {
35
- const requested = Array.isArray(triggers) ? triggers : [triggers];
36
- if (requested.length === 0)
37
- return '';
38
- const constraints = (0, effective_constraints_1.getEffectiveConstraints)(options?.projectRoot);
39
- const applicable = constraints.filter(c => c.promptInjection && (0, triggers_1.matchesTrigger)(c, requested));
40
- if (applicable.length === 0)
41
- return '';
42
- const lines = ['\n## 行为约束(前置声明)\n'];
43
- for (const group of LEVEL_GROUPS) {
44
- const items = applicable.filter(c => c.level === group.level);
45
- if (items.length === 0)
46
- continue;
47
- lines.push(`${group.heading}\n`);
48
- for (const c of items) {
49
- lines.push(`- **${c.id}**: ${c.promptInjection}`);
50
- }
51
- lines.push('');
52
- }
53
- return lines.join('\n');
54
- }
55
- //# sourceMappingURL=agent-prompt-renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-prompt-renderer.js","sourceRoot":"","sources":["../../../src/core/constraints/agent-prompt-renderer.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AA+BH,gEAwBC;AApDD,yCAA4C;AAC5C,oEAAmE;AAUnE,wBAAwB;AACxB,MAAM,YAAY,GAA+D;IAC/E,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,EAAE;IAClD,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE;IACjD,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;CACzC,CAAC;AAEF;;;;;;;;;GASG;AACH,SAAgB,0BAA0B,CACxC,QAAiD,EACjD,OAA2C;IAE3C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAClE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtC,MAAM,WAAW,GAAG,IAAA,+CAAuB,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CACnC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,IAAI,IAAA,yBAAc,EAAC,CAAC,EAAE,SAAS,CAAC,CACvD,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,MAAM,KAAK,GAAa,CAAC,mBAAmB,CAAC,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACjC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -1,6 +0,0 @@
1
- /**
2
- * no_bypass_checkpoint:检查变更文件内容是否有 skip/bypass 关键词(工单 21)
3
- */
4
- import type { ConstraintCheck } from './types';
5
- export declare const noBypassCheckpoint: ConstraintCheck;
6
- //# sourceMappingURL=no-bypass-checkpoint.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-bypass-checkpoint.d.ts","sourceRoot":"","sources":["../../../../src/core/constraints/checkers/no-bypass-checkpoint.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAU/C,eAAO,MAAM,kBAAkB,EAAE,eAwBhC,CAAC"}
@@ -1,40 +0,0 @@
1
- "use strict";
2
- /**
3
- * no_bypass_checkpoint:检查变更文件内容是否有 skip/bypass 关键词(工单 21)
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.noBypassCheckpoint = void 0;
7
- const fs_1 = require("fs");
8
- const BYPASS_PATTERNS = [
9
- /\.skip\(/, // Jest/Vitest skip
10
- /\.bypass\s*=/, // bypass flag
11
- /skip:\s*true/, // skip option
12
- /bypass\s*checkpoint/, // explicit bypass
13
- /\/\/\s*skip/, // comment skip
14
- ];
15
- exports.noBypassCheckpoint = {
16
- id: 'no_bypass_checkpoint',
17
- async evaluate(env) {
18
- const changedFiles = env.context.changedFiles || [];
19
- if (changedFiles.length === 0) {
20
- return true; // 无变更文件,默认通过
21
- }
22
- for (const file of changedFiles) {
23
- if (!(0, fs_1.existsSync)(file))
24
- continue;
25
- try {
26
- const content = (0, fs_1.readFileSync)(file, 'utf-8');
27
- for (const pattern of BYPASS_PATTERNS) {
28
- if (pattern.test(content)) {
29
- return false; // 发现 bypass 关键词
30
- }
31
- }
32
- }
33
- catch {
34
- // 文件读取失败,忽略
35
- }
36
- }
37
- return true;
38
- },
39
- };
40
- //# sourceMappingURL=no-bypass-checkpoint.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-bypass-checkpoint.js","sourceRoot":"","sources":["../../../../src/core/constraints/checkers/no-bypass-checkpoint.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,2BAA8C;AAG9C,MAAM,eAAe,GAAG;IACtB,UAAU,EAAa,mBAAmB;IAC1C,cAAc,EAAS,cAAc;IACrC,cAAc,EAAS,cAAc;IACrC,qBAAqB,EAAE,kBAAkB;IACzC,aAAa,EAAU,eAAe;CACvC,CAAC;AAEW,QAAA,kBAAkB,GAAoB;IACjD,EAAE,EAAE,sBAAsB;IAC1B,KAAK,CAAC,QAAQ,CAAC,GAAG;QAChB,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;QACpD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,CAAC,aAAa;QAC5B,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC;gBAAE,SAAS;YAChC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC5C,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;oBACtC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC1B,OAAO,KAAK,CAAC,CAAC,gBAAgB;oBAChC,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * prompt 类约束定义(ADR-0001:kind 二元模型)
3
- *
4
- * 纯文本提示层:
5
- * - kind: 'prompt',level 统一为 'prompt'
6
- * - 不带 checker,不参与运行时检查与 trace 统计
7
- * - promptInjection 参与 init 注入;trigger 供消费端(studio)做角色路由
8
- * - appliesTo 标注适用场景(如 'agent-skill'、'llm-app'),缺省为通用
9
- */
10
- import type { Constraint } from '../../../types/constraint';
11
- export declare const PROMPTS: Record<string, Constraint>;
12
- //# sourceMappingURL=prompts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../../src/core/constraints/definitions/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAiZ9C,CAAC"}