@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 @@
1
+ {"version":3,"file":"atomic-publication.mjs","sourceRoot":"","sources":["../../../../src/machine-output/v4/atomic-publication.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport { join } from \"node:path\";\n\nconst CANONICAL_NAMES = [\"records.ndjson\", \"run.json\"] as const;\nconst RETIRED_NAMES = [\n \"metrics.json\",\n \"report.md\",\n \"warnings-all.ndjson\",\n \"warnings.ndjson\"\n] as const;\nconst OWNED_TEMP_PREFIX = \".vibe-check-publication-\";\n\ninterface PublicationCandidatePath {\n readonly canonical: string;\n readonly contents: string;\n readonly temp: string;\n}\n\ninterface PublicationCandidates {\n readonly recordsNdjson: string;\n readonly runJson: string;\n}\n\n/** Writes an already validated two-file candidate set through owned temporary paths. */\nexport function publishPublicationCandidatesV4(\n artifactDir: string,\n candidates: PublicationCandidates\n): void {\n fs.mkdirSync(artifactDir, { recursive: true });\n const files = publicationCandidatePaths(artifactDir, randomUUID(), candidates);\n let hasReplacedCanonicalPath = false;\n try {\n cleanupOwnedTemps(artifactDir);\n for (const file of files) {\n fs.writeFileSync(file.temp, file.contents, { encoding: \"utf8\", flag: \"wx\" });\n }\n for (const file of files) {\n fs.renameSync(file.temp, file.canonical);\n hasReplacedCanonicalPath = true;\n }\n cleanupRetiredArtifacts(artifactDir);\n } catch (error: unknown) {\n if (hasReplacedCanonicalPath) cleanupPublicationV4BestEffort(artifactDir);\n else cleanupOwnedTempsBestEffort(artifactDir);\n throw error;\n }\n}\n\nexport function cleanupPublicationV4(artifactDir: string): void {\n removePaths([\n ...artifactPaths(artifactDir, CANONICAL_NAMES),\n ...artifactPaths(artifactDir, RETIRED_NAMES),\n ...ownedTempPaths(artifactDir)\n ]);\n}\n\nexport function cleanupPublicationV4BestEffort(artifactDir: string): void {\n try {\n cleanupPublicationV4(artifactDir);\n } catch {\n // Failure cleanup cannot conceal the original publication failure.\n }\n}\n\nfunction publicationCandidatePaths(\n artifactDir: string,\n token: string,\n candidates: PublicationCandidates\n): readonly PublicationCandidatePath[] {\n return [\n {\n canonical: join(artifactDir, \"run.json\"),\n contents: candidates.runJson,\n temp: join(artifactDir, `.vibe-check-publication-${token}-run.json.tmp`)\n },\n {\n canonical: join(artifactDir, \"records.ndjson\"),\n contents: candidates.recordsNdjson,\n temp: join(artifactDir, `.vibe-check-publication-${token}-records.ndjson.tmp`)\n }\n ];\n}\n\nfunction cleanupOwnedTemps(artifactDir: string): void {\n removePaths(ownedTempPaths(artifactDir));\n}\n\nfunction cleanupOwnedTempsBestEffort(artifactDir: string): void {\n try {\n cleanupOwnedTemps(artifactDir);\n } catch {\n // Failure cleanup cannot conceal the original publication failure.\n }\n}\n\nfunction cleanupRetiredArtifacts(artifactDir: string): void {\n removePaths(artifactPaths(artifactDir, RETIRED_NAMES));\n}\n\nfunction artifactPaths(artifactDir: string, names: readonly string[]): readonly string[] {\n return names.map((name) => join(artifactDir, name));\n}\n\nfunction ownedTempPaths(artifactDir: string): readonly string[] {\n return fs\n .readdirSync(artifactDir, { withFileTypes: true })\n .filter((entry) => entry.name.startsWith(OWNED_TEMP_PREFIX))\n .map((entry) => join(artifactDir, entry.name))\n .sort();\n}\n\nfunction removePaths(paths: readonly string[]): void {\n let firstFailure: unknown;\n for (const path of paths) {\n try {\n fs.rmSync(path, { force: true, recursive: true });\n } catch (error: unknown) {\n firstFailure ??= error;\n }\n }\n if (firstFailure !== undefined) throw firstFailure;\n}\n"]}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Output projections are validated or freshly constructed plain data. Freeze
3
+ * them before they cross a publication boundary so later consumers cannot
4
+ * drift from the one validated model.
5
+ */
6
+ export function freezePublicationValue(value) {
7
+ if (value !== null && typeof value === "object" && !Object.isFrozen(value)) {
8
+ Object.freeze(value);
9
+ for (const child of Object.values(value))
10
+ freezePublicationValue(child);
11
+ }
12
+ return value;
13
+ }
14
+ //# sourceMappingURL=freeze-publication-value.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freeze-publication-value.mjs","sourceRoot":"","sources":["../../../../src/machine-output/v4/freeze-publication-value.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAI,KAAQ;IAChD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["/**\n * Output projections are validated or freshly constructed plain data. Freeze\n * them before they cross a publication boundary so later consumers cannot\n * drift from the one validated model.\n */\nexport function freezePublicationValue<T>(value: T): T {\n if (value !== null && typeof value === \"object\" && !Object.isFrozen(value)) {\n Object.freeze(value);\n for (const child of Object.values(value)) freezePublicationValue(child);\n }\n return value;\n}\n"]}
@@ -0,0 +1,23 @@
1
+ import { MACHINE_RECORD_V4_IDENTITY, MACHINE_RUN_V4_IDENTITY } from "./schema-identities.mjs";
2
+ import { createRecordsFingerprintV4 } from "./records-fingerprint.mjs";
3
+ import { freezePublicationValue } from "./freeze-publication-value.mjs";
4
+ export function projectMachinePublicationV4(model) {
5
+ const records = Object.freeze(model.snapshot.records.map((record) => freezePublicationValue({
6
+ checkId: record.checkId,
7
+ data: record.data,
8
+ id: record.id,
9
+ schemaVersion: MACHINE_RECORD_V4_IDENTITY
10
+ })));
11
+ const run = {
12
+ checks: model.snapshot.checks.map((check) => ({
13
+ checkId: check.checkId,
14
+ displayName: check.displayName,
15
+ outcome: check.outcome
16
+ })),
17
+ invocation: { ...model.invocation },
18
+ recordsFingerprint: createRecordsFingerprintV4(records),
19
+ schemaVersion: MACHINE_RUN_V4_IDENTITY
20
+ };
21
+ return Object.freeze({ records, run: freezePublicationValue(run) });
22
+ }
23
+ //# sourceMappingURL=projection.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection.mjs","sourceRoot":"","sources":["../../../../src/machine-output/v4/projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAE7F,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAOvE,MAAM,UAAU,2BAA2B,CACzC,KAAgC;IAEhC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAC3B,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAmB,EAAE,CACrD,sBAAsB,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,aAAa,EAAE,0BAA0B;KAC1C,CAAC,CACH,CACF,CAAC;IACF,MAAM,GAAG,GAAiB;QACxB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAkC,EAAE,CAAC,CAAC;YAC5E,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QACH,UAAU,EAAE,EAAE,GAAG,KAAK,CAAC,UAAU,EAAE;QACnC,kBAAkB,EAAE,0BAA0B,CAAC,OAAO,CAAC;QACvD,aAAa,EAAE,uBAAuB;KACvC,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACtE,CAAC","sourcesContent":["import { MACHINE_RECORD_V4_IDENTITY, MACHINE_RUN_V4_IDENTITY } from \"./schema-identities.ts\";\nimport type { TrustedPublicationModelV4 } from \"./publication-model.ts\";\nimport { createRecordsFingerprintV4 } from \"./records-fingerprint.ts\";\nimport type { MachineRecordV4, MachineRunV4 } from \"./schema.ts\";\nimport { freezePublicationValue } from \"./freeze-publication-value.ts\";\n\nexport interface MachinePublicationV4 {\n readonly records: readonly MachineRecordV4[];\n readonly run: MachineRunV4;\n}\n\nexport function projectMachinePublicationV4(\n model: TrustedPublicationModelV4\n): MachinePublicationV4 {\n const records = Object.freeze(\n model.snapshot.records.map((record): MachineRecordV4 =>\n freezePublicationValue({\n checkId: record.checkId,\n data: record.data,\n id: record.id,\n schemaVersion: MACHINE_RECORD_V4_IDENTITY\n })\n )\n );\n const run: MachineRunV4 = {\n checks: model.snapshot.checks.map((check): MachineRunV4[\"checks\"][number] => ({\n checkId: check.checkId,\n displayName: check.displayName,\n outcome: check.outcome\n })),\n invocation: { ...model.invocation },\n recordsFingerprint: createRecordsFingerprintV4(records),\n schemaVersion: MACHINE_RUN_V4_IDENTITY\n };\n return Object.freeze({ records, run: freezePublicationValue(run) });\n}\n"]}
@@ -0,0 +1,59 @@
1
+ import { validateCoreSnapshot } from "../../check-settlement/fact-validation.mjs";
2
+ import { createRecordsFingerprintV4 } from "./records-fingerprint.mjs";
3
+ import { setInvariantFailure } from "./validation-result.mjs";
4
+ export function validatePublicationInvariants(run, records) {
5
+ const checkOrder = validateCheckOrder(run);
6
+ if (checkOrder !== null)
7
+ return checkOrder;
8
+ const recordOrder = validateRecordOrder(records);
9
+ if (recordOrder !== null)
10
+ return recordOrder;
11
+ const ownership = validateRecordOwnership(run, records);
12
+ if (ownership !== null)
13
+ return ownership;
14
+ const core = validateProjectedCore(run, records);
15
+ if (core !== null)
16
+ return core;
17
+ return createRecordsFingerprintV4(records) === run.recordsFingerprint
18
+ ? null
19
+ : setInvariantFailure("records-fingerprint", "records.ndjson", "Records fingerprint must match the complete canonical Record row set.");
20
+ }
21
+ function validateCheckOrder(run) {
22
+ let previous;
23
+ for (const check of run.checks) {
24
+ if (previous !== undefined && previous >= check.checkId) {
25
+ return setInvariantFailure("check-canonical-order", "run.json", "Checks must be uniquely sorted by checkId.");
26
+ }
27
+ previous = check.checkId;
28
+ }
29
+ return null;
30
+ }
31
+ function validateRecordOrder(records) {
32
+ let previous;
33
+ for (const [index, record] of records.entries()) {
34
+ const current = [record.checkId, record.id];
35
+ if (previous !== undefined &&
36
+ (previous[0] > current[0] || (previous[0] === current[0] && previous[1] >= current[1]))) {
37
+ return setInvariantFailure("record-canonical-order", "records.ndjson", "Records must be uniquely sorted by the composite { checkId, id } identity.", index);
38
+ }
39
+ previous = current;
40
+ }
41
+ return null;
42
+ }
43
+ function validateRecordOwnership(run, records) {
44
+ const knownChecks = new Set(run.checks.map((check) => check.checkId));
45
+ const unknownIndex = records.findIndex((record) => !knownChecks.has(record.checkId));
46
+ return unknownIndex === -1
47
+ ? null
48
+ : setInvariantFailure("record-check-ownership", "records.ndjson", "Every Record must name a published owning Check.", unknownIndex);
49
+ }
50
+ function validateProjectedCore(run, records) {
51
+ const snapshot = validateCoreSnapshot({
52
+ checks: run.checks,
53
+ records: records.map(({ schemaVersion: _schemaVersion, ...record }) => record)
54
+ });
55
+ return snapshot.ok
56
+ ? null
57
+ : setInvariantFailure("core-snapshot", "run.json", "Published Core facts are invalid.");
58
+ }
59
+ //# sourceMappingURL=publication-invariants.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publication-invariants.mjs","sourceRoot":"","sources":["../../../../src/machine-output/v4/publication-invariants.ts"],"names":[],"mappings":"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","sourcesContent":["import { validateCoreSnapshot } from \"../../check-settlement/fact-validation.ts\";\nimport { createRecordsFingerprintV4 } from \"./records-fingerprint.ts\";\nimport type { MachineRecordV4, MachineRunV4 } from \"./schema.ts\";\nimport { setInvariantFailure, type ValidationFailure } from \"./validation-result.ts\";\n\nexport function validatePublicationInvariants(\n run: MachineRunV4,\n records: readonly MachineRecordV4[]\n): ValidationFailure | null {\n const checkOrder = validateCheckOrder(run);\n if (checkOrder !== null) return checkOrder;\n const recordOrder = validateRecordOrder(records);\n if (recordOrder !== null) return recordOrder;\n const ownership = validateRecordOwnership(run, records);\n if (ownership !== null) return ownership;\n const core = validateProjectedCore(run, records);\n if (core !== null) return core;\n return createRecordsFingerprintV4(records) === run.recordsFingerprint\n ? null\n : setInvariantFailure(\n \"records-fingerprint\",\n \"records.ndjson\",\n \"Records fingerprint must match the complete canonical Record row set.\"\n );\n}\n\nfunction validateCheckOrder(run: MachineRunV4): ValidationFailure | null {\n let previous: string | undefined;\n for (const check of run.checks) {\n if (previous !== undefined && previous >= check.checkId) {\n return setInvariantFailure(\n \"check-canonical-order\",\n \"run.json\",\n \"Checks must be uniquely sorted by checkId.\"\n );\n }\n previous = check.checkId;\n }\n return null;\n}\n\nfunction validateRecordOrder(records: readonly MachineRecordV4[]): ValidationFailure | null {\n let previous: readonly [string, string] | undefined;\n for (const [index, record] of records.entries()) {\n const current = [record.checkId, record.id] as const;\n if (\n previous !== undefined &&\n (previous[0] > current[0] || (previous[0] === current[0] && previous[1] >= current[1]))\n ) {\n return setInvariantFailure(\n \"record-canonical-order\",\n \"records.ndjson\",\n \"Records must be uniquely sorted by the composite { checkId, id } identity.\",\n index\n );\n }\n previous = current;\n }\n return null;\n}\n\nfunction validateRecordOwnership(\n run: MachineRunV4,\n records: readonly MachineRecordV4[]\n): ValidationFailure | null {\n const knownChecks = new Set(run.checks.map((check) => check.checkId));\n const unknownIndex = records.findIndex((record) => !knownChecks.has(record.checkId));\n return unknownIndex === -1\n ? null\n : setInvariantFailure(\n \"record-check-ownership\",\n \"records.ndjson\",\n \"Every Record must name a published owning Check.\",\n unknownIndex\n );\n}\n\nfunction validateProjectedCore(\n run: MachineRunV4,\n records: readonly MachineRecordV4[]\n): ValidationFailure | null {\n const snapshot = validateCoreSnapshot({\n checks: run.checks,\n records: records.map(({ schemaVersion: _schemaVersion, ...record }) => record)\n });\n return snapshot.ok\n ? null\n : setInvariantFailure(\"core-snapshot\", \"run.json\", \"Published Core facts are invalid.\");\n}\n"]}
@@ -0,0 +1,19 @@
1
+ import { MACHINE_V4_TIMESTAMP_PATTERN } from "./schema-identities.mjs";
2
+ const machineV4TimestampPattern = new RegExp(MACHINE_V4_TIMESTAMP_PATTERN);
3
+ export function createPublicationModelV4(input) {
4
+ validateInvocation(input.invocation);
5
+ return Object.freeze({
6
+ invocation: Object.freeze({ ...input.invocation }),
7
+ snapshot: input.snapshot
8
+ });
9
+ }
10
+ function validateInvocation(invocation) {
11
+ if (typeof invocation.invocationId !== "string" ||
12
+ invocation.invocationId.length === 0 ||
13
+ invocation.projectRoot !== "." ||
14
+ typeof invocation.timestamp !== "string" ||
15
+ !machineV4TimestampPattern.test(invocation.timestamp)) {
16
+ throw new TypeError("Publication invocation metadata is invalid");
17
+ }
18
+ }
19
+ //# sourceMappingURL=publication-model.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publication-model.mjs","sourceRoot":"","sources":["../../../../src/machine-output/v4/publication-model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAEtE,MAAM,yBAAyB,GAAG,IAAI,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAc3E,MAAM,UAAU,wBAAwB,CACtC,KAAgF;IAEhF,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;QAClD,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAmC;IAC7D,IACE,OAAO,UAAU,CAAC,YAAY,KAAK,QAAQ;QAC3C,UAAU,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;QACpC,UAAU,CAAC,WAAW,KAAK,GAAG;QAC9B,OAAO,UAAU,CAAC,SAAS,KAAK,QAAQ;QACxC,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EACrD,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;IACpE,CAAC;AACH,CAAC","sourcesContent":["import type { CoreSnapshot } from \"../../check-settlement/facts.ts\";\nimport { MACHINE_V4_TIMESTAMP_PATTERN } from \"./schema-identities.ts\";\n\nconst machineV4TimestampPattern = new RegExp(MACHINE_V4_TIMESTAMP_PATTERN);\n\nexport interface PublicationInvocationV4 {\n readonly invocationId: string;\n readonly projectRoot: \".\";\n readonly timestamp: string;\n}\n\n/** Trusted Core facts and validated invocation metadata for v4 candidate projection. */\nexport interface TrustedPublicationModelV4 {\n readonly invocation: PublicationInvocationV4;\n readonly snapshot: CoreSnapshot;\n}\n\nexport function createPublicationModelV4(\n input: Readonly<{ invocation: PublicationInvocationV4; snapshot: CoreSnapshot }>\n): TrustedPublicationModelV4 {\n validateInvocation(input.invocation);\n return Object.freeze({\n invocation: Object.freeze({ ...input.invocation }),\n snapshot: input.snapshot\n });\n}\n\nfunction validateInvocation(invocation: PublicationInvocationV4): void {\n if (\n typeof invocation.invocationId !== \"string\" ||\n invocation.invocationId.length === 0 ||\n invocation.projectRoot !== \".\" ||\n typeof invocation.timestamp !== \"string\" ||\n !machineV4TimestampPattern.test(invocation.timestamp)\n ) {\n throw new TypeError(\"Publication invocation metadata is invalid\");\n }\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import { projectMachinePublicationV4 } from "./projection.mjs";
2
+ import { serializeMachinePublicationV4 } from "./serializers.mjs";
3
+ import { validateMachinePublicationSetV4 } from "./validation.mjs";
4
+ import {} from "./publication-model.mjs";
5
+ import { publishPublicationCandidatesV4 } from "./atomic-publication.mjs";
6
+ export { cleanupPublicationV4, cleanupPublicationV4BestEffort } from "./atomic-publication.mjs";
7
+ /** Publishes only the validated two-file machine set; human projection is not a v4 concern. */
8
+ export function publishScanV4(input) {
9
+ const machine = projectMachinePublicationV4(input.model);
10
+ const candidates = serializeMachinePublicationV4(machine);
11
+ const validation = validateMachinePublicationSetV4({
12
+ recordsNdjson: Buffer.from(candidates.recordsNdjson, "utf8"),
13
+ runJson: Buffer.from(candidates.runJson, "utf8")
14
+ });
15
+ if (!validation.ok) {
16
+ throw new Error(`Machine publication v4 validation failed: ${validation.diagnostic.message}`);
17
+ }
18
+ publishPublicationCandidatesV4(input.artifactDir, candidates);
19
+ }
20
+ //# sourceMappingURL=publish.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.mjs","sourceRoot":"","sources":["../../../../src/machine-output/v4/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAkC,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AAEzE,OAAO,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AAE/F,+FAA+F;AAC/F,MAAM,UAAU,aAAa,CAC3B,KAA0E;IAE1E,MAAM,OAAO,GAAG,2BAA2B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,+BAA+B,CAAC;QACjD,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,MAAM,CAAC;QAC5D,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;KACjD,CAAC,CAAC;IACH,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,6CAA6C,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IAChG,CAAC;IACD,8BAA8B,CAAC,KAAK,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAChE,CAAC","sourcesContent":["import { projectMachinePublicationV4 } from \"./projection.ts\";\nimport { serializeMachinePublicationV4 } from \"./serializers.ts\";\nimport { validateMachinePublicationSetV4 } from \"./validation.ts\";\nimport { type TrustedPublicationModelV4 } from \"./publication-model.ts\";\nimport { publishPublicationCandidatesV4 } from \"./atomic-publication.ts\";\n\nexport { cleanupPublicationV4, cleanupPublicationV4BestEffort } from \"./atomic-publication.ts\";\n\n/** Publishes only the validated two-file machine set; human projection is not a v4 concern. */\nexport function publishScanV4(\n input: Readonly<{ artifactDir: string; model: TrustedPublicationModelV4 }>\n): void {\n const machine = projectMachinePublicationV4(input.model);\n const candidates = serializeMachinePublicationV4(machine);\n const validation = validateMachinePublicationSetV4({\n recordsNdjson: Buffer.from(candidates.recordsNdjson, \"utf8\"),\n runJson: Buffer.from(candidates.runJson, \"utf8\")\n });\n if (!validation.ok) {\n throw new Error(`Machine publication v4 validation failed: ${validation.diagnostic.message}`);\n }\n publishPublicationCandidatesV4(input.artifactDir, candidates);\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import { createHash } from "node:crypto";
2
+ import { canonicalJsonBytes } from "../../data-boundary/canonical-data.mjs";
3
+ export const MACHINE_RECORDS_V4_FINGERPRINT_PREFIX = "check-record/v2/records/sha256:";
4
+ /** Binds the complete, canonically ordered v4 Record row set, including empty. */
5
+ export function createRecordsFingerprintV4(records) {
6
+ const bytes = canonicalJsonBytes(records);
7
+ return `${MACHINE_RECORDS_V4_FINGERPRINT_PREFIX}${createHash("sha256").update(bytes).digest("hex")}`;
8
+ }
9
+ //# sourceMappingURL=records-fingerprint.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"records-fingerprint.mjs","sourceRoot":"","sources":["../../../../src/machine-output/v4/records-fingerprint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAG3E,MAAM,CAAC,MAAM,qCAAqC,GAAG,iCAAiC,CAAC;AAEvF,kFAAkF;AAClF,MAAM,UAAU,0BAA0B,CAAC,OAAmC;IAC5E,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO,GAAG,qCAAqC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACvG,CAAC","sourcesContent":["import { createHash } from \"node:crypto\";\n\nimport { canonicalJsonBytes } from \"../../data-boundary/canonical-data.ts\";\nimport type { MachineRecordV4 } from \"./schema.ts\";\n\nexport const MACHINE_RECORDS_V4_FINGERPRINT_PREFIX = \"check-record/v2/records/sha256:\";\n\n/** Binds the complete, canonically ordered v4 Record row set, including empty. */\nexport function createRecordsFingerprintV4(records: readonly MachineRecordV4[]): string {\n const bytes = canonicalJsonBytes(records);\n return `${MACHINE_RECORDS_V4_FINGERPRINT_PREFIX}${createHash(\"sha256\").update(bytes).digest(\"hex\")}`;\n}\n"]}
@@ -0,0 +1,8 @@
1
+ export const MACHINE_RUN_V4_SCHEMA_ID = "urn:vibe-check:schema:run:v4";
2
+ export const MACHINE_RECORD_V4_SCHEMA_ID = "urn:vibe-check:schema:record:v4";
3
+ export const MACHINE_RUN_V4_IDENTITY = "vibe-check.run.v4";
4
+ export const MACHINE_RECORD_V4_IDENTITY = "vibe-check.record.v4";
5
+ export const MACHINE_V4_TIMESTAMP_PATTERN = "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{3}Z$";
6
+ export const MACHINE_RUN_V4_SCHEMA_PATH = "docs/schemas/vibe-check-run.schema.json";
7
+ export const MACHINE_RECORD_V4_SCHEMA_PATH = "docs/schemas/vibe-check-record.schema.json";
8
+ //# sourceMappingURL=schema-identities.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-identities.mjs","sourceRoot":"","sources":["../../../../src/machine-output/v4/schema-identities.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,8BAA8B,CAAC;AACvE,MAAM,CAAC,MAAM,2BAA2B,GAAG,iCAAiC,CAAC;AAC7E,MAAM,CAAC,MAAM,uBAAuB,GAAG,mBAAmB,CAAC;AAC3D,MAAM,CAAC,MAAM,0BAA0B,GAAG,sBAAsB,CAAC;AACjE,MAAM,CAAC,MAAM,4BAA4B,GACvC,qEAAqE,CAAC;AACxE,MAAM,CAAC,MAAM,0BAA0B,GAAG,yCAAyC,CAAC;AACpF,MAAM,CAAC,MAAM,6BAA6B,GAAG,4CAA4C,CAAC","sourcesContent":["export const MACHINE_RUN_V4_SCHEMA_ID = \"urn:vibe-check:schema:run:v4\";\nexport const MACHINE_RECORD_V4_SCHEMA_ID = \"urn:vibe-check:schema:record:v4\";\nexport const MACHINE_RUN_V4_IDENTITY = \"vibe-check.run.v4\";\nexport const MACHINE_RECORD_V4_IDENTITY = \"vibe-check.record.v4\";\nexport const MACHINE_V4_TIMESTAMP_PATTERN =\n \"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\\\\.[0-9]{3}Z$\";\nexport const MACHINE_RUN_V4_SCHEMA_PATH = \"docs/schemas/vibe-check-run.schema.json\";\nexport const MACHINE_RECORD_V4_SCHEMA_PATH = \"docs/schemas/vibe-check-record.schema.json\";\n"]}
@@ -0,0 +1,50 @@
1
+ import Type from "typebox";
2
+ import { MACHINE_RECORD_V4_IDENTITY, MACHINE_RECORD_V4_SCHEMA_ID, MACHINE_RUN_V4_IDENTITY, MACHINE_RUN_V4_SCHEMA_ID, MACHINE_V4_TIMESTAMP_PATTERN } from "./schema-identities.mjs";
3
+ const NonEmptyString = Type.String({ minLength: 1 });
4
+ const NonEmptyCheckId = Type.String({ minLength: 1 });
5
+ const CanonicalJsonObject = Type.Record(Type.String(), Type.Any());
6
+ const NotApplicableReason = Type.Object({ code: NonEmptyString }, { additionalProperties: false });
7
+ const UnavailableReason = Type.Object({
8
+ checkIds: Type.Optional(Type.Array(NonEmptyCheckId, { minItems: 1 })),
9
+ code: NonEmptyString
10
+ }, { additionalProperties: false });
11
+ const CheckOutcomeSchema = Type.Union([
12
+ Type.Object({ data: CanonicalJsonObject, status: Type.Literal("passed") }, { additionalProperties: false }),
13
+ Type.Object({ data: CanonicalJsonObject, status: Type.Literal("failed") }, { additionalProperties: false }),
14
+ Type.Object({ reason: Type.Optional(NotApplicableReason), status: Type.Literal("not-applicable") }, { additionalProperties: false }),
15
+ Type.Object({ reason: UnavailableReason, status: Type.Literal("unavailable") }, { additionalProperties: false })
16
+ ]);
17
+ const PublishedCheckSchema = Type.Object({
18
+ checkId: NonEmptyCheckId,
19
+ displayName: NonEmptyString,
20
+ outcome: CheckOutcomeSchema
21
+ }, { additionalProperties: false });
22
+ export const MACHINE_RECORD_V4_SCHEMA = Type.Object({
23
+ checkId: NonEmptyCheckId,
24
+ data: CanonicalJsonObject,
25
+ id: NonEmptyString,
26
+ schemaVersion: Type.Literal(MACHINE_RECORD_V4_IDENTITY)
27
+ }, {
28
+ $id: MACHINE_RECORD_V4_SCHEMA_ID,
29
+ $schema: "https://json-schema.org/draft/2020-12/schema",
30
+ additionalProperties: false,
31
+ title: "Vibe Check machine record v4"
32
+ });
33
+ export const MACHINE_RUN_V4_SCHEMA = Type.Object({
34
+ checks: Type.Array(PublishedCheckSchema),
35
+ invocation: Type.Object({
36
+ invocationId: NonEmptyString,
37
+ projectRoot: Type.Literal("."),
38
+ timestamp: Type.String({ pattern: MACHINE_V4_TIMESTAMP_PATTERN })
39
+ }, { additionalProperties: false }),
40
+ recordsFingerprint: Type.String({
41
+ pattern: "^check-record/v2/records/sha256:[a-f0-9]{64}$"
42
+ }),
43
+ schemaVersion: Type.Literal(MACHINE_RUN_V4_IDENTITY)
44
+ }, {
45
+ $id: MACHINE_RUN_V4_SCHEMA_ID,
46
+ $schema: "https://json-schema.org/draft/2020-12/schema",
47
+ additionalProperties: false,
48
+ title: "Vibe Check machine run v4"
49
+ });
50
+ //# sourceMappingURL=schema.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.mjs","sourceRoot":"","sources":["../../../../src/machine-output/v4/schema.ts"],"names":[],"mappings":"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","sourcesContent":["import Type from \"typebox\";\n\nimport {\n MACHINE_RECORD_V4_IDENTITY,\n MACHINE_RECORD_V4_SCHEMA_ID,\n MACHINE_RUN_V4_IDENTITY,\n MACHINE_RUN_V4_SCHEMA_ID,\n MACHINE_V4_TIMESTAMP_PATTERN\n} from \"./schema-identities.ts\";\n\nconst NonEmptyString = Type.String({ minLength: 1 });\nconst NonEmptyCheckId = Type.String({ minLength: 1 });\nconst CanonicalJsonObject = Type.Record(Type.String(), Type.Any());\nconst NotApplicableReason = Type.Object({ code: NonEmptyString }, { additionalProperties: false });\nconst UnavailableReason = Type.Object(\n {\n checkIds: Type.Optional(Type.Array(NonEmptyCheckId, { minItems: 1 })),\n code: NonEmptyString\n },\n { additionalProperties: false }\n);\n\nconst CheckOutcomeSchema = Type.Union([\n Type.Object(\n { data: CanonicalJsonObject, status: Type.Literal(\"passed\") },\n { additionalProperties: false }\n ),\n Type.Object(\n { data: CanonicalJsonObject, status: Type.Literal(\"failed\") },\n { additionalProperties: false }\n ),\n Type.Object(\n { reason: Type.Optional(NotApplicableReason), status: Type.Literal(\"not-applicable\") },\n { additionalProperties: false }\n ),\n Type.Object(\n { reason: UnavailableReason, status: Type.Literal(\"unavailable\") },\n { additionalProperties: false }\n )\n]);\n\nconst PublishedCheckSchema = Type.Object(\n {\n checkId: NonEmptyCheckId,\n displayName: NonEmptyString,\n outcome: CheckOutcomeSchema\n },\n { additionalProperties: false }\n);\n\nexport const MACHINE_RECORD_V4_SCHEMA = Type.Object(\n {\n checkId: NonEmptyCheckId,\n data: CanonicalJsonObject,\n id: NonEmptyString,\n schemaVersion: Type.Literal(MACHINE_RECORD_V4_IDENTITY)\n },\n {\n $id: MACHINE_RECORD_V4_SCHEMA_ID,\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n additionalProperties: false,\n title: \"Vibe Check machine record v4\"\n }\n);\n\nexport const MACHINE_RUN_V4_SCHEMA = Type.Object(\n {\n checks: Type.Array(PublishedCheckSchema),\n invocation: Type.Object(\n {\n invocationId: NonEmptyString,\n projectRoot: Type.Literal(\".\"),\n timestamp: Type.String({ pattern: MACHINE_V4_TIMESTAMP_PATTERN })\n },\n { additionalProperties: false }\n ),\n recordsFingerprint: Type.String({\n pattern: \"^check-record/v2/records/sha256:[a-f0-9]{64}$\"\n }),\n schemaVersion: Type.Literal(MACHINE_RUN_V4_IDENTITY)\n },\n {\n $id: MACHINE_RUN_V4_SCHEMA_ID,\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n additionalProperties: false,\n title: \"Vibe Check machine run v4\"\n }\n);\n\ntype DeepReadonly<Value> = Value extends readonly (infer Item)[]\n ? readonly DeepReadonly<Item>[]\n : Value extends object\n ? { readonly [Key in keyof Value]: DeepReadonly<Value[Key]> }\n : Value;\n\nexport type MachineRecordV4 = DeepReadonly<Type.Static<typeof MACHINE_RECORD_V4_SCHEMA>>;\nexport type MachineRunV4 = DeepReadonly<Type.Static<typeof MACHINE_RUN_V4_SCHEMA>>;\n"]}
@@ -0,0 +1,9 @@
1
+ export function serializeMachinePublicationV4(publication) {
2
+ return Object.freeze({
3
+ runJson: JSON.stringify(publication.run, null, 2),
4
+ recordsNdjson: publication.records.length === 0
5
+ ? ""
6
+ : `${publication.records.map((record) => JSON.stringify(record)).join("\n")}\n`
7
+ });
8
+ }
9
+ //# sourceMappingURL=serializers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializers.mjs","sourceRoot":"","sources":["../../../../src/machine-output/v4/serializers.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,6BAA6B,CAC3C,WAAiC;IAEjC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,aAAa,EACX,WAAW,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAC9B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;KACpF,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { MachinePublicationV4 } from \"./projection.ts\";\n\nexport interface MachinePublicationCandidatesV4 {\n readonly recordsNdjson: string;\n readonly runJson: string;\n}\n\nexport function serializeMachinePublicationV4(\n publication: MachinePublicationV4\n): MachinePublicationCandidatesV4 {\n return Object.freeze({\n runJson: JSON.stringify(publication.run, null, 2),\n recordsNdjson:\n publication.records.length === 0\n ? \"\"\n : `${publication.records.map((record) => JSON.stringify(record)).join(\"\\n\")}\\n`\n });\n}\n"]}
@@ -0,0 +1,16 @@
1
+ export function validationSuccess(value) {
2
+ return { ok: true, value };
3
+ }
4
+ export function validationFailure(diagnostic) {
5
+ return { ok: false, diagnostic };
6
+ }
7
+ export function setInvariantFailure(relationship, logicalArtifact, message, index) {
8
+ return validationFailure({
9
+ category: "set-invariant",
10
+ ...(index === undefined ? {} : { index, line: index + 1 }),
11
+ logicalArtifact,
12
+ message,
13
+ relationship
14
+ });
15
+ }
16
+ //# sourceMappingURL=validation-result.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-result.mjs","sourceRoot":"","sources":["../../../../src/machine-output/v4/validation-result.ts"],"names":[],"mappings":"AAmCA,MAAM,UAAU,iBAAiB,CAAQ,KAAY;IACnD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,UAAkD;IAElD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,YAA+C,EAC/C,eAA0E,EAC1E,OAAe,EACf,KAAc;IAEd,OAAO,iBAAiB,CAAC;QACvB,QAAQ,EAAE,eAAe;QACzB,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;QAC1D,eAAe;QACf,OAAO;QACP,YAAY;KACb,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { MachinePublicationV4 } from \"./projection.ts\";\n\nexport type MachinePublicationValidationCategory =\n | \"decoding\"\n | \"framing\"\n | \"schema\"\n | \"set-invariant\"\n | \"syntax\";\n\nexport type MachinePublicationSetRelationship =\n | \"check-canonical-order\"\n | \"core-snapshot\"\n | \"record-canonical-order\"\n | \"record-check-ownership\"\n | \"records-fingerprint\";\n\nexport interface MachinePublicationValidationDiagnostic {\n readonly category: MachinePublicationValidationCategory;\n readonly index?: number;\n readonly line?: number;\n readonly logicalArtifact: \"records.ndjson\" | \"run.json\";\n readonly message: string;\n readonly pointer?: string;\n readonly relationship?: MachinePublicationSetRelationship;\n}\n\nexport type MachinePublicationValidationResult = Readonly<\n ValidationFailure | { ok: true; value: MachinePublicationV4 }\n>;\n\nexport interface ValidationFailure {\n readonly ok: false;\n readonly diagnostic: MachinePublicationValidationDiagnostic;\n}\n\nexport function validationSuccess<Value>(value: Value): { ok: true; value: Value } {\n return { ok: true, value };\n}\n\nexport function validationFailure(\n diagnostic: MachinePublicationValidationDiagnostic\n): ValidationFailure {\n return { ok: false, diagnostic };\n}\n\nexport function setInvariantFailure(\n relationship: MachinePublicationSetRelationship,\n logicalArtifact: MachinePublicationValidationDiagnostic[\"logicalArtifact\"],\n message: string,\n index?: number\n): ValidationFailure {\n return validationFailure({\n category: \"set-invariant\",\n ...(index === undefined ? {} : { index, line: index + 1 }),\n logicalArtifact,\n message,\n relationship\n });\n}\n"]}
@@ -0,0 +1,131 @@
1
+ import Value from "typebox/value";
2
+ import { freezePublicationValue } from "./freeze-publication-value.mjs";
3
+ import { validatePublicationInvariants } from "./publication-invariants.mjs";
4
+ import { MACHINE_RECORD_V4_SCHEMA, MACHINE_RUN_V4_SCHEMA } from "./schema.mjs";
5
+ import { validationFailure, validationSuccess } from "./validation-result.mjs";
6
+ export function validateMachinePublicationSetV4(input) {
7
+ const runResult = parseRun(input.runJson);
8
+ if (!runResult.ok)
9
+ return runResult;
10
+ const recordsResult = parseRecords(input.recordsNdjson);
11
+ if (!recordsResult.ok)
12
+ return recordsResult;
13
+ const invariant = validatePublicationInvariants(runResult.value, recordsResult.value);
14
+ return (invariant ??
15
+ validationSuccess(Object.freeze({
16
+ run: freezePublicationValue(runResult.value),
17
+ records: freezePublicationValue(recordsResult.value)
18
+ })));
19
+ }
20
+ function parseRun(bytes) {
21
+ const decoded = decode(bytes, "run.json");
22
+ if (!decoded.ok)
23
+ return decoded;
24
+ const parsed = parseJson(decoded.value, {
25
+ logicalArtifact: "run.json",
26
+ message: "Run artifact must contain exactly one JSON value."
27
+ });
28
+ if (!parsed.ok)
29
+ return parsed;
30
+ if (!Value.Check(MACHINE_RUN_V4_SCHEMA, parsed.value)) {
31
+ const error = Value.Errors(MACHINE_RUN_V4_SCHEMA, parsed.value)[0];
32
+ return validationFailure({
33
+ category: "schema",
34
+ logicalArtifact: "run.json",
35
+ message: "Run artifact does not match the machine run v4 schema.",
36
+ pointer: error?.instancePath ?? ""
37
+ });
38
+ }
39
+ return validationSuccess(parsed.value);
40
+ }
41
+ function parseRecords(bytes) {
42
+ if (bytes.byteLength === 0)
43
+ return validationSuccess([]);
44
+ if (bytes[bytes.byteLength - 1] !== 0x0a) {
45
+ return validationFailure({
46
+ category: "framing",
47
+ line: countLf(bytes) + 1,
48
+ logicalArtifact: "records.ndjson",
49
+ message: "Non-empty record stream must end with exactly one LF."
50
+ });
51
+ }
52
+ const decoded = decode(bytes, "records.ndjson");
53
+ if (!decoded.ok)
54
+ return decoded;
55
+ return parseRecordSegments(decoded.value.slice(0, -1).split("\n"));
56
+ }
57
+ function parseRecordSegments(segments) {
58
+ const records = [];
59
+ for (const [index, segment] of segments.entries()) {
60
+ const framingFailure = validateRecordSegment(segment, index);
61
+ if (framingFailure !== null)
62
+ return framingFailure;
63
+ const parsed = parseJson(segment, {
64
+ index,
65
+ line: index + 1,
66
+ logicalArtifact: "records.ndjson",
67
+ message: "Record segment must contain exactly one JSON value."
68
+ });
69
+ if (!parsed.ok)
70
+ return parsed;
71
+ if (!Value.Check(MACHINE_RECORD_V4_SCHEMA, parsed.value)) {
72
+ const error = Value.Errors(MACHINE_RECORD_V4_SCHEMA, parsed.value)[0];
73
+ return validationFailure({
74
+ category: "schema",
75
+ index,
76
+ line: index + 1,
77
+ logicalArtifact: "records.ndjson",
78
+ message: "Record does not match the machine record v4 schema.",
79
+ pointer: error?.instancePath ?? ""
80
+ });
81
+ }
82
+ records.push(parsed.value);
83
+ }
84
+ return validationSuccess(records);
85
+ }
86
+ function validateRecordSegment(segment, index) {
87
+ if (segment.length > 0 && !/^[\t\r ]+$/.test(segment))
88
+ return null;
89
+ return validationFailure({
90
+ category: "framing",
91
+ index,
92
+ line: index + 1,
93
+ logicalArtifact: "records.ndjson",
94
+ message: "Record segment must not be empty or whitespace-only."
95
+ });
96
+ }
97
+ function parseJson(text, diagnostic) {
98
+ try {
99
+ return validationSuccess(JSON.parse(text));
100
+ }
101
+ catch {
102
+ return validationFailure({ category: "syntax", ...diagnostic });
103
+ }
104
+ }
105
+ function decode(bytes, logicalArtifact) {
106
+ if (bytes[0] === 0xef && bytes[1] === 0xbb && bytes[2] === 0xbf) {
107
+ return validationFailure({
108
+ category: "decoding",
109
+ logicalArtifact,
110
+ message: "Leading UTF-8 BOM is not allowed."
111
+ });
112
+ }
113
+ try {
114
+ return validationSuccess(new TextDecoder("utf-8", { fatal: true }).decode(bytes));
115
+ }
116
+ catch {
117
+ return validationFailure({
118
+ category: "decoding",
119
+ logicalArtifact,
120
+ message: "Input is not valid UTF-8."
121
+ });
122
+ }
123
+ }
124
+ function countLf(bytes) {
125
+ let count = 0;
126
+ for (const byte of bytes)
127
+ if (byte === 0x0a)
128
+ count += 1;
129
+ return count;
130
+ }
131
+ //# sourceMappingURL=validation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.mjs","sourceRoot":"","sources":["../../../../src/machine-output/v4/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import Value from \"typebox/value\";\n\nimport type { MachinePublicationV4 } from \"./projection.ts\";\nimport { freezePublicationValue } from \"./freeze-publication-value.ts\";\nimport { validatePublicationInvariants } from \"./publication-invariants.ts\";\nimport {\n MACHINE_RECORD_V4_SCHEMA,\n MACHINE_RUN_V4_SCHEMA,\n type MachineRecordV4,\n type MachineRunV4\n} from \"./schema.ts\";\nimport {\n validationFailure,\n validationSuccess,\n type MachinePublicationValidationDiagnostic,\n type MachinePublicationValidationResult\n} from \"./validation-result.ts\";\n\nexport type {\n MachinePublicationSetRelationship,\n MachinePublicationValidationCategory,\n MachinePublicationValidationDiagnostic,\n MachinePublicationValidationResult\n} from \"./validation-result.ts\";\n\ntype Parsed<Value> = Readonly<\n { ok: false; diagnostic: MachinePublicationValidationDiagnostic } | { ok: true; value: Value }\n>;\n\nexport function validateMachinePublicationSetV4(\n input: Readonly<{\n recordsNdjson: Uint8Array;\n runJson: Uint8Array;\n }>\n): MachinePublicationValidationResult {\n const runResult = parseRun(input.runJson);\n if (!runResult.ok) return runResult;\n const recordsResult = parseRecords(input.recordsNdjson);\n if (!recordsResult.ok) return recordsResult;\n const invariant = validatePublicationInvariants(runResult.value, recordsResult.value);\n return (\n invariant ??\n validationSuccess(\n Object.freeze({\n run: freezePublicationValue(runResult.value),\n records: freezePublicationValue(recordsResult.value)\n }) satisfies MachinePublicationV4\n )\n );\n}\n\nfunction parseRun(bytes: Uint8Array): Parsed<MachineRunV4> {\n const decoded = decode(bytes, \"run.json\");\n if (!decoded.ok) return decoded;\n const parsed = parseJson(decoded.value, {\n logicalArtifact: \"run.json\",\n message: \"Run artifact must contain exactly one JSON value.\"\n });\n if (!parsed.ok) return parsed;\n if (!Value.Check(MACHINE_RUN_V4_SCHEMA, parsed.value)) {\n const error = Value.Errors(MACHINE_RUN_V4_SCHEMA, parsed.value)[0];\n return validationFailure({\n category: \"schema\",\n logicalArtifact: \"run.json\",\n message: \"Run artifact does not match the machine run v4 schema.\",\n pointer: error?.instancePath ?? \"\"\n });\n }\n return validationSuccess(parsed.value);\n}\n\nfunction parseRecords(bytes: Uint8Array): Parsed<MachineRecordV4[]> {\n if (bytes.byteLength === 0) return validationSuccess([]);\n if (bytes[bytes.byteLength - 1] !== 0x0a) {\n return validationFailure({\n category: \"framing\",\n line: countLf(bytes) + 1,\n logicalArtifact: \"records.ndjson\",\n message: \"Non-empty record stream must end with exactly one LF.\"\n });\n }\n const decoded = decode(bytes, \"records.ndjson\");\n if (!decoded.ok) return decoded;\n return parseRecordSegments(decoded.value.slice(0, -1).split(\"\\n\"));\n}\n\nfunction parseRecordSegments(segments: readonly string[]): Parsed<MachineRecordV4[]> {\n const records: MachineRecordV4[] = [];\n for (const [index, segment] of segments.entries()) {\n const framingFailure = validateRecordSegment(segment, index);\n if (framingFailure !== null) return framingFailure;\n const parsed = parseJson(segment, {\n index,\n line: index + 1,\n logicalArtifact: \"records.ndjson\",\n message: \"Record segment must contain exactly one JSON value.\"\n });\n if (!parsed.ok) return parsed;\n if (!Value.Check(MACHINE_RECORD_V4_SCHEMA, parsed.value)) {\n const error = Value.Errors(MACHINE_RECORD_V4_SCHEMA, parsed.value)[0];\n return validationFailure({\n category: \"schema\",\n index,\n line: index + 1,\n logicalArtifact: \"records.ndjson\",\n message: \"Record does not match the machine record v4 schema.\",\n pointer: error?.instancePath ?? \"\"\n });\n }\n records.push(parsed.value);\n }\n return validationSuccess(records);\n}\n\nfunction validateRecordSegment(\n segment: string,\n index: number\n): Extract<Parsed<never>, { ok: false }> | null {\n if (segment.length > 0 && !/^[\\t\\r ]+$/.test(segment)) return null;\n return validationFailure({\n category: \"framing\",\n index,\n line: index + 1,\n logicalArtifact: \"records.ndjson\",\n message: \"Record segment must not be empty or whitespace-only.\"\n });\n}\n\nfunction parseJson(\n text: string,\n diagnostic: Omit<MachinePublicationValidationDiagnostic, \"category\">\n): Parsed<unknown> {\n try {\n return validationSuccess(JSON.parse(text) as unknown);\n } catch {\n return validationFailure({ category: \"syntax\", ...diagnostic });\n }\n}\n\nfunction decode(\n bytes: Uint8Array,\n logicalArtifact: MachinePublicationValidationDiagnostic[\"logicalArtifact\"]\n): Parsed<string> {\n if (bytes[0] === 0xef && bytes[1] === 0xbb && bytes[2] === 0xbf) {\n return validationFailure({\n category: \"decoding\",\n logicalArtifact,\n message: \"Leading UTF-8 BOM is not allowed.\"\n });\n }\n try {\n return validationSuccess(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes));\n } catch {\n return validationFailure({\n category: \"decoding\",\n logicalArtifact,\n message: \"Input is not valid UTF-8.\"\n });\n }\n}\n\nfunction countLf(bytes: Uint8Array): number {\n let count = 0;\n for (const byte of bytes) if (byte === 0x0a) count += 1;\n return count;\n}\n"]}
@@ -0,0 +1,49 @@
1
+ export const FINDING_POLICIES = Object.freeze(["blocking", "non-blocking"]);
2
+ export const DEFAULT_FINDING_POLICY = "non-blocking";
3
+ export function resolveFindingPolicy(value, fallback = DEFAULT_FINDING_POLICY) {
4
+ if (value === undefined)
5
+ return fallback;
6
+ return FINDING_POLICIES.find((policy) => policy === value);
7
+ }
8
+ export function validFindingPolicy(value) {
9
+ return FINDING_POLICIES.some((policy) => policy === value);
10
+ }
11
+ export function isBlockingFinding(policies) {
12
+ return policies.some((policy) => policy === "blocking");
13
+ }
14
+ export function settleFindings(findings) {
15
+ const blockingFindingCount = findings.filter((finding) => finding.actionable && finding.blocking).length;
16
+ const findingCount = findings.length;
17
+ const actionableNonBlockingFindingCount = findings.filter((finding) => finding.actionable && !finding.blocking).length;
18
+ const messages = findingMessages({ actionableNonBlockingFindingCount, blockingFindingCount });
19
+ return Object.freeze({
20
+ status: blockingFindingCount > 0 ? "failed" : "passed",
21
+ data: Object.freeze({
22
+ blockingFindingCount,
23
+ findingCount
24
+ }),
25
+ ...(messages.length === 0 ? {} : { messages })
26
+ });
27
+ }
28
+ function findingMessages(summary) {
29
+ if (summary.blockingFindingCount > 0) {
30
+ return Object.freeze([
31
+ Object.freeze({
32
+ code: "blocking-findings",
33
+ level: "error",
34
+ message: `${summary.blockingFindingCount} blocking finding(s) require attention; inspect this Check's Records for affected paths and measurements, then update the code or policy.`
35
+ })
36
+ ]);
37
+ }
38
+ if (summary.actionableNonBlockingFindingCount > 0) {
39
+ return Object.freeze([
40
+ Object.freeze({
41
+ code: "non-blocking-findings",
42
+ level: "warning",
43
+ message: `${summary.actionableNonBlockingFindingCount} non-blocking finding(s) were recorded; inspect this Check's Records for affected paths and measurements, then update the code or policy.`
44
+ })
45
+ ]);
46
+ }
47
+ return Object.freeze([]);
48
+ }
49
+ //# sourceMappingURL=policy.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.mjs","sourceRoot":"","sources":["../../../../src/package-checks/code-quality-findings/policy.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,cAAc,CAAU,CAAC,CAAC;AAKrF,MAAM,CAAC,MAAM,sBAAsB,GAAkB,cAAc,CAAC;AAepE,MAAM,UAAU,oBAAoB,CAClC,KAAc,EACd,QAAQ,GAAkB,sBAAsB;IAEhD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACzC,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAkC;IAClE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,QAAsC;IAEtC,MAAM,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAC1C,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,QAAQ,CACpD,CAAC,MAAM,CAAC;IACT,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC;IACrC,MAAM,iCAAiC,GAAG,QAAQ,CAAC,MAAM,CACvD,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,QAAQ,CACrD,CAAC,MAAM,CAAC;IACT,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,iCAAiC,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAC9F,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;QACtD,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;YAClB,oBAAoB;YACpB,YAAY;SACb,CAAC;QACF,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;KAC/C,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CACtB,OAGE;IAEF,IAAI,OAAO,CAAC,oBAAoB,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,MAAM,CAAC,MAAM,CAAC;gBACZ,IAAI,EAAE,mBAAmB;gBACzB,KAAK,EAAE,OAAO;gBACd,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,2IAA2I;aACpL,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,CAAC,iCAAiC,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,MAAM,CAAC,MAAM,CAAC;gBACZ,IAAI,EAAE,uBAAuB;gBAC7B,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,GAAG,OAAO,CAAC,iCAAiC,2IAA2I;aACjM,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC3B,CAAC","sourcesContent":["import type { CheckMessage, CheckResult } from \"../../check/check.ts\";\n\nexport const FINDING_POLICIES = Object.freeze([\"blocking\", \"non-blocking\"] as const);\n\n/** package-provided Check 用于结算 normal finding 的阻断策略。 */\nexport type FindingPolicy = (typeof FINDING_POLICIES)[number];\n\nexport const DEFAULT_FINDING_POLICY: FindingPolicy = \"non-blocking\";\n\n/** 三个代码质量 Check 正常完成时返回的精确 finding 计数。 */\nexport interface FindingSummary {\n readonly blockingFindingCount: number;\n readonly findingCount: number;\n}\n\n/** 一项 finding 在 Check 自己结算前的领域中性处置。 */\nexport interface FindingSettlement {\n /** 该 finding 是否仍需要进入该 Check 的正常 finding 结算。 */\n readonly actionable: boolean;\n readonly blocking: boolean;\n}\n\nexport function resolveFindingPolicy(\n value: unknown,\n fallback: FindingPolicy = DEFAULT_FINDING_POLICY\n): FindingPolicy | undefined {\n if (value === undefined) return fallback;\n return FINDING_POLICIES.find((policy) => policy === value);\n}\n\nexport function validFindingPolicy(value: unknown): value is FindingPolicy {\n return FINDING_POLICIES.some((policy) => policy === value);\n}\n\nexport function isBlockingFinding(policies: readonly FindingPolicy[]): boolean {\n return policies.some((policy) => policy === \"blocking\");\n}\n\nexport function settleFindings(\n findings: readonly FindingSettlement[]\n): CheckResult<FindingSummary> {\n const blockingFindingCount = findings.filter(\n (finding) => finding.actionable && finding.blocking\n ).length;\n const findingCount = findings.length;\n const actionableNonBlockingFindingCount = findings.filter(\n (finding) => finding.actionable && !finding.blocking\n ).length;\n const messages = findingMessages({ actionableNonBlockingFindingCount, blockingFindingCount });\n return Object.freeze({\n status: blockingFindingCount > 0 ? \"failed\" : \"passed\",\n data: Object.freeze({\n blockingFindingCount,\n findingCount\n }),\n ...(messages.length === 0 ? {} : { messages })\n });\n}\n\nfunction findingMessages(\n summary: Readonly<{\n readonly actionableNonBlockingFindingCount: number;\n readonly blockingFindingCount: number;\n }>\n): readonly CheckMessage[] {\n if (summary.blockingFindingCount > 0) {\n return Object.freeze([\n Object.freeze({\n code: \"blocking-findings\",\n level: \"error\",\n message: `${summary.blockingFindingCount} blocking finding(s) require attention; inspect this Check's Records for affected paths and measurements, then update the code or policy.`\n })\n ]);\n }\n if (summary.actionableNonBlockingFindingCount > 0) {\n return Object.freeze([\n Object.freeze({\n code: \"non-blocking-findings\",\n level: \"warning\",\n message: `${summary.actionableNonBlockingFindingCount} non-blocking finding(s) were recorded; inspect this Check's Records for affected paths and measurements, then update the code or policy.`\n })\n ]);\n }\n return Object.freeze([]);\n}\n"]}