@dommaker/harness 1.6.0 → 1.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 (560) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/bin/harness.js +17 -1
  3. package/dist/agents/index.d.ts +6 -2
  4. package/dist/agents/index.d.ts.map +1 -1
  5. package/dist/agents/index.js +6 -16
  6. package/dist/agents/index.js.map +1 -1
  7. package/dist/cli/commands/__tests__/gate-decision.d.ts +18 -0
  8. package/dist/cli/commands/__tests__/gate-decision.d.ts.map +1 -0
  9. package/dist/cli/commands/__tests__/gate-decision.js +26 -0
  10. package/dist/cli/commands/__tests__/gate-decision.js.map +1 -0
  11. package/dist/cli/commands/acceptance.d.ts.map +1 -1
  12. package/dist/cli/commands/acceptance.js +17 -28
  13. package/dist/cli/commands/acceptance.js.map +1 -1
  14. package/dist/cli/commands/check.d.ts +11 -3
  15. package/dist/cli/commands/check.d.ts.map +1 -1
  16. package/dist/cli/commands/check.js +26 -11
  17. package/dist/cli/commands/check.js.map +1 -1
  18. package/dist/cli/commands/command.d.ts +0 -1
  19. package/dist/cli/commands/command.d.ts.map +1 -1
  20. package/dist/cli/commands/command.js +8 -6
  21. package/dist/cli/commands/command.js.map +1 -1
  22. package/dist/cli/commands/constraints-retire.d.ts.map +1 -1
  23. package/dist/cli/commands/constraints-retire.js +36 -57
  24. package/dist/cli/commands/constraints-retire.js.map +1 -1
  25. package/dist/cli/commands/contract.d.ts.map +1 -1
  26. package/dist/cli/commands/contract.js +36 -42
  27. package/dist/cli/commands/contract.js.map +1 -1
  28. package/dist/cli/commands/definitions.d.ts +2 -0
  29. package/dist/cli/commands/definitions.d.ts.map +1 -1
  30. package/dist/cli/commands/definitions.js +11 -6
  31. package/dist/cli/commands/definitions.js.map +1 -1
  32. package/dist/cli/commands/failure.d.ts.map +1 -1
  33. package/dist/cli/commands/failure.js +16 -2
  34. package/dist/cli/commands/failure.js.map +1 -1
  35. package/dist/cli/commands/init.d.ts +14 -8
  36. package/dist/cli/commands/init.d.ts.map +1 -1
  37. package/dist/cli/commands/init.js +172 -364
  38. package/dist/cli/commands/init.js.map +1 -1
  39. package/dist/cli/commands/knowledge-view.d.ts +90 -0
  40. package/dist/cli/commands/knowledge-view.d.ts.map +1 -0
  41. package/dist/cli/commands/knowledge-view.js +198 -0
  42. package/dist/cli/commands/knowledge-view.js.map +1 -0
  43. package/dist/cli/commands/knowledge.d.ts +137 -52
  44. package/dist/cli/commands/knowledge.d.ts.map +1 -1
  45. package/dist/cli/commands/knowledge.js +534 -400
  46. package/dist/cli/commands/knowledge.js.map +1 -1
  47. package/dist/cli/commands/passes-gate.d.ts +4 -1
  48. package/dist/cli/commands/passes-gate.d.ts.map +1 -1
  49. package/dist/cli/commands/passes-gate.js +11 -2
  50. package/dist/cli/commands/passes-gate.js.map +1 -1
  51. package/dist/cli/commands/performance.d.ts.map +1 -1
  52. package/dist/cli/commands/performance.js +19 -31
  53. package/dist/cli/commands/performance.js.map +1 -1
  54. package/dist/cli/commands/report.d.ts.map +1 -1
  55. package/dist/cli/commands/report.js +2 -1
  56. package/dist/cli/commands/report.js.map +1 -1
  57. package/dist/cli/commands/review.d.ts.map +1 -1
  58. package/dist/cli/commands/review.js +13 -25
  59. package/dist/cli/commands/review.js.map +1 -1
  60. package/dist/cli/commands/scaffold-templates.d.ts +73 -0
  61. package/dist/cli/commands/scaffold-templates.d.ts.map +1 -0
  62. package/dist/cli/commands/scaffold-templates.js +424 -0
  63. package/dist/cli/commands/scaffold-templates.js.map +1 -0
  64. package/dist/cli/commands/scaffold.d.ts +105 -0
  65. package/dist/cli/commands/scaffold.d.ts.map +1 -0
  66. package/dist/cli/commands/scaffold.js +263 -0
  67. package/dist/cli/commands/scaffold.js.map +1 -0
  68. package/dist/cli/commands/security.d.ts.map +1 -1
  69. package/dist/cli/commands/security.js +22 -24
  70. package/dist/cli/commands/security.js.map +1 -1
  71. package/dist/cli/commands/spec-baseline-check.d.ts +43 -0
  72. package/dist/cli/commands/spec-baseline-check.d.ts.map +1 -1
  73. package/dist/cli/commands/spec-baseline-check.js +109 -34
  74. package/dist/cli/commands/spec-baseline-check.js.map +1 -1
  75. package/dist/cli/commands/sync-docs/context-syncer.d.ts +21 -2
  76. package/dist/cli/commands/sync-docs/context-syncer.d.ts.map +1 -1
  77. package/dist/cli/commands/sync-docs/context-syncer.js +112 -28
  78. package/dist/cli/commands/sync-docs/context-syncer.js.map +1 -1
  79. package/dist/cli/commands/sync-docs/index.d.ts +1 -1
  80. package/dist/cli/commands/sync-docs/index.d.ts.map +1 -1
  81. package/dist/cli/commands/sync-docs/index.js +86 -27
  82. package/dist/cli/commands/sync-docs/index.js.map +1 -1
  83. package/dist/cli/commands/sync-docs/project-reader.d.ts +24 -1
  84. package/dist/cli/commands/sync-docs/project-reader.d.ts.map +1 -1
  85. package/dist/cli/commands/sync-docs/project-reader.js +33 -7
  86. package/dist/cli/commands/sync-docs/project-reader.js.map +1 -1
  87. package/dist/cli/commands/validate.d.ts +0 -16
  88. package/dist/cli/commands/validate.d.ts.map +1 -1
  89. package/dist/cli/commands/validate.js +2 -97
  90. package/dist/cli/commands/validate.js.map +1 -1
  91. package/dist/cli/gate-command.d.ts +37 -0
  92. package/dist/cli/gate-command.d.ts.map +1 -0
  93. package/dist/cli/gate-command.js +64 -0
  94. package/dist/cli/gate-command.js.map +1 -0
  95. package/dist/completion-checkers/index.d.ts +1 -1
  96. package/dist/completion-checkers/index.d.ts.map +1 -1
  97. package/dist/completion-checkers/index.js +0 -15
  98. package/dist/completion-checkers/index.js.map +1 -1
  99. package/dist/context/knowledge-injector.d.ts +4 -2
  100. package/dist/context/knowledge-injector.d.ts.map +1 -1
  101. package/dist/context/knowledge-injector.js +13 -6
  102. package/dist/context/knowledge-injector.js.map +1 -1
  103. package/dist/core/constraints/agent-prompt-renderer.js +2 -2
  104. package/dist/core/constraints/agent-prompt-renderer.js.map +1 -1
  105. package/dist/core/constraints/capabilities-reconcile.d.ts +20 -0
  106. package/dist/core/constraints/capabilities-reconcile.d.ts.map +1 -1
  107. package/dist/core/constraints/capabilities-reconcile.js +26 -4
  108. package/dist/core/constraints/capabilities-reconcile.js.map +1 -1
  109. package/dist/core/constraints/check-cache.d.ts +1 -1
  110. package/dist/core/constraints/check-cache.js +1 -1
  111. package/dist/core/constraints/checker.d.ts +8 -3
  112. package/dist/core/constraints/checker.d.ts.map +1 -1
  113. package/dist/core/constraints/checker.js +30 -19
  114. package/dist/core/constraints/checker.js.map +1 -1
  115. package/dist/core/constraints/checkers/capability-sync.d.ts +3 -1
  116. package/dist/core/constraints/checkers/capability-sync.d.ts.map +1 -1
  117. package/dist/core/constraints/checkers/capability-sync.js +17 -24
  118. package/dist/core/constraints/checkers/capability-sync.js.map +1 -1
  119. package/dist/core/constraints/checkers/context-doc-sync.d.ts +1 -1
  120. package/dist/core/constraints/checkers/context-doc-sync.d.ts.map +1 -1
  121. package/dist/core/constraints/checkers/context-doc-sync.js +9 -6
  122. package/dist/core/constraints/checkers/context-doc-sync.js.map +1 -1
  123. package/dist/core/constraints/checkers/docs-freshness.d.ts.map +1 -1
  124. package/dist/core/constraints/checkers/docs-freshness.js +24 -30
  125. package/dist/core/constraints/checkers/docs-freshness.js.map +1 -1
  126. package/dist/core/constraints/checkers/governance-presence.d.ts.map +1 -1
  127. package/dist/core/constraints/checkers/governance-presence.js +10 -4
  128. package/dist/core/constraints/checkers/governance-presence.js.map +1 -1
  129. package/dist/core/constraints/checkers/types.d.ts +10 -6
  130. package/dist/core/constraints/checkers/types.d.ts.map +1 -1
  131. package/dist/core/constraints/checkers/types.js +7 -3
  132. package/dist/core/constraints/checkers/types.js.map +1 -1
  133. package/dist/core/constraints/context-builder.d.ts +11 -10
  134. package/dist/core/constraints/context-builder.d.ts.map +1 -1
  135. package/dist/core/constraints/context-builder.js +31 -27
  136. package/dist/core/constraints/context-builder.js.map +1 -1
  137. package/dist/core/constraints/context-reconcile.d.ts +75 -0
  138. package/dist/core/constraints/context-reconcile.d.ts.map +1 -0
  139. package/dist/core/constraints/context-reconcile.js +161 -0
  140. package/dist/core/constraints/context-reconcile.js.map +1 -0
  141. package/dist/core/constraints/doc-freshness/runner.d.ts +7 -0
  142. package/dist/core/constraints/doc-freshness/runner.d.ts.map +1 -1
  143. package/dist/core/constraints/doc-freshness/runner.js +8 -3
  144. package/dist/core/constraints/doc-freshness/runner.js.map +1 -1
  145. package/dist/core/constraints/git-evidence.js +1 -1
  146. package/dist/core/constraints/git-evidence.js.map +1 -1
  147. package/dist/core/constraints/injection-drift.d.ts +7 -2
  148. package/dist/core/constraints/injection-drift.d.ts.map +1 -1
  149. package/dist/core/constraints/injection-drift.js +13 -7
  150. package/dist/core/constraints/injection-drift.js.map +1 -1
  151. package/dist/core/constraints/run-env.d.ts +92 -0
  152. package/dist/core/constraints/run-env.d.ts.map +1 -0
  153. package/dist/core/constraints/run-env.js +175 -0
  154. package/dist/core/constraints/run-env.js.map +1 -0
  155. package/dist/core/constraints/triggers.d.ts +22 -0
  156. package/dist/core/constraints/triggers.d.ts.map +1 -0
  157. package/dist/core/constraints/triggers.js +31 -0
  158. package/dist/core/constraints/triggers.js.map +1 -0
  159. package/dist/core/effective-constraints.d.ts +13 -4
  160. package/dist/core/effective-constraints.d.ts.map +1 -1
  161. package/dist/core/effective-constraints.js +16 -6
  162. package/dist/core/effective-constraints.js.map +1 -1
  163. package/dist/core/effective-set.d.ts +8 -15
  164. package/dist/core/effective-set.d.ts.map +1 -1
  165. package/dist/core/effective-set.js +7 -12
  166. package/dist/core/effective-set.js.map +1 -1
  167. package/dist/core/index.d.ts +2 -1
  168. package/dist/core/index.d.ts.map +1 -1
  169. package/dist/core/index.js.map +1 -1
  170. package/dist/core/project-config-loader.d.ts +39 -17
  171. package/dist/core/project-config-loader.d.ts.map +1 -1
  172. package/dist/core/project-config-loader.js +51 -122
  173. package/dist/core/project-config-loader.js.map +1 -1
  174. package/dist/core/validators/check-handlers/http.d.ts +2 -2
  175. package/dist/core/validators/check-handlers/http.d.ts.map +1 -1
  176. package/dist/core/validators/check-handlers/http.js +12 -7
  177. package/dist/core/validators/check-handlers/http.js.map +1 -1
  178. package/dist/core/validators/index.d.ts +1 -1
  179. package/dist/core/validators/index.d.ts.map +1 -1
  180. package/dist/core/validators/passes-gate.d.ts.map +1 -1
  181. package/dist/core/validators/passes-gate.js +2 -2
  182. package/dist/core/validators/passes-gate.js.map +1 -1
  183. package/dist/failure/classifier.d.ts +1 -1
  184. package/dist/failure/classifier.d.ts.map +1 -1
  185. package/dist/failure/classifier.js +8 -8
  186. package/dist/failure/classifier.js.map +1 -1
  187. package/dist/failure/index.d.ts +2 -1
  188. package/dist/failure/index.d.ts.map +1 -1
  189. package/dist/failure/index.js +9 -17
  190. package/dist/failure/index.js.map +1 -1
  191. package/dist/failure/recorder.d.ts +1 -1
  192. package/dist/failure/recorder.d.ts.map +1 -1
  193. package/dist/gates/checker-gate.d.ts +2 -1
  194. package/dist/gates/checker-gate.d.ts.map +1 -1
  195. package/dist/gates/checker-gate.js +3 -2
  196. package/dist/gates/checker-gate.js.map +1 -1
  197. package/dist/gates/command.d.ts +10 -4
  198. package/dist/gates/command.d.ts.map +1 -1
  199. package/dist/gates/command.js +36 -62
  200. package/dist/gates/command.js.map +1 -1
  201. package/dist/gates/contract.d.ts.map +1 -1
  202. package/dist/gates/contract.js +0 -4
  203. package/dist/gates/contract.js.map +1 -1
  204. package/dist/gates/definitions.d.ts +2 -1
  205. package/dist/gates/definitions.d.ts.map +1 -1
  206. package/dist/gates/definitions.js +6 -5
  207. package/dist/gates/definitions.js.map +1 -1
  208. package/dist/gates/index.d.ts +0 -4
  209. package/dist/gates/index.d.ts.map +1 -1
  210. package/dist/gates/index.js +1 -6
  211. package/dist/gates/index.js.map +1 -1
  212. package/dist/gates/performance.d.ts.map +1 -1
  213. package/dist/gates/performance.js +0 -4
  214. package/dist/gates/performance.js.map +1 -1
  215. package/dist/gates/runner.d.ts +1 -1
  216. package/dist/gates/runner.js +1 -1
  217. package/dist/gates/security.d.ts +1 -1
  218. package/dist/gates/security.d.ts.map +1 -1
  219. package/dist/gates/security.js +5 -6
  220. package/dist/gates/security.js.map +1 -1
  221. package/dist/gates/types.d.ts +14 -17
  222. package/dist/gates/types.d.ts.map +1 -1
  223. package/dist/gates/types.js.map +1 -1
  224. package/dist/hooks/bootstrap.d.ts +6 -4
  225. package/dist/hooks/bootstrap.d.ts.map +1 -1
  226. package/dist/hooks/bootstrap.js +25 -13
  227. package/dist/hooks/bootstrap.js.map +1 -1
  228. package/dist/hooks/config.d.ts +6 -2
  229. package/dist/hooks/config.d.ts.map +1 -1
  230. package/dist/hooks/config.js +5 -1
  231. package/dist/hooks/config.js.map +1 -1
  232. package/dist/hooks/index.d.ts +1 -1
  233. package/dist/hooks/index.d.ts.map +1 -1
  234. package/dist/hooks/index.js +0 -15
  235. package/dist/hooks/index.js.map +1 -1
  236. package/dist/hooks/pipeline.d.ts.map +1 -1
  237. package/dist/hooks/pipeline.js +2 -4
  238. package/dist/hooks/pipeline.js.map +1 -1
  239. package/dist/hooks/registry.d.ts +11 -8
  240. package/dist/hooks/registry.d.ts.map +1 -1
  241. package/dist/hooks/registry.js +22 -7
  242. package/dist/hooks/registry.js.map +1 -1
  243. package/dist/hooks/types.d.ts +23 -7
  244. package/dist/hooks/types.d.ts.map +1 -1
  245. package/dist/index.d.ts +4 -4
  246. package/dist/index.d.ts.map +1 -1
  247. package/dist/index.js +3 -4
  248. package/dist/index.js.map +1 -1
  249. package/dist/knowledge/audit-scoring.d.ts +87 -0
  250. package/dist/knowledge/audit-scoring.d.ts.map +1 -0
  251. package/dist/knowledge/audit-scoring.js +470 -0
  252. package/dist/knowledge/audit-scoring.js.map +1 -0
  253. package/dist/knowledge/audit.d.ts +11 -59
  254. package/dist/knowledge/audit.d.ts.map +1 -1
  255. package/dist/knowledge/audit.js +47 -522
  256. package/dist/knowledge/audit.js.map +1 -1
  257. package/dist/knowledge/import.d.ts.map +1 -1
  258. package/dist/knowledge/import.js +2 -0
  259. package/dist/knowledge/import.js.map +1 -1
  260. package/dist/knowledge/index-generator.d.ts.map +1 -1
  261. package/dist/knowledge/index-generator.js +4 -5
  262. package/dist/knowledge/index-generator.js.map +1 -1
  263. package/dist/knowledge/index.d.ts +3 -2
  264. package/dist/knowledge/index.d.ts.map +1 -1
  265. package/dist/knowledge/index.js +3 -16
  266. package/dist/knowledge/index.js.map +1 -1
  267. package/dist/knowledge/ingest.js +1 -1
  268. package/dist/knowledge/ingest.js.map +1 -1
  269. package/dist/knowledge/lifecycle.d.ts.map +1 -1
  270. package/dist/knowledge/lifecycle.js +4 -2
  271. package/dist/knowledge/lifecycle.js.map +1 -1
  272. package/dist/knowledge/migration.d.ts +3 -0
  273. package/dist/knowledge/migration.d.ts.map +1 -1
  274. package/dist/knowledge/migration.js +8 -2
  275. package/dist/knowledge/migration.js.map +1 -1
  276. package/dist/knowledge/query.d.ts +6 -0
  277. package/dist/knowledge/query.d.ts.map +1 -1
  278. package/dist/knowledge/query.js +8 -2
  279. package/dist/knowledge/query.js.map +1 -1
  280. package/dist/knowledge/reference-tracker.d.ts.map +1 -1
  281. package/dist/knowledge/reference-tracker.js +4 -6
  282. package/dist/knowledge/reference-tracker.js.map +1 -1
  283. package/dist/knowledge/store.d.ts +22 -16
  284. package/dist/knowledge/store.d.ts.map +1 -1
  285. package/dist/knowledge/store.js +53 -12
  286. package/dist/knowledge/store.js.map +1 -1
  287. package/dist/knowledge/tree-walker.d.ts +19 -0
  288. package/dist/knowledge/tree-walker.d.ts.map +1 -0
  289. package/dist/knowledge/tree-walker.js +30 -0
  290. package/dist/knowledge/tree-walker.js.map +1 -0
  291. package/dist/knowledge/types.d.ts +16 -0
  292. package/dist/knowledge/types.d.ts.map +1 -1
  293. package/dist/monitoring/traces.d.ts +5 -3
  294. package/dist/monitoring/traces.d.ts.map +1 -1
  295. package/dist/monitoring/traces.js +19 -5
  296. package/dist/monitoring/traces.js.map +1 -1
  297. package/dist/test-setup/jsonl-fake-fs.d.ts +30 -0
  298. package/dist/test-setup/jsonl-fake-fs.d.ts.map +1 -0
  299. package/dist/test-setup/jsonl-fake-fs.js +49 -0
  300. package/dist/test-setup/jsonl-fake-fs.js.map +1 -0
  301. package/dist/tools/index.d.ts +4 -1
  302. package/dist/tools/index.d.ts.map +1 -1
  303. package/dist/tools/index.js +7 -15
  304. package/dist/tools/index.js.map +1 -1
  305. package/dist/types/checkpoint.d.ts +5 -0
  306. package/dist/types/checkpoint.d.ts.map +1 -1
  307. package/dist/types/passes-gate.d.ts +0 -13
  308. package/dist/types/passes-gate.d.ts.map +1 -1
  309. package/dist/types/project-config.d.ts +18 -0
  310. package/dist/types/project-config.d.ts.map +1 -1
  311. package/dist/types/trace.d.ts +13 -4
  312. package/dist/types/trace.d.ts.map +1 -1
  313. package/dist/types/trace.js +4 -3
  314. package/dist/types/trace.js.map +1 -1
  315. package/dist/utils/exec.d.ts +4 -27
  316. package/dist/utils/exec.d.ts.map +1 -1
  317. package/dist/utils/exec.js +4 -94
  318. package/dist/utils/exec.js.map +1 -1
  319. package/dist/utils/jsonl.d.ts +17 -7
  320. package/dist/utils/jsonl.d.ts.map +1 -1
  321. package/dist/utils/jsonl.js +144 -17
  322. package/dist/utils/jsonl.js.map +1 -1
  323. package/dist/utils/numeric-flag.d.ts +44 -0
  324. package/dist/utils/numeric-flag.d.ts.map +1 -0
  325. package/dist/utils/numeric-flag.js +62 -0
  326. package/dist/utils/numeric-flag.js.map +1 -0
  327. package/package.json +1 -1
  328. package/src/CONTEXT.md +5 -2
  329. package/src/__tests__/acceptance-gate.test.ts +7 -4
  330. package/src/__tests__/checker-extra.test.ts +3 -2
  331. package/src/__tests__/checker.test.ts +4 -3
  332. package/src/__tests__/checkpoint.test.ts +26 -9
  333. package/src/__tests__/context-files-resolution.test.ts +29 -15
  334. package/src/__tests__/contract-gate.test.ts +19 -40
  335. package/src/__tests__/error-classifier.test.ts +1 -1
  336. package/src/__tests__/exec.test.ts +45 -107
  337. package/src/__tests__/failure-recorder.test.ts +7 -5
  338. package/src/__tests__/hooks-pipeline.test.ts +34 -47
  339. package/src/__tests__/layering.test.ts +217 -25
  340. package/src/__tests__/passes-gate.test.ts +9 -4
  341. package/src/__tests__/performance-gate.test.ts +3 -15
  342. package/src/__tests__/project-config-loader-extra.test.ts +31 -57
  343. package/src/__tests__/project-config-loader.test.ts +6 -3
  344. package/src/__tests__/public-exports.test.ts +27 -6
  345. package/src/__tests__/public-type-surface.test.ts +360 -0
  346. package/src/__tests__/public-value-surface.test.ts +182 -0
  347. package/src/__tests__/review-gate.test.ts +4 -6
  348. package/src/__tests__/security-gate.test.ts +5 -20
  349. package/src/__tests__/skip-semantics.test.ts +5 -3
  350. package/src/__tests__/spec-validator.test.ts +3 -2
  351. package/src/__tests__/sub-barrels-explicit.test.ts +87 -0
  352. package/src/__tests__/test-fixture-hygiene.test.ts +53 -0
  353. package/src/__tests__/trace-analyzer-extra.test.ts +5 -3
  354. package/src/__tests__/trace-analyzer.test.ts +5 -3
  355. package/src/__tests__/trace-collector.test.ts +5 -3
  356. package/src/agents/index.ts +13 -2
  357. package/src/cli/__tests__/gate-command.test.ts +162 -0
  358. package/src/cli/commands/CONTEXT.md +29 -5
  359. package/src/cli/commands/__tests__/acceptance.test.ts +24 -25
  360. package/src/cli/commands/__tests__/bin-exit-mapping.test.ts +15 -0
  361. package/src/cli/commands/__tests__/check-drift.test.ts +42 -1
  362. package/src/cli/commands/__tests__/check-read-count.test.ts +167 -0
  363. package/src/cli/commands/__tests__/check-skip-output.test.ts +4 -1
  364. package/src/cli/commands/__tests__/check.test.ts +43 -36
  365. package/src/cli/commands/__tests__/command-gate-dead-options.test.ts +60 -0
  366. package/src/cli/commands/__tests__/command.test.ts +33 -17
  367. package/src/cli/commands/__tests__/constraints-retire.test.ts +52 -0
  368. package/src/cli/commands/__tests__/context-syncer.test.ts +141 -0
  369. package/src/cli/commands/__tests__/contract.test.ts +20 -20
  370. package/src/cli/commands/__tests__/failure.test.ts +5 -4
  371. package/src/cli/commands/__tests__/gate-decision.ts +30 -0
  372. package/src/cli/commands/__tests__/init-dead-options.test.ts +50 -0
  373. package/src/cli/commands/__tests__/init-governance-io.test.ts +139 -0
  374. package/src/cli/commands/__tests__/init-injection.test.ts +3 -3
  375. package/src/cli/commands/__tests__/init-ondisk.test.ts +867 -0
  376. package/src/cli/commands/__tests__/init.test.ts +82 -6
  377. package/src/cli/commands/__tests__/knowledge-audit-threshold.test.ts +146 -0
  378. package/src/cli/commands/__tests__/knowledge-flywheel-consistency.test.ts +1 -1
  379. package/src/cli/commands/__tests__/knowledge-tone-mapping.test.ts +244 -0
  380. package/src/cli/commands/__tests__/knowledge-view.test.ts +839 -0
  381. package/src/cli/commands/__tests__/knowledge.test.ts +33 -15
  382. package/src/cli/commands/__tests__/numeric-flag-assembly.test.ts +368 -0
  383. package/src/cli/commands/__tests__/passes-gate-dead-options.test.ts +89 -1
  384. package/src/cli/commands/__tests__/performance.test.ts +19 -21
  385. package/src/cli/commands/__tests__/posteval-plan.test.ts +5 -3
  386. package/src/cli/commands/__tests__/pre-push-hook.test.ts +181 -0
  387. package/src/cli/commands/__tests__/project-path-anchoring.test.ts +95 -2
  388. package/src/cli/commands/__tests__/project-path-convention.test.ts +103 -25
  389. package/src/cli/commands/__tests__/registry.test.ts +2 -0
  390. package/src/cli/commands/__tests__/report.test.ts +23 -1
  391. package/src/cli/commands/__tests__/review.test.ts +10 -17
  392. package/src/cli/commands/__tests__/scaffold.test.ts +505 -0
  393. package/src/cli/commands/__tests__/security-default-scan.test.ts +75 -0
  394. package/src/cli/commands/__tests__/security.test.ts +21 -24
  395. package/src/cli/commands/__tests__/spec-baseline-check.test.ts +3 -2
  396. package/src/cli/commands/__tests__/spec-baseline-index-cap.test.ts +131 -0
  397. package/src/cli/commands/__tests__/spec-baseline-read-count.test.ts +325 -0
  398. package/src/cli/commands/__tests__/sync-docs-agents.test.ts +19 -4
  399. package/src/cli/commands/__tests__/sync-docs-context-drift.test.ts +232 -0
  400. package/src/cli/commands/__tests__/sync-docs-module-order.test.ts +111 -0
  401. package/src/cli/commands/__tests__/sync-docs-read-count.test.ts +192 -0
  402. package/src/cli/commands/__tests__/sync-docs.test.ts +3 -2
  403. package/src/cli/commands/__tests__/validate.test.ts +1 -48
  404. package/src/cli/commands/acceptance.ts +24 -29
  405. package/src/cli/commands/check.ts +40 -17
  406. package/src/cli/commands/command.ts +9 -8
  407. package/src/cli/commands/constraints-retire.ts +57 -70
  408. package/src/cli/commands/contract.ts +44 -47
  409. package/src/cli/commands/definitions.ts +12 -6
  410. package/src/cli/commands/failure.ts +16 -3
  411. package/src/cli/commands/init.ts +242 -389
  412. package/src/cli/commands/knowledge-view.ts +224 -0
  413. package/src/cli/commands/knowledge.ts +643 -448
  414. package/src/cli/commands/passes-gate.ts +12 -3
  415. package/src/cli/commands/performance.ts +31 -38
  416. package/src/cli/commands/report.ts +3 -2
  417. package/src/cli/commands/review.ts +22 -28
  418. package/src/cli/commands/scaffold-templates.ts +406 -0
  419. package/src/cli/commands/scaffold.ts +302 -0
  420. package/src/cli/commands/security.ts +27 -23
  421. package/src/cli/commands/spec-baseline-check.ts +158 -33
  422. package/src/cli/commands/sync-docs/__tests__/context-export-surface.test.ts +102 -0
  423. package/src/cli/commands/sync-docs/__tests__/module-descriptions.test.ts +196 -0
  424. package/src/cli/commands/sync-docs/context-syncer.ts +137 -31
  425. package/src/cli/commands/sync-docs/index.ts +103 -28
  426. package/src/cli/commands/sync-docs/project-reader.ts +51 -7
  427. package/src/cli/commands/validate.ts +1 -104
  428. package/src/cli/gate-command.ts +87 -0
  429. package/src/completion-checkers/index.ts +10 -1
  430. package/src/context/CONTEXT.md +2 -1
  431. package/src/context/__tests__/knowledge-injector.test.ts +27 -0
  432. package/src/context/__tests__/session-manager.test.ts +19 -12
  433. package/src/context/knowledge-injector.ts +14 -7
  434. package/src/core/CONTEXT.md +10 -7
  435. package/src/core/__tests__/effective-set.test.ts +36 -60
  436. package/src/core/constraints/__tests__/context-reconcile.test.ts +246 -0
  437. package/src/core/constraints/__tests__/run-env.test.ts +377 -0
  438. package/src/core/constraints/__tests__/triggers.test.ts +70 -0
  439. package/src/core/constraints/agent-prompt-renderer.ts +1 -1
  440. package/src/core/constraints/capabilities-reconcile.ts +28 -4
  441. package/src/core/constraints/check-cache.ts +1 -1
  442. package/src/core/constraints/checker.ts +30 -14
  443. package/src/core/constraints/checkers/__tests__/context-doc-sync.test.ts +8 -3
  444. package/src/core/constraints/checkers/__tests__/governance-presence.test.ts +16 -7
  445. package/src/core/constraints/checkers/__tests__/no-hardcoded-credentials.test.ts +2 -1
  446. package/src/core/constraints/checkers/capability-sync.ts +27 -28
  447. package/src/core/constraints/checkers/context-doc-sync.ts +9 -7
  448. package/src/core/constraints/checkers/docs-freshness.ts +28 -33
  449. package/src/core/constraints/checkers/governance-presence.ts +10 -6
  450. package/src/core/constraints/checkers/types.ts +14 -8
  451. package/src/core/constraints/context-builder.ts +35 -26
  452. package/src/core/constraints/context-reconcile.ts +200 -0
  453. package/src/core/constraints/doc-freshness/__tests__/runner.test.ts +25 -0
  454. package/src/core/constraints/doc-freshness/runner.ts +18 -4
  455. package/src/core/constraints/git-evidence.ts +1 -1
  456. package/src/core/constraints/injection-drift.ts +19 -8
  457. package/src/core/constraints/run-env.ts +207 -0
  458. package/src/core/constraints/triggers.ts +33 -0
  459. package/src/core/effective-constraints.ts +17 -6
  460. package/src/core/effective-set.ts +8 -24
  461. package/src/core/index.ts +2 -1
  462. package/src/core/project-config-loader.ts +54 -102
  463. package/src/core/validators/__tests__/http-retry-sleep.test.ts +231 -0
  464. package/src/core/validators/check-handlers/http.ts +18 -7
  465. package/src/core/validators/index.ts +0 -1
  466. package/src/core/validators/passes-gate.ts +2 -3
  467. package/src/failure/CONTEXT.md +2 -1
  468. package/src/failure/classifier.ts +2 -2
  469. package/src/failure/index.ts +14 -2
  470. package/src/failure/recorder.ts +1 -1
  471. package/src/gates/CONTEXT.md +13 -7
  472. package/src/gates/__tests__/checker-gate.test.ts +1 -1
  473. package/src/gates/__tests__/command-single-predicate.test.ts +135 -0
  474. package/src/gates/__tests__/command.test.ts +8 -15
  475. package/src/gates/__tests__/contract.test.ts +5 -5
  476. package/src/gates/__tests__/gate-interface.test.ts +0 -17
  477. package/src/gates/__tests__/performance.test.ts +0 -13
  478. package/src/gates/__tests__/review.test.ts +0 -1
  479. package/src/gates/__tests__/runner.test.ts +1 -1
  480. package/src/gates/__tests__/security-default-scan.test.ts +97 -0
  481. package/src/gates/__tests__/security.test.ts +0 -13
  482. package/src/gates/checker-gate.ts +3 -2
  483. package/src/gates/command.ts +51 -74
  484. package/src/gates/contract.ts +0 -5
  485. package/src/gates/definitions.ts +6 -5
  486. package/src/gates/index.ts +0 -5
  487. package/src/gates/performance.ts +1 -6
  488. package/src/gates/runner.ts +1 -1
  489. package/src/gates/security.ts +9 -11
  490. package/src/gates/types.ts +20 -23
  491. package/src/hooks/CONTEXT.md +10 -9
  492. package/src/hooks/__tests__/bootstrap.test.ts +29 -6
  493. package/src/hooks/__tests__/pipeline.test.ts +28 -17
  494. package/src/hooks/__tests__/registry.test.ts +51 -3
  495. package/src/hooks/bootstrap.ts +35 -15
  496. package/src/hooks/config.ts +6 -2
  497. package/src/hooks/index.ts +10 -1
  498. package/src/hooks/pipeline.ts +4 -6
  499. package/src/hooks/registry.ts +31 -12
  500. package/src/hooks/types.ts +24 -7
  501. package/src/index.ts +1 -3
  502. package/src/knowledge/CONTEXT.md +14 -7
  503. package/src/knowledge/__tests__/audit-labels.test.ts +8 -5
  504. package/src/knowledge/__tests__/audit-scoring.test.ts +230 -0
  505. package/src/knowledge/__tests__/audit-write-count.test.ts +131 -0
  506. package/src/knowledge/__tests__/audit.test.ts +291 -208
  507. package/src/knowledge/__tests__/doctor.test.ts +3 -2
  508. package/src/knowledge/__tests__/ingest.test.ts +3 -2
  509. package/src/knowledge/__tests__/lifecycle.test.ts +57 -2
  510. package/src/knowledge/__tests__/migration.test.ts +35 -6
  511. package/src/knowledge/__tests__/query.test.ts +3 -2
  512. package/src/knowledge/__tests__/reference-tracker.test.ts +23 -2
  513. package/src/knowledge/__tests__/store.test.ts +149 -4
  514. package/src/knowledge/__tests__/tree-walker.test.ts +132 -0
  515. package/src/knowledge/audit-scoring.ts +589 -0
  516. package/src/knowledge/audit.ts +55 -599
  517. package/src/knowledge/import.ts +2 -0
  518. package/src/knowledge/index-generator.ts +4 -6
  519. package/src/knowledge/index.ts +27 -2
  520. package/src/knowledge/ingest.ts +1 -1
  521. package/src/knowledge/lifecycle.ts +5 -2
  522. package/src/knowledge/migration.ts +8 -2
  523. package/src/knowledge/query.ts +8 -1
  524. package/src/knowledge/reference-tracker.ts +5 -7
  525. package/src/knowledge/store.ts +75 -16
  526. package/src/knowledge/tree-walker.ts +29 -0
  527. package/src/knowledge/types.ts +19 -0
  528. package/src/monitoring/CONTEXT.md +5 -2
  529. package/src/monitoring/__tests__/context-tracker.test.ts +16 -8
  530. package/src/monitoring/__tests__/trace-file-anchoring.test.ts +80 -0
  531. package/src/monitoring/traces.ts +19 -5
  532. package/src/release/CONTEXT.md +1 -1
  533. package/src/release/__tests__/integrity.test.ts +21 -12
  534. package/src/test-setup/__tests__/jsonl-fake-fs.test.ts +98 -0
  535. package/src/test-setup/jsonl-fake-fs.ts +59 -0
  536. package/src/tools/index.ts +5 -1
  537. package/src/types/checkpoint.ts +6 -0
  538. package/src/types/passes-gate.ts +0 -17
  539. package/src/types/project-config.ts +21 -0
  540. package/src/types/trace.ts +14 -4
  541. package/src/utils/__tests__/file-walk.test.ts +3 -2
  542. package/src/utils/__tests__/jsonl-bounded-read.test.ts +106 -0
  543. package/src/utils/__tests__/jsonl-skip-disposition.test.ts +10 -6
  544. package/src/utils/__tests__/jsonl.test.ts +61 -14
  545. package/src/utils/__tests__/numeric-flag.test.ts +80 -0
  546. package/src/utils/__tests__/package-version.test.ts +2 -2
  547. package/src/utils/exec.ts +4 -64
  548. package/src/utils/jsonl.ts +159 -20
  549. package/src/utils/numeric-flag.ts +64 -0
  550. package/dist/failure/types.d.ts +0 -9
  551. package/dist/failure/types.d.ts.map +0 -1
  552. package/dist/failure/types.js +0 -25
  553. package/dist/failure/types.js.map +0 -1
  554. package/dist/gates/effective-gates.d.ts +0 -30
  555. package/dist/gates/effective-gates.d.ts.map +0 -1
  556. package/dist/gates/effective-gates.js +0 -81
  557. package/dist/gates/effective-gates.js.map +0 -1
  558. package/src/failure/types.ts +0 -9
  559. package/src/gates/__tests__/effective-gates.test.ts +0 -77
  560. package/src/gates/effective-gates.ts +0 -99
@@ -0,0 +1,424 @@
1
+ "use strict";
2
+ /**
3
+ * 脚手架模板数据(harness#132)
4
+ *
5
+ * 受管文件的正文正本,纯数据 + 纯渲染,零 IO、零上色——落盘语义与文案在
6
+ * `scaffold.ts` 的 plan 里,本模块只回答「这个文件的内容是什么」。
7
+ *
8
+ * 刻意留在代码内而不落 `templates/` 目录:`templates/` 无运行时消费者
9
+ * (harness 自身不读它),发布完整性清单(`release/integrity.ts`)也不覆盖它。
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.DEFAULT_CHECKPOINT_FILE = exports.DEFAULT_CHECKPOINTS = exports.CUSTOM_CONSTRAINTS_TEMPLATE = exports.GITHUB_ACTIONS_SNIPPET = exports.HARNESS_CHECK_WORKFLOW = exports.GITLAB_CI_SNIPPET = exports.PRE_PUSH_SNIPPET = exports.PRE_COMMIT_SNIPPET = void 0;
46
+ exports.renderPreCommitHook = renderPreCommitHook;
47
+ exports.renderPrePushHook = renderPrePushHook;
48
+ exports.renderGitLabCiJobs = renderGitLabCiJobs;
49
+ exports.renderGitLabCiFile = renderGitLabCiFile;
50
+ exports.renderGovernanceWorkflow = renderGovernanceWorkflow;
51
+ exports.renderChangelog = renderChangelog;
52
+ exports.renderContextDoc = renderContextDoc;
53
+ exports.renderCheckpoints = renderCheckpoints;
54
+ exports.renderResolutions = renderResolutions;
55
+ const path = __importStar(require("path"));
56
+ const yaml = __importStar(require("js-yaml"));
57
+ /** Git pre-commit 片段(#103:打印片段与落盘 hook 的唯一正本) */
58
+ exports.PRE_COMMIT_SNIPPET = `
59
+ echo "🔍 Running harness checks..."
60
+
61
+ STAGED=$(git diff --cached --name-only --diff-filter=ACMR 2>/dev/null || true)
62
+
63
+ # Harness 约束检查
64
+ npx @dommaker/harness check --staged
65
+ if [ $? -ne 0 ]; then
66
+ echo "❌ Iron law check failed"
67
+ exit 1
68
+ fi
69
+
70
+ # Plan coverage check (via PostEval)
71
+ if command -v npx > /dev/null 2>&1; then
72
+ PLAN_FILES=$(echo "$STAGED" | grep -E 'plans/.*\\.md$|\\.plan\\.md$' || true)
73
+ if [ -n "$PLAN_FILES" ]; then
74
+ echo "📋 Checking plan coverage..."
75
+ for plan in $PLAN_FILES; do
76
+ npx @dommaker/harness posteval-plan "$plan" || {
77
+ echo "🛑 Plan coverage incomplete. See above for missed items."
78
+ exit 1
79
+ }
80
+ done
81
+ fi
82
+ fi
83
+
84
+ echo "✅ All checks passed"
85
+ `;
86
+ /** 落盘的 pre-commit hook = shebang + 说明行 + 共享片段 */
87
+ function renderPreCommitHook() {
88
+ return `#!/bin/sh
89
+ # Harness pre-commit hook
90
+ ${exports.PRE_COMMIT_SNIPPET}`;
91
+ }
92
+ /**
93
+ * Git pre-push 片段(harness#144;#103:打印片段与落盘 hook 的唯一正本)
94
+ *
95
+ * 三道决定都写在这段正文里,不再由代码补:
96
+ * - **整仓全量**:`check` 不带 `--staged`,加一道 `validate`——它拦的是
97
+ * `git commit --no-verify` 绕过 pre-commit 的内容,重复是设计使然;
98
+ * - **不做增量**:不解析 pre-push 从 stdin 收到的 `<local_ref> <local_oid>
99
+ * <remote_ref> <remote_oid>` 清单,无论推什么整仓过一遍;子进程也不给它读;
100
+ * - **不内建逃生机制**:没有环境变量开关、没有超时、没有「慢则降级」,
101
+ * 唯一的口子是 git 原生 `git push --no-verify`。
102
+ */
103
+ exports.PRE_PUSH_SNIPPET = `
104
+ echo "🔍 Running harness pre-push checks (whole repo)..."
105
+
106
+ # 分工:pre-commit 查暂存的(增量、快反馈),pre-push 查整仓的(全量、兜底)。
107
+ # 同一次改动跑两遍是设计使然——这道拦的是 git commit --no-verify 绕出去的内容。
108
+ # 本地 hook 只是自检与提醒,真正的门禁在服务端 CI;逃生口只有 git 原生 push --no-verify。
109
+ # 不解析 pre-push 从 stdin 收到的 ref 清单,子进程一律不给它读(< /dev/null)。
110
+ npx @dommaker/harness check < /dev/null
111
+ if [ $? -ne 0 ]; then
112
+ echo "❌ Iron law check failed"
113
+ exit 1
114
+ fi
115
+
116
+ npx @dommaker/harness validate < /dev/null
117
+ if [ $? -ne 0 ]; then
118
+ echo "❌ Validate failed"
119
+ exit 1
120
+ fi
121
+
122
+ echo "✅ All pre-push checks passed"
123
+ `;
124
+ /** 落盘的 pre-push hook = shebang + 说明行 + 共享片段 */
125
+ function renderPrePushHook() {
126
+ return `#!/bin/sh
127
+ # Harness pre-push hook
128
+ ${exports.PRE_PUSH_SNIPPET}`;
129
+ }
130
+ // ── GitLab CI(harness#143):与 GH 版对仗的接线形状 ──────────────────────
131
+ /**
132
+ * GitLab 任务的触发条件(决议 ⑥:用 `rules:` 不用过时的 `only:`)
133
+ *
134
+ * MR 事件 + main/master 分支 push,与 GH 版 `on:` 段一一对应。三个任务各自带一份
135
+ * ——GitLab 的 `default:` 不支持 `rules`,自建实例版本参差,不赌语法糖。
136
+ */
137
+ const GITLAB_RULES = ` rules:
138
+ - if: $CI_PIPELINE_SOURCE == "merge_request_event"
139
+ - if: $CI_COMMIT_BRANCH == "main"
140
+ - if: $CI_COMMIT_BRANCH == "master"
141
+ `;
142
+ /** `.gitlab-ci.yml` 文件头:harness 只拥有其下的 `harness-*` 任务 */
143
+ const GITLAB_CI_HEADER = `# 由 harness init 生成 —— 以下 harness-* 任务是 harness 的 CI 接线
144
+ # 门禁真正生效还需在 GitLab 侧开分支保护:pipeline 成功才允许合并
145
+
146
+ image: node:20
147
+
148
+ stages:
149
+ - test
150
+
151
+ `;
152
+ /** GitLab harness-check 任务(`--print-snippets` 打印的 job 片段即此份) */
153
+ exports.GITLAB_CI_SNIPPET = `harness-check:
154
+ stage: test
155
+ script:
156
+ - npm ci
157
+ - npx @dommaker/harness check
158
+ - npx @dommaker/harness validate
159
+ - npx @dommaker/harness passes-gate
160
+ ${GITLAB_RULES}`;
161
+ /** harness 拥有的 GitLab 任务全集(治理档在场时含治理任务)——落盘正文与冲突片段共用 */
162
+ function renderGitLabCiJobs(governanceLevel) {
163
+ return governanceLevel
164
+ ? `${exports.GITLAB_CI_SNIPPET}\n${renderGovernanceWorkflow(governanceLevel, 'gitlab')}`
165
+ : exports.GITLAB_CI_SNIPPET;
166
+ }
167
+ /** `.gitlab-ci.yml` 落盘全文正本(= 文件头 + harness 拥有的任务) */
168
+ function renderGitLabCiFile(governanceLevel) {
169
+ return `${GITLAB_CI_HEADER}${renderGitLabCiJobs(governanceLevel)}`;
170
+ }
171
+ /** harness-check.yml 全文(落盘正文,冲突时打印的也是这一份) */
172
+ exports.HARNESS_CHECK_WORKFLOW = `name: Harness Check
173
+
174
+ on:
175
+ push:
176
+ branches: [main, master]
177
+ pull_request:
178
+ branches: [main, master]
179
+
180
+ jobs:
181
+ harness-check:
182
+ runs-on: ubuntu-latest
183
+
184
+ steps:
185
+ - uses: actions/checkout@v4
186
+
187
+ - name: Setup Node.js
188
+ uses: actions/setup-node@v4
189
+ with:
190
+ node-version: '20'
191
+
192
+ - name: Install dependencies
193
+ run: npm ci
194
+
195
+ - name: Run harness check
196
+ run: npx @dommaker/harness check
197
+
198
+ - name: Run harness validate
199
+ run: npx @dommaker/harness validate
200
+
201
+ - name: Run harness passes-gate
202
+ run: npx @dommaker/harness passes-gate
203
+ `;
204
+ /**
205
+ * GitHub Actions job 片段(`init --print-snippets` 的片段视图,harness#153)
206
+ *
207
+ * 由上面的落盘正本裁出 `jobs:` 段之后的一切,**不是第二份手抄文本**——它曾独立存在并
208
+ * 少掉 `validate` / `passes-gate` 两道门禁,照抄的用户拿到比同版本 `harness init` 弱一半
209
+ * 的 CI(#103 判据的第三种形态)。形状与 GitLab 侧对仗:打印的是正本的 job 段。
210
+ */
211
+ exports.GITHUB_ACTIONS_SNIPPET = exports.HARNESS_CHECK_WORKFLOW.slice(exports.HARNESS_CHECK_WORKFLOW.indexOf(' harness-check:'));
212
+ /**
213
+ * 治理 CI 面正文
214
+ *
215
+ * `minimal` 档不带 docs 新鲜度检查(其余档位带,且失败不阻断)。平台只改变接线形状,
216
+ * 三条命令与档位语义一致(harness#143):GitLab 侧的「失败不阻断」= `allow_failure: true`,
217
+ * 且因每个任务都是全新容器,docs 检查单列一个任务而非 GH 的一个 step。
218
+ */
219
+ function renderGovernanceWorkflow(level, platform) {
220
+ if (platform === 'gitlab') {
221
+ const docsJob = level === 'minimal'
222
+ ? ''
223
+ : `
224
+ harness-docs-freshness:
225
+ stage: test
226
+ script:
227
+ - npm ci
228
+ - npx @dommaker/harness sync-docs --check
229
+ ${GITLAB_RULES} allow_failure: true
230
+ `;
231
+ return `harness-governance:
232
+ stage: test
233
+ script:
234
+ - npm ci
235
+ - npx @dommaker/harness check
236
+ - npx @dommaker/harness passes-gate
237
+ ${GITLAB_RULES}${docsJob}`;
238
+ }
239
+ const docsCheckStep = level !== 'minimal'
240
+ ? `
241
+ - name: Check docs freshness
242
+ run: npx @dommaker/harness sync-docs --check
243
+ continue-on-error: true`
244
+ : '';
245
+ return `name: Harness Governance
246
+
247
+ on:
248
+ push:
249
+ branches: [main, master]
250
+ pull_request:
251
+ branches: [main, master]
252
+
253
+ jobs:
254
+ governance:
255
+ runs-on: ubuntu-latest
256
+
257
+ steps:
258
+ - uses: actions/checkout@v4
259
+
260
+ - name: Setup Node.js
261
+ uses: actions/setup-node@v4
262
+ with:
263
+ node-version: '20'
264
+
265
+ - name: Install dependencies
266
+ run: npm ci
267
+
268
+ - name: Constraint check
269
+ run: npx @dommaker/harness check
270
+
271
+ - name: Quality gate
272
+ run: npx @dommaker/harness passes-gate
273
+ ${docsCheckStep}
274
+ `;
275
+ }
276
+ /** custom-constraints.yml 示例正文 */
277
+ exports.CUSTOM_CONSTRAINTS_TEMPLATE = `# 自定义约束配置
278
+ #
279
+ # 此文件定义项目特定的约束,扩展或覆盖 harness 内置约束
280
+
281
+ # ========================================
282
+ # 自定义约束示例
283
+ # ========================================
284
+
285
+ custom_constraints:
286
+ # 示例 1:禁止 console.log
287
+ # my_project_no_console_log:
288
+ # id: my_project_no_console_log
289
+ # level: guideline
290
+ # rule: "NO CONSOLE.LOG IN PRODUCTION CODE"
291
+ # message: "生产代码禁止使用 console.log,请使用 logger 模块"
292
+ # trigger: ["code_implementation"]
293
+ # description: "使用项目统一的 logger 模块代替 console.log"
294
+
295
+ # 示例 2:禁止特定的导入
296
+ # my_project_no_moment_js:
297
+ # id: my_project_no_moment_js
298
+ # level: guideline
299
+ # rule: "NO MOMENT.JS IMPORTS"
300
+ # message: "禁止使用 moment.js,请使用 date-fns 或 dayjs"
301
+ # trigger: ["code_implementation"]
302
+
303
+ # 示例 3:要求特定的文件命名
304
+ # my_project_component_naming:
305
+ # id: my_project_component_naming
306
+ # level: tip
307
+ # rule: "REACT COMPONENTS SHOULD BE PASCAL CASE"
308
+ # message: "React 组件文件名应使用 PascalCase"
309
+ # trigger: ["file_creation"]
310
+ `;
311
+ /** CHANGELOG.md 正文(`format` 来自治理配置的 changelog.format) */
312
+ function renderChangelog(format) {
313
+ return format === 'keep-a-changelog'
314
+ ? `# Changelog
315
+
316
+ All notable changes to this project will be documented in this file.
317
+
318
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
319
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
320
+
321
+ ## [Unreleased]
322
+
323
+ ### Added
324
+ - Initial project setup with harness governance
325
+
326
+ ---
327
+
328
+ > 此文件可由 \`harness sync-docs\` 辅助维护
329
+ `
330
+ : `# Changelog
331
+
332
+ ## [Unreleased]
333
+
334
+ - Initial project setup with harness governance
335
+
336
+ ---
337
+
338
+ > 此文件可由 \`harness sync-docs\` 辅助维护
339
+ `;
340
+ }
341
+ /** 目录 CONTEXT.md 骨架正文(`dir` 是相对项目根的目录路径) */
342
+ function renderContextDoc(dir) {
343
+ const dirName = path.basename(dir);
344
+ return `# ${dirName}
345
+
346
+ > 此文件描述 ${dir} 目录的职责和上下文
347
+ > 请阅读本目录的源代码,然后填写以下各节。
348
+ > 如果使用 AI 编码助手,将本文件内容作为 prompt 请求它分析并填写。
349
+
350
+ ## 职责
351
+
352
+ <!-- 本目录的核心职责是什么 -->
353
+
354
+ ## 核心导出
355
+
356
+ <!-- 本目录对外暴露的主要模块/函数 -->
357
+
358
+ ## 依赖关系
359
+
360
+ <!-- 本目录依赖哪些其他模块,谁依赖本目录 -->
361
+
362
+ ## 注意事项
363
+
364
+ <!-- 开发时需要注意的约束或约定 -->
365
+ `;
366
+ }
367
+ /**
368
+ * 默认检查点列表
369
+ *
370
+ * 注:no-console 检查点已移除(工单 23/24)——CLI 产品 src/ 必然有合法 console 输出,
371
+ * 且旧配置 expected:'' 语义恒错;output_* 族修复为真正执行 config.command 后该检查会恒失败。
372
+ */
373
+ exports.DEFAULT_CHECKPOINTS = [
374
+ {
375
+ id: 'build-success',
376
+ name: '构建成功',
377
+ checks: [
378
+ {
379
+ id: 'build-command',
380
+ type: 'command_success',
381
+ config: { command: 'npm run build' },
382
+ message: '构建命令必须成功执行',
383
+ },
384
+ ],
385
+ },
386
+ {
387
+ id: 'test-pass',
388
+ name: '测试通过',
389
+ checks: [
390
+ {
391
+ id: 'test-command',
392
+ type: 'command_success',
393
+ config: { command: 'npm test' },
394
+ message: '测试命令必须成功执行',
395
+ },
396
+ ],
397
+ },
398
+ ];
399
+ /** 检查点文件的相对路径约定(validate 的缺省读取面与 init 的落盘面同一处) */
400
+ exports.DEFAULT_CHECKPOINT_FILE = '.harness/checkpoints.yml';
401
+ /** checkpoints.yml 正文 */
402
+ function renderCheckpoints() {
403
+ return yaml.dump({ checkpoints: exports.DEFAULT_CHECKPOINTS }, { indent: 2 });
404
+ }
405
+ /** 默认 Resolutions(RKB — 约束 → 已知解法映射) */
406
+ const DEFAULT_RESOLUTIONS = {
407
+ no_fuzzy_completion_claim: {
408
+ title: 'commit message 缺少验证证据',
409
+ fix: '在 commit message body 中附上验证输出:\n`npx @dommaker/harness check --staged` | `npx @dommaker/harness validate` | `npm test -- --coverage`\n确认全部通过后重新 commit。',
410
+ },
411
+ capability_sync: {
412
+ title: '缺少 CAPABILITIES.md',
413
+ fix: '在项目根目录创建 CAPABILITIES.md,列出所有模块能力清单。运行 `npx @dommaker/harness sync-docs` 可自动生成模板。',
414
+ },
415
+ context_doc_sync: {
416
+ title: '关键目录缺少 CONTEXT.md',
417
+ fix: '在 required_dirs 目录下创建 CONTEXT.md。运行 `npx @dommaker/harness sync-docs` 可自动生成模板。',
418
+ },
419
+ };
420
+ /** resolutions.json 正文 */
421
+ function renderResolutions() {
422
+ return JSON.stringify(DEFAULT_RESOLUTIONS, null, 2);
423
+ }
424
+ //# sourceMappingURL=scaffold-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-templates.js","sourceRoot":"","sources":["../../../src/cli/commands/scaffold-templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * 脚手架落盘模块(harness#132,架构评审候选3)
3
+ *
4
+ * 一个决策只写一次:受管文件(managed file — harness 模板拥有正本、用户也可能
5
+ * 持有的落盘文件)在不在场、在场时算跳过还是算请用户手工合并、要不要建父目录、
6
+ * 打什么颜色的哪句话,全部收在本模块。此前这段判定复印在 init 6 处 + validate 2 处。
7
+ *
8
+ * 三态:
9
+ * - `created` 不在场 → 落盘模板正文
10
+ * - `exists` 在场 → 灰字告知跳过(**不细分内容是否等于模板**,内容比较是独立特性)
11
+ * - `manual` 在场 → 打印片段请用户手工合并
12
+ *
13
+ * 纪律:本模块不持有覆盖/跳过策略——「哪些文件要落」由命令层翻成 plan 列表传进来,
14
+ * 本模块只见 plan;模板正文住在 `scaffold-templates.ts`。
15
+ */
16
+ import type { CiPlatform } from '../../types/project-config';
17
+ import { type CommandIO } from '../command-contract';
18
+ /** 三态判定结果 */
19
+ export type ScaffoldOutcome = 'created' | 'exists' | 'manual';
20
+ /**
21
+ * 落盘注入面(缺省 node fs;测试注入内存替身即可断言「真写出了什么内容」)
22
+ */
23
+ export interface ScaffoldFileSystem {
24
+ exists(target: string): Promise<boolean>;
25
+ mkdir(dir: string): Promise<void>;
26
+ writeFile(target: string, content: string): Promise<void>;
27
+ chmod(target: string, mode: number): Promise<void>;
28
+ }
29
+ export declare const nodeScaffoldFs: ScaffoldFileSystem;
30
+ /**
31
+ * 在场处置:
32
+ * - `skip` harness 不再主张这份正文,灰字告知即可
33
+ * - `merge` 用户可能持有自己的内容,打印片段(与落盘正文同源)请其手工合并
34
+ */
35
+ export type OnPresent = {
36
+ outcome: 'skip';
37
+ notice: string;
38
+ } | {
39
+ outcome: 'merge';
40
+ notice: string;
41
+ /** 提示与指引之间的灰字补充行(如冲突来源清单) */
42
+ detail?: string[];
43
+ instruction: string;
44
+ snippet: string;
45
+ };
46
+ /** 一个受管文件 = 三态判定所需的全部数据 */
47
+ export interface ManagedFile {
48
+ /** 落盘目标(绝对路径) */
49
+ target: string;
50
+ /** harness 拥有的模板正文 */
51
+ content: string;
52
+ /** 落盘态绿字 */
53
+ created: string;
54
+ /** 在场态处置 */
55
+ onPresent: OnPresent;
56
+ /** 在场判定覆写,缺省 = target 自身在场(冲突面可以宽于 target,如 CI 配置目录) */
57
+ present?: () => Promise<boolean>;
58
+ /** 落盘权限位(Git hook 需要可执行位) */
59
+ mode?: number;
60
+ }
61
+ /**
62
+ * 落一个受管文件:判定 → 建目录 → 写盘 → 上色打印
63
+ */
64
+ export declare function writeManagedFile(file: ManagedFile, io: CommandIO, fs?: ScaffoldFileSystem): Promise<ScaffoldOutcome>;
65
+ /** 按顺序落一组受管文件 */
66
+ export declare function runPlan(plan: readonly ManagedFile[], io: CommandIO, fs?: ScaffoldFileSystem): Promise<ScaffoldOutcome[]>;
67
+ /** .git/hooks/pre-commit(冲突片段 = 落盘正文去掉 shebang 头,逐字同源) */
68
+ export declare function preCommitHookFile(projectPath: string): ManagedFile;
69
+ /**
70
+ * .git/hooks/pre-push(harness#144 的第 9 站点,冲突片段与落盘正文逐字同源)
71
+ *
72
+ * 与 pre-commit 的分工:那道查暂存的(增量、快反馈),这道查整仓的(全量、兜底)。
73
+ * 本地 hook 是自检与提醒,门禁真正的落点仍是服务端 CI。
74
+ */
75
+ export declare function prePushHookFile(projectPath: string): ManagedFile;
76
+ /**
77
+ * 服务端 CI 门禁站点(平台维度,harness#143)
78
+ *
79
+ * - `github` → `.github/workflows/harness-check.yml`;冲突判定宽于 target 自身:
80
+ * 工作流目录里已有任何 CI 配置就算冲突,片段是完整 workflow 正文(打印的即落盘的,#103 判据)
81
+ * - `gitlab` → `.gitlab-ci.yml`;冲突面就是该文件自身在场,片段是 harness 拥有的任务正文。
82
+ * GitLab 没有「第二个 CI 文件位」,所以 `-g` 档的治理任务并入同一份正文
83
+ * ——这也是 `governanceLevel` 只对 gitlab 形有意义的原因(GH 侧治理站是独立的
84
+ * `governanceWorkflowFile`)。
85
+ *
86
+ * `none`(不接线)不进来:那是命令层的 plan 里没有这个站点,scaffold 不持有跳过策略。
87
+ */
88
+ export declare function harnessCheckCiFile(projectPath: string, platform: CiPlatform, existingCiWorkflows: string[], governanceLevel?: string): ManagedFile;
89
+ /** .harness/custom-constraints.yml 示例 */
90
+ export declare function customConstraintsFile(projectPath: string): ManagedFile;
91
+ /** .harness/checkpoints.yml 示例(原住 validate.ts,路径约定与 validate 共用) */
92
+ export declare function checkpointsFile(projectPath: string): ManagedFile;
93
+ /** .harness/resolutions.json(RKB 狗粮 — 约束 → 已知解法映射,原住 validate.ts) */
94
+ export declare function resolutionsFile(projectPath: string): ManagedFile;
95
+ /** CHANGELOG.md 骨架 */
96
+ export declare function changelogFile(projectPath: string, format: string): ManagedFile;
97
+ /** `<dir>/CONTEXT.md` 骨架 */
98
+ export declare function contextDocFile(projectPath: string, dir: string): ManagedFile;
99
+ /**
100
+ * .github/workflows/harness-governance.yml(治理 CI 面,仅 github 形)
101
+ *
102
+ * gitlab 形的治理任务并入 `.gitlab-ci.yml`(见 `harnessCheckCiFile`),无本站点。
103
+ */
104
+ export declare function governanceWorkflowFile(projectPath: string, level: string): ManagedFile;
105
+ //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/scaffold.ts"],"names":[],"mappings":"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"}