@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":"session.mjs","sourceRoot":"","sources":["../../../src/check-settlement/session.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CheckDescriptor } from \"../check/descriptor.ts\";\nimport type { CheckOutcome } from \"../check/check.ts\";\nimport {\n CoreRecordStore,\n type CoreRecordSlot,\n type RecordDiagnostic,\n type RecordSubmissionResult\n} from \"./record-store.ts\";\nimport type { CoreCheck, CoreSnapshot } from \"./facts.ts\";\nimport { validateCheckDescriptor } from \"../check/descriptor-validation.ts\";\nimport { normalizeCheckOutcome } from \"./outcome-normalization.ts\";\n\nexport type { RecordSubmissionResult } from \"./record-store.ts\";\n\nexport interface CoreCheckRegistration {\n readonly definition: CheckDescriptor;\n}\n\n/** Internal Record port bound to one currently executing Check. */\nexport interface RecordSink {\n report(identity: unknown, data: unknown): RecordSubmissionResult;\n}\n\n/** Only the Product Task adapter receives this Core lifecycle capability. */\nexport interface TrustedCheckScope {\n readonly records: RecordSink;\n /** Core is the only author-result validation/canonicalization boundary. */\n readonly settle: (outcome: unknown) => AuthorCheckSettlement;\n /** Private Product lifecycle outcomes may include contained prerequisite IDs. */\n readonly settleProduct: (outcome: CheckOutcome) => CheckOutcome;\n}\n\n/** Core's private marker for an author result that survived every settlement guard. */\nexport interface AuthorCheckSettlement {\n readonly authorResultAccepted: boolean;\n readonly outcome: CheckOutcome;\n}\n\nexport interface CoreCheckSession {\n openCheckScope(checkId: string): TrustedCheckScope;\n readSettledCheckOutcome(checkId: string): CheckOutcome;\n closeUnresolvedAsCancelled(): readonly CancelledCheckClosure[];\n freeze(): CoreSnapshot;\n}\n\n/** Product-private cancellation facts emitted at the exact Core closure boundary. */\nexport interface CancelledCheckClosure {\n readonly checkId: string;\n readonly outcome: CheckOutcome;\n}\n\n/** A trusted integration bug is fatal to the invocation, not a Check outcome. */\nexport class CoreInvariantFailure extends Error {\n public constructor(message: string) {\n super(message);\n this.name = \"CoreInvariantFailure\";\n }\n}\n\ntype CoreSlotLifecycle = Readonly<\n | { readonly kind: \"registered\" }\n | { readonly kind: \"open\" }\n | { readonly kind: \"settled\"; readonly outcome: CheckOutcome }\n>;\n\ninterface CoreSlot extends CoreRecordSlot {\n readonly definition: CheckDescriptor;\n lifecycle: CoreSlotLifecycle;\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n\nfunction coreInvariant(message: string): never {\n throw new CoreInvariantFailure(message);\n}\n\nfunction createSlots(registrations: readonly CoreCheckRegistration[]): CoreSlot[] {\n const slots: CoreSlot[] = [];\n const checkIds = new Set<string>();\n for (const registration of registrations) {\n if (registration === null || typeof registration !== \"object\") {\n coreInvariant(\"Core Check registration is invalid\");\n }\n const definition = validateCheckDescriptor(registration.definition);\n if (!definition.ok) coreInvariant(\"Core Check registration definition is invalid\");\n if (checkIds.has(definition.value.checkId)) {\n coreInvariant(\"Core Check registration has a duplicate checkId\");\n }\n checkIds.add(definition.value.checkId);\n slots.push({\n checkId: definition.value.checkId,\n definition: definition.value,\n diagnostics: new Set(),\n lifecycle: { kind: \"registered\" },\n recordIds: new Set()\n });\n }\n return slots.sort((left, right) =>\n compareText(left.definition.checkId, right.definition.checkId)\n );\n}\n\nclass CoreCheckSessionImpl implements CoreCheckSession {\n readonly #slots: CoreSlot[];\n readonly #recordStore = new CoreRecordStore();\n #snapshot: CoreSnapshot | undefined;\n\n public constructor(registrations: readonly CoreCheckRegistration[]) {\n this.#slots = createSlots(registrations);\n }\n\n public openCheckScope(checkId: string): TrustedCheckScope {\n const slot = this.#slotFor(checkId);\n if (this.#snapshot !== undefined || slot.lifecycle.kind !== \"registered\") {\n coreInvariant(\"Core Check scope is not available\");\n }\n slot.lifecycle = Object.freeze({ kind: \"open\" });\n return Object.freeze({\n records: Object.freeze({\n report: (identity: unknown, data: unknown): RecordSubmissionResult => {\n if (this.#snapshot !== undefined || slot.lifecycle.kind !== \"open\") return \"rejected\";\n return this.#recordStore.report(slot, identity, data);\n }\n }),\n settle: (outcome: unknown): AuthorCheckSettlement => this.#settleAuthorSlot(slot, outcome),\n settleProduct: (outcome: CheckOutcome): CheckOutcome => this.#settleSlot(slot, outcome, true)\n });\n }\n\n public readSettledCheckOutcome(checkId: string): CheckOutcome {\n const slot = this.#slotFor(checkId);\n if (slot.lifecycle.kind !== \"settled\") {\n coreInvariant(\"Core settled Check is not available\");\n }\n return slot.lifecycle.outcome;\n }\n\n public closeUnresolvedAsCancelled(): readonly CancelledCheckClosure[] {\n if (this.#snapshot !== undefined) {\n coreInvariant(\"Cancelled closure cannot mutate a frozen Core snapshot\");\n }\n const closures: CancelledCheckClosure[] = [];\n for (const slot of this.#slots) {\n if (slot.lifecycle.kind !== \"settled\") {\n const outcome = this.#commitTerminal(\n slot,\n Object.freeze({ status: \"unavailable\", reason: { code: \"execution-cancelled\" } }),\n true\n );\n closures.push(Object.freeze({ checkId: slot.checkId, outcome }));\n }\n }\n return Object.freeze(closures);\n }\n\n public freeze(): CoreSnapshot {\n if (this.#snapshot !== undefined) return this.#snapshot;\n const checks: CoreCheck[] = [];\n for (const slot of this.#slots) {\n if (slot.lifecycle.kind !== \"settled\") {\n return coreInvariant(\"Core snapshot cannot freeze before every Check slot closes\");\n }\n checks.push(coreCheckFor(slot));\n }\n this.#snapshot = Object.freeze({\n checks: Object.freeze(checks),\n records: this.#recordStore.recordsInCanonicalOrder()\n });\n return this.#snapshot;\n }\n\n #slotFor(checkId: string): CoreSlot {\n if (typeof checkId !== \"string\") coreInvariant(\"Core Check scope requires a checkId\");\n const slot = this.#slots.find((candidate) => candidate.definition.checkId === checkId);\n return slot ?? coreInvariant(\"Core Check scope does not own this checkId\");\n }\n\n #checkIds(): ReadonlySet<string> {\n return new Set(this.#slots.map((candidate) => candidate.checkId));\n }\n\n #settleSlot(slot: CoreSlot, outcome: unknown, productOutcome: boolean): CheckOutcome {\n if (this.#snapshot !== undefined || slot.lifecycle.kind !== \"open\") {\n return coreInvariant(\"Trusted Core Check settlement is duplicate, late, or out of scope\");\n }\n return this.#commitTerminal(slot, outcome, productOutcome);\n }\n\n #settleAuthorSlot(slot: CoreSlot, terminal: unknown): AuthorCheckSettlement {\n if (this.#snapshot !== undefined || slot.lifecycle.kind !== \"open\") {\n return coreInvariant(\"Trusted Core Check settlement is duplicate, late, or out of scope\");\n }\n const diagnostic = terminalDiagnostic(slot);\n const normalized =\n diagnostic === undefined\n ? normalizeCheckOutcome({\n knownCheckIds: this.#checkIds(),\n productOutcome: false,\n value: terminal\n })\n : undefined;\n const outcome = normalized ?? unavailable(diagnostic ?? \"invalid-execution-result\");\n slot.lifecycle = Object.freeze({ kind: \"settled\", outcome });\n return Object.freeze({\n authorResultAccepted: diagnostic === undefined && normalized !== undefined,\n outcome\n });\n }\n\n #commitTerminal(slot: CoreSlot, terminal: unknown, productOutcome = false): CheckOutcome {\n if (slot.lifecycle.kind === \"settled\") {\n coreInvariant(\"Core Check terminal closure is duplicate\");\n }\n const diagnostic = terminalDiagnostic(slot);\n const outcome =\n diagnostic === undefined\n ? (normalizeCheckOutcome({\n knownCheckIds: this.#checkIds(),\n productOutcome,\n value: terminal\n }) ?? unavailable(\"invalid-execution-result\"))\n : unavailable(diagnostic);\n slot.lifecycle = Object.freeze({ kind: \"settled\", outcome });\n return outcome;\n }\n}\n\nfunction terminalDiagnostic(slot: CoreSlot): RecordDiagnostic | undefined {\n if (slot.diagnostics.has(\"record-conflict\")) return \"record-conflict\";\n if (slot.diagnostics.has(\"record-invalid\")) return \"record-invalid\";\n return undefined;\n}\n\nfunction coreCheckFor(slot: CoreSlot): CoreCheck {\n if (slot.lifecycle.kind !== \"settled\") {\n coreInvariant(\"Core Check fact requires a settled slot\");\n }\n return Object.freeze({\n checkId: slot.definition.checkId,\n displayName: slot.definition.displayName,\n outcome: slot.lifecycle.outcome\n });\n}\n\nfunction unavailable(code: string): CheckOutcome {\n return Object.freeze({ status: \"unavailable\", reason: Object.freeze({ code }) });\n}\n\nexport function createCoreCheckSession(\n registrations: readonly CoreCheckRegistration[]\n): CoreCheckSession {\n return new CoreCheckSessionImpl(registrations);\n}\n"]}
@@ -0,0 +1,159 @@
1
+ const encoder = new TextEncoder();
2
+ /**
3
+ * Materializes arbitrary author data without property reads or JSON hooks.
4
+ * The returned graph is detached, prototype-safe, and deeply frozen before it
5
+ * becomes a Core fact. Canonical text order is applied explicitly at serialization.
6
+ */
7
+ export function canonicalizeJsonObject(value) {
8
+ const canonical = canonicalize(value, new Set());
9
+ return canonical !== undefined && isCanonicalJsonObject(canonical) ? canonical : undefined;
10
+ }
11
+ export function canonicalizeJsonValue(value) {
12
+ return canonicalize(value, new Set());
13
+ }
14
+ /** Serializes detached canonical JSON with explicit lexical object-key ordering. */
15
+ export function canonicalJsonText(value) {
16
+ const canonical = canonicalizeJsonValue(value);
17
+ if (canonical === undefined) {
18
+ throw new TypeError("Canonical JSON could not safely materialize the input");
19
+ }
20
+ return canonicalText(canonical);
21
+ }
22
+ /** Emits canonical UTF-8 JSON without invoking author getters or `toJSON`. */
23
+ export function canonicalJsonBytes(value) {
24
+ return encoder.encode(canonicalJsonText(value));
25
+ }
26
+ function canonicalize(value, ancestors) {
27
+ if (value === null)
28
+ return null;
29
+ const primitive = canonicalPrimitive(value);
30
+ if (primitive !== undefined)
31
+ return primitive;
32
+ if (typeof value !== "object")
33
+ return undefined;
34
+ if (!admitCanonicalObject(value, ancestors))
35
+ return undefined;
36
+ try {
37
+ return Array.isArray(value)
38
+ ? canonicalizeArray(value, ancestors)
39
+ : canonicalizeObject(value, ancestors);
40
+ }
41
+ catch {
42
+ return undefined;
43
+ }
44
+ finally {
45
+ ancestors.delete(value);
46
+ }
47
+ }
48
+ function canonicalPrimitive(value) {
49
+ if (typeof value === "boolean" || typeof value === "string")
50
+ return value;
51
+ if (typeof value !== "number" || !Number.isFinite(value))
52
+ return undefined;
53
+ return Object.is(value, -0) ? 0 : value;
54
+ }
55
+ function admitCanonicalObject(value, ancestors) {
56
+ if (ancestors.has(value))
57
+ return false;
58
+ ancestors.add(value);
59
+ return true;
60
+ }
61
+ function canonicalizeArray(value, ancestors) {
62
+ const length = denseCanonicalArrayLength(value);
63
+ if (length === undefined)
64
+ return undefined;
65
+ return canonicalArrayElements(value, length, ancestors);
66
+ }
67
+ function denseCanonicalArrayLength(value) {
68
+ if (Object.getPrototypeOf(value) !== Array.prototype)
69
+ return undefined;
70
+ const keys = Reflect.ownKeys(value);
71
+ const lengthDescriptor = Object.getOwnPropertyDescriptor(value, "length");
72
+ if (!isDataDescriptor(lengthDescriptor) || lengthDescriptor.enumerable)
73
+ return undefined;
74
+ const length = lengthDescriptor.value;
75
+ if (typeof length !== "number" ||
76
+ !Number.isSafeInteger(length) ||
77
+ length < 0 ||
78
+ keys.length !== length + 1)
79
+ return undefined;
80
+ if (!keys.includes("length"))
81
+ return undefined;
82
+ return length;
83
+ }
84
+ function canonicalArrayElements(value, length, ancestors) {
85
+ const values = [];
86
+ for (let index = 0; index < length; index += 1) {
87
+ const key = String(index);
88
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
89
+ if (!isEnumerableDataDescriptor(descriptor))
90
+ return undefined;
91
+ const item = canonicalize(descriptor.value, ancestors);
92
+ if (item === undefined)
93
+ return undefined;
94
+ values.push(item);
95
+ }
96
+ return Object.freeze(values);
97
+ }
98
+ function canonicalizeObject(value, ancestors) {
99
+ const prototype = Object.getPrototypeOf(value);
100
+ if (prototype !== Object.prototype && prototype !== null)
101
+ return undefined;
102
+ const keys = [];
103
+ for (const key of Reflect.ownKeys(value)) {
104
+ if (typeof key !== "string")
105
+ return undefined;
106
+ keys.push(key);
107
+ }
108
+ const snapshot = {};
109
+ Object.setPrototypeOf(snapshot, null);
110
+ for (const key of keys.sort(compareText)) {
111
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
112
+ if (!isEnumerableDataDescriptor(descriptor))
113
+ return undefined;
114
+ const item = canonicalize(descriptor.value, ancestors);
115
+ if (item === undefined)
116
+ return undefined;
117
+ Object.defineProperty(snapshot, key, {
118
+ configurable: false,
119
+ enumerable: true,
120
+ value: item,
121
+ writable: false
122
+ });
123
+ }
124
+ return Object.freeze(snapshot);
125
+ }
126
+ function isDataDescriptor(descriptor) {
127
+ return (descriptor !== undefined &&
128
+ descriptor.get === undefined &&
129
+ descriptor.set === undefined &&
130
+ Object.hasOwn(descriptor, "value"));
131
+ }
132
+ function isEnumerableDataDescriptor(descriptor) {
133
+ return isDataDescriptor(descriptor) && descriptor.enumerable === true;
134
+ }
135
+ function isCanonicalJsonObject(value) {
136
+ return typeof value === "object" && value !== null && !Array.isArray(value);
137
+ }
138
+ function canonicalText(value) {
139
+ if (value === null || typeof value !== "object")
140
+ return JSON.stringify(value);
141
+ if (isCanonicalJsonArray(value)) {
142
+ return `[${value.map((entry) => canonicalText(entry)).join(",")}]`;
143
+ }
144
+ return `{${Object.keys(value)
145
+ .sort(compareText)
146
+ .map((key) => `${JSON.stringify(key)}:${canonicalText(value[key])}`)
147
+ .join(",")}}`;
148
+ }
149
+ function isCanonicalJsonArray(value) {
150
+ return Array.isArray(value);
151
+ }
152
+ function compareText(left, right) {
153
+ if (left < right)
154
+ return -1;
155
+ if (left > right)
156
+ return 1;
157
+ return 0;
158
+ }
159
+ //# sourceMappingURL=canonical-data.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-data.mjs","sourceRoot":"","sources":["../../../src/data-boundary/canonical-data.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CanonicalJsonObject, CanonicalJsonValue } from \"./canonical-json.ts\";\n\nexport type {\n CanonicalJsonObject,\n CanonicalJsonPrimitive,\n CanonicalJsonValue\n} from \"./canonical-json.ts\";\n\nconst encoder = new TextEncoder();\n\n/**\n * Materializes arbitrary author data without property reads or JSON hooks.\n * The returned graph is detached, prototype-safe, and deeply frozen before it\n * becomes a Core fact. Canonical text order is applied explicitly at serialization.\n */\nexport function canonicalizeJsonObject(value: unknown): CanonicalJsonObject | undefined {\n const canonical = canonicalize(value, new Set<object>());\n return canonical !== undefined && isCanonicalJsonObject(canonical) ? canonical : undefined;\n}\n\nexport function canonicalizeJsonValue(value: unknown): CanonicalJsonValue | undefined {\n return canonicalize(value, new Set<object>());\n}\n\n/** Serializes detached canonical JSON with explicit lexical object-key ordering. */\nexport function canonicalJsonText(value: unknown): string {\n const canonical = canonicalizeJsonValue(value);\n if (canonical === undefined) {\n throw new TypeError(\"Canonical JSON could not safely materialize the input\");\n }\n return canonicalText(canonical);\n}\n\n/** Emits canonical UTF-8 JSON without invoking author getters or `toJSON`. */\nexport function canonicalJsonBytes(value: unknown): Uint8Array {\n return encoder.encode(canonicalJsonText(value));\n}\n\nfunction canonicalize(value: unknown, ancestors: Set<object>): CanonicalJsonValue | undefined {\n if (value === null) return null;\n const primitive = canonicalPrimitive(value);\n if (primitive !== undefined) return primitive;\n if (typeof value !== \"object\") return undefined;\n if (!admitCanonicalObject(value, ancestors)) return undefined;\n\n try {\n return Array.isArray(value)\n ? canonicalizeArray(value, ancestors)\n : canonicalizeObject(value, ancestors);\n } catch {\n return undefined;\n } finally {\n ancestors.delete(value);\n }\n}\n\nfunction canonicalPrimitive(value: unknown): CanonicalJsonValue | undefined {\n if (typeof value === \"boolean\" || typeof value === \"string\") return value;\n if (typeof value !== \"number\" || !Number.isFinite(value)) return undefined;\n return Object.is(value, -0) ? 0 : value;\n}\n\nfunction admitCanonicalObject(value: object, ancestors: Set<object>): boolean {\n if (ancestors.has(value)) return false;\n ancestors.add(value);\n return true;\n}\n\nfunction canonicalizeArray(\n value: readonly unknown[],\n ancestors: Set<object>\n): readonly CanonicalJsonValue[] | undefined {\n const length = denseCanonicalArrayLength(value);\n if (length === undefined) return undefined;\n return canonicalArrayElements(value, length, ancestors);\n}\n\nfunction denseCanonicalArrayLength(value: readonly unknown[]): number | undefined {\n if (Object.getPrototypeOf(value) !== Array.prototype) return undefined;\n const keys = Reflect.ownKeys(value);\n const lengthDescriptor = Object.getOwnPropertyDescriptor(value, \"length\");\n if (!isDataDescriptor(lengthDescriptor) || lengthDescriptor.enumerable) return undefined;\n const length = lengthDescriptor.value;\n if (\n typeof length !== \"number\" ||\n !Number.isSafeInteger(length) ||\n length < 0 ||\n keys.length !== length + 1\n )\n return undefined;\n if (!keys.includes(\"length\")) return undefined;\n return length;\n}\n\nfunction canonicalArrayElements(\n value: readonly unknown[],\n length: number,\n ancestors: Set<object>\n): readonly CanonicalJsonValue[] | undefined {\n const values: CanonicalJsonValue[] = [];\n for (let index = 0; index < length; index += 1) {\n const key = String(index);\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (!isEnumerableDataDescriptor(descriptor)) return undefined;\n const item = canonicalize(descriptor.value, ancestors);\n if (item === undefined) return undefined;\n values.push(item);\n }\n return Object.freeze(values);\n}\n\nfunction canonicalizeObject(\n value: object,\n ancestors: Set<object>\n): CanonicalJsonObject | undefined {\n const prototype: unknown = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return undefined;\n const keys: string[] = [];\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key !== \"string\") return undefined;\n keys.push(key);\n }\n\n const snapshot: Record<string, CanonicalJsonValue> = {};\n Object.setPrototypeOf(snapshot, null);\n for (const key of keys.sort(compareText)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (!isEnumerableDataDescriptor(descriptor)) return undefined;\n const item = canonicalize(descriptor.value, ancestors);\n if (item === undefined) return undefined;\n Object.defineProperty(snapshot, key, {\n configurable: false,\n enumerable: true,\n value: item,\n writable: false\n });\n }\n return Object.freeze(snapshot);\n}\n\ntype DataDescriptor = Omit<PropertyDescriptor, \"get\" | \"set\" | \"value\"> &\n Readonly<{\n get?: undefined;\n set?: undefined;\n value: unknown;\n }>;\n\nfunction isDataDescriptor(\n descriptor: PropertyDescriptor | undefined\n): descriptor is DataDescriptor {\n return (\n descriptor !== undefined &&\n descriptor.get === undefined &&\n descriptor.set === undefined &&\n Object.hasOwn(descriptor, \"value\")\n );\n}\n\nfunction isEnumerableDataDescriptor(\n descriptor: PropertyDescriptor | undefined\n): descriptor is DataDescriptor {\n return isDataDescriptor(descriptor) && descriptor.enumerable === true;\n}\n\nfunction isCanonicalJsonObject(value: CanonicalJsonValue): value is CanonicalJsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction canonicalText(value: CanonicalJsonValue): string {\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (isCanonicalJsonArray(value)) {\n return `[${value.map((entry) => canonicalText(entry)).join(\",\")}]`;\n }\n return `{${Object.keys(value)\n .sort(compareText)\n .map((key) => `${JSON.stringify(key)}:${canonicalText(value[key])}`)\n .join(\",\")}}`;\n}\n\nfunction isCanonicalJsonArray(value: CanonicalJsonValue): value is readonly CanonicalJsonValue[] {\n return Array.isArray(value);\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=canonical-json.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-json.mjs","sourceRoot":"","sources":["../../../src/data-boundary/canonical-json.ts"],"names":[],"mappings":"","sourcesContent":["/** Package-private static shape for Product's detached canonical JSON facts. */\nexport type CanonicalJsonPrimitive = boolean | null | number | string;\n\nexport type CanonicalJsonValue =\n | CanonicalJsonPrimitive\n | readonly CanonicalJsonValue[]\n | CanonicalJsonObject;\n\nexport interface CanonicalJsonObject {\n readonly [key: string]: CanonicalJsonValue;\n}\n"]}
@@ -0,0 +1,98 @@
1
+ function ownDataShape(value) {
2
+ const descriptors = Object.getOwnPropertyDescriptors(value);
3
+ const ownKeys = Reflect.ownKeys(descriptors);
4
+ const keys = [];
5
+ for (const key of ownKeys) {
6
+ if (typeof key !== "string")
7
+ return undefined;
8
+ keys.push(key);
9
+ }
10
+ if (keys.some((key) => {
11
+ const descriptor = descriptors[key];
12
+ return descriptor.get !== undefined || descriptor.set !== undefined;
13
+ }))
14
+ return undefined;
15
+ return { descriptors, keys };
16
+ }
17
+ export function snapshotPlainRecord(value) {
18
+ try {
19
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
20
+ return undefined;
21
+ }
22
+ const prototype = Object.getPrototypeOf(value);
23
+ if (prototype !== Object.prototype && prototype !== null) {
24
+ return undefined;
25
+ }
26
+ const descriptors = Object.getOwnPropertyDescriptors(value);
27
+ if (Object.values(descriptors).some((descriptor) => descriptor.get !== undefined || descriptor.set !== undefined)) {
28
+ return undefined;
29
+ }
30
+ return Object.fromEntries(Object.entries(descriptors)
31
+ .filter(([, descriptor]) => descriptor.enumerable === true)
32
+ .map(([key, descriptor]) => [key, descriptor.value]));
33
+ }
34
+ catch {
35
+ return undefined;
36
+ }
37
+ }
38
+ export function snapshotClosedRecord(value) {
39
+ try {
40
+ if (value === null || typeof value !== "object" || Array.isArray(value))
41
+ return undefined;
42
+ const prototype = Object.getPrototypeOf(value);
43
+ if (prototype !== Object.prototype && prototype !== null)
44
+ return undefined;
45
+ const shape = ownDataShape(value);
46
+ if (shape === undefined ||
47
+ shape.keys.some((key) => shape.descriptors[key].enumerable !== true)) {
48
+ return undefined;
49
+ }
50
+ return Object.freeze(Object.fromEntries(shape.keys.map((key) => [key, shape.descriptors[key].value])));
51
+ }
52
+ catch {
53
+ return undefined;
54
+ }
55
+ }
56
+ function closedArrayLength(shape) {
57
+ const descriptor = shape.descriptors.length;
58
+ if (typeof descriptor?.value !== "number" || descriptor.enumerable !== false)
59
+ return undefined;
60
+ const length = descriptor.value;
61
+ return Number.isSafeInteger(length) && length >= 0 && shape.keys.length === length + 1
62
+ ? length
63
+ : undefined;
64
+ }
65
+ function closedArrayItems(shape, length) {
66
+ const items = [];
67
+ for (let index = 0; index < length; index += 1) {
68
+ const descriptor = shape.descriptors[String(index)];
69
+ if (descriptor === undefined || descriptor.enumerable !== true)
70
+ return undefined;
71
+ items.push(descriptor.value);
72
+ }
73
+ return Object.freeze(items);
74
+ }
75
+ export function snapshotClosedArray(value) {
76
+ try {
77
+ if (!Array.isArray(value) || Object.getPrototypeOf(value) !== Array.prototype)
78
+ return undefined;
79
+ const shape = ownDataShape(value);
80
+ if (shape === undefined)
81
+ return undefined;
82
+ const length = closedArrayLength(shape);
83
+ return length === undefined ? undefined : closedArrayItems(shape, length);
84
+ }
85
+ catch {
86
+ return undefined;
87
+ }
88
+ }
89
+ export function hasExactPlainRecordKeys(value, keys) {
90
+ const actualKeys = Object.keys(value);
91
+ return actualKeys.length === keys.length && actualKeys.every((key) => keys.includes(key));
92
+ }
93
+ export function hasRequiredAndOptionalRecordKeys(value, keys) {
94
+ const supportedKeys = new Set([...keys.required, ...keys.optional]);
95
+ return (keys.required.every((key) => Object.hasOwn(value, key)) &&
96
+ Object.keys(value).every((key) => supportedKeys.has(key)));
97
+ }
98
+ //# sourceMappingURL=closed-values.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"closed-values.mjs","sourceRoot":"","sources":["../../../src/data-boundary/closed-values.ts"],"names":[],"mappings":"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","sourcesContent":["interface OwnDataShape {\n readonly descriptors: Readonly<Record<string, PropertyDescriptor>>;\n readonly keys: readonly string[];\n}\n\nfunction ownDataShape(value: object): OwnDataShape | undefined {\n const descriptors: Readonly<Record<string, PropertyDescriptor>> =\n Object.getOwnPropertyDescriptors(value);\n const ownKeys = Reflect.ownKeys(descriptors);\n const keys: string[] = [];\n for (const key of ownKeys) {\n if (typeof key !== \"string\") return undefined;\n keys.push(key);\n }\n if (\n keys.some((key) => {\n const descriptor = descriptors[key];\n return descriptor.get !== undefined || descriptor.set !== undefined;\n })\n )\n return undefined;\n return { descriptors, keys };\n}\n\nexport function snapshotPlainRecord(value: unknown): Readonly<Record<string, unknown>> | undefined {\n try {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n const prototype: unknown = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n return undefined;\n }\n const descriptors: Readonly<Record<string, PropertyDescriptor>> =\n Object.getOwnPropertyDescriptors(value);\n if (\n Object.values(descriptors).some(\n (descriptor) => descriptor.get !== undefined || descriptor.set !== undefined\n )\n ) {\n return undefined;\n }\n return Object.fromEntries(\n Object.entries(descriptors)\n .filter(([, descriptor]) => descriptor.enumerable === true)\n .map(([key, descriptor]) => [key, descriptor.value as unknown])\n );\n } catch {\n return undefined;\n }\n}\n\nexport function snapshotClosedRecord(\n value: unknown\n): Readonly<Record<string, unknown>> | undefined {\n try {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n const prototype: unknown = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return undefined;\n const shape = ownDataShape(value);\n if (\n shape === undefined ||\n shape.keys.some((key) => shape.descriptors[key].enumerable !== true)\n ) {\n return undefined;\n }\n return Object.freeze(\n Object.fromEntries(shape.keys.map((key) => [key, shape.descriptors[key].value as unknown]))\n );\n } catch {\n return undefined;\n }\n}\n\nfunction closedArrayLength(shape: OwnDataShape): number | undefined {\n const descriptor = shape.descriptors.length;\n if (typeof descriptor?.value !== \"number\" || descriptor.enumerable !== false) return undefined;\n const length = descriptor.value;\n return Number.isSafeInteger(length) && length >= 0 && shape.keys.length === length + 1\n ? length\n : undefined;\n}\n\nfunction closedArrayItems(shape: OwnDataShape, length: number): readonly unknown[] | undefined {\n const items: unknown[] = [];\n for (let index = 0; index < length; index += 1) {\n const descriptor = shape.descriptors[String(index)];\n if (descriptor === undefined || descriptor.enumerable !== true) return undefined;\n items.push(descriptor.value as unknown);\n }\n return Object.freeze(items);\n}\n\nexport function snapshotClosedArray(value: unknown): readonly unknown[] | undefined {\n try {\n if (!Array.isArray(value) || Object.getPrototypeOf(value) !== Array.prototype) return undefined;\n const shape = ownDataShape(value);\n if (shape === undefined) return undefined;\n const length = closedArrayLength(shape);\n return length === undefined ? undefined : closedArrayItems(shape, length);\n } catch {\n return undefined;\n }\n}\n\nexport function hasExactPlainRecordKeys(\n value: Readonly<Record<string, unknown>>,\n keys: readonly string[]\n): boolean {\n const actualKeys = Object.keys(value);\n return actualKeys.length === keys.length && actualKeys.every((key) => keys.includes(key));\n}\n\nexport function hasRequiredAndOptionalRecordKeys(\n value: Readonly<Record<string, unknown>>,\n keys: Readonly<{\n readonly optional: readonly string[];\n readonly required: readonly string[];\n }>\n): boolean {\n const supportedKeys = new Set([...keys.required, ...keys.optional]);\n return (\n keys.required.every((key) => Object.hasOwn(value, key)) &&\n Object.keys(value).every((key) => supportedKeys.has(key))\n );\n}\n"]}
@@ -0,0 +1,13 @@
1
+ export function isRecord(value) {
2
+ return typeof value === "object" && value !== null;
3
+ }
4
+ export function isNonArrayRecord(value) {
5
+ return isRecord(value) && !Array.isArray(value);
6
+ }
7
+ export function isUnknownArray(value) {
8
+ return Array.isArray(value);
9
+ }
10
+ export function isStringArray(value) {
11
+ return isUnknownArray(value) && value.every((item) => typeof item === "string");
12
+ }
13
+ //# sourceMappingURL=value-shapes.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value-shapes.mjs","sourceRoot":"","sources":["../../../src/data-boundary/value-shapes.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;AAClF,CAAC","sourcesContent":["export function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nexport function isNonArrayRecord(value: unknown): value is Record<string, unknown> {\n return isRecord(value) && !Array.isArray(value);\n}\n\nexport function isUnknownArray(value: unknown): value is unknown[] {\n return Array.isArray(value);\n}\n\nexport function isStringArray(value: unknown): value is string[] {\n return isUnknownArray(value) && value.every((item) => typeof item === \"string\");\n}\n"]}
@@ -0,0 +1,84 @@
1
+ import { canonicalizeJsonValue, canonicalJsonText } from "../data-boundary/canonical-data.mjs";
2
+ /**
3
+ * 按调用方定义的语义身份对完整 finding 集合和 waiver 配置做 canonical structural reconciliation。
4
+ *
5
+ * 每项 waiver 必须有唯一、可 canonicalize 的 identity 和非空 reason。匹配零项时产生 `unused` 审计;
6
+ * 匹配一项时该 finding 为 `waived`;匹配多项时产生 `overmatched` 审计,相关 finding 保持待处理。
7
+ */
8
+ export function reconcileFindingWaivers(options) {
9
+ const waivers = materializeWaivers(options.waivers);
10
+ const matchCounts = new Array(waivers.length).fill(0);
11
+ const waiverIndexesByIdentity = new Map();
12
+ for (const [index, waiver] of waivers.entries()) {
13
+ const identity = canonicalIdentity(waiver.identity, "waiver identity");
14
+ if (waiverIndexesByIdentity.has(identity)) {
15
+ throw new TypeError("Finding waivers must not declare duplicate canonical identities");
16
+ }
17
+ waiverIndexesByIdentity.set(identity, index);
18
+ }
19
+ const matchedWaiverIndexes = options.findings.map((finding) => {
20
+ const identity = canonicalIdentity(options.identify(finding), "finding identity");
21
+ const waiverIndex = waiverIndexesByIdentity.get(identity);
22
+ if (waiverIndex !== undefined)
23
+ matchCounts[waiverIndex] += 1;
24
+ return waiverIndex;
25
+ });
26
+ const waiverAudits = Object.freeze(waivers.map((waiver, index) => Object.freeze({
27
+ matchCount: matchCounts[index] ?? 0,
28
+ status: waiverAuditStatus(matchCounts[index] ?? 0),
29
+ waiver
30
+ })));
31
+ const findings = Object.freeze(options.findings.map((finding, index) => {
32
+ const waiverIndex = matchedWaiverIndexes[index];
33
+ const audit = waiverIndex === undefined ? undefined : waiverAudits[waiverIndex];
34
+ return reconciledFinding(finding, audit);
35
+ }));
36
+ return Object.freeze({ findings, waiverAudits });
37
+ }
38
+ function materializeWaivers(waivers) {
39
+ const canonicalWaivers = canonicalizeJsonValue(waivers);
40
+ if (canonicalWaivers === undefined || !isCanonicalArray(canonicalWaivers)) {
41
+ throw new TypeError("Finding waivers must be canonical JSON arrays");
42
+ }
43
+ return Object.freeze(canonicalWaivers.map(materializeWaiver));
44
+ }
45
+ function materializeWaiver(value) {
46
+ if (!isCanonicalObject(value) ||
47
+ !Object.hasOwn(value, "identity") ||
48
+ !Object.hasOwn(value, "reason")) {
49
+ throw new TypeError("Finding waivers must declare canonical identity and reason fields");
50
+ }
51
+ const reason = value.reason;
52
+ if (typeof reason !== "string" || reason.length === 0) {
53
+ throw new TypeError("Finding waiver reasons must be non-empty strings");
54
+ }
55
+ return Object.freeze({ identity: value.identity, reason });
56
+ }
57
+ function isCanonicalObject(value) {
58
+ return typeof value === "object" && value !== null && !Array.isArray(value);
59
+ }
60
+ function isCanonicalArray(value) {
61
+ return Array.isArray(value);
62
+ }
63
+ function canonicalIdentity(identity, kind) {
64
+ try {
65
+ return canonicalJsonText(identity);
66
+ }
67
+ catch {
68
+ throw new TypeError(`Finding ${kind} must be canonical JSON`);
69
+ }
70
+ }
71
+ function waiverAuditStatus(matchCount) {
72
+ if (matchCount === 0)
73
+ return "unused";
74
+ return matchCount === 1 ? "applied" : "overmatched";
75
+ }
76
+ function reconciledFinding(finding, audit) {
77
+ if (audit === undefined)
78
+ return Object.freeze({ disposition: "actionable", finding });
79
+ if (audit.status === "applied") {
80
+ return Object.freeze({ disposition: "waived", finding, waiver: audit.waiver });
81
+ }
82
+ return Object.freeze({ disposition: "overmatched", finding });
83
+ }
84
+ //# sourceMappingURL=reconciliation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconciliation.mjs","sourceRoot":"","sources":["../../../src/finding-waivers/reconciliation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n canonicalizeJsonValue,\n canonicalJsonText,\n type CanonicalJsonObject,\n type CanonicalJsonValue\n} from \"../data-boundary/canonical-data.ts\";\n\n/** 由采用方声明、用于匹配一个 finding 的语义身份与豁免理由。 */\nexport interface FindingWaiver<Identity> {\n /** 调用方定义的稳定 finding 身份;匹配时按 canonical JSON 结构比较。 */\n readonly identity: Identity;\n /** 解释该 finding 在当前范围内可被豁免的非空理由。 */\n readonly reason: string;\n}\n\n/** helper 安全 materialize 后保留的 waiver evidence;identity 是 detached canonical JSON。 */\nexport interface MaterializedFindingWaiver {\n /** 从 authored identity materialize 的 detached、deep-frozen canonical JSON。 */\n readonly identity: CanonicalJsonValue;\n /** 从 authored reason materialize 的非空理由。 */\n readonly reason: string;\n}\n\n/** 一项 finding waiver 的配置与匹配次数审计。 */\nexport interface FindingWaiverAudit {\n /** 被审计的 materialized authored waiver evidence,而非调用方可变输入引用。 */\n readonly waiver: MaterializedFindingWaiver;\n /** 该 waiver identity 在完整 finding 集合中匹配到的数量。 */\n readonly matchCount: number;\n /** 未使用、正常应用,或因过宽而没有应用。 */\n readonly status: \"unused\" | \"applied\" | \"overmatched\";\n}\n\n/** reconciliation 后单个 finding 的可执行处置;只有 `waived` branch 携带 matched waiver。 */\nexport type ReconciledFinding<Finding> = Readonly<\n | {\n /** 原始 finding;helper 不解释或改写它的领域字段。 */\n readonly finding: Finding;\n /** 没有匹配 waiver 的正常待处理 finding。 */\n readonly disposition: \"actionable\";\n }\n | {\n /** 原始 finding;helper 不解释或改写它的领域字段。 */\n readonly finding: Finding;\n /** 恰好匹配一项 waiver 的 finding。 */\n readonly disposition: \"waived\";\n /** applied waiver 的身份和理由。 */\n readonly waiver: MaterializedFindingWaiver;\n }\n | {\n /** 原始 finding;helper 不解释或改写它的领域字段。 */\n readonly finding: Finding;\n /** `overmatched` 保持为待处理,避免宽泛 waiver 静默覆盖多个 finding。 */\n readonly disposition: \"overmatched\";\n }\n>;\n\n/** 调用方提供完整候选集、身份识别器和 waiver 配置的输入。 */\nexport interface ReconcileFindingWaiversOptions<Finding, Identity> {\n /** 必须是完整 finding 候选集合,helper 才能审计每项 waiver 的匹配次数。 */\n readonly findings: readonly Finding[];\n /** 从完整 finding 提取调用方选择的稳定语义身份。 */\n readonly identify: (finding: Finding) => Identity;\n /** 要与识别器输出进行 canonical structural matching 的 waiver。 */\n readonly waivers: readonly FindingWaiver<Identity>[];\n}\n\n/** 独立 waiver reconciliation 的完整输出,保留 finding 处置和每项配置审计。 */\nexport interface FindingWaiverReconciliation<Finding> {\n /** 与 input finding 顺序相同的 reconciliation 结果。 */\n readonly findings: readonly ReconciledFinding<Finding>[];\n /** 与 input waiver 顺序相同的完整配置审计。 */\n readonly waiverAudits: readonly FindingWaiverAudit[];\n}\n\n/**\n * 按调用方定义的语义身份对完整 finding 集合和 waiver 配置做 canonical structural reconciliation。\n *\n * 每项 waiver 必须有唯一、可 canonicalize 的 identity 和非空 reason。匹配零项时产生 `unused` 审计;\n * 匹配一项时该 finding 为 `waived`;匹配多项时产生 `overmatched` 审计,相关 finding 保持待处理。\n */\nexport function reconcileFindingWaivers<Finding, Identity>(\n options: ReconcileFindingWaiversOptions<Finding, Identity>\n): FindingWaiverReconciliation<Finding> {\n const waivers = materializeWaivers(options.waivers);\n const matchCounts = new Array<number>(waivers.length).fill(0);\n const waiverIndexesByIdentity = new Map<string, number>();\n for (const [index, waiver] of waivers.entries()) {\n const identity = canonicalIdentity(waiver.identity, \"waiver identity\");\n if (waiverIndexesByIdentity.has(identity)) {\n throw new TypeError(\"Finding waivers must not declare duplicate canonical identities\");\n }\n waiverIndexesByIdentity.set(identity, index);\n }\n\n const matchedWaiverIndexes = options.findings.map((finding) => {\n const identity = canonicalIdentity(options.identify(finding), \"finding identity\");\n const waiverIndex = waiverIndexesByIdentity.get(identity);\n if (waiverIndex !== undefined) matchCounts[waiverIndex] += 1;\n return waiverIndex;\n });\n const waiverAudits = Object.freeze(\n waivers.map((waiver, index) =>\n Object.freeze({\n matchCount: matchCounts[index] ?? 0,\n status: waiverAuditStatus(matchCounts[index] ?? 0),\n waiver\n })\n )\n );\n const findings = Object.freeze(\n options.findings.map((finding, index) => {\n const waiverIndex = matchedWaiverIndexes[index];\n const audit = waiverIndex === undefined ? undefined : waiverAudits[waiverIndex];\n return reconciledFinding(finding, audit);\n })\n );\n return Object.freeze({ findings, waiverAudits });\n}\n\nfunction materializeWaivers<Identity>(\n waivers: readonly FindingWaiver<Identity>[]\n): readonly MaterializedFindingWaiver[] {\n const canonicalWaivers = canonicalizeJsonValue(waivers);\n if (canonicalWaivers === undefined || !isCanonicalArray(canonicalWaivers)) {\n throw new TypeError(\"Finding waivers must be canonical JSON arrays\");\n }\n return Object.freeze(canonicalWaivers.map(materializeWaiver));\n}\n\nfunction materializeWaiver(value: CanonicalJsonValue): MaterializedFindingWaiver {\n if (\n !isCanonicalObject(value) ||\n !Object.hasOwn(value, \"identity\") ||\n !Object.hasOwn(value, \"reason\")\n ) {\n throw new TypeError(\"Finding waivers must declare canonical identity and reason fields\");\n }\n const reason = value.reason;\n if (typeof reason !== \"string\" || reason.length === 0) {\n throw new TypeError(\"Finding waiver reasons must be non-empty strings\");\n }\n return Object.freeze({ identity: value.identity, reason });\n}\n\nfunction isCanonicalObject(value: CanonicalJsonValue): value is CanonicalJsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isCanonicalArray(value: CanonicalJsonValue): value is readonly CanonicalJsonValue[] {\n return Array.isArray(value);\n}\n\nfunction canonicalIdentity(identity: unknown, kind: string): string {\n try {\n return canonicalJsonText(identity);\n } catch {\n throw new TypeError(`Finding ${kind} must be canonical JSON`);\n }\n}\n\nfunction waiverAuditStatus(matchCount: number): FindingWaiverAudit[\"status\"] {\n if (matchCount === 0) return \"unused\";\n return matchCount === 1 ? \"applied\" : \"overmatched\";\n}\n\nfunction reconciledFinding<Finding>(\n finding: Finding,\n audit: FindingWaiverAudit | undefined\n): ReconciledFinding<Finding> {\n if (audit === undefined) return Object.freeze({ disposition: \"actionable\", finding });\n if (audit.status === \"applied\") {\n return Object.freeze({ disposition: \"waived\", finding, waiver: audit.waiver });\n }\n return Object.freeze({ disposition: \"overmatched\", finding });\n}\n"]}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Vibe Check 是由项目在 Bun runtime 中调用的 TypeScript API,用于定义并执行项目质量 Check。
3
+ * 所有公开能力从 package root 导入;package `README.md` 说明 consumer authoring、结果读取和分发范围。
4
+ *
5
+ * @packageDocumentation
6
+ */
7
+ export { duplicateDetection } from "./package-checks/duplicate-detection/default-check.mjs";
8
+ export { parseDuplicateDetectionData } from "./package-checks/duplicate-detection/final-data.mjs";
9
+ export { fileMetrics } from "./package-checks/file-metrics/constructor.mjs";
10
+ export { parseFileMetricsData } from "./package-checks/file-metrics/final-data.mjs";
11
+ export { functionMetrics } from "./package-checks/function-metrics/constructor.mjs";
12
+ export { parseFunctionMetricsData } from "./package-checks/function-metrics/final-data.mjs";
13
+ export { jsonSchemaValidation } from "./package-checks/json-schema-validation/default-check.mjs";
14
+ export { parseJsonSchemaValidationData } from "./package-checks/json-schema-validation/final-data.mjs";
15
+ export { jsonValidation } from "./package-checks/json-validation/default-check.mjs";
16
+ export { parseJsonValidationData } from "./package-checks/json-validation/final-data.mjs";
17
+ export { maintenanceReminders } from "./package-checks/maintenance-reminders/maintenance-reminders.mjs";
18
+ export { parseMaintenanceRemindersData } from "./package-checks/maintenance-reminders/final-data.mjs";
19
+ export { markdownLinkValidation } from "./package-checks/markdown-link-validation/default-check.mjs";
20
+ export { parseMarkdownLinkValidationData } from "./package-checks/markdown-link-validation/final-data.mjs";
21
+ export { reconcileFindingWaivers } from "./finding-waivers/reconciliation.mjs";
22
+ export { defaultProjectFileSelection } from "./package-checks/project-files/configuration.mjs";
23
+ export { defineCheck, inherit } from "./check/check.mjs";
24
+ export { defineConfig } from "./project-definition/project-definition.mjs";
25
+ export { run } from "./project-run/run.mjs";
26
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uDAAuD,CAAC;AAC3F,OAAO,EAAE,2BAA2B,EAAE,MAAM,oDAAoD,CAAC;AAQjG,OAAO,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AAUnF,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AACnF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAQ3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,0DAA0D,CAAC;AAChG,OAAO,EAAE,6BAA6B,EAAE,MAAM,uDAAuD,CAAC;AAYtG,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AAWzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iEAAiE,CAAC;AAMvG,OAAO,EAAE,6BAA6B,EAAE,MAAM,sDAAsD,CAAC;AAMrG,OAAO,EAAE,sBAAsB,EAAE,MAAM,4DAA4D,CAAC;AACpG,OAAO,EAAE,+BAA+B,EAAE,MAAM,yDAAyD,CAAC;AAU1G,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAS9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,iDAAiD,CAAC;AAM9F,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAYxD,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAW1E,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC","sourcesContent":["/**\n * Vibe Check 是由项目在 Bun runtime 中调用的 TypeScript API,用于定义并执行项目质量 Check。\n * 所有公开能力从 package root 导入;package `README.md` 说明 consumer authoring、结果读取和分发范围。\n *\n * @packageDocumentation\n */\nexport { duplicateDetection } from \"./package-checks/duplicate-detection/default-check.ts\";\nexport { parseDuplicateDetectionData } from \"./package-checks/duplicate-detection/final-data.ts\";\nexport type { DuplicateDetectionFinalData } from \"./package-checks/duplicate-detection/final-data.ts\";\nexport type {\n DuplicateDetectionOptions,\n ResolvedDuplicateDetectionOptions\n} from \"./package-checks/duplicate-detection/options.ts\";\nexport type { DuplicateDetectionUnavailableReasonCode } from \"./package-checks/duplicate-detection/execution.ts\";\nexport type { DuplicateDetectionRecordData } from \"./package-checks/duplicate-detection/records.ts\";\nexport { fileMetrics } from \"./package-checks/file-metrics/constructor.ts\";\nexport { parseFileMetricsData } from \"./package-checks/file-metrics/final-data.ts\";\nexport type { FileMetricsFinalData } from \"./package-checks/file-metrics/final-data.ts\";\nexport type {\n FileMetricsFindingIdentity,\n FileMetricsFindingWaiver,\n FileMetricsOptions,\n ResolvedFileMetricsOptions\n} from \"./package-checks/file-metrics/options.ts\";\nexport type { FileMetricsUnavailableReasonCode } from \"./package-checks/file-metrics/execution.ts\";\nexport type { FileMetricsRecordData } from \"./package-checks/file-metrics/records.ts\";\nexport { functionMetrics } from \"./package-checks/function-metrics/constructor.ts\";\nexport { parseFunctionMetricsData } from \"./package-checks/function-metrics/final-data.ts\";\nexport type { FunctionMetricsFinalData } from \"./package-checks/function-metrics/final-data.ts\";\nexport type {\n FunctionMetricsOptions,\n ResolvedFunctionMetricsOptions\n} from \"./package-checks/function-metrics/options.ts\";\nexport type { FunctionMetricsUnavailableReasonCode } from \"./package-checks/function-metrics/execution.ts\";\nexport type { FunctionMetricsRecordData } from \"./package-checks/function-metrics/records.ts\";\nexport { jsonSchemaValidation } from \"./package-checks/json-schema-validation/default-check.ts\";\nexport { parseJsonSchemaValidationData } from \"./package-checks/json-schema-validation/final-data.ts\";\nexport type { JsonSchemaValidationFinalData } from \"./package-checks/json-schema-validation/final-data.ts\";\nexport type {\n JsonSchemaValidationOptions,\n ResolvedJsonSchemaValidationOptions\n} from \"./package-checks/json-schema-validation/options.ts\";\nexport type {\n JsonSchemaDocumentReason,\n JsonSchemaValidationRecordData,\n JsonSchemaValidationRecordReason,\n JsonSchemaValidationUnavailableCode\n} from \"./package-checks/json-schema-validation/json-schema-validation.ts\";\nexport { jsonValidation } from \"./package-checks/json-validation/default-check.ts\";\nexport { parseJsonValidationData } from \"./package-checks/json-validation/final-data.ts\";\nexport type { JsonValidationFinalData } from \"./package-checks/json-validation/final-data.ts\";\nexport type {\n JsonValidationOptions,\n ResolvedJsonValidationOptions\n} from \"./package-checks/json-validation/options.ts\";\nexport type {\n JsonValidationRecordData,\n JsonValidationRecordReason,\n JsonValidationUnavailableCode\n} from \"./package-checks/json-validation/json-validation.ts\";\nexport { maintenanceReminders } from \"./package-checks/maintenance-reminders/maintenance-reminders.ts\";\nexport type {\n MaintenanceReminder,\n MaintenanceReminderOptions,\n MaintenanceRemindersUnavailableCode\n} from \"./package-checks/maintenance-reminders/maintenance-reminders.ts\";\nexport { parseMaintenanceRemindersData } from \"./package-checks/maintenance-reminders/final-data.ts\";\nexport type {\n MaintenanceReminderAssessment,\n MaintenanceReminderUnavailableReason,\n MaintenanceRemindersFinalData\n} from \"./package-checks/maintenance-reminders/final-data.ts\";\nexport { markdownLinkValidation } from \"./package-checks/markdown-link-validation/default-check.ts\";\nexport { parseMarkdownLinkValidationData } from \"./package-checks/markdown-link-validation/final-data.ts\";\nexport type { MarkdownLinkValidationFinalData } from \"./package-checks/markdown-link-validation/final-data.ts\";\nexport type {\n MarkdownLinkValidationOptions,\n ResolvedMarkdownLinkValidationOptions\n} from \"./package-checks/markdown-link-validation/options.ts\";\nexport type { MarkdownLinkValidationUnavailableReason } from \"./package-checks/markdown-link-validation/execution.ts\";\nexport type { MarkdownLinkValidationRecordData } from \"./package-checks/markdown-link-validation/records.ts\";\nexport type { MarkdownLinkFindingReason } from \"./package-checks/markdown-link-validation/local-resolver.ts\";\nexport type { FindingPolicy } from \"./package-checks/code-quality-findings/policy.ts\";\nexport { reconcileFindingWaivers } from \"./finding-waivers/reconciliation.ts\";\nexport type {\n FindingWaiver,\n FindingWaiverAudit,\n FindingWaiverReconciliation,\n MaterializedFindingWaiver,\n ReconciledFinding,\n ReconcileFindingWaiversOptions\n} from \"./finding-waivers/reconciliation.ts\";\nexport { defaultProjectFileSelection } from \"./package-checks/project-files/configuration.ts\";\nexport type {\n ProjectFileSelection,\n ProjectFileSelectionOptions,\n ProjectFileSource\n} from \"./package-checks/project-files/configuration.ts\";\nexport { defineCheck, inherit } from \"./check/check.ts\";\nexport type {\n Check,\n CheckExecution,\n CheckExecutionContext,\n CheckPreflight,\n CheckPreflightResult,\n CheckOutcome,\n CheckResult,\n CheckUnavailableReason,\n InheritableCheckCollection\n} from \"./check/check.ts\";\nexport { defineConfig } from \"./project-definition/project-definition.ts\";\nexport type {\n ProjectOutputs,\n ProjectDefinition,\n SchedulerPolicy\n} from \"./project-definition/project-definition.ts\";\nexport type {\n CheckAggregate,\n CheckAggregation,\n RunControls\n} from \"./project-run/controls/contract.ts\";\nexport { run } from \"./project-run/run.ts\";\nexport type { RunResult } from \"./project-run/result.ts\";\n"]}
@@ -0,0 +1,102 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import fs from "node:fs";
3
+ import { join } from "node:path";
4
+ const CANONICAL_NAMES = ["records.ndjson", "run.json"];
5
+ const RETIRED_NAMES = [
6
+ "metrics.json",
7
+ "report.md",
8
+ "warnings-all.ndjson",
9
+ "warnings.ndjson"
10
+ ];
11
+ const OWNED_TEMP_PREFIX = ".vibe-check-publication-";
12
+ /** Writes an already validated two-file candidate set through owned temporary paths. */
13
+ export function publishPublicationCandidatesV4(artifactDir, candidates) {
14
+ fs.mkdirSync(artifactDir, { recursive: true });
15
+ const files = publicationCandidatePaths(artifactDir, randomUUID(), candidates);
16
+ let hasReplacedCanonicalPath = false;
17
+ try {
18
+ cleanupOwnedTemps(artifactDir);
19
+ for (const file of files) {
20
+ fs.writeFileSync(file.temp, file.contents, { encoding: "utf8", flag: "wx" });
21
+ }
22
+ for (const file of files) {
23
+ fs.renameSync(file.temp, file.canonical);
24
+ hasReplacedCanonicalPath = true;
25
+ }
26
+ cleanupRetiredArtifacts(artifactDir);
27
+ }
28
+ catch (error) {
29
+ if (hasReplacedCanonicalPath)
30
+ cleanupPublicationV4BestEffort(artifactDir);
31
+ else
32
+ cleanupOwnedTempsBestEffort(artifactDir);
33
+ throw error;
34
+ }
35
+ }
36
+ export function cleanupPublicationV4(artifactDir) {
37
+ removePaths([
38
+ ...artifactPaths(artifactDir, CANONICAL_NAMES),
39
+ ...artifactPaths(artifactDir, RETIRED_NAMES),
40
+ ...ownedTempPaths(artifactDir)
41
+ ]);
42
+ }
43
+ export function cleanupPublicationV4BestEffort(artifactDir) {
44
+ try {
45
+ cleanupPublicationV4(artifactDir);
46
+ }
47
+ catch {
48
+ // Failure cleanup cannot conceal the original publication failure.
49
+ }
50
+ }
51
+ function publicationCandidatePaths(artifactDir, token, candidates) {
52
+ return [
53
+ {
54
+ canonical: join(artifactDir, "run.json"),
55
+ contents: candidates.runJson,
56
+ temp: join(artifactDir, `.vibe-check-publication-${token}-run.json.tmp`)
57
+ },
58
+ {
59
+ canonical: join(artifactDir, "records.ndjson"),
60
+ contents: candidates.recordsNdjson,
61
+ temp: join(artifactDir, `.vibe-check-publication-${token}-records.ndjson.tmp`)
62
+ }
63
+ ];
64
+ }
65
+ function cleanupOwnedTemps(artifactDir) {
66
+ removePaths(ownedTempPaths(artifactDir));
67
+ }
68
+ function cleanupOwnedTempsBestEffort(artifactDir) {
69
+ try {
70
+ cleanupOwnedTemps(artifactDir);
71
+ }
72
+ catch {
73
+ // Failure cleanup cannot conceal the original publication failure.
74
+ }
75
+ }
76
+ function cleanupRetiredArtifacts(artifactDir) {
77
+ removePaths(artifactPaths(artifactDir, RETIRED_NAMES));
78
+ }
79
+ function artifactPaths(artifactDir, names) {
80
+ return names.map((name) => join(artifactDir, name));
81
+ }
82
+ function ownedTempPaths(artifactDir) {
83
+ return fs
84
+ .readdirSync(artifactDir, { withFileTypes: true })
85
+ .filter((entry) => entry.name.startsWith(OWNED_TEMP_PREFIX))
86
+ .map((entry) => join(artifactDir, entry.name))
87
+ .sort();
88
+ }
89
+ function removePaths(paths) {
90
+ let firstFailure;
91
+ for (const path of paths) {
92
+ try {
93
+ fs.rmSync(path, { force: true, recursive: true });
94
+ }
95
+ catch (error) {
96
+ firstFailure ??= error;
97
+ }
98
+ }
99
+ if (firstFailure !== undefined)
100
+ throw firstFailure;
101
+ }
102
+ //# sourceMappingURL=atomic-publication.mjs.map