@zxyycom/vibe-check 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (767) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -0
  3. package/dist/esm/check/check.mjs +5 -0
  4. package/dist/esm/check/check.mjs.map +1 -0
  5. package/dist/esm/check/descriptor-validation.mjs +37 -0
  6. package/dist/esm/check/descriptor-validation.mjs.map +1 -0
  7. package/dist/esm/check/descriptor.mjs +2 -0
  8. package/dist/esm/check/descriptor.mjs.map +1 -0
  9. package/dist/esm/check/inherited-collection.mjs +62 -0
  10. package/dist/esm/check/inherited-collection.mjs.map +1 -0
  11. package/dist/esm/check/options-snapshot.mjs +75 -0
  12. package/dist/esm/check/options-snapshot.mjs.map +1 -0
  13. package/dist/esm/check-settlement/fact-validation.mjs +216 -0
  14. package/dist/esm/check-settlement/fact-validation.mjs.map +1 -0
  15. package/dist/esm/check-settlement/facts.mjs +2 -0
  16. package/dist/esm/check-settlement/facts.mjs.map +1 -0
  17. package/dist/esm/check-settlement/outcome-normalization.mjs +80 -0
  18. package/dist/esm/check-settlement/outcome-normalization.mjs.map +1 -0
  19. package/dist/esm/check-settlement/record-store.mjs +59 -0
  20. package/dist/esm/check-settlement/record-store.mjs.map +1 -0
  21. package/dist/esm/check-settlement/session.mjs +179 -0
  22. package/dist/esm/check-settlement/session.mjs.map +1 -0
  23. package/dist/esm/data-boundary/canonical-data.mjs +159 -0
  24. package/dist/esm/data-boundary/canonical-data.mjs.map +1 -0
  25. package/dist/esm/data-boundary/canonical-json.mjs +2 -0
  26. package/dist/esm/data-boundary/canonical-json.mjs.map +1 -0
  27. package/dist/esm/data-boundary/closed-values.mjs +98 -0
  28. package/dist/esm/data-boundary/closed-values.mjs.map +1 -0
  29. package/dist/esm/data-boundary/value-shapes.mjs +13 -0
  30. package/dist/esm/data-boundary/value-shapes.mjs.map +1 -0
  31. package/dist/esm/finding-waivers/reconciliation.mjs +84 -0
  32. package/dist/esm/finding-waivers/reconciliation.mjs.map +1 -0
  33. package/dist/esm/index.mjs +26 -0
  34. package/dist/esm/index.mjs.map +1 -0
  35. package/dist/esm/machine-output/v4/atomic-publication.mjs +102 -0
  36. package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -0
  37. package/dist/esm/machine-output/v4/freeze-publication-value.mjs +14 -0
  38. package/dist/esm/machine-output/v4/freeze-publication-value.mjs.map +1 -0
  39. package/dist/esm/machine-output/v4/projection.mjs +23 -0
  40. package/dist/esm/machine-output/v4/projection.mjs.map +1 -0
  41. package/dist/esm/machine-output/v4/publication-invariants.mjs +59 -0
  42. package/dist/esm/machine-output/v4/publication-invariants.mjs.map +1 -0
  43. package/dist/esm/machine-output/v4/publication-model.mjs +19 -0
  44. package/dist/esm/machine-output/v4/publication-model.mjs.map +1 -0
  45. package/dist/esm/machine-output/v4/publish.mjs +20 -0
  46. package/dist/esm/machine-output/v4/publish.mjs.map +1 -0
  47. package/dist/esm/machine-output/v4/records-fingerprint.mjs +9 -0
  48. package/dist/esm/machine-output/v4/records-fingerprint.mjs.map +1 -0
  49. package/dist/esm/machine-output/v4/schema-identities.mjs +8 -0
  50. package/dist/esm/machine-output/v4/schema-identities.mjs.map +1 -0
  51. package/dist/esm/machine-output/v4/schema.mjs +50 -0
  52. package/dist/esm/machine-output/v4/schema.mjs.map +1 -0
  53. package/dist/esm/machine-output/v4/serializers.mjs +9 -0
  54. package/dist/esm/machine-output/v4/serializers.mjs.map +1 -0
  55. package/dist/esm/machine-output/v4/validation-result.mjs +16 -0
  56. package/dist/esm/machine-output/v4/validation-result.mjs.map +1 -0
  57. package/dist/esm/machine-output/v4/validation.mjs +131 -0
  58. package/dist/esm/machine-output/v4/validation.mjs.map +1 -0
  59. package/dist/esm/package-checks/code-quality-findings/policy.mjs +49 -0
  60. package/dist/esm/package-checks/code-quality-findings/policy.mjs.map +1 -0
  61. package/dist/esm/package-checks/duplicate-detection/area-policy.mjs +71 -0
  62. package/dist/esm/package-checks/duplicate-detection/area-policy.mjs.map +1 -0
  63. package/dist/esm/package-checks/duplicate-detection/cache/cache-contract.mjs +2 -0
  64. package/dist/esm/package-checks/duplicate-detection/cache/cache-contract.mjs.map +1 -0
  65. package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs +37 -0
  66. package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs.map +1 -0
  67. package/dist/esm/package-checks/duplicate-detection/cache/key.mjs +38 -0
  68. package/dist/esm/package-checks/duplicate-detection/cache/key.mjs.map +1 -0
  69. package/dist/esm/package-checks/duplicate-detection/cache/payload.mjs +47 -0
  70. package/dist/esm/package-checks/duplicate-detection/cache/payload.mjs.map +1 -0
  71. package/dist/esm/package-checks/duplicate-detection/cache/store.mjs +44 -0
  72. package/dist/esm/package-checks/duplicate-detection/cache/store.mjs.map +1 -0
  73. package/dist/esm/package-checks/duplicate-detection/default-check.mjs +39 -0
  74. package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -0
  75. package/dist/esm/package-checks/duplicate-detection/execution.mjs +124 -0
  76. package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -0
  77. package/dist/esm/package-checks/duplicate-detection/final-data.mjs +6 -0
  78. package/dist/esm/package-checks/duplicate-detection/final-data.mjs.map +1 -0
  79. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +77 -0
  80. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -0
  81. package/dist/esm/package-checks/duplicate-detection/jscpd/command-path.mjs +6 -0
  82. package/dist/esm/package-checks/duplicate-detection/jscpd/command-path.mjs.map +1 -0
  83. package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs +87 -0
  84. package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs.map +1 -0
  85. package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs +94 -0
  86. package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs.map +1 -0
  87. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner-contract.mjs +2 -0
  88. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner-contract.mjs.map +1 -0
  89. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs +180 -0
  90. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs.map +1 -0
  91. package/dist/esm/package-checks/duplicate-detection/jscpd/scoped-fragments.mjs +10 -0
  92. package/dist/esm/package-checks/duplicate-detection/jscpd/scoped-fragments.mjs.map +1 -0
  93. package/dist/esm/package-checks/duplicate-detection/measurement-model.mjs +2 -0
  94. package/dist/esm/package-checks/duplicate-detection/measurement-model.mjs.map +1 -0
  95. package/dist/esm/package-checks/duplicate-detection/measurement.mjs +151 -0
  96. package/dist/esm/package-checks/duplicate-detection/measurement.mjs.map +1 -0
  97. package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs +126 -0
  98. package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs.map +1 -0
  99. package/dist/esm/package-checks/duplicate-detection/options-validation.mjs +60 -0
  100. package/dist/esm/package-checks/duplicate-detection/options-validation.mjs.map +1 -0
  101. package/dist/esm/package-checks/duplicate-detection/options.mjs +2 -0
  102. package/dist/esm/package-checks/duplicate-detection/options.mjs.map +1 -0
  103. package/dist/esm/package-checks/duplicate-detection/project-revision.mjs +5 -0
  104. package/dist/esm/package-checks/duplicate-detection/project-revision.mjs.map +1 -0
  105. package/dist/esm/package-checks/duplicate-detection/records.mjs +119 -0
  106. package/dist/esm/package-checks/duplicate-detection/records.mjs.map +1 -0
  107. package/dist/esm/package-checks/file-metrics/constructor.mjs +39 -0
  108. package/dist/esm/package-checks/file-metrics/constructor.mjs.map +1 -0
  109. package/dist/esm/package-checks/file-metrics/execution.mjs +170 -0
  110. package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -0
  111. package/dist/esm/package-checks/file-metrics/final-data.mjs +6 -0
  112. package/dist/esm/package-checks/file-metrics/final-data.mjs.map +1 -0
  113. package/dist/esm/package-checks/file-metrics/measurement-model.mjs +2 -0
  114. package/dist/esm/package-checks/file-metrics/measurement-model.mjs.map +1 -0
  115. package/dist/esm/package-checks/file-metrics/measurement.mjs +33 -0
  116. package/dist/esm/package-checks/file-metrics/measurement.mjs.map +1 -0
  117. package/dist/esm/package-checks/file-metrics/options-resolution.mjs +171 -0
  118. package/dist/esm/package-checks/file-metrics/options-resolution.mjs.map +1 -0
  119. package/dist/esm/package-checks/file-metrics/options-validation.mjs +82 -0
  120. package/dist/esm/package-checks/file-metrics/options-validation.mjs.map +1 -0
  121. package/dist/esm/package-checks/file-metrics/options.mjs +2 -0
  122. package/dist/esm/package-checks/file-metrics/options.mjs.map +1 -0
  123. package/dist/esm/package-checks/file-metrics/records.mjs +109 -0
  124. package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -0
  125. package/dist/esm/package-checks/file-metrics/scc/availability.mjs +59 -0
  126. package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -0
  127. package/dist/esm/package-checks/file-metrics/scc/csv.mjs +17 -0
  128. package/dist/esm/package-checks/file-metrics/scc/csv.mjs.map +1 -0
  129. package/dist/esm/package-checks/file-metrics/scc/parser.mjs +145 -0
  130. package/dist/esm/package-checks/file-metrics/scc/parser.mjs.map +1 -0
  131. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +54 -0
  132. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -0
  133. package/dist/esm/package-checks/final-data-parsing.mjs +35 -0
  134. package/dist/esm/package-checks/final-data-parsing.mjs.map +1 -0
  135. package/dist/esm/package-checks/function-metrics/analysis.mjs +96 -0
  136. package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -0
  137. package/dist/esm/package-checks/function-metrics/constructor.mjs +43 -0
  138. package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -0
  139. package/dist/esm/package-checks/function-metrics/execution.mjs +178 -0
  140. package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -0
  141. package/dist/esm/package-checks/function-metrics/final-data.mjs +6 -0
  142. package/dist/esm/package-checks/function-metrics/final-data.mjs.map +1 -0
  143. package/dist/esm/package-checks/function-metrics/lizard/availability.mjs +64 -0
  144. package/dist/esm/package-checks/function-metrics/lizard/availability.mjs.map +1 -0
  145. package/dist/esm/package-checks/function-metrics/lizard/csv.mjs +17 -0
  146. package/dist/esm/package-checks/function-metrics/lizard/csv.mjs.map +1 -0
  147. package/dist/esm/package-checks/function-metrics/lizard/parser.mjs +138 -0
  148. package/dist/esm/package-checks/function-metrics/lizard/parser.mjs.map +1 -0
  149. package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs +35 -0
  150. package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs.map +1 -0
  151. package/dist/esm/package-checks/function-metrics/measurement-model.mjs +2 -0
  152. package/dist/esm/package-checks/function-metrics/measurement-model.mjs.map +1 -0
  153. package/dist/esm/package-checks/function-metrics/measurement.mjs +35 -0
  154. package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -0
  155. package/dist/esm/package-checks/function-metrics/options-resolution.mjs +171 -0
  156. package/dist/esm/package-checks/function-metrics/options-resolution.mjs.map +1 -0
  157. package/dist/esm/package-checks/function-metrics/options-validation.mjs +71 -0
  158. package/dist/esm/package-checks/function-metrics/options-validation.mjs.map +1 -0
  159. package/dist/esm/package-checks/function-metrics/options.mjs +2 -0
  160. package/dist/esm/package-checks/function-metrics/options.mjs.map +1 -0
  161. package/dist/esm/package-checks/function-metrics/records.mjs +133 -0
  162. package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -0
  163. package/dist/esm/package-checks/function-metrics/target-files.mjs +75 -0
  164. package/dist/esm/package-checks/function-metrics/target-files.mjs.map +1 -0
  165. package/dist/esm/package-checks/host-environment/error-message.mjs +4 -0
  166. package/dist/esm/package-checks/host-environment/error-message.mjs.map +1 -0
  167. package/dist/esm/package-checks/host-environment/filesystem.mjs +81 -0
  168. package/dist/esm/package-checks/host-environment/filesystem.mjs.map +1 -0
  169. package/dist/esm/package-checks/host-environment/git.mjs +51 -0
  170. package/dist/esm/package-checks/host-environment/git.mjs.map +1 -0
  171. package/dist/esm/package-checks/host-environment/path.mjs +18 -0
  172. package/dist/esm/package-checks/host-environment/path.mjs.map +1 -0
  173. package/dist/esm/package-checks/host-environment/process/command.mjs +13 -0
  174. package/dist/esm/package-checks/host-environment/process/command.mjs.map +1 -0
  175. package/dist/esm/package-checks/host-environment/process/contract.mjs +2 -0
  176. package/dist/esm/package-checks/host-environment/process/contract.mjs.map +1 -0
  177. package/dist/esm/package-checks/host-environment/process/env.mjs +19 -0
  178. package/dist/esm/package-checks/host-environment/process/env.mjs.map +1 -0
  179. package/dist/esm/package-checks/host-environment/process/failure.mjs +34 -0
  180. package/dist/esm/package-checks/host-environment/process/failure.mjs.map +1 -0
  181. package/dist/esm/package-checks/host-environment/process/result.mjs +33 -0
  182. package/dist/esm/package-checks/host-environment/process/result.mjs.map +1 -0
  183. package/dist/esm/package-checks/host-environment/process/runner.mjs +30 -0
  184. package/dist/esm/package-checks/host-environment/process/runner.mjs.map +1 -0
  185. package/dist/esm/package-checks/json-document/strict-document.mjs +163 -0
  186. package/dist/esm/package-checks/json-document/strict-document.mjs.map +1 -0
  187. package/dist/esm/package-checks/json-schema-validation/default-check.mjs +39 -0
  188. package/dist/esm/package-checks/json-schema-validation/default-check.mjs.map +1 -0
  189. package/dist/esm/package-checks/json-schema-validation/execution-stages.mjs +141 -0
  190. package/dist/esm/package-checks/json-schema-validation/execution-stages.mjs.map +1 -0
  191. package/dist/esm/package-checks/json-schema-validation/final-data.mjs +64 -0
  192. package/dist/esm/package-checks/json-schema-validation/final-data.mjs.map +1 -0
  193. package/dist/esm/package-checks/json-schema-validation/issue-collector.mjs +35 -0
  194. package/dist/esm/package-checks/json-schema-validation/issue-collector.mjs.map +1 -0
  195. package/dist/esm/package-checks/json-schema-validation/json-schema-validation.mjs +118 -0
  196. package/dist/esm/package-checks/json-schema-validation/json-schema-validation.mjs.map +1 -0
  197. package/dist/esm/package-checks/json-schema-validation/options-resolution.mjs +45 -0
  198. package/dist/esm/package-checks/json-schema-validation/options-resolution.mjs.map +1 -0
  199. package/dist/esm/package-checks/json-schema-validation/options-validation.mjs +212 -0
  200. package/dist/esm/package-checks/json-schema-validation/options-validation.mjs.map +1 -0
  201. package/dist/esm/package-checks/json-schema-validation/options.mjs +2 -0
  202. package/dist/esm/package-checks/json-schema-validation/options.mjs.map +1 -0
  203. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs +128 -0
  204. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs.map +1 -0
  205. package/dist/esm/package-checks/json-schema-validation/remote-response.mjs +71 -0
  206. package/dist/esm/package-checks/json-schema-validation/remote-response.mjs.map +1 -0
  207. package/dist/esm/package-checks/json-schema-validation/schema-engine.mjs +190 -0
  208. package/dist/esm/package-checks/json-schema-validation/schema-engine.mjs.map +1 -0
  209. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs +234 -0
  210. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs.map +1 -0
  211. package/dist/esm/package-checks/json-validation/default-check.mjs +39 -0
  212. package/dist/esm/package-checks/json-validation/default-check.mjs.map +1 -0
  213. package/dist/esm/package-checks/json-validation/final-data.mjs +27 -0
  214. package/dist/esm/package-checks/json-validation/final-data.mjs.map +1 -0
  215. package/dist/esm/package-checks/json-validation/json-validation.mjs +138 -0
  216. package/dist/esm/package-checks/json-validation/json-validation.mjs.map +1 -0
  217. package/dist/esm/package-checks/json-validation/options-resolution.mjs +33 -0
  218. package/dist/esm/package-checks/json-validation/options-resolution.mjs.map +1 -0
  219. package/dist/esm/package-checks/json-validation/options-validation.mjs +16 -0
  220. package/dist/esm/package-checks/json-validation/options-validation.mjs.map +1 -0
  221. package/dist/esm/package-checks/json-validation/options.mjs +2 -0
  222. package/dist/esm/package-checks/json-validation/options.mjs.map +1 -0
  223. package/dist/esm/package-checks/maintenance-reminders/assessment-results.mjs +73 -0
  224. package/dist/esm/package-checks/maintenance-reminders/assessment-results.mjs.map +1 -0
  225. package/dist/esm/package-checks/maintenance-reminders/final-data.mjs +153 -0
  226. package/dist/esm/package-checks/maintenance-reminders/final-data.mjs.map +1 -0
  227. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs +155 -0
  228. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs.map +1 -0
  229. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs +58 -0
  230. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs.map +1 -0
  231. package/dist/esm/package-checks/maintenance-reminders/measurement.mjs +125 -0
  232. package/dist/esm/package-checks/maintenance-reminders/measurement.mjs.map +1 -0
  233. package/dist/esm/package-checks/maintenance-reminders/options-validation.mjs +72 -0
  234. package/dist/esm/package-checks/maintenance-reminders/options-validation.mjs.map +1 -0
  235. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +55 -0
  236. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -0
  237. package/dist/esm/package-checks/markdown-link-validation/execution.mjs +199 -0
  238. package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -0
  239. package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs +109 -0
  240. package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs.map +1 -0
  241. package/dist/esm/package-checks/markdown-link-validation/final-data.mjs +28 -0
  242. package/dist/esm/package-checks/markdown-link-validation/final-data.mjs.map +1 -0
  243. package/dist/esm/package-checks/markdown-link-validation/local-resolution.mjs +158 -0
  244. package/dist/esm/package-checks/markdown-link-validation/local-resolution.mjs.map +1 -0
  245. package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs +17 -0
  246. package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs.map +1 -0
  247. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs +191 -0
  248. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs.map +1 -0
  249. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs +83 -0
  250. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs.map +1 -0
  251. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs +50 -0
  252. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs.map +1 -0
  253. package/dist/esm/package-checks/markdown-link-validation/options.mjs +2 -0
  254. package/dist/esm/package-checks/markdown-link-validation/options.mjs.map +1 -0
  255. package/dist/esm/package-checks/markdown-link-validation/records.mjs +32 -0
  256. package/dist/esm/package-checks/markdown-link-validation/records.mjs.map +1 -0
  257. package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs +196 -0
  258. package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs.map +1 -0
  259. package/dist/esm/package-checks/markdown-link-validation/target-descriptor.mjs +23 -0
  260. package/dist/esm/package-checks/markdown-link-validation/target-descriptor.mjs.map +1 -0
  261. package/dist/esm/package-checks/markdown-link-validation/traversal-result.mjs +41 -0
  262. package/dist/esm/package-checks/markdown-link-validation/traversal-result.mjs.map +1 -0
  263. package/dist/esm/package-checks/project-files/collection.mjs +142 -0
  264. package/dist/esm/package-checks/project-files/collection.mjs.map +1 -0
  265. package/dist/esm/package-checks/project-files/config-glob.mjs +11 -0
  266. package/dist/esm/package-checks/project-files/config-glob.mjs.map +1 -0
  267. package/dist/esm/package-checks/project-files/configuration.mjs +104 -0
  268. package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -0
  269. package/dist/esm/package-checks/project-files/exact-input-measurement.mjs +24 -0
  270. package/dist/esm/package-checks/project-files/exact-input-measurement.mjs.map +1 -0
  271. package/dist/esm/package-checks/project-files/file-fingerprint.mjs +36 -0
  272. package/dist/esm/package-checks/project-files/file-fingerprint.mjs.map +1 -0
  273. package/dist/esm/package-checks/project-files/gitlink-revision.mjs +57 -0
  274. package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -0
  275. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +72 -0
  276. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -0
  277. package/dist/esm/package-checks/project-files/input-eligibility.mjs +13 -0
  278. package/dist/esm/package-checks/project-files/input-eligibility.mjs.map +1 -0
  279. package/dist/esm/package-checks/project-files/reported-path.mjs +30 -0
  280. package/dist/esm/package-checks/project-files/reported-path.mjs.map +1 -0
  281. package/dist/esm/package-checks/project-files/revision-paths.mjs +19 -0
  282. package/dist/esm/package-checks/project-files/revision-paths.mjs.map +1 -0
  283. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs +102 -0
  284. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -0
  285. package/dist/esm/project-definition/check-tree/authoring.mjs +242 -0
  286. package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -0
  287. package/dist/esm/project-definition/check-tree/materialization.mjs +50 -0
  288. package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -0
  289. package/dist/esm/project-definition/check-tree/resolution.mjs +60 -0
  290. package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -0
  291. package/dist/esm/project-definition/output-defaults.mjs +7 -0
  292. package/dist/esm/project-definition/output-defaults.mjs.map +1 -0
  293. package/dist/esm/project-definition/output-validation.mjs +44 -0
  294. package/dist/esm/project-definition/output-validation.mjs.map +1 -0
  295. package/dist/esm/project-definition/project-definition-validation.mjs +95 -0
  296. package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -0
  297. package/dist/esm/project-definition/project-definition.mjs +92 -0
  298. package/dist/esm/project-definition/project-definition.mjs.map +1 -0
  299. package/dist/esm/project-run/aggregation.mjs +66 -0
  300. package/dist/esm/project-run/aggregation.mjs.map +1 -0
  301. package/dist/esm/project-run/check-execution/callback.mjs +70 -0
  302. package/dist/esm/project-run/check-execution/callback.mjs.map +1 -0
  303. package/dist/esm/project-run/check-execution/dependencies.mjs +50 -0
  304. package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -0
  305. package/dist/esm/project-run/check-execution/execution-finalization.mjs +103 -0
  306. package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -0
  307. package/dist/esm/project-run/check-execution/execution-settlement.mjs +90 -0
  308. package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -0
  309. package/dist/esm/project-run/check-execution/messages.mjs +38 -0
  310. package/dist/esm/project-run/check-execution/messages.mjs.map +1 -0
  311. package/dist/esm/project-run/check-execution/plan.mjs +35 -0
  312. package/dist/esm/project-run/check-execution/plan.mjs.map +1 -0
  313. package/dist/esm/project-run/check-execution/preflight-result.mjs +83 -0
  314. package/dist/esm/project-run/check-execution/preflight-result.mjs.map +1 -0
  315. package/dist/esm/project-run/check-execution/preflight.mjs +186 -0
  316. package/dist/esm/project-run/check-execution/preflight.mjs.map +1 -0
  317. package/dist/esm/project-run/check-execution/resolved-checks.mjs +168 -0
  318. package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -0
  319. package/dist/esm/project-run/check-execution/terminal-result.mjs +49 -0
  320. package/dist/esm/project-run/check-execution/terminal-result.mjs.map +1 -0
  321. package/dist/esm/project-run/completion.mjs +173 -0
  322. package/dist/esm/project-run/completion.mjs.map +1 -0
  323. package/dist/esm/project-run/controls/contract.mjs +2 -0
  324. package/dist/esm/project-run/controls/contract.mjs.map +1 -0
  325. package/dist/esm/project-run/controls/outputs-override-validation.mjs +61 -0
  326. package/dist/esm/project-run/controls/outputs-override-validation.mjs.map +1 -0
  327. package/dist/esm/project-run/controls/validation-result.mjs +2 -0
  328. package/dist/esm/project-run/controls/validation-result.mjs.map +1 -0
  329. package/dist/esm/project-run/controls/validation.mjs +156 -0
  330. package/dist/esm/project-run/controls/validation.mjs.map +1 -0
  331. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs +182 -0
  332. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs.map +1 -0
  333. package/dist/esm/project-run/diagnostic-logging/logger.mjs +242 -0
  334. package/dist/esm/project-run/diagnostic-logging/logger.mjs.map +1 -0
  335. package/dist/esm/project-run/invocation-creation.mjs +111 -0
  336. package/dist/esm/project-run/invocation-creation.mjs.map +1 -0
  337. package/dist/esm/project-run/invocation.mjs +195 -0
  338. package/dist/esm/project-run/invocation.mjs.map +1 -0
  339. package/dist/esm/project-run/machine-publication.mjs +16 -0
  340. package/dist/esm/project-run/machine-publication.mjs.map +1 -0
  341. package/dist/esm/project-run/output-configuration.mjs +17 -0
  342. package/dist/esm/project-run/output-configuration.mjs.map +1 -0
  343. package/dist/esm/project-run/output-status.mjs +43 -0
  344. package/dist/esm/project-run/output-status.mjs.map +1 -0
  345. package/dist/esm/project-run/progress-rendering/presentation.mjs +135 -0
  346. package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -0
  347. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +100 -0
  348. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -0
  349. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +123 -0
  350. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -0
  351. package/dist/esm/project-run/progress-rendering/renderer.mjs +12 -0
  352. package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -0
  353. package/dist/esm/project-run/project-context.mjs +8 -0
  354. package/dist/esm/project-run/project-context.mjs.map +1 -0
  355. package/dist/esm/project-run/result.mjs +54 -0
  356. package/dist/esm/project-run/result.mjs.map +1 -0
  357. package/dist/esm/project-run/run.mjs +23 -0
  358. package/dist/esm/project-run/run.mjs.map +1 -0
  359. package/dist/esm/project-run/task-scheduler/execution-state.mjs +66 -0
  360. package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -0
  361. package/dist/esm/project-run/task-scheduler/graph-validation.mjs +119 -0
  362. package/dist/esm/project-run/task-scheduler/graph-validation.mjs.map +1 -0
  363. package/dist/esm/project-run/task-scheduler/graph.mjs +116 -0
  364. package/dist/esm/project-run/task-scheduler/graph.mjs.map +1 -0
  365. package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs +82 -0
  366. package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs.map +1 -0
  367. package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs +27 -0
  368. package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs.map +1 -0
  369. package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs +125 -0
  370. package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs.map +1 -0
  371. package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs +45 -0
  372. package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs.map +1 -0
  373. package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs +74 -0
  374. package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs.map +1 -0
  375. package/dist/esm/project-run/task-scheduler/scheduler.mjs +147 -0
  376. package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -0
  377. package/docs/api-mechanics.md +205 -0
  378. package/docs/checks/duplicate-detection.md +195 -0
  379. package/docs/checks/file-metrics.md +229 -0
  380. package/docs/checks/function-metrics.md +222 -0
  381. package/docs/checks/json-schema-validation.md +190 -0
  382. package/docs/checks/json-validation.md +133 -0
  383. package/docs/checks/maintenance-reminders.md +158 -0
  384. package/docs/checks/markdown-link-validation.md +192 -0
  385. package/docs/examples/artifacts/mixed-outcomes/definition.ts +195 -0
  386. package/docs/examples/artifacts/mixed-outcomes/records.ndjson +2 -0
  387. package/docs/examples/artifacts/mixed-outcomes/run.json +70 -0
  388. package/docs/output.md +97 -0
  389. package/docs/schemas/vibe-check-record.schema.json +33 -0
  390. package/docs/schemas/vibe-check-run.schema.json +173 -0
  391. package/index.mjs +1 -0
  392. package/package.json +49 -0
  393. package/src/check/check.ts +497 -0
  394. package/src/check/descriptor-validation.ts +60 -0
  395. package/src/check/descriptor.ts +5 -0
  396. package/src/check/inherited-collection.ts +101 -0
  397. package/src/check/options-snapshot.ts +80 -0
  398. package/src/check-settlement/fact-validation.ts +289 -0
  399. package/src/check-settlement/facts.ts +27 -0
  400. package/src/check-settlement/outcome-normalization.ts +118 -0
  401. package/src/check-settlement/record-store.ts +73 -0
  402. package/src/check-settlement/session.ts +257 -0
  403. package/src/data-boundary/canonical-data.ts +188 -0
  404. package/src/data-boundary/canonical-json.ts +11 -0
  405. package/src/data-boundary/closed-values.ts +126 -0
  406. package/src/data-boundary/value-shapes.ts +15 -0
  407. package/src/finding-waivers/reconciliation.ts +176 -0
  408. package/src/index.ts +123 -0
  409. package/src/machine-output/v4/atomic-publication.ts +123 -0
  410. package/src/machine-output/v4/freeze-publication-value.ts +12 -0
  411. package/src/machine-output/v4/projection.ts +36 -0
  412. package/src/machine-output/v4/publication-invariants.ts +89 -0
  413. package/src/machine-output/v4/publication-model.ts +38 -0
  414. package/src/machine-output/v4/publish.ts +23 -0
  415. package/src/machine-output/v4/records-fingerprint.ts +12 -0
  416. package/src/machine-output/v4/schema-identities.ts +8 -0
  417. package/src/machine-output/v4/schema.ts +97 -0
  418. package/src/machine-output/v4/serializers.ts +18 -0
  419. package/src/machine-output/v4/validation-result.ts +59 -0
  420. package/src/machine-output/v4/validation.ts +166 -0
  421. package/src/package-checks/code-quality-findings/policy.ts +85 -0
  422. package/src/package-checks/duplicate-detection/area-policy.ts +103 -0
  423. package/src/package-checks/duplicate-detection/cache/cache-contract.ts +49 -0
  424. package/src/package-checks/duplicate-detection/cache/identity.ts +61 -0
  425. package/src/package-checks/duplicate-detection/cache/key.ts +46 -0
  426. package/src/package-checks/duplicate-detection/cache/payload.ts +78 -0
  427. package/src/package-checks/duplicate-detection/cache/store.ts +77 -0
  428. package/src/package-checks/duplicate-detection/default-check.ts +50 -0
  429. package/src/package-checks/duplicate-detection/execution.ts +168 -0
  430. package/src/package-checks/duplicate-detection/final-data.ts +10 -0
  431. package/src/package-checks/duplicate-detection/jscpd/availability.ts +137 -0
  432. package/src/package-checks/duplicate-detection/jscpd/command-path.ts +8 -0
  433. package/src/package-checks/duplicate-detection/jscpd/command-resolution.ts +112 -0
  434. package/src/package-checks/duplicate-detection/jscpd/json-report.ts +137 -0
  435. package/src/package-checks/duplicate-detection/jscpd/scanner-contract.ts +18 -0
  436. package/src/package-checks/duplicate-detection/jscpd/scanner.ts +257 -0
  437. package/src/package-checks/duplicate-detection/jscpd/scoped-fragments.ts +17 -0
  438. package/src/package-checks/duplicate-detection/measurement-model.ts +44 -0
  439. package/src/package-checks/duplicate-detection/measurement.ts +223 -0
  440. package/src/package-checks/duplicate-detection/options-resolution.ts +162 -0
  441. package/src/package-checks/duplicate-detection/options-validation.ts +75 -0
  442. package/src/package-checks/duplicate-detection/options.ts +72 -0
  443. package/src/package-checks/duplicate-detection/project-revision.ts +5 -0
  444. package/src/package-checks/duplicate-detection/records.ts +171 -0
  445. package/src/package-checks/file-metrics/constructor.ts +46 -0
  446. package/src/package-checks/file-metrics/execution.ts +233 -0
  447. package/src/package-checks/file-metrics/final-data.ts +10 -0
  448. package/src/package-checks/file-metrics/measurement-model.ts +10 -0
  449. package/src/package-checks/file-metrics/measurement.ts +52 -0
  450. package/src/package-checks/file-metrics/options-resolution.ts +213 -0
  451. package/src/package-checks/file-metrics/options-validation.ts +104 -0
  452. package/src/package-checks/file-metrics/options.ts +91 -0
  453. package/src/package-checks/file-metrics/records.ts +182 -0
  454. package/src/package-checks/file-metrics/scc/availability.ts +100 -0
  455. package/src/package-checks/file-metrics/scc/csv.ts +20 -0
  456. package/src/package-checks/file-metrics/scc/parser.ts +223 -0
  457. package/src/package-checks/file-metrics/scc/scanner.ts +68 -0
  458. package/src/package-checks/final-data-parsing.ts +49 -0
  459. package/src/package-checks/function-metrics/analysis.ts +138 -0
  460. package/src/package-checks/function-metrics/constructor.ts +55 -0
  461. package/src/package-checks/function-metrics/execution.ts +263 -0
  462. package/src/package-checks/function-metrics/final-data.ts +10 -0
  463. package/src/package-checks/function-metrics/lizard/availability.ts +90 -0
  464. package/src/package-checks/function-metrics/lizard/csv.ts +20 -0
  465. package/src/package-checks/function-metrics/lizard/parser.ts +179 -0
  466. package/src/package-checks/function-metrics/lizard/scanner.ts +62 -0
  467. package/src/package-checks/function-metrics/measurement-model.ts +30 -0
  468. package/src/package-checks/function-metrics/measurement.ts +57 -0
  469. package/src/package-checks/function-metrics/options-resolution.ts +215 -0
  470. package/src/package-checks/function-metrics/options-validation.ts +89 -0
  471. package/src/package-checks/function-metrics/options.ts +84 -0
  472. package/src/package-checks/function-metrics/records.ts +254 -0
  473. package/src/package-checks/function-metrics/target-files.ts +85 -0
  474. package/src/package-checks/host-environment/error-message.ts +3 -0
  475. package/src/package-checks/host-environment/filesystem.ts +110 -0
  476. package/src/package-checks/host-environment/git.ts +68 -0
  477. package/src/package-checks/host-environment/path.ts +20 -0
  478. package/src/package-checks/host-environment/process/command.ts +21 -0
  479. package/src/package-checks/host-environment/process/contract.ts +56 -0
  480. package/src/package-checks/host-environment/process/env.ts +25 -0
  481. package/src/package-checks/host-environment/process/failure.ts +40 -0
  482. package/src/package-checks/host-environment/process/result.ts +39 -0
  483. package/src/package-checks/host-environment/process/runner.ts +47 -0
  484. package/src/package-checks/json-document/strict-document.ts +209 -0
  485. package/src/package-checks/json-schema-validation/default-check.ts +54 -0
  486. package/src/package-checks/json-schema-validation/execution-stages.ts +230 -0
  487. package/src/package-checks/json-schema-validation/final-data.ts +115 -0
  488. package/src/package-checks/json-schema-validation/issue-collector.ts +43 -0
  489. package/src/package-checks/json-schema-validation/json-schema-validation.ts +191 -0
  490. package/src/package-checks/json-schema-validation/options-resolution.ts +61 -0
  491. package/src/package-checks/json-schema-validation/options-validation.ts +256 -0
  492. package/src/package-checks/json-schema-validation/options.ts +66 -0
  493. package/src/package-checks/json-schema-validation/reference-resolver.ts +165 -0
  494. package/src/package-checks/json-schema-validation/remote-response.ts +84 -0
  495. package/src/package-checks/json-schema-validation/schema-engine.ts +263 -0
  496. package/src/package-checks/json-schema-validation/schema-policy.ts +275 -0
  497. package/src/package-checks/json-validation/default-check.ts +48 -0
  498. package/src/package-checks/json-validation/final-data.ts +46 -0
  499. package/src/package-checks/json-validation/json-validation.ts +212 -0
  500. package/src/package-checks/json-validation/options-resolution.ts +50 -0
  501. package/src/package-checks/json-validation/options-validation.ts +27 -0
  502. package/src/package-checks/json-validation/options.ts +18 -0
  503. package/src/package-checks/maintenance-reminders/assessment-results.ts +117 -0
  504. package/src/package-checks/maintenance-reminders/final-data.ts +239 -0
  505. package/src/package-checks/maintenance-reminders/maintenance-reminders.ts +264 -0
  506. package/src/package-checks/maintenance-reminders/maintenance-support.ts +67 -0
  507. package/src/package-checks/maintenance-reminders/measurement.ts +183 -0
  508. package/src/package-checks/maintenance-reminders/options-validation.ts +88 -0
  509. package/src/package-checks/markdown-link-validation/default-check.ts +70 -0
  510. package/src/package-checks/markdown-link-validation/execution.ts +325 -0
  511. package/src/package-checks/markdown-link-validation/filesystem-probes.ts +127 -0
  512. package/src/package-checks/markdown-link-validation/final-data.ts +47 -0
  513. package/src/package-checks/markdown-link-validation/local-resolution.ts +306 -0
  514. package/src/package-checks/markdown-link-validation/local-resolver.ts +51 -0
  515. package/src/package-checks/markdown-link-validation/markdown-parser.ts +302 -0
  516. package/src/package-checks/markdown-link-validation/options-resolution.ts +114 -0
  517. package/src/package-checks/markdown-link-validation/options-validation.ts +72 -0
  518. package/src/package-checks/markdown-link-validation/options.ts +50 -0
  519. package/src/package-checks/markdown-link-validation/records.ts +77 -0
  520. package/src/package-checks/markdown-link-validation/resolver-engine.ts +276 -0
  521. package/src/package-checks/markdown-link-validation/target-descriptor.ts +34 -0
  522. package/src/package-checks/markdown-link-validation/traversal-result.ts +58 -0
  523. package/src/package-checks/project-files/collection.ts +199 -0
  524. package/src/package-checks/project-files/config-glob.ts +17 -0
  525. package/src/package-checks/project-files/configuration.ts +152 -0
  526. package/src/package-checks/project-files/exact-input-measurement.ts +38 -0
  527. package/src/package-checks/project-files/file-fingerprint.ts +46 -0
  528. package/src/package-checks/project-files/gitlink-revision.ts +82 -0
  529. package/src/package-checks/project-files/gitlink-worktree.ts +106 -0
  530. package/src/package-checks/project-files/input-eligibility.ts +21 -0
  531. package/src/package-checks/project-files/reported-path.ts +35 -0
  532. package/src/package-checks/project-files/revision-paths.ts +34 -0
  533. package/src/package-checks/project-files/revision-worktree-files.ts +148 -0
  534. package/src/project-definition/check-tree/authoring.ts +332 -0
  535. package/src/project-definition/check-tree/materialization.ts +56 -0
  536. package/src/project-definition/check-tree/resolution.ts +108 -0
  537. package/src/project-definition/output-defaults.ts +6 -0
  538. package/src/project-definition/output-validation.ts +54 -0
  539. package/src/project-definition/project-definition-validation.ts +123 -0
  540. package/src/project-definition/project-definition.ts +184 -0
  541. package/src/project-run/aggregation.ts +90 -0
  542. package/src/project-run/check-execution/callback.ts +106 -0
  543. package/src/project-run/check-execution/dependencies.ts +70 -0
  544. package/src/project-run/check-execution/execution-finalization.ts +177 -0
  545. package/src/project-run/check-execution/execution-settlement.ts +147 -0
  546. package/src/project-run/check-execution/messages.ts +46 -0
  547. package/src/project-run/check-execution/plan.ts +46 -0
  548. package/src/project-run/check-execution/preflight-result.ts +131 -0
  549. package/src/project-run/check-execution/preflight.ts +321 -0
  550. package/src/project-run/check-execution/resolved-checks.ts +285 -0
  551. package/src/project-run/check-execution/terminal-result.ts +74 -0
  552. package/src/project-run/completion.ts +263 -0
  553. package/src/project-run/controls/contract.ts +24 -0
  554. package/src/project-run/controls/outputs-override-validation.ts +86 -0
  555. package/src/project-run/controls/validation-result.ts +12 -0
  556. package/src/project-run/controls/validation.ts +176 -0
  557. package/src/project-run/diagnostic-logging/diagnostic-detail-rendering.ts +223 -0
  558. package/src/project-run/diagnostic-logging/logger.ts +325 -0
  559. package/src/project-run/invocation-creation.ts +160 -0
  560. package/src/project-run/invocation.ts +303 -0
  561. package/src/project-run/machine-publication.ts +23 -0
  562. package/src/project-run/output-configuration.ts +24 -0
  563. package/src/project-run/output-status.ts +69 -0
  564. package/src/project-run/progress-rendering/presentation.ts +189 -0
  565. package/src/project-run/progress-rendering/renderer-formatting.ts +141 -0
  566. package/src/project-run/progress-rendering/renderer-lifecycle.ts +152 -0
  567. package/src/project-run/progress-rendering/renderer.ts +68 -0
  568. package/src/project-run/project-context.ts +11 -0
  569. package/src/project-run/result.ts +175 -0
  570. package/src/project-run/run.ts +50 -0
  571. package/src/project-run/task-scheduler/execution-state.ts +153 -0
  572. package/src/project-run/task-scheduler/graph-validation.ts +176 -0
  573. package/src/project-run/task-scheduler/graph.ts +185 -0
  574. package/src/project-run/task-scheduler/scheduler-admission-decision.ts +177 -0
  575. package/src/project-run/task-scheduler/scheduler-blocker-summary.ts +42 -0
  576. package/src/project-run/task-scheduler/scheduler-decision-inspection.ts +199 -0
  577. package/src/project-run/task-scheduler/scheduler-decision-model.ts +158 -0
  578. package/src/project-run/task-scheduler/scheduler-decision.ts +103 -0
  579. package/src/project-run/task-scheduler/scheduler.ts +228 -0
  580. package/third-party-licenses/momoa-3.3.12-LICENSE +201 -0
  581. package/types/check/check.d.ts +350 -0
  582. package/types/check/descriptor-validation.d.ts +18 -0
  583. package/types/check/descriptor.d.ts +5 -0
  584. package/types/check/inherited-collection.d.ts +35 -0
  585. package/types/check/options-snapshot.d.ts +2 -0
  586. package/types/check-settlement/fact-validation.d.ts +14 -0
  587. package/types/check-settlement/facts.d.ts +19 -0
  588. package/types/check-settlement/outcome-normalization.d.ts +9 -0
  589. package/types/check-settlement/record-store.d.ts +14 -0
  590. package/types/check-settlement/session.d.ts +41 -0
  591. package/types/data-boundary/canonical-data.d.ts +13 -0
  592. package/types/data-boundary/canonical-json.d.ts +6 -0
  593. package/types/data-boundary/closed-values.d.ts +8 -0
  594. package/types/data-boundary/value-shapes.d.ts +4 -0
  595. package/types/finding-waivers/reconciliation.d.ts +66 -0
  596. package/types/index.d.ts +57 -0
  597. package/types/machine-output/v4/atomic-publication.d.ts +9 -0
  598. package/types/machine-output/v4/freeze-publication-value.d.ts +6 -0
  599. package/types/machine-output/v4/projection.d.ts +7 -0
  600. package/types/machine-output/v4/publication-invariants.d.ts +3 -0
  601. package/types/machine-output/v4/publication-model.d.ts +15 -0
  602. package/types/machine-output/v4/publish.d.ts +7 -0
  603. package/types/machine-output/v4/records-fingerprint.d.ts +4 -0
  604. package/types/machine-output/v4/schema-identities.d.ts +7 -0
  605. package/types/machine-output/v4/schema.d.ts +44 -0
  606. package/types/machine-output/v4/serializers.d.ts +6 -0
  607. package/types/machine-output/v4/validation-result.d.ts +26 -0
  608. package/types/machine-output/v4/validation.d.ts +6 -0
  609. package/types/package-checks/code-quality-findings/policy.d.ts +20 -0
  610. package/types/package-checks/duplicate-detection/area-policy.d.ts +3 -0
  611. package/types/package-checks/duplicate-detection/cache/cache-contract.d.ts +48 -0
  612. package/types/package-checks/duplicate-detection/cache/identity.d.ts +17 -0
  613. package/types/package-checks/duplicate-detection/cache/key.d.ts +4 -0
  614. package/types/package-checks/duplicate-detection/cache/payload.d.ts +4 -0
  615. package/types/package-checks/duplicate-detection/cache/store.d.ts +18 -0
  616. package/types/package-checks/duplicate-detection/default-check.d.ts +11 -0
  617. package/types/package-checks/duplicate-detection/execution.d.ts +11 -0
  618. package/types/package-checks/duplicate-detection/final-data.d.ts +5 -0
  619. package/types/package-checks/duplicate-detection/jscpd/availability.d.ts +19 -0
  620. package/types/package-checks/duplicate-detection/jscpd/command-path.d.ts +1 -0
  621. package/types/package-checks/duplicate-detection/jscpd/command-resolution.d.ts +23 -0
  622. package/types/package-checks/duplicate-detection/jscpd/json-report.d.ts +2 -0
  623. package/types/package-checks/duplicate-detection/jscpd/scanner-contract.d.ts +11 -0
  624. package/types/package-checks/duplicate-detection/jscpd/scanner.d.ts +21 -0
  625. package/types/package-checks/duplicate-detection/jscpd/scoped-fragments.d.ts +4 -0
  626. package/types/package-checks/duplicate-detection/measurement-model.d.ts +36 -0
  627. package/types/package-checks/duplicate-detection/measurement.d.ts +14 -0
  628. package/types/package-checks/duplicate-detection/options-resolution.d.ts +3 -0
  629. package/types/package-checks/duplicate-detection/options-validation.d.ts +1 -0
  630. package/types/package-checks/duplicate-detection/options.d.ts +65 -0
  631. package/types/package-checks/duplicate-detection/project-revision.d.ts +1 -0
  632. package/types/package-checks/duplicate-detection/records.d.ts +22 -0
  633. package/types/package-checks/file-metrics/constructor.d.ts +11 -0
  634. package/types/package-checks/file-metrics/execution.d.ts +11 -0
  635. package/types/package-checks/file-metrics/final-data.d.ts +5 -0
  636. package/types/package-checks/file-metrics/measurement-model.d.ts +12 -0
  637. package/types/package-checks/file-metrics/measurement.d.ts +13 -0
  638. package/types/package-checks/file-metrics/options-resolution.d.ts +3 -0
  639. package/types/package-checks/file-metrics/options-validation.d.ts +3 -0
  640. package/types/package-checks/file-metrics/options.d.ts +75 -0
  641. package/types/package-checks/file-metrics/records.d.ts +43 -0
  642. package/types/package-checks/file-metrics/scc/availability.d.ts +18 -0
  643. package/types/package-checks/file-metrics/scc/csv.d.ts +1 -0
  644. package/types/package-checks/file-metrics/scc/parser.d.ts +25 -0
  645. package/types/package-checks/file-metrics/scc/scanner.d.ts +14 -0
  646. package/types/package-checks/final-data-parsing.d.ts +9 -0
  647. package/types/package-checks/function-metrics/analysis.d.ts +10 -0
  648. package/types/package-checks/function-metrics/constructor.d.ts +11 -0
  649. package/types/package-checks/function-metrics/execution.d.ts +7 -0
  650. package/types/package-checks/function-metrics/final-data.d.ts +5 -0
  651. package/types/package-checks/function-metrics/lizard/availability.d.ts +11 -0
  652. package/types/package-checks/function-metrics/lizard/csv.d.ts +1 -0
  653. package/types/package-checks/function-metrics/lizard/parser.d.ts +17 -0
  654. package/types/package-checks/function-metrics/lizard/scanner.d.ts +15 -0
  655. package/types/package-checks/function-metrics/measurement-model.d.ts +26 -0
  656. package/types/package-checks/function-metrics/measurement.d.ts +21 -0
  657. package/types/package-checks/function-metrics/options-resolution.d.ts +3 -0
  658. package/types/package-checks/function-metrics/options-validation.d.ts +3 -0
  659. package/types/package-checks/function-metrics/options.d.ts +76 -0
  660. package/types/package-checks/function-metrics/records.d.ts +37 -0
  661. package/types/package-checks/function-metrics/target-files.d.ts +3 -0
  662. package/types/package-checks/host-environment/error-message.d.ts +1 -0
  663. package/types/package-checks/host-environment/filesystem.d.ts +19 -0
  664. package/types/package-checks/host-environment/git.d.ts +13 -0
  665. package/types/package-checks/host-environment/path.d.ts +3 -0
  666. package/types/package-checks/host-environment/process/command.d.ts +7 -0
  667. package/types/package-checks/host-environment/process/contract.d.ts +50 -0
  668. package/types/package-checks/host-environment/process/env.d.ts +16 -0
  669. package/types/package-checks/host-environment/process/failure.d.ts +4 -0
  670. package/types/package-checks/host-environment/process/result.d.ts +2 -0
  671. package/types/package-checks/host-environment/process/runner.d.ts +3 -0
  672. package/types/package-checks/json-document/strict-document.d.ts +35 -0
  673. package/types/package-checks/json-schema-validation/default-check.d.ts +11 -0
  674. package/types/package-checks/json-schema-validation/execution-stages.d.ts +27 -0
  675. package/types/package-checks/json-schema-validation/final-data.d.ts +15 -0
  676. package/types/package-checks/json-schema-validation/issue-collector.d.ts +12 -0
  677. package/types/package-checks/json-schema-validation/json-schema-validation.d.ts +42 -0
  678. package/types/package-checks/json-schema-validation/options-resolution.d.ts +3 -0
  679. package/types/package-checks/json-schema-validation/options-validation.d.ts +2 -0
  680. package/types/package-checks/json-schema-validation/options.d.ts +53 -0
  681. package/types/package-checks/json-schema-validation/reference-resolver.d.ts +23 -0
  682. package/types/package-checks/json-schema-validation/remote-response.d.ts +2 -0
  683. package/types/package-checks/json-schema-validation/schema-engine.d.ts +33 -0
  684. package/types/package-checks/json-schema-validation/schema-policy.d.ts +17 -0
  685. package/types/package-checks/json-validation/default-check.d.ts +11 -0
  686. package/types/package-checks/json-validation/final-data.d.ts +10 -0
  687. package/types/package-checks/json-validation/json-validation.d.ts +28 -0
  688. package/types/package-checks/json-validation/options-resolution.d.ts +3 -0
  689. package/types/package-checks/json-validation/options-validation.d.ts +2 -0
  690. package/types/package-checks/json-validation/options.d.ts +13 -0
  691. package/types/package-checks/maintenance-reminders/assessment-results.d.ts +10 -0
  692. package/types/package-checks/maintenance-reminders/final-data.d.ts +47 -0
  693. package/types/package-checks/maintenance-reminders/maintenance-reminders.d.ts +111 -0
  694. package/types/package-checks/maintenance-reminders/maintenance-support.d.ts +7 -0
  695. package/types/package-checks/maintenance-reminders/measurement.d.ts +10 -0
  696. package/types/package-checks/maintenance-reminders/options-validation.d.ts +3 -0
  697. package/types/package-checks/markdown-link-validation/default-check.d.ts +27 -0
  698. package/types/package-checks/markdown-link-validation/execution.d.ts +12 -0
  699. package/types/package-checks/markdown-link-validation/filesystem-probes.d.ts +10 -0
  700. package/types/package-checks/markdown-link-validation/final-data.d.ts +10 -0
  701. package/types/package-checks/markdown-link-validation/local-resolution.d.ts +92 -0
  702. package/types/package-checks/markdown-link-validation/local-resolver.d.ts +5 -0
  703. package/types/package-checks/markdown-link-validation/markdown-parser.d.ts +37 -0
  704. package/types/package-checks/markdown-link-validation/options-resolution.d.ts +3 -0
  705. package/types/package-checks/markdown-link-validation/options-validation.d.ts +2 -0
  706. package/types/package-checks/markdown-link-validation/options.d.ts +43 -0
  707. package/types/package-checks/markdown-link-validation/records.d.ts +37 -0
  708. package/types/package-checks/markdown-link-validation/resolver-engine.d.ts +15 -0
  709. package/types/package-checks/markdown-link-validation/target-descriptor.d.ts +5 -0
  710. package/types/package-checks/markdown-link-validation/traversal-result.d.ts +12 -0
  711. package/types/package-checks/project-files/collection.d.ts +9 -0
  712. package/types/package-checks/project-files/config-glob.d.ts +5 -0
  713. package/types/package-checks/project-files/configuration.d.ts +31 -0
  714. package/types/package-checks/project-files/exact-input-measurement.d.ts +12 -0
  715. package/types/package-checks/project-files/file-fingerprint.d.ts +7 -0
  716. package/types/package-checks/project-files/gitlink-revision.d.ts +9 -0
  717. package/types/package-checks/project-files/gitlink-worktree.d.ts +26 -0
  718. package/types/package-checks/project-files/input-eligibility.d.ts +7 -0
  719. package/types/package-checks/project-files/reported-path.d.ts +1 -0
  720. package/types/package-checks/project-files/revision-paths.d.ts +12 -0
  721. package/types/package-checks/project-files/revision-worktree-files.d.ts +5 -0
  722. package/types/project-definition/check-tree/authoring.d.ts +41 -0
  723. package/types/project-definition/check-tree/materialization.d.ts +4 -0
  724. package/types/project-definition/check-tree/resolution.d.ts +25 -0
  725. package/types/project-definition/output-defaults.d.ts +14 -0
  726. package/types/project-definition/output-validation.d.ts +3 -0
  727. package/types/project-definition/project-definition-validation.d.ts +6 -0
  728. package/types/project-definition/project-definition.d.ts +88 -0
  729. package/types/project-run/aggregation.d.ts +7 -0
  730. package/types/project-run/check-execution/callback.d.ts +24 -0
  731. package/types/project-run/check-execution/dependencies.d.ts +9 -0
  732. package/types/project-run/check-execution/execution-finalization.d.ts +18 -0
  733. package/types/project-run/check-execution/execution-settlement.d.ts +41 -0
  734. package/types/project-run/check-execution/messages.d.ts +3 -0
  735. package/types/project-run/check-execution/plan.d.ts +10 -0
  736. package/types/project-run/check-execution/preflight-result.d.ts +23 -0
  737. package/types/project-run/check-execution/preflight.d.ts +27 -0
  738. package/types/project-run/check-execution/resolved-checks.d.ts +51 -0
  739. package/types/project-run/check-execution/terminal-result.d.ts +27 -0
  740. package/types/project-run/completion.d.ts +14 -0
  741. package/types/project-run/controls/contract.d.ts +24 -0
  742. package/types/project-run/controls/outputs-override-validation.d.ts +3 -0
  743. package/types/project-run/controls/validation-result.d.ts +14 -0
  744. package/types/project-run/controls/validation.d.ts +3 -0
  745. package/types/project-run/diagnostic-logging/diagnostic-detail-rendering.d.ts +11 -0
  746. package/types/project-run/diagnostic-logging/logger.d.ts +33 -0
  747. package/types/project-run/invocation-creation.d.ts +12 -0
  748. package/types/project-run/invocation.d.ts +34 -0
  749. package/types/project-run/machine-publication.d.ts +10 -0
  750. package/types/project-run/output-configuration.d.ts +3 -0
  751. package/types/project-run/output-status.d.ts +21 -0
  752. package/types/project-run/progress-rendering/presentation.d.ts +28 -0
  753. package/types/project-run/progress-rendering/renderer-formatting.d.ts +23 -0
  754. package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +24 -0
  755. package/types/project-run/progress-rendering/renderer.d.ts +44 -0
  756. package/types/project-run/project-context.d.ts +7 -0
  757. package/types/project-run/result.d.ts +99 -0
  758. package/types/project-run/run.d.ts +18 -0
  759. package/types/project-run/task-scheduler/execution-state.d.ts +67 -0
  760. package/types/project-run/task-scheduler/graph-validation.d.ts +11 -0
  761. package/types/project-run/task-scheduler/graph.d.ts +40 -0
  762. package/types/project-run/task-scheduler/scheduler-admission-decision.d.ts +8 -0
  763. package/types/project-run/task-scheduler/scheduler-blocker-summary.d.ts +4 -0
  764. package/types/project-run/task-scheduler/scheduler-decision-inspection.d.ts +24 -0
  765. package/types/project-run/task-scheduler/scheduler-decision-model.d.ts +94 -0
  766. package/types/project-run/task-scheduler/scheduler-decision.d.ts +8 -0
  767. package/types/project-run/task-scheduler/scheduler.d.ts +3 -0
@@ -0,0 +1,60 @@
1
+ import { parseCheckTreeAuthoring } from "./authoring.mjs";
2
+ /**
3
+ * Traverses the recursive authoring tree. Containment only passes scheduling
4
+ * values to descendants; it never creates an execution dependency or output
5
+ * hierarchy.
6
+ */
7
+ export function resolveCheckTree(value, rootMaxParallel) {
8
+ const parsed = parseCheckTreeAuthoring(value);
9
+ return parsed === undefined ? undefined : resolveParsedCheckTree(parsed, rootMaxParallel);
10
+ }
11
+ export function resolveParsedCheckTree(parsed, rootMaxParallel) {
12
+ if (!Number.isSafeInteger(rootMaxParallel) || rootMaxParallel <= 0)
13
+ return undefined;
14
+ const leaves = [];
15
+ const root = Object.freeze({
16
+ dependsOn: Object.freeze([]),
17
+ maxParallel: rootMaxParallel,
18
+ mutex: Object.freeze([])
19
+ });
20
+ for (const check of parsed.checks)
21
+ flattenCheck(check, root, leaves);
22
+ return Object.freeze({ leaves: Object.freeze(leaves), warnings: parsed.warnings });
23
+ }
24
+ function flattenCheck(check, inherited, leaves) {
25
+ const scheduling = Object.freeze({
26
+ dependsOn: resolveCollection(inherited.dependsOn, check.dependsOn),
27
+ maxParallel: check.maxParallel ?? inherited.maxParallel,
28
+ mutex: resolveCollection(inherited.mutex, check.mutex)
29
+ });
30
+ const visibility = check.visibility;
31
+ if (check.execution !== null &&
32
+ check.definition !== null &&
33
+ check.options !== null &&
34
+ visibility !== null) {
35
+ leaves.push(Object.freeze({
36
+ definition: check.definition,
37
+ dependsOn: scheduling.dependsOn,
38
+ execution: check.execution,
39
+ maxParallel: scheduling.maxParallel,
40
+ mutex: scheduling.mutex,
41
+ options: check.options,
42
+ ...(check.preflight === null ? {} : { preflight: check.preflight }),
43
+ visibility
44
+ }));
45
+ }
46
+ for (const child of check.checks)
47
+ flattenCheck(child, scheduling, leaves);
48
+ }
49
+ function resolveCollection(inherited, authored) {
50
+ if (authored === undefined)
51
+ return inherited;
52
+ if (authored.kind === "exact")
53
+ return canonicalize(authored.values);
54
+ const removed = new Set(authored.remove);
55
+ return canonicalize([...inherited.filter((value) => !removed.has(value)), ...authored.add]);
56
+ }
57
+ function canonicalize(values) {
58
+ return Object.freeze([...new Set(values)].sort());
59
+ }
60
+ //# sourceMappingURL=resolution.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolution.mjs","sourceRoot":"","sources":["../../../../src/project-definition/check-tree/resolution.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CheckDescriptor } from \"../../check/descriptor.ts\";\nimport type { CheckExecution, CheckPreflight, CheckVisibility } from \"../../check/check.ts\";\nimport {\n parseCheckTreeAuthoring,\n type MeaninglessCheckWarning,\n type ParsedCheck,\n type ParsedCheckCollection,\n type ParsedCheckTree\n} from \"./authoring.ts\";\n\nexport type { Check, InheritableCheckCollection } from \"../../check/check.ts\";\n\nexport interface ResolvedCheckTreeLeaf {\n readonly definition: CheckDescriptor;\n readonly dependsOn: readonly string[];\n readonly execution: CheckExecution;\n readonly maxParallel: number;\n readonly mutex: readonly string[];\n readonly options: object;\n readonly preflight?: CheckPreflight;\n readonly visibility: CheckVisibility;\n}\n\nexport interface ResolvedCheckTree {\n readonly leaves: readonly ResolvedCheckTreeLeaf[];\n readonly warnings: readonly MeaninglessCheckWarning[];\n}\n\ninterface InheritedScheduling {\n readonly dependsOn: readonly string[];\n readonly maxParallel: number;\n readonly mutex: readonly string[];\n}\n\n/**\n * Traverses the recursive authoring tree. Containment only passes scheduling\n * values to descendants; it never creates an execution dependency or output\n * hierarchy.\n */\nexport function resolveCheckTree(\n value: unknown,\n rootMaxParallel: number\n): ResolvedCheckTree | undefined {\n const parsed = parseCheckTreeAuthoring(value);\n return parsed === undefined ? undefined : resolveParsedCheckTree(parsed, rootMaxParallel);\n}\n\nexport function resolveParsedCheckTree(\n parsed: ParsedCheckTree,\n rootMaxParallel: number\n): ResolvedCheckTree | undefined {\n if (!Number.isSafeInteger(rootMaxParallel) || rootMaxParallel <= 0) return undefined;\n const leaves: ResolvedCheckTreeLeaf[] = [];\n const root: InheritedScheduling = Object.freeze({\n dependsOn: Object.freeze([]),\n maxParallel: rootMaxParallel,\n mutex: Object.freeze([])\n });\n for (const check of parsed.checks) flattenCheck(check, root, leaves);\n return Object.freeze({ leaves: Object.freeze(leaves), warnings: parsed.warnings });\n}\n\nfunction flattenCheck(\n check: ParsedCheck,\n inherited: InheritedScheduling,\n leaves: ResolvedCheckTreeLeaf[]\n): void {\n const scheduling: InheritedScheduling = Object.freeze({\n dependsOn: resolveCollection(inherited.dependsOn, check.dependsOn),\n maxParallel: check.maxParallel ?? inherited.maxParallel,\n mutex: resolveCollection(inherited.mutex, check.mutex)\n });\n const visibility = check.visibility;\n if (\n check.execution !== null &&\n check.definition !== null &&\n check.options !== null &&\n visibility !== null\n ) {\n leaves.push(\n Object.freeze({\n definition: check.definition,\n dependsOn: scheduling.dependsOn,\n execution: check.execution,\n maxParallel: scheduling.maxParallel,\n mutex: scheduling.mutex,\n options: check.options,\n ...(check.preflight === null ? {} : { preflight: check.preflight }),\n visibility\n })\n );\n }\n for (const child of check.checks) flattenCheck(child, scheduling, leaves);\n}\n\nfunction resolveCollection(\n inherited: readonly string[],\n authored: ParsedCheckCollection | undefined\n): readonly string[] {\n if (authored === undefined) return inherited;\n if (authored.kind === \"exact\") return canonicalize(authored.values);\n const removed = new Set(authored.remove);\n return canonicalize([...inherited.filter((value) => !removed.has(value)), ...authored.add]);\n}\n\nfunction canonicalize(values: readonly string[]): readonly string[] {\n return Object.freeze([...new Set(values)].sort());\n}\n"]}
@@ -0,0 +1,7 @@
1
+ /** Default Run-owned output values applied when a Project Definition omits an override. */
2
+ export const DEFAULT_PROJECT_OUTPUTS = Object.freeze({
3
+ machinePublication: Object.freeze({ directory: "artifacts/vibe-check", enabled: true }),
4
+ progressRendering: Object.freeze({ enabled: true }),
5
+ diagnosticLogging: Object.freeze({ directory: ".log/vibe-check", enabled: false })
6
+ });
7
+ //# sourceMappingURL=output-defaults.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-defaults.mjs","sourceRoot":"","sources":["../../../src/project-definition/output-defaults.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC;IACnD,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,sBAAsB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACvF,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACnD,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;CAC1E,CAAC,CAAC","sourcesContent":["/** Default Run-owned output values applied when a Project Definition omits an override. */\nexport const DEFAULT_PROJECT_OUTPUTS = Object.freeze({\n machinePublication: Object.freeze({ directory: \"artifacts/vibe-check\", enabled: true }),\n progressRendering: Object.freeze({ enabled: true }),\n diagnosticLogging: Object.freeze({ directory: \".log/vibe-check\", enabled: false })\n} as const);\n"]}
@@ -0,0 +1,44 @@
1
+ import { isAbsolute, relative, resolve, sep } from "node:path";
2
+ import { snapshotClosedRecord } from "../data-boundary/closed-values.mjs";
3
+ const OUTPUT_NAMES = ["machinePublication", "progressRendering", "diagnosticLogging"];
4
+ const DIRECTORY_VALIDATION_ROOT = "/vibe-check-validation-root";
5
+ export function parseOutputs(value) {
6
+ const data = exactKeys(value, OUTPUT_NAMES);
7
+ if (data === undefined)
8
+ return undefined;
9
+ const machinePublication = parseDirectoryOutput(data.machinePublication);
10
+ const progressRendering = parseSwitchOutput(data.progressRendering);
11
+ const diagnosticLogging = parseDirectoryOutput(data.diagnosticLogging);
12
+ return machinePublication === undefined ||
13
+ progressRendering === undefined ||
14
+ diagnosticLogging === undefined ||
15
+ !isContainedRelativeDirectory(diagnosticLogging.directory)
16
+ ? undefined
17
+ : Object.freeze({ machinePublication, progressRendering, diagnosticLogging });
18
+ }
19
+ export function isContainedRelativeDirectory(directory) {
20
+ if (directory.length === 0 || isAbsolute(directory))
21
+ return false;
22
+ const root = resolve(DIRECTORY_VALIDATION_ROOT);
23
+ const relativeDirectory = relative(root, resolve(root, directory));
24
+ return relativeDirectory !== ".." && !relativeDirectory.startsWith(`..${sep}`);
25
+ }
26
+ function parseDirectoryOutput(value) {
27
+ const data = exactKeys(value, ["directory", "enabled"]);
28
+ return typeof data?.directory === "string" && typeof data.enabled === "boolean"
29
+ ? Object.freeze({ directory: data.directory, enabled: data.enabled })
30
+ : undefined;
31
+ }
32
+ function parseSwitchOutput(value) {
33
+ const data = exactKeys(value, ["enabled"]);
34
+ return typeof data?.enabled === "boolean" ? Object.freeze({ enabled: data.enabled }) : undefined;
35
+ }
36
+ function exactKeys(value, keys) {
37
+ const data = snapshotClosedRecord(value);
38
+ return data !== undefined &&
39
+ Object.keys(data).length === keys.length &&
40
+ keys.every((key) => Object.hasOwn(data, key))
41
+ ? data
42
+ : undefined;
43
+ }
44
+ //# sourceMappingURL=output-validation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-validation.mjs","sourceRoot":"","sources":["../../../src/project-definition/output-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { isAbsolute, relative, resolve, sep } from \"node:path\";\n\nimport type { ProjectOutputs } from \"./project-definition.ts\";\nimport { snapshotClosedRecord } from \"../data-boundary/closed-values.ts\";\n\nconst OUTPUT_NAMES = [\"machinePublication\", \"progressRendering\", \"diagnosticLogging\"] as const;\nconst DIRECTORY_VALIDATION_ROOT = \"/vibe-check-validation-root\";\n\nexport function parseOutputs(value: unknown): ProjectOutputs | undefined {\n const data = exactKeys(value, OUTPUT_NAMES);\n if (data === undefined) return undefined;\n const machinePublication = parseDirectoryOutput(data.machinePublication);\n const progressRendering = parseSwitchOutput(data.progressRendering);\n const diagnosticLogging = parseDirectoryOutput(data.diagnosticLogging);\n return machinePublication === undefined ||\n progressRendering === undefined ||\n diagnosticLogging === undefined ||\n !isContainedRelativeDirectory(diagnosticLogging.directory)\n ? undefined\n : Object.freeze({ machinePublication, progressRendering, diagnosticLogging });\n}\n\nexport function isContainedRelativeDirectory(directory: string): boolean {\n if (directory.length === 0 || isAbsolute(directory)) return false;\n const root = resolve(DIRECTORY_VALIDATION_ROOT);\n const relativeDirectory = relative(root, resolve(root, directory));\n return relativeDirectory !== \"..\" && !relativeDirectory.startsWith(`..${sep}`);\n}\n\nfunction parseDirectoryOutput(\n value: unknown\n): Readonly<{ readonly directory: string; readonly enabled: boolean }> | undefined {\n const data = exactKeys(value, [\"directory\", \"enabled\"]);\n return typeof data?.directory === \"string\" && typeof data.enabled === \"boolean\"\n ? Object.freeze({ directory: data.directory, enabled: data.enabled })\n : undefined;\n}\n\nfunction parseSwitchOutput(value: unknown): Readonly<{ readonly enabled: boolean }> | undefined {\n const data = exactKeys(value, [\"enabled\"]);\n return typeof data?.enabled === \"boolean\" ? Object.freeze({ enabled: data.enabled }) : undefined;\n}\n\nfunction exactKeys(\n value: unknown,\n keys: readonly string[]\n): Readonly<Record<string, unknown>> | undefined {\n const data = snapshotClosedRecord(value);\n return data !== undefined &&\n Object.keys(data).length === keys.length &&\n keys.every((key) => Object.hasOwn(data, key))\n ? data\n : undefined;\n}\n"]}
@@ -0,0 +1,95 @@
1
+ import { resolveParsedCheckTree } from "./check-tree/resolution.mjs";
2
+ import { parseCheckTreeAuthoring } from "./check-tree/authoring.mjs";
3
+ import { materializeCheckTreeAuthoring } from "./check-tree/materialization.mjs";
4
+ import { parseOutputs } from "./output-validation.mjs";
5
+ import {} from "./project-definition.mjs";
6
+ import { snapshotClosedArray, snapshotClosedRecord } from "../data-boundary/closed-values.mjs";
7
+ const PROJECT_DEFINITION_KEYS = ["apiVersion", "checks", "outputs", "scheduler"];
8
+ /**
9
+ * Validates one closed Definition before Run can invoke any project callback.
10
+ * Successful validation carries information-only Check warnings separately.
11
+ */
12
+ export function validateProjectDefinition(value) {
13
+ try {
14
+ return validateProjectDefinitionValue(value);
15
+ }
16
+ catch {
17
+ return invalidDefinition("definition");
18
+ }
19
+ }
20
+ function validateProjectDefinitionValue(value) {
21
+ const data = exactProjectDefinition(value);
22
+ if (!data.ok)
23
+ return data;
24
+ return parseProjectDefinitionFields(data.value);
25
+ }
26
+ function parseProjectDefinitionFields(data) {
27
+ const scheduler = parseScheduler(data.scheduler);
28
+ if (scheduler === undefined)
29
+ return invalidDefinition("definition.scheduler");
30
+ const checks = snapshotClosedArray(data.checks);
31
+ if (checks === undefined)
32
+ return invalidDefinition("definition.checks");
33
+ const parsedChecks = parseCheckTreeAuthoring(checks);
34
+ if (parsedChecks === undefined)
35
+ return invalidDefinition("definition.checks");
36
+ const tree = resolveParsedCheckTree(parsedChecks, scheduler.maxParallel);
37
+ if (tree === undefined)
38
+ return invalidDefinition("definition.checks");
39
+ const outputs = parseOutputs(data.outputs);
40
+ if (outputs === undefined)
41
+ return invalidDefinition("definition.outputs");
42
+ return Object.freeze({
43
+ ok: true,
44
+ value: {
45
+ apiVersion: "1",
46
+ checks: materializeCheckTreeAuthoring(parsedChecks),
47
+ outputs,
48
+ scheduler
49
+ },
50
+ warnings: tree.warnings
51
+ });
52
+ }
53
+ function exactProjectDefinition(value) {
54
+ const data = exactRecord(value, PROJECT_DEFINITION_KEYS, "invalid-project-definition", "definition");
55
+ if (!data.ok)
56
+ return data;
57
+ return data.value.apiVersion === "1"
58
+ ? data
59
+ : invalid("invalid-project-definition", "definition.apiVersion", "invalid-value");
60
+ }
61
+ function exactRecord(value, allowedKeys, kind, path) {
62
+ const data = snapshotClosedRecord(value);
63
+ if (data === undefined)
64
+ return invalid(kind, path, "invalid-value");
65
+ const unknownKey = Object.keys(data).find((key) => !allowedKeys.includes(key));
66
+ if (unknownKey !== undefined)
67
+ return invalid(kind, `${path}.${unknownKey}`, "unknown-key");
68
+ return Object.freeze({ ok: true, value: data });
69
+ }
70
+ function parseScheduler(value) {
71
+ const data = exactKeys(value, ["maxParallel"]);
72
+ return typeof data?.maxParallel === "number" &&
73
+ Number.isSafeInteger(data.maxParallel) &&
74
+ data.maxParallel > 0
75
+ ? Object.freeze({ maxParallel: data.maxParallel })
76
+ : undefined;
77
+ }
78
+ function exactKeys(value, keys) {
79
+ const data = snapshotClosedRecord(value);
80
+ if (data === undefined)
81
+ return undefined;
82
+ return Object.keys(data).length === keys.length && keys.every((key) => Object.hasOwn(data, key))
83
+ ? data
84
+ : undefined;
85
+ }
86
+ function invalidDefinition(path) {
87
+ return Object.freeze({
88
+ ok: false,
89
+ error: Object.freeze({ kind: "invalid-project-definition", path, reason: "invalid-value" })
90
+ });
91
+ }
92
+ function invalid(kind, path, reason) {
93
+ return Object.freeze({ ok: false, error: Object.freeze({ kind, path, reason }) });
94
+ }
95
+ //# sourceMappingURL=project-definition-validation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-definition-validation.mjs","sourceRoot":"","sources":["../../../src/project-definition/project-definition-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { resolveParsedCheckTree } from \"./check-tree/resolution.ts\";\nimport { parseCheckTreeAuthoring } from \"./check-tree/authoring.ts\";\nimport { materializeCheckTreeAuthoring } from \"./check-tree/materialization.ts\";\nimport { parseOutputs } from \"./output-validation.ts\";\nimport {\n type ProjectDefinitionDiagnostic,\n type ProjectDefinitionValidationResult,\n type SchedulerPolicy\n} from \"./project-definition.ts\";\nimport { snapshotClosedArray, snapshotClosedRecord } from \"../data-boundary/closed-values.ts\";\n\ntype DefinitionValidationResult<T> = Readonly<\n | { readonly ok: true; readonly value: T }\n | { readonly ok: false; readonly error: ProjectDefinitionDiagnostic }\n>;\n\nconst PROJECT_DEFINITION_KEYS = [\"apiVersion\", \"checks\", \"outputs\", \"scheduler\"] as const;\n\n/**\n * Validates one closed Definition before Run can invoke any project callback.\n * Successful validation carries information-only Check warnings separately.\n */\nexport function validateProjectDefinition(value: unknown): ProjectDefinitionValidationResult {\n try {\n return validateProjectDefinitionValue(value);\n } catch {\n return invalidDefinition(\"definition\");\n }\n}\n\nfunction validateProjectDefinitionValue(value: unknown): ProjectDefinitionValidationResult {\n const data = exactProjectDefinition(value);\n if (!data.ok) return data;\n return parseProjectDefinitionFields(data.value);\n}\n\nfunction parseProjectDefinitionFields(\n data: Readonly<Record<string, unknown>>\n): ProjectDefinitionValidationResult {\n const scheduler = parseScheduler(data.scheduler);\n if (scheduler === undefined) return invalidDefinition(\"definition.scheduler\");\n const checks = snapshotClosedArray(data.checks);\n if (checks === undefined) return invalidDefinition(\"definition.checks\");\n const parsedChecks = parseCheckTreeAuthoring(checks);\n if (parsedChecks === undefined) return invalidDefinition(\"definition.checks\");\n const tree = resolveParsedCheckTree(parsedChecks, scheduler.maxParallel);\n if (tree === undefined) return invalidDefinition(\"definition.checks\");\n const outputs = parseOutputs(data.outputs);\n if (outputs === undefined) return invalidDefinition(\"definition.outputs\");\n return Object.freeze({\n ok: true,\n value: {\n apiVersion: \"1\" as const,\n checks: materializeCheckTreeAuthoring(parsedChecks),\n outputs,\n scheduler\n },\n warnings: tree.warnings\n });\n}\n\nfunction exactProjectDefinition(\n value: unknown\n): DefinitionValidationResult<Readonly<Record<string, unknown>>> {\n const data = exactRecord(\n value,\n PROJECT_DEFINITION_KEYS,\n \"invalid-project-definition\",\n \"definition\"\n );\n if (!data.ok) return data;\n return data.value.apiVersion === \"1\"\n ? data\n : invalid(\"invalid-project-definition\", \"definition.apiVersion\", \"invalid-value\");\n}\n\nfunction exactRecord(\n value: unknown,\n allowedKeys: readonly string[],\n kind: ProjectDefinitionDiagnostic[\"kind\"],\n path: string\n): DefinitionValidationResult<Readonly<Record<string, unknown>>> {\n const data = snapshotClosedRecord(value);\n if (data === undefined) return invalid(kind, path, \"invalid-value\");\n const unknownKey = Object.keys(data).find((key) => !allowedKeys.includes(key));\n if (unknownKey !== undefined) return invalid(kind, `${path}.${unknownKey}`, \"unknown-key\");\n return Object.freeze({ ok: true, value: data });\n}\n\nfunction parseScheduler(value: unknown): SchedulerPolicy | undefined {\n const data = exactKeys(value, [\"maxParallel\"]);\n return typeof data?.maxParallel === \"number\" &&\n Number.isSafeInteger(data.maxParallel) &&\n data.maxParallel > 0\n ? Object.freeze({ maxParallel: data.maxParallel })\n : undefined;\n}\n\nfunction exactKeys(\n value: unknown,\n keys: readonly string[]\n): Readonly<Record<string, unknown>> | undefined {\n const data = snapshotClosedRecord(value);\n if (data === undefined) return undefined;\n return Object.keys(data).length === keys.length && keys.every((key) => Object.hasOwn(data, key))\n ? data\n : undefined;\n}\n\nfunction invalidDefinition(path: string): ProjectDefinitionValidationResult {\n return Object.freeze({\n ok: false,\n error: Object.freeze({ kind: \"invalid-project-definition\", path, reason: \"invalid-value\" })\n });\n}\n\nfunction invalid(\n kind: ProjectDefinitionDiagnostic[\"kind\"],\n path: string,\n reason: ProjectDefinitionDiagnostic[\"reason\"]\n): DefinitionValidationResult<never> {\n return Object.freeze({ ok: false, error: Object.freeze({ kind, path, reason }) });\n}\n"]}
@@ -0,0 +1,92 @@
1
+ import { createHash } from "node:crypto";
2
+ import { resolveCheckTree } from "./check-tree/resolution.mjs";
3
+ import { DEFAULT_PROJECT_OUTPUTS } from "./output-defaults.mjs";
4
+ import { isNonArrayRecord } from "../data-boundary/value-shapes.mjs";
5
+ /** 使用 Product 默认输出创建普通 Project Definition。 */
6
+ export function defineConfig(value) {
7
+ return {
8
+ apiVersion: value.apiVersion ?? "1",
9
+ checks: value.checks ?? [],
10
+ outputs: {
11
+ machinePublication: {
12
+ directory: value.outputs?.machinePublication?.directory ??
13
+ DEFAULT_PROJECT_OUTPUTS.machinePublication.directory,
14
+ enabled: value.outputs?.machinePublication?.enabled ??
15
+ DEFAULT_PROJECT_OUTPUTS.machinePublication.enabled
16
+ },
17
+ progressRendering: {
18
+ enabled: value.outputs?.progressRendering?.enabled ??
19
+ DEFAULT_PROJECT_OUTPUTS.progressRendering.enabled
20
+ },
21
+ diagnosticLogging: {
22
+ directory: value.outputs?.diagnosticLogging?.directory ??
23
+ DEFAULT_PROJECT_OUTPUTS.diagnosticLogging.directory,
24
+ enabled: value.outputs?.diagnosticLogging?.enabled ??
25
+ DEFAULT_PROJECT_OUTPUTS.diagnosticLogging.enabled
26
+ }
27
+ },
28
+ scheduler: { maxParallel: value.scheduler?.maxParallel ?? 4 }
29
+ };
30
+ }
31
+ export function normalizeProjectDefinition(definition) {
32
+ const tree = resolveCheckTree(definition.checks, definition.scheduler.maxParallel);
33
+ if (tree === undefined)
34
+ throw new TypeError("Project Definition Check tree failed closed normalization");
35
+ const checks = Object.freeze(tree.leaves.map(normalizeCheck));
36
+ return Object.freeze({
37
+ checks,
38
+ declarative: freezeDeclarativeSnapshot(definition, checks),
39
+ definitionWarnings: tree.warnings
40
+ });
41
+ }
42
+ function normalizeCheck(leaf) {
43
+ return Object.freeze({
44
+ definition: leaf.definition,
45
+ dependsOn: leaf.dependsOn,
46
+ execution: leaf.execution,
47
+ maxParallel: leaf.maxParallel,
48
+ mutex: leaf.mutex,
49
+ options: leaf.options,
50
+ ...(leaf.preflight === undefined ? {} : { preflight: leaf.preflight }),
51
+ visibility: leaf.visibility
52
+ });
53
+ }
54
+ export function createDeclarativeFingerprint(snapshot) {
55
+ return createHash("sha256").update(stableJson(snapshot)).digest("hex");
56
+ }
57
+ function freezeDeclarativeSnapshot(definition, checks) {
58
+ const declarations = checks
59
+ .map(({ execution: _execution, preflight: _preflight, ...declaration }) => declaration)
60
+ .sort((left, right) => compareText(left.definition.checkId, right.definition.checkId));
61
+ return deepFreeze({
62
+ apiVersion: definition.apiVersion,
63
+ checks: declarations,
64
+ outputs: definition.outputs,
65
+ scheduler: definition.scheduler
66
+ });
67
+ }
68
+ function compareText(left, right) {
69
+ if (left < right)
70
+ return -1;
71
+ if (left > right)
72
+ return 1;
73
+ return 0;
74
+ }
75
+ function deepFreeze(value) {
76
+ if (typeof value !== "object" || value === null || Object.isFrozen(value))
77
+ return value;
78
+ for (const item of Object.values(value))
79
+ deepFreeze(item);
80
+ return Object.freeze(value);
81
+ }
82
+ function stableJson(value) {
83
+ if (Array.isArray(value))
84
+ return `[${value.map(stableJson).join(",")}]`;
85
+ if (isNonArrayRecord(value))
86
+ return `{${Object.keys(value)
87
+ .sort()
88
+ .map((key) => `${JSON.stringify(key)}:${stableJson(value[key])}`)
89
+ .join(",")}}`;
90
+ return JSON.stringify(value);
91
+ }
92
+ //# sourceMappingURL=project-definition.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-definition.mjs","sourceRoot":"","sources":["../../../src/project-definition/project-definition.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\n\nimport { resolveCheckTree, type ResolvedCheckTreeLeaf } from \"./check-tree/resolution.ts\";\nimport type { MeaninglessCheckWarning } from \"./check-tree/authoring.ts\";\nimport type { CheckDescriptor } from \"../check/descriptor.ts\";\nimport type { Check, CheckExecution, CheckPreflight, CheckVisibility } from \"../check/check.ts\";\nimport { DEFAULT_PROJECT_OUTPUTS } from \"./output-defaults.ts\";\nimport { isNonArrayRecord } from \"../data-boundary/value-shapes.ts\";\n\n/** 一次 Project Run 的明确输出配置。 */\nexport interface ProjectOutputs {\n /** `run.json` 与 `records.ndjson` publication。 */\n readonly machinePublication: Readonly<{\n /** 相对目录以 project root 解析,默认 `artifacts/vibe-check`。 */\n readonly directory: string;\n /** `false` 时本次 Run 不发布 machine output。 */\n readonly enabled: boolean;\n }>;\n /** 人读 progress rendering。 */\n readonly progressRendering: Readonly<{\n /** `false` 时不构造或写入 progress writer。 */\n readonly enabled: boolean;\n }>;\n /** 仅供维护者读取的一次 invocation diagnostic log。 */\n readonly diagnosticLogging: Readonly<{\n /** 相对目录以 project root 解析,默认 `.log/vibe-check`。 */\n readonly directory: string;\n /** `false` 时不创建 diagnostic writer 或 file。 */\n readonly enabled: boolean;\n }>;\n}\n\n/** 定义级的 Check 调度预算。 */\nexport interface SchedulerPolicy {\n readonly maxParallel: number;\n}\n/** 已补齐默认 outputs、可交给 run 执行的项目定义。 */\nexport interface ProjectDefinition {\n readonly apiVersion: \"1\";\n readonly checks: readonly Check[];\n readonly outputs: ProjectOutputs;\n readonly scheduler: SchedulerPolicy;\n}\ntype ProjectDefinitionInput = Readonly<{\n apiVersion?: \"1\";\n checks?: readonly Check[];\n outputs?: Partial<{\n machinePublication: Partial<ProjectOutputs[\"machinePublication\"]>;\n progressRendering: Partial<ProjectOutputs[\"progressRendering\"]>;\n diagnosticLogging: Partial<ProjectOutputs[\"diagnosticLogging\"]>;\n }>;\n scheduler?: Partial<SchedulerPolicy>;\n}>;\nexport interface ProjectDefinitionDiagnostic {\n readonly kind: \"invalid-project-definition\";\n readonly path: string;\n readonly reason: \"invalid-value\" | \"unknown-key\";\n}\nexport type DefinitionWarning = MeaninglessCheckWarning;\nexport type ProjectDefinitionValidationResult = Readonly<\n | {\n readonly ok: true;\n readonly value: ProjectDefinition;\n readonly warnings: readonly DefinitionWarning[];\n }\n | { readonly ok: false; readonly error: ProjectDefinitionDiagnostic }\n>;\nexport interface NormalizedCheckDeclaration {\n readonly definition: CheckDescriptor;\n readonly dependsOn: readonly string[];\n readonly maxParallel: number;\n readonly mutex: readonly string[];\n readonly options: object;\n readonly visibility: CheckVisibility;\n}\nexport interface NormalizedCheck extends NormalizedCheckDeclaration {\n readonly execution: CheckExecution;\n readonly preflight?: CheckPreflight;\n}\nexport interface DeclarativeProjectSnapshot {\n readonly apiVersion: \"1\";\n readonly checks: readonly NormalizedCheckDeclaration[];\n readonly outputs: ProjectOutputs;\n readonly scheduler: SchedulerPolicy;\n}\nexport interface NormalizedProjectDefinition {\n readonly checks: readonly NormalizedCheck[];\n readonly declarative: DeclarativeProjectSnapshot;\n readonly definitionWarnings: readonly DefinitionWarning[];\n}\n/** 使用 Product 默认输出创建普通 Project Definition。 */\nexport function defineConfig<const T extends ProjectDefinitionInput>(\n value: T & Record<Exclude<keyof T, keyof ProjectDefinitionInput>, never>\n): ProjectDefinition {\n return {\n apiVersion: value.apiVersion ?? \"1\",\n checks: value.checks ?? [],\n outputs: {\n machinePublication: {\n directory:\n value.outputs?.machinePublication?.directory ??\n DEFAULT_PROJECT_OUTPUTS.machinePublication.directory,\n enabled:\n value.outputs?.machinePublication?.enabled ??\n DEFAULT_PROJECT_OUTPUTS.machinePublication.enabled\n },\n progressRendering: {\n enabled:\n value.outputs?.progressRendering?.enabled ??\n DEFAULT_PROJECT_OUTPUTS.progressRendering.enabled\n },\n diagnosticLogging: {\n directory:\n value.outputs?.diagnosticLogging?.directory ??\n DEFAULT_PROJECT_OUTPUTS.diagnosticLogging.directory,\n enabled:\n value.outputs?.diagnosticLogging?.enabled ??\n DEFAULT_PROJECT_OUTPUTS.diagnosticLogging.enabled\n }\n },\n scheduler: { maxParallel: value.scheduler?.maxParallel ?? 4 }\n };\n}\nexport function normalizeProjectDefinition(\n definition: ProjectDefinition\n): NormalizedProjectDefinition {\n const tree = resolveCheckTree(definition.checks, definition.scheduler.maxParallel);\n if (tree === undefined)\n throw new TypeError(\"Project Definition Check tree failed closed normalization\");\n const checks = Object.freeze(tree.leaves.map(normalizeCheck));\n return Object.freeze({\n checks,\n declarative: freezeDeclarativeSnapshot(definition, checks),\n definitionWarnings: tree.warnings\n });\n}\nfunction normalizeCheck(leaf: ResolvedCheckTreeLeaf): NormalizedCheck {\n return Object.freeze({\n definition: leaf.definition,\n dependsOn: leaf.dependsOn,\n execution: leaf.execution,\n maxParallel: leaf.maxParallel,\n mutex: leaf.mutex,\n options: leaf.options,\n ...(leaf.preflight === undefined ? {} : { preflight: leaf.preflight }),\n visibility: leaf.visibility\n });\n}\nexport function createDeclarativeFingerprint(snapshot: DeclarativeProjectSnapshot): string {\n return createHash(\"sha256\").update(stableJson(snapshot)).digest(\"hex\");\n}\nfunction freezeDeclarativeSnapshot(\n definition: ProjectDefinition,\n checks: readonly NormalizedCheck[]\n): DeclarativeProjectSnapshot {\n const declarations = checks\n .map(({ execution: _execution, preflight: _preflight, ...declaration }) => declaration)\n .sort((left, right) => compareText(left.definition.checkId, right.definition.checkId));\n return deepFreeze({\n apiVersion: definition.apiVersion,\n checks: declarations,\n outputs: definition.outputs,\n scheduler: definition.scheduler\n });\n}\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\nfunction deepFreeze<T>(value: T): T {\n if (typeof value !== \"object\" || value === null || Object.isFrozen(value)) return value;\n for (const item of Object.values(value)) deepFreeze(item);\n return Object.freeze(value);\n}\nfunction stableJson(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(stableJson).join(\",\")}]`;\n if (isNonArrayRecord(value))\n return `{${Object.keys(value)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${stableJson(value[key])}`)\n .join(\",\")}}`;\n return JSON.stringify(value);\n}\n"]}
@@ -0,0 +1,66 @@
1
+ /** Validates that aggregation selects only normalized executable Check IDs. */
2
+ export function validateCheckAggregationSelection(aggregation, checkIds) {
3
+ if (aggregation === undefined)
4
+ return Object.freeze({ ok: true, value: undefined });
5
+ if (aggregation.checks === "all")
6
+ return Object.freeze({ ok: true, value: aggregation });
7
+ const knownCheckIds = new Set(checkIds);
8
+ const selectedCheckIds = new Set();
9
+ for (const checkId of aggregation.checks) {
10
+ if (!knownCheckIds.has(checkId) || selectedCheckIds.has(checkId)) {
11
+ return invalidControls("controls.checkAggregation.checks");
12
+ }
13
+ selectedCheckIds.add(checkId);
14
+ }
15
+ return Object.freeze({ ok: true, value: aggregation });
16
+ }
17
+ /** Derives one explicit consumer-selected aggregate from settled Check statuses only. */
18
+ export function aggregateCheckOutcomes(snapshot, aggregation) {
19
+ const statuses = selectedChecks(snapshot, aggregation.checks).map((check) => aggregateStatus(check, aggregation));
20
+ if (statuses.includes("unavailable"))
21
+ return "unavailable";
22
+ return aggregateSelectedStatuses(statuses.filter((status) => status !== null && status !== "unavailable"), aggregation);
23
+ }
24
+ function selectedChecks(snapshot, selection) {
25
+ if (selection === "all")
26
+ return snapshot.checks;
27
+ return selection.map((checkId) => {
28
+ const check = snapshot.checks.find((candidate) => candidate.checkId === checkId);
29
+ if (check === undefined)
30
+ throw new TypeError("Aggregation selection was not validated");
31
+ return check;
32
+ });
33
+ }
34
+ function aggregateStatus(check, aggregation) {
35
+ switch (check.outcome.status) {
36
+ case "passed":
37
+ case "failed":
38
+ return check.outcome.status;
39
+ case "unavailable": {
40
+ if (aggregation.unavailable === "propagate")
41
+ return "unavailable";
42
+ return aggregation.unavailable === "fail" ? "failed" : null;
43
+ }
44
+ case "not-applicable": {
45
+ if (aggregation.notApplicable === "pass")
46
+ return "passed";
47
+ return aggregation.notApplicable === "fail" ? "failed" : null;
48
+ }
49
+ }
50
+ }
51
+ function aggregateSelectedStatuses(statuses, aggregation) {
52
+ if (statuses.length === 0)
53
+ return aggregation.empty;
54
+ if (aggregation.mode === "all")
55
+ return statuses.includes("failed") ? "failed" : "passed";
56
+ return statuses.includes("passed") ? "passed" : "failed";
57
+ }
58
+ function invalidControls(path) {
59
+ const error = Object.freeze({
60
+ kind: "invalid-run-controls",
61
+ path,
62
+ reason: "invalid-value"
63
+ });
64
+ return Object.freeze({ ok: false, error });
65
+ }
66
+ //# sourceMappingURL=aggregation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregation.mjs","sourceRoot":"","sources":["../../../src/project-run/aggregation.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n RunControlDiagnostic,\n RunControlValidationResult\n} from \"./controls/validation-result.ts\";\nimport type { CheckAggregate, CheckAggregation } from \"./controls/contract.ts\";\nimport type { CoreCheck, CoreSnapshot } from \"../check-settlement/facts.ts\";\n\ntype AggregateStatus = Exclude<CheckAggregate, \"not-applicable\">;\n\n/** Validates that aggregation selects only normalized executable Check IDs. */\nexport function validateCheckAggregationSelection(\n aggregation: CheckAggregation | undefined,\n checkIds: readonly string[]\n): RunControlValidationResult<CheckAggregation | undefined> {\n if (aggregation === undefined) return Object.freeze({ ok: true, value: undefined });\n if (aggregation.checks === \"all\") return Object.freeze({ ok: true, value: aggregation });\n const knownCheckIds = new Set(checkIds);\n const selectedCheckIds = new Set<string>();\n for (const checkId of aggregation.checks) {\n if (!knownCheckIds.has(checkId) || selectedCheckIds.has(checkId)) {\n return invalidControls(\"controls.checkAggregation.checks\");\n }\n selectedCheckIds.add(checkId);\n }\n return Object.freeze({ ok: true, value: aggregation });\n}\n\n/** Derives one explicit consumer-selected aggregate from settled Check statuses only. */\nexport function aggregateCheckOutcomes(\n snapshot: CoreSnapshot,\n aggregation: CheckAggregation\n): CheckAggregate {\n const statuses = selectedChecks(snapshot, aggregation.checks).map((check) =>\n aggregateStatus(check, aggregation)\n );\n if (statuses.includes(\"unavailable\")) return \"unavailable\";\n return aggregateSelectedStatuses(\n statuses.filter(\n (status): status is Exclude<AggregateStatus, \"unavailable\"> =>\n status !== null && status !== \"unavailable\"\n ),\n aggregation\n );\n}\n\nfunction selectedChecks(\n snapshot: CoreSnapshot,\n selection: CheckAggregation[\"checks\"]\n): readonly CoreCheck[] {\n if (selection === \"all\") return snapshot.checks;\n return selection.map((checkId) => {\n const check = snapshot.checks.find((candidate) => candidate.checkId === checkId);\n if (check === undefined) throw new TypeError(\"Aggregation selection was not validated\");\n return check;\n });\n}\n\nfunction aggregateStatus(check: CoreCheck, aggregation: CheckAggregation): AggregateStatus | null {\n switch (check.outcome.status) {\n case \"passed\":\n case \"failed\":\n return check.outcome.status;\n case \"unavailable\": {\n if (aggregation.unavailable === \"propagate\") return \"unavailable\";\n return aggregation.unavailable === \"fail\" ? \"failed\" : null;\n }\n case \"not-applicable\": {\n if (aggregation.notApplicable === \"pass\") return \"passed\";\n return aggregation.notApplicable === \"fail\" ? \"failed\" : null;\n }\n }\n}\n\nfunction aggregateSelectedStatuses(\n statuses: readonly Exclude<AggregateStatus, \"unavailable\">[],\n aggregation: CheckAggregation\n): CheckAggregate {\n if (statuses.length === 0) return aggregation.empty;\n if (aggregation.mode === \"all\") return statuses.includes(\"failed\") ? \"failed\" : \"passed\";\n return statuses.includes(\"passed\") ? \"passed\" : \"failed\";\n}\n\nfunction invalidControls(path: string): RunControlValidationResult<never> {\n const error: RunControlDiagnostic = Object.freeze({\n kind: \"invalid-run-controls\",\n path,\n reason: \"invalid-value\"\n });\n return Object.freeze({ ok: false, error });\n}\n"]}
@@ -0,0 +1,70 @@
1
+ import { CoreInvariantFailure } from "../../check-settlement/session.mjs";
2
+ import { diagnosticTags } from "../diagnostic-logging/logger.mjs";
3
+ /** Runs one trusted callback and closes its Check-owned reporter before return. */
4
+ export async function executeCheckCallback(input) {
5
+ const checkId = input.check.definition.checkId;
6
+ const checkTags = diagnosticTags(`CHECK:${checkId}`, "EXECUTION");
7
+ const reporter = createCheckReporter(input.scope, input.diagnosticLogger, checkTags);
8
+ let result;
9
+ try {
10
+ const context = Object.freeze({
11
+ dependencies: input.dependencies,
12
+ options: input.check.options,
13
+ project: input.project,
14
+ records: reporter.records,
15
+ signal: input.signal
16
+ });
17
+ const callbackResult = await input.check.execution(context);
18
+ if (input.signal.aborted) {
19
+ input.diagnosticLogger?.observe({
20
+ event: "callback.cancelled",
21
+ tags: diagnosticTags(...checkTags, "CANCELLED"),
22
+ details: { result: callbackResult }
23
+ });
24
+ }
25
+ result = input.signal.aborted
26
+ ? productResult("execution-cancelled")
27
+ : Object.freeze({ source: "author", result: callbackResult });
28
+ }
29
+ catch (error) {
30
+ if (error instanceof CoreInvariantFailure)
31
+ throw error;
32
+ input.diagnosticLogger?.observe({
33
+ event: input.signal.aborted ? "callback.cancelled" : "callback.threw",
34
+ tags: diagnosticTags(...checkTags, input.signal.aborted ? "CANCELLED" : "THREW"),
35
+ details: { error }
36
+ });
37
+ result = productResult(input.signal.aborted ? "execution-cancelled" : "execution-threw");
38
+ }
39
+ finally {
40
+ reporter.close();
41
+ }
42
+ return result;
43
+ }
44
+ function createCheckReporter(scope, diagnosticLogger, checkTags) {
45
+ let isOpen = true;
46
+ return Object.freeze({
47
+ close: () => {
48
+ isOpen = false;
49
+ },
50
+ records: Object.freeze({
51
+ report: (identity, data) => {
52
+ if (!isOpen)
53
+ throw new Error("Check record reporter is closed");
54
+ const result = scope.records.report(identity, data);
55
+ diagnosticLogger?.observe({
56
+ event: "record.reported",
57
+ tags: diagnosticTags(...checkTags, "RECORD", result.toUpperCase()),
58
+ details: { data, identity, result }
59
+ });
60
+ }
61
+ })
62
+ });
63
+ }
64
+ function productResult(code) {
65
+ return Object.freeze({
66
+ source: "product",
67
+ result: Object.freeze({ status: "unavailable", reason: Object.freeze({ code }) })
68
+ });
69
+ }
70
+ //# sourceMappingURL=callback.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callback.mjs","sourceRoot":"","sources":["../../../../src/project-run/check-execution/callback.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n CheckDependencies,\n CheckExecutionContext,\n CheckOutcome,\n CheckProjectContext\n} from \"../../check/check.ts\";\nimport type { NormalizedCheck } from \"../../project-definition/project-definition.ts\";\nimport { CoreInvariantFailure, type TrustedCheckScope } from \"../../check-settlement/session.ts\";\nimport { diagnosticTags, type DiagnosticLogger } from \"../diagnostic-logging/logger.ts\";\n\nexport type CallbackExecution = Readonly<\n | {\n /** Raw author result; Core owns its sole validation and canonicalization. */\n readonly source: \"author\";\n readonly result: unknown;\n }\n | {\n /** Only callback containment may create a Product-controlled outcome. */\n readonly source: \"product\";\n readonly result: CheckOutcome;\n }\n>;\n\ninterface CheckCallbackInput {\n readonly check: NormalizedCheck;\n readonly dependencies: CheckDependencies;\n readonly diagnosticLogger?: DiagnosticLogger;\n readonly project: CheckProjectContext;\n readonly scope: TrustedCheckScope;\n readonly signal: AbortSignal;\n}\n\ninterface CheckReporterLifecycle {\n readonly records: CheckExecutionContext<object>[\"records\"];\n close(): void;\n}\n\n/** Runs one trusted callback and closes its Check-owned reporter before return. */\nexport async function executeCheckCallback(input: CheckCallbackInput): Promise<CallbackExecution> {\n const checkId = input.check.definition.checkId;\n const checkTags = diagnosticTags(`CHECK:${checkId}`, \"EXECUTION\");\n const reporter = createCheckReporter(input.scope, input.diagnosticLogger, checkTags);\n let result: CallbackExecution;\n try {\n const context = Object.freeze({\n dependencies: input.dependencies,\n options: input.check.options,\n project: input.project,\n records: reporter.records,\n signal: input.signal\n });\n const callbackResult = await input.check.execution(context);\n if (input.signal.aborted) {\n input.diagnosticLogger?.observe({\n event: \"callback.cancelled\",\n tags: diagnosticTags(...checkTags, \"CANCELLED\"),\n details: { result: callbackResult }\n });\n }\n result = input.signal.aborted\n ? productResult(\"execution-cancelled\")\n : Object.freeze({ source: \"author\", result: callbackResult });\n } catch (error) {\n if (error instanceof CoreInvariantFailure) throw error;\n input.diagnosticLogger?.observe({\n event: input.signal.aborted ? \"callback.cancelled\" : \"callback.threw\",\n tags: diagnosticTags(...checkTags, input.signal.aborted ? \"CANCELLED\" : \"THREW\"),\n details: { error }\n });\n result = productResult(input.signal.aborted ? \"execution-cancelled\" : \"execution-threw\");\n } finally {\n reporter.close();\n }\n return result;\n}\n\nfunction createCheckReporter(\n scope: TrustedCheckScope,\n diagnosticLogger: DiagnosticLogger | undefined,\n checkTags: readonly string[]\n): CheckReporterLifecycle {\n let isOpen = true;\n return Object.freeze({\n close: (): void => {\n isOpen = false;\n },\n records: Object.freeze({\n report: (identity: unknown, data: unknown): void => {\n if (!isOpen) throw new Error(\"Check record reporter is closed\");\n const result = scope.records.report(identity, data);\n diagnosticLogger?.observe({\n event: \"record.reported\",\n tags: diagnosticTags(...checkTags, \"RECORD\", result.toUpperCase()),\n details: { data, identity, result }\n });\n }\n })\n });\n}\n\nfunction productResult(code: string): CallbackExecution {\n return Object.freeze({\n source: \"product\",\n result: Object.freeze({ status: \"unavailable\", reason: Object.freeze({ code }) })\n });\n}\n"]}
@@ -0,0 +1,50 @@
1
+ import { diagnosticTags } from "../diagnostic-logging/logger.mjs";
2
+ export function createCheckDependencies(input) {
3
+ return Object.freeze({
4
+ get: (dependencyId) => {
5
+ const result = readDependency(input.session, input.directDependencyIds, dependencyId);
6
+ input.diagnosticLogger?.observe({
7
+ event: "dependency.read",
8
+ tags: diagnosticTags(`CHECK:${input.checkId}`, "EXECUTION", "DEPENDENCY-READ"),
9
+ details: dependencyReadDetails(dependencyId, result)
10
+ });
11
+ return result;
12
+ }
13
+ });
14
+ }
15
+ function dependencyReadDetails(requestedCheckId, result) {
16
+ if (!result.ok) {
17
+ return Object.freeze({ error: result.error, ok: false, requestedCheckId });
18
+ }
19
+ return Object.freeze({
20
+ hasData: true,
21
+ ok: true,
22
+ producer: result.checkId,
23
+ status: result.status
24
+ });
25
+ }
26
+ function readDependency(session, directDependencyIds, checkId) {
27
+ if (typeof checkId !== "string" || !directDependencyIds.includes(checkId)) {
28
+ return dependencyNotDeclared(checkId);
29
+ }
30
+ return dependencyReadResult(checkId, session.readSettledCheckOutcome(checkId));
31
+ }
32
+ function dependencyReadResult(checkId, outcome) {
33
+ if (outcome.status === "passed" || outcome.status === "failed") {
34
+ return Object.freeze({ ok: true, checkId, status: outcome.status, data: outcome.data });
35
+ }
36
+ return Object.freeze({
37
+ ok: false,
38
+ error: Object.freeze({ code: "upstream-data-unavailable", checkId, status: outcome.status })
39
+ });
40
+ }
41
+ function dependencyNotDeclared(checkId) {
42
+ return Object.freeze({
43
+ ok: false,
44
+ error: Object.freeze({
45
+ code: "dependency-not-declared",
46
+ checkId: typeof checkId === "string" ? checkId : ""
47
+ })
48
+ });
49
+ }
50
+ //# sourceMappingURL=dependencies.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.mjs","sourceRoot":"","sources":["../../../../src/project-run/check-execution/dependencies.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAyB,MAAM,iCAAiC,CAAC;AAExF,MAAM,UAAU,uBAAuB,CACrC,KAKE;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,EAAE,CAAC,YAAoB,EAAwB,EAAE;YAClD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;YACtF,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC;gBAC9B,KAAK,EAAE,iBAAiB;gBACxB,IAAI,EAAE,cAAc,CAAC,SAAS,KAAK,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,iBAAiB,CAAC;gBAC9E,OAAO,EAAE,qBAAqB,CAAC,YAAY,EAAE,MAAM,CAAC;aACrD,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAC5B,gBAAyB,EACzB,MAA4B;IAE5B,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,IAAI;QACb,EAAE,EAAE,IAAI;QACR,QAAQ,EAAE,MAAM,CAAC,OAAO;QACxB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CACrB,OAAyB,EACzB,mBAAsC,EACtC,OAAe;IAEf,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1E,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe,EAAE,OAAqB;IAClE,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/D,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,2BAA2B,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;KAC7F,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAgB;IAC7C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,yBAAyB;YAC/B,OAAO,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;SACpD,CAAC;KACH,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { CheckDependencies, CheckOutcome, DependencyReadResult } from \"../../check/check.ts\";\nimport type { CoreCheckSession } from \"../../check-settlement/session.ts\";\nimport { diagnosticTags, type DiagnosticLogger } from \"../diagnostic-logging/logger.ts\";\n\nexport function createCheckDependencies(\n input: Readonly<{\n readonly checkId: string;\n readonly diagnosticLogger: DiagnosticLogger | undefined;\n readonly directDependencyIds: readonly string[];\n readonly session: CoreCheckSession;\n }>\n): CheckDependencies {\n return Object.freeze({\n get: (dependencyId: string): DependencyReadResult => {\n const result = readDependency(input.session, input.directDependencyIds, dependencyId);\n input.diagnosticLogger?.observe({\n event: \"dependency.read\",\n tags: diagnosticTags(`CHECK:${input.checkId}`, \"EXECUTION\", \"DEPENDENCY-READ\"),\n details: dependencyReadDetails(dependencyId, result)\n });\n return result;\n }\n });\n}\n\nfunction dependencyReadDetails(\n requestedCheckId: unknown,\n result: DependencyReadResult\n): Readonly<Record<string, unknown>> {\n if (!result.ok) {\n return Object.freeze({ error: result.error, ok: false, requestedCheckId });\n }\n return Object.freeze({\n hasData: true,\n ok: true,\n producer: result.checkId,\n status: result.status\n });\n}\n\nfunction readDependency(\n session: CoreCheckSession,\n directDependencyIds: readonly string[],\n checkId: string\n): DependencyReadResult {\n if (typeof checkId !== \"string\" || !directDependencyIds.includes(checkId)) {\n return dependencyNotDeclared(checkId);\n }\n return dependencyReadResult(checkId, session.readSettledCheckOutcome(checkId));\n}\n\nfunction dependencyReadResult(checkId: string, outcome: CheckOutcome): DependencyReadResult {\n if (outcome.status === \"passed\" || outcome.status === \"failed\") {\n return Object.freeze({ ok: true, checkId, status: outcome.status, data: outcome.data });\n }\n return Object.freeze({\n ok: false,\n error: Object.freeze({ code: \"upstream-data-unavailable\", checkId, status: outcome.status })\n });\n}\n\nfunction dependencyNotDeclared(checkId: unknown): DependencyReadResult {\n return Object.freeze({\n ok: false,\n error: Object.freeze({\n code: \"dependency-not-declared\",\n checkId: typeof checkId === \"string\" ? checkId : \"\"\n })\n });\n}\n"]}