@zxyycom/vibe-check 0.0.1 → 0.0.3

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 (1190) hide show
  1. package/README.md +79 -75
  2. package/dist/esm/check/check.mjs +4 -0
  3. package/dist/esm/check/check.mjs.map +1 -1
  4. package/dist/esm/check/flag-enablement.mjs +32 -0
  5. package/dist/esm/check/flag-enablement.mjs.map +1 -0
  6. package/dist/esm/check/handoff-provider-identity.mjs +18 -0
  7. package/dist/esm/check/handoff-provider-identity.mjs.map +1 -0
  8. package/dist/esm/check/inherited-collection.mjs +2 -2
  9. package/dist/esm/check/inherited-collection.mjs.map +1 -1
  10. package/dist/esm/check/project-changes.mjs +2 -0
  11. package/dist/esm/check/project-changes.mjs.map +1 -0
  12. package/dist/esm/check/project-context.mjs +2 -0
  13. package/dist/esm/check/project-context.mjs.map +1 -0
  14. package/dist/esm/check-settlement/fact-validation.mjs +17 -23
  15. package/dist/esm/check-settlement/fact-validation.mjs.map +1 -1
  16. package/dist/esm/check-settlement/facts.mjs.map +1 -1
  17. package/dist/esm/check-settlement/outcome-normalization.mjs +9 -19
  18. package/dist/esm/check-settlement/outcome-normalization.mjs.map +1 -1
  19. package/dist/esm/check-settlement/reason-shape.mjs +12 -0
  20. package/dist/esm/check-settlement/reason-shape.mjs.map +1 -0
  21. package/dist/esm/check-settlement/record-store.mjs +14 -17
  22. package/dist/esm/check-settlement/record-store.mjs.map +1 -1
  23. package/dist/esm/check-settlement/session.mjs +8 -2
  24. package/dist/esm/check-settlement/session.mjs.map +1 -1
  25. package/dist/esm/data-boundary/canonical-data.mjs +36 -7
  26. package/dist/esm/data-boundary/canonical-data.mjs.map +1 -1
  27. package/dist/esm/data-boundary/canonical-json.mjs.map +1 -1
  28. package/dist/esm/data-boundary/closed-values.mjs +43 -3
  29. package/dist/esm/data-boundary/closed-values.mjs.map +1 -1
  30. package/dist/esm/{package-checks/project-files → data-boundary}/config-glob.mjs +3 -3
  31. package/dist/esm/data-boundary/config-glob.mjs.map +1 -0
  32. package/dist/esm/data-boundary/project-path.mjs +19 -0
  33. package/dist/esm/data-boundary/project-path.mjs.map +1 -0
  34. package/dist/esm/data-boundary/value-shapes.mjs +9 -0
  35. package/dist/esm/data-boundary/value-shapes.mjs.map +1 -1
  36. package/dist/esm/index.mjs +16 -2
  37. package/dist/esm/index.mjs.map +1 -1
  38. package/dist/esm/machine-output/v4/atomic-publication.mjs +5 -16
  39. package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -1
  40. package/dist/esm/package-checks/check-authoring.mjs +69 -0
  41. package/dist/esm/package-checks/check-authoring.mjs.map +1 -0
  42. package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs +40 -0
  43. package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs.map +1 -0
  44. package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs +48 -0
  45. package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs.map +1 -0
  46. package/dist/esm/package-checks/code-quality-findings/policy.mjs +20 -0
  47. package/dist/esm/package-checks/code-quality-findings/policy.mjs.map +1 -1
  48. package/dist/esm/package-checks/command-check/command-check.mjs +55 -0
  49. package/dist/esm/package-checks/command-check/command-check.mjs.map +1 -0
  50. package/dist/esm/package-checks/command-check/contract.mjs +2 -0
  51. package/dist/esm/package-checks/command-check/contract.mjs.map +1 -0
  52. package/dist/esm/package-checks/command-check/execution.mjs +134 -0
  53. package/dist/esm/package-checks/command-check/execution.mjs.map +1 -0
  54. package/dist/esm/package-checks/command-check/options.mjs +284 -0
  55. package/dist/esm/package-checks/command-check/options.mjs.map +1 -0
  56. package/dist/esm/package-checks/command-check/transcript.mjs +26 -0
  57. package/dist/esm/package-checks/command-check/transcript.mjs.map +1 -0
  58. package/dist/esm/package-checks/duplicate-detection/area-policy.mjs +15 -7
  59. package/dist/esm/package-checks/duplicate-detection/area-policy.mjs.map +1 -1
  60. package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs +1 -1
  61. package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs.map +1 -1
  62. package/dist/esm/package-checks/duplicate-detection/default-check.mjs +10 -12
  63. package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -1
  64. package/dist/esm/package-checks/duplicate-detection/execution.mjs +44 -20
  65. package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -1
  66. package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs +59 -0
  67. package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs.map +1 -0
  68. package/dist/esm/package-checks/duplicate-detection/finding-waiver-identity.mjs +55 -0
  69. package/dist/esm/package-checks/duplicate-detection/finding-waiver-identity.mjs.map +1 -0
  70. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +2 -2
  71. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -1
  72. package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs +1 -1
  73. package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs.map +1 -1
  74. package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs +15 -5
  75. package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs.map +1 -1
  76. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs +5 -4
  77. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs.map +1 -1
  78. package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs +22 -47
  79. package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs.map +1 -1
  80. package/dist/esm/package-checks/duplicate-detection/options-validation.mjs +20 -25
  81. package/dist/esm/package-checks/duplicate-detection/options-validation.mjs.map +1 -1
  82. package/dist/esm/package-checks/duplicate-detection/options.mjs.map +1 -1
  83. package/dist/esm/package-checks/duplicate-detection/records.mjs +27 -6
  84. package/dist/esm/package-checks/duplicate-detection/records.mjs.map +1 -1
  85. package/dist/esm/package-checks/file-metrics/constructor.mjs +9 -11
  86. package/dist/esm/package-checks/file-metrics/constructor.mjs.map +1 -1
  87. package/dist/esm/package-checks/file-metrics/execution.mjs +11 -20
  88. package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -1
  89. package/dist/esm/package-checks/file-metrics/finding-messages.mjs +22 -0
  90. package/dist/esm/package-checks/file-metrics/finding-messages.mjs.map +1 -0
  91. package/dist/esm/package-checks/file-metrics/options-resolution.mjs +11 -43
  92. package/dist/esm/package-checks/file-metrics/options-resolution.mjs.map +1 -1
  93. package/dist/esm/package-checks/file-metrics/options-validation.mjs +15 -25
  94. package/dist/esm/package-checks/file-metrics/options-validation.mjs.map +1 -1
  95. package/dist/esm/package-checks/file-metrics/options.mjs.map +1 -1
  96. package/dist/esm/package-checks/file-metrics/records.mjs +2 -9
  97. package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -1
  98. package/dist/esm/package-checks/file-metrics/scc/availability.mjs +2 -2
  99. package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -1
  100. package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs +38 -0
  101. package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs.map +1 -0
  102. package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs +35 -0
  103. package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs.map +1 -0
  104. package/dist/esm/package-checks/file-metrics/scc/parser.mjs +4 -4
  105. package/dist/esm/package-checks/file-metrics/scc/parser.mjs.map +1 -1
  106. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +104 -31
  107. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -1
  108. package/dist/esm/package-checks/function-metrics/analysis.mjs +61 -15
  109. package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -1
  110. package/dist/esm/package-checks/function-metrics/analyzer/analysis-context.mjs +550 -0
  111. package/dist/esm/package-checks/function-metrics/analyzer/analysis-context.mjs.map +1 -0
  112. package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs +332 -0
  113. package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs.map +1 -0
  114. package/dist/esm/package-checks/function-metrics/analyzer/contracts.mjs +7 -0
  115. package/dist/esm/package-checks/function-metrics/analyzer/contracts.mjs.map +1 -0
  116. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs +22 -0
  117. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs.map +1 -0
  118. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardnd.mjs +113 -0
  119. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardnd.mjs.map +1 -0
  120. package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs +180 -0
  121. package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs.map +1 -0
  122. package/dist/esm/package-checks/function-metrics/analyzer/extensions/registry.mjs +121 -0
  123. package/dist/esm/package-checks/function-metrics/analyzer/extensions/registry.mjs.map +1 -0
  124. package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs +218 -0
  125. package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs.map +1 -0
  126. package/dist/esm/package-checks/function-metrics/analyzer/port-facade.mjs +96 -0
  127. package/dist/esm/package-checks/function-metrics/analyzer/port-facade.mjs.map +1 -0
  128. package/dist/esm/package-checks/function-metrics/analyzer/reader-registry.mjs +76 -0
  129. package/dist/esm/package-checks/function-metrics/analyzer/reader-registry.mjs.map +1 -0
  130. package/dist/esm/package-checks/function-metrics/analyzer/readers/csharp.mjs +88 -0
  131. package/dist/esm/package-checks/function-metrics/analyzer/readers/csharp.mjs.map +1 -0
  132. package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs +466 -0
  133. package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs.map +1 -0
  134. package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs +289 -0
  135. package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs.map +1 -0
  136. package/dist/esm/package-checks/function-metrics/analyzer/readers/gdscript.mjs +38 -0
  137. package/dist/esm/package-checks/function-metrics/analyzer/readers/gdscript.mjs.map +1 -0
  138. package/dist/esm/package-checks/function-metrics/analyzer/readers/go.mjs +44 -0
  139. package/dist/esm/package-checks/function-metrics/analyzer/readers/go.mjs.map +1 -0
  140. package/dist/esm/package-checks/function-metrics/analyzer/readers/java-body-states.mjs +113 -0
  141. package/dist/esm/package-checks/function-metrics/analyzer/readers/java-body-states.mjs.map +1 -0
  142. package/dist/esm/package-checks/function-metrics/analyzer/readers/java.mjs +247 -0
  143. package/dist/esm/package-checks/function-metrics/analyzer/readers/java.mjs.map +1 -0
  144. package/dist/esm/package-checks/function-metrics/analyzer/readers/javascript.mjs +16 -0
  145. package/dist/esm/package-checks/function-metrics/analyzer/readers/javascript.mjs.map +1 -0
  146. package/dist/esm/package-checks/function-metrics/analyzer/readers/kotlin.mjs +103 -0
  147. package/dist/esm/package-checks/function-metrics/analyzer/readers/kotlin.mjs.map +1 -0
  148. package/dist/esm/package-checks/function-metrics/analyzer/readers/lua.mjs +55 -0
  149. package/dist/esm/package-checks/function-metrics/analyzer/readers/lua.mjs.map +1 -0
  150. package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs +106 -0
  151. package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs.map +1 -0
  152. package/dist/esm/package-checks/function-metrics/analyzer/readers/perl.mjs +367 -0
  153. package/dist/esm/package-checks/function-metrics/analyzer/readers/perl.mjs.map +1 -0
  154. package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs +265 -0
  155. package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs.map +1 -0
  156. package/dist/esm/package-checks/function-metrics/analyzer/readers/php.mjs +53 -0
  157. package/dist/esm/package-checks/function-metrics/analyzer/readers/php.mjs.map +1 -0
  158. package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs +306 -0
  159. package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs.map +1 -0
  160. package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs +404 -0
  161. package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs.map +1 -0
  162. package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs +216 -0
  163. package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs.map +1 -0
  164. package/dist/esm/package-checks/function-metrics/analyzer/readers/ruby.mjs +75 -0
  165. package/dist/esm/package-checks/function-metrics/analyzer/readers/ruby.mjs.map +1 -0
  166. package/dist/esm/package-checks/function-metrics/analyzer/readers/rust.mjs +32 -0
  167. package/dist/esm/package-checks/function-metrics/analyzer/readers/rust.mjs.map +1 -0
  168. package/dist/esm/package-checks/function-metrics/analyzer/readers/scala.mjs +47 -0
  169. package/dist/esm/package-checks/function-metrics/analyzer/readers/scala.mjs.map +1 -0
  170. package/dist/esm/package-checks/function-metrics/analyzer/readers/solidity.mjs +22 -0
  171. package/dist/esm/package-checks/function-metrics/analyzer/readers/solidity.mjs.map +1 -0
  172. package/dist/esm/package-checks/function-metrics/analyzer/readers/st.mjs +142 -0
  173. package/dist/esm/package-checks/function-metrics/analyzer/readers/st.mjs.map +1 -0
  174. package/dist/esm/package-checks/function-metrics/analyzer/readers/swift.mjs +94 -0
  175. package/dist/esm/package-checks/function-metrics/analyzer/readers/swift.mjs.map +1 -0
  176. package/dist/esm/package-checks/function-metrics/analyzer/readers/tsx.mjs +149 -0
  177. package/dist/esm/package-checks/function-metrics/analyzer/readers/tsx.mjs.map +1 -0
  178. package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs +85 -0
  179. package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs.map +1 -0
  180. package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs +612 -0
  181. package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs.map +1 -0
  182. package/dist/esm/package-checks/function-metrics/analyzer/readers/vue.mjs +31 -0
  183. package/dist/esm/package-checks/function-metrics/analyzer/readers/vue.mjs.map +1 -0
  184. package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs +25 -0
  185. package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs.map +1 -0
  186. package/dist/esm/package-checks/function-metrics/analyzer/shared/clike.mjs +492 -0
  187. package/dist/esm/package-checks/function-metrics/analyzer/shared/clike.mjs.map +1 -0
  188. package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs +544 -0
  189. package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs.map +1 -0
  190. package/dist/esm/package-checks/function-metrics/analyzer/shared/golike.mjs +141 -0
  191. package/dist/esm/package-checks/function-metrics/analyzer/shared/golike.mjs.map +1 -0
  192. package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs +69 -0
  193. package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs.map +1 -0
  194. package/dist/esm/package-checks/function-metrics/analyzer/shared/rubylike.mjs +154 -0
  195. package/dist/esm/package-checks/function-metrics/analyzer/shared/rubylike.mjs.map +1 -0
  196. package/dist/esm/package-checks/function-metrics/analyzer/shared/script-language.mjs +36 -0
  197. package/dist/esm/package-checks/function-metrics/analyzer/shared/script-language.mjs.map +1 -0
  198. package/dist/esm/package-checks/function-metrics/analyzer-adapter.mjs +56 -0
  199. package/dist/esm/package-checks/function-metrics/analyzer-adapter.mjs.map +1 -0
  200. package/dist/esm/package-checks/function-metrics/analyzer-worker-contract.mjs +2 -0
  201. package/dist/esm/package-checks/function-metrics/analyzer-worker-contract.mjs.map +1 -0
  202. package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs +120 -0
  203. package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs.map +1 -0
  204. package/dist/esm/package-checks/function-metrics/analyzer-worker.mjs +24 -0
  205. package/dist/esm/package-checks/function-metrics/analyzer-worker.mjs.map +1 -0
  206. package/dist/esm/package-checks/function-metrics/constructor.mjs +10 -12
  207. package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -1
  208. package/dist/esm/package-checks/function-metrics/execution.mjs +51 -35
  209. package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -1
  210. package/dist/esm/package-checks/function-metrics/finding-messages.mjs +75 -0
  211. package/dist/esm/package-checks/function-metrics/finding-messages.mjs.map +1 -0
  212. package/dist/esm/package-checks/function-metrics/finding-waiver-identity.mjs +28 -0
  213. package/dist/esm/package-checks/function-metrics/finding-waiver-identity.mjs.map +1 -0
  214. package/dist/esm/package-checks/function-metrics/measurement-model.mjs.map +1 -1
  215. package/dist/esm/package-checks/function-metrics/measurement.mjs +163 -26
  216. package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -1
  217. package/dist/esm/package-checks/function-metrics/options-resolution.mjs +30 -63
  218. package/dist/esm/package-checks/function-metrics/options-resolution.mjs.map +1 -1
  219. package/dist/esm/package-checks/function-metrics/options-validation.mjs +27 -32
  220. package/dist/esm/package-checks/function-metrics/options-validation.mjs.map +1 -1
  221. package/dist/esm/package-checks/function-metrics/options.mjs.map +1 -1
  222. package/dist/esm/package-checks/function-metrics/records.mjs +31 -1
  223. package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -1
  224. package/dist/esm/package-checks/function-metrics/target-files.mjs +6 -67
  225. package/dist/esm/package-checks/function-metrics/target-files.mjs.map +1 -1
  226. package/dist/esm/package-checks/{function-metrics/lizard → host-environment}/csv.mjs +1 -0
  227. package/dist/esm/package-checks/host-environment/csv.mjs.map +1 -0
  228. package/dist/esm/package-checks/host-environment/git.mjs +12 -1
  229. package/dist/esm/package-checks/host-environment/git.mjs.map +1 -1
  230. package/dist/esm/package-checks/host-environment/path.mjs +1 -17
  231. package/dist/esm/package-checks/host-environment/path.mjs.map +1 -1
  232. package/dist/esm/package-checks/host-environment/process/contract.mjs.map +1 -1
  233. package/dist/esm/package-checks/host-environment/process/result.mjs +43 -17
  234. package/dist/esm/package-checks/host-environment/process/result.mjs.map +1 -1
  235. package/dist/esm/package-checks/host-environment/process/runner.mjs +7 -5
  236. package/dist/esm/package-checks/host-environment/process/runner.mjs.map +1 -1
  237. package/dist/esm/package-checks/host-environment/process.mjs +5 -0
  238. package/dist/esm/package-checks/host-environment/process.mjs.map +1 -0
  239. package/dist/esm/package-checks/json-schema-validation/default-check.mjs +9 -11
  240. package/dist/esm/package-checks/json-schema-validation/default-check.mjs.map +1 -1
  241. package/dist/esm/package-checks/json-schema-validation/final-data.mjs.map +1 -1
  242. package/dist/esm/package-checks/json-schema-validation/options-validation.mjs +15 -17
  243. package/dist/esm/package-checks/json-schema-validation/options-validation.mjs.map +1 -1
  244. package/dist/esm/package-checks/json-schema-validation/options.mjs.map +1 -1
  245. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs +6 -2
  246. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs.map +1 -1
  247. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs +11 -3
  248. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs.map +1 -1
  249. package/dist/esm/package-checks/json-validation/default-check.mjs +9 -11
  250. package/dist/esm/package-checks/json-validation/default-check.mjs.map +1 -1
  251. package/dist/esm/package-checks/json-validation/final-data.mjs.map +1 -1
  252. package/dist/esm/package-checks/json-validation/options-validation.mjs +4 -10
  253. package/dist/esm/package-checks/json-validation/options-validation.mjs.map +1 -1
  254. package/dist/esm/package-checks/json-validation/options.mjs.map +1 -1
  255. package/dist/esm/package-checks/local-cache-options.mjs +28 -0
  256. package/dist/esm/package-checks/local-cache-options.mjs.map +1 -0
  257. package/dist/esm/package-checks/maintenance-reminders/final-data.mjs.map +1 -1
  258. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs +37 -45
  259. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs.map +1 -1
  260. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs +3 -1
  261. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs.map +1 -1
  262. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +19 -27
  263. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -1
  264. package/dist/esm/package-checks/markdown-link-validation/execution.mjs +27 -24
  265. package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -1
  266. package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs +82 -53
  267. package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs.map +1 -1
  268. package/dist/esm/package-checks/markdown-link-validation/final-data.mjs.map +1 -1
  269. package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs +36 -0
  270. package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs.map +1 -0
  271. package/dist/esm/package-checks/markdown-link-validation/local-resolution.mjs.map +1 -1
  272. package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs +2 -2
  273. package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs.map +1 -1
  274. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs +1 -3
  275. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs.map +1 -1
  276. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs +10 -3
  277. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs.map +1 -1
  278. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs +12 -11
  279. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs.map +1 -1
  280. package/dist/esm/package-checks/markdown-link-validation/options.mjs.map +1 -1
  281. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs +184 -0
  282. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs.map +1 -0
  283. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache.mjs +131 -0
  284. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache.mjs.map +1 -0
  285. package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs +58 -57
  286. package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs.map +1 -1
  287. package/dist/esm/package-checks/markdown-link-validation/source-reader.mjs +54 -0
  288. package/dist/esm/package-checks/markdown-link-validation/source-reader.mjs.map +1 -0
  289. package/dist/esm/package-checks/markdown-link-validation/unavailable-reasons.mjs +16 -0
  290. package/dist/esm/package-checks/markdown-link-validation/unavailable-reasons.mjs.map +1 -0
  291. package/dist/esm/package-checks/markdown-lint/adapter.mjs +125 -0
  292. package/dist/esm/package-checks/markdown-lint/adapter.mjs.map +1 -0
  293. package/dist/esm/package-checks/markdown-lint/default-check.mjs +37 -0
  294. package/dist/esm/package-checks/markdown-lint/default-check.mjs.map +1 -0
  295. package/dist/esm/package-checks/markdown-lint/execution.mjs +202 -0
  296. package/dist/esm/package-checks/markdown-lint/execution.mjs.map +1 -0
  297. package/dist/esm/package-checks/markdown-lint/final-data.mjs +16 -0
  298. package/dist/esm/package-checks/markdown-lint/final-data.mjs.map +1 -0
  299. package/dist/esm/package-checks/markdown-lint/finding-messages.mjs +72 -0
  300. package/dist/esm/package-checks/markdown-lint/finding-messages.mjs.map +1 -0
  301. package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs +41 -0
  302. package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs.map +1 -0
  303. package/dist/esm/package-checks/markdown-lint/findings-cache.mjs +110 -0
  304. package/dist/esm/package-checks/markdown-lint/findings-cache.mjs.map +1 -0
  305. package/dist/esm/package-checks/markdown-lint/options-resolution.mjs +74 -0
  306. package/dist/esm/package-checks/markdown-lint/options-resolution.mjs.map +1 -0
  307. package/dist/esm/package-checks/markdown-lint/options-validation.mjs +41 -0
  308. package/dist/esm/package-checks/markdown-lint/options-validation.mjs.map +1 -0
  309. package/dist/esm/package-checks/markdown-lint/options.mjs +13 -0
  310. package/dist/esm/package-checks/markdown-lint/options.mjs.map +1 -0
  311. package/dist/esm/package-checks/markdown-lint/records.mjs +65 -0
  312. package/dist/esm/package-checks/markdown-lint/records.mjs.map +1 -0
  313. package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs +14 -0
  314. package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs.map +1 -0
  315. package/dist/esm/package-checks/project-files/collection.mjs +24 -20
  316. package/dist/esm/package-checks/project-files/collection.mjs.map +1 -1
  317. package/dist/esm/package-checks/project-files/configuration.mjs +3 -11
  318. package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -1
  319. package/dist/esm/package-checks/project-files/gitlink-revision.mjs +3 -6
  320. package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -1
  321. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +23 -7
  322. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -1
  323. package/dist/esm/package-checks/project-files/public-collection.mjs +56 -0
  324. package/dist/esm/package-checks/project-files/public-collection.mjs.map +1 -0
  325. package/dist/esm/package-checks/project-files/revision-paths.mjs +3 -3
  326. package/dist/esm/package-checks/project-files/revision-paths.mjs.map +1 -1
  327. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs +12 -16
  328. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -1
  329. package/dist/esm/package-checks/secret-detection/classification.mjs +15 -0
  330. package/dist/esm/package-checks/secret-detection/classification.mjs.map +1 -0
  331. package/dist/esm/package-checks/secret-detection/default-check.mjs +37 -0
  332. package/dist/esm/package-checks/secret-detection/default-check.mjs.map +1 -0
  333. package/dist/esm/package-checks/secret-detection/execution.mjs +172 -0
  334. package/dist/esm/package-checks/secret-detection/execution.mjs.map +1 -0
  335. package/dist/esm/package-checks/secret-detection/final-data.mjs +33 -0
  336. package/dist/esm/package-checks/secret-detection/final-data.mjs.map +1 -0
  337. package/dist/esm/package-checks/secret-detection/finding-waiver-identity.mjs +30 -0
  338. package/dist/esm/package-checks/secret-detection/finding-waiver-identity.mjs.map +1 -0
  339. package/dist/esm/package-checks/secret-detection/input-preparation.mjs +192 -0
  340. package/dist/esm/package-checks/secret-detection/input-preparation.mjs.map +1 -0
  341. package/dist/esm/package-checks/secret-detection/options-resolution.mjs +40 -0
  342. package/dist/esm/package-checks/secret-detection/options-resolution.mjs.map +1 -0
  343. package/dist/esm/package-checks/secret-detection/options-validation.mjs +22 -0
  344. package/dist/esm/package-checks/secret-detection/options-validation.mjs.map +1 -0
  345. package/dist/esm/package-checks/secret-detection/options.mjs +2 -0
  346. package/dist/esm/package-checks/secret-detection/options.mjs.map +1 -0
  347. package/dist/esm/package-checks/secret-detection/records.mjs +31 -0
  348. package/dist/esm/package-checks/secret-detection/records.mjs.map +1 -0
  349. package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs +84 -0
  350. package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs.map +1 -0
  351. package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs +10 -0
  352. package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs.map +1 -0
  353. package/dist/esm/package-tools/cache/cache-json-by-key.mjs +188 -0
  354. package/dist/esm/package-tools/cache/cache-json-by-key.mjs.map +1 -0
  355. package/dist/esm/package-tools/finding-presentation/finding-presentation.mjs +40 -0
  356. package/dist/esm/package-tools/finding-presentation/finding-presentation.mjs.map +1 -0
  357. package/dist/esm/{finding-waivers → package-tools/finding-waivers}/reconciliation.mjs +14 -5
  358. package/dist/esm/package-tools/finding-waivers/reconciliation.mjs.map +1 -0
  359. package/dist/esm/package-tools/learned-critical-path/critical-path-ranking.mjs +46 -0
  360. package/dist/esm/package-tools/learned-critical-path/critical-path-ranking.mjs.map +1 -0
  361. package/dist/esm/package-tools/learned-critical-path/duration-model/bounded-history.mjs +56 -0
  362. package/dist/esm/package-tools/learned-critical-path/duration-model/bounded-history.mjs.map +1 -0
  363. package/dist/esm/package-tools/learned-critical-path/duration-model/prediction.mjs +122 -0
  364. package/dist/esm/package-tools/learned-critical-path/duration-model/prediction.mjs.map +1 -0
  365. package/dist/esm/package-tools/learned-critical-path/duration-model/preparation.mjs +43 -0
  366. package/dist/esm/package-tools/learned-critical-path/duration-model/preparation.mjs.map +1 -0
  367. package/dist/esm/package-tools/learned-critical-path/duration-model/recording.mjs +109 -0
  368. package/dist/esm/package-tools/learned-critical-path/duration-model/recording.mjs.map +1 -0
  369. package/dist/esm/package-tools/learned-critical-path/duration-model/storage.mjs +187 -0
  370. package/dist/esm/package-tools/learned-critical-path/duration-model/storage.mjs.map +1 -0
  371. package/dist/esm/package-tools/learned-critical-path/selection-layers.mjs +27 -0
  372. package/dist/esm/package-tools/learned-critical-path/selection-layers.mjs.map +1 -0
  373. package/dist/esm/package-tools/learned-critical-path/static-decision.mjs +55 -0
  374. package/dist/esm/package-tools/learned-critical-path/static-decision.mjs.map +1 -0
  375. package/dist/esm/package-tools/learned-critical-path/strategy.mjs +179 -0
  376. package/dist/esm/package-tools/learned-critical-path/strategy.mjs.map +1 -0
  377. package/dist/esm/project-definition/check-tree/authoring.mjs +19 -176
  378. package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -1
  379. package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs +184 -0
  380. package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs.map +1 -0
  381. package/dist/esm/project-definition/check-tree/collection-authoring.mjs +16 -0
  382. package/dist/esm/project-definition/check-tree/collection-authoring.mjs.map +1 -0
  383. package/dist/esm/project-definition/check-tree/flag-conditions.mjs +71 -0
  384. package/dist/esm/project-definition/check-tree/flag-conditions.mjs.map +1 -0
  385. package/dist/esm/project-definition/check-tree/materialization.mjs +22 -9
  386. package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -1
  387. package/dist/esm/project-definition/check-tree/resolution.mjs +52 -19
  388. package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -1
  389. package/dist/esm/project-definition/check-tree/scheduling-authoring.mjs +73 -0
  390. package/dist/esm/project-definition/check-tree/scheduling-authoring.mjs.map +1 -0
  391. package/dist/esm/project-definition/declarative-snapshot.mjs +74 -0
  392. package/dist/esm/project-definition/declarative-snapshot.mjs.map +1 -0
  393. package/dist/esm/project-definition/output-defaults.mjs +18 -1
  394. package/dist/esm/project-definition/output-defaults.mjs.map +1 -1
  395. package/dist/esm/project-definition/output-validation.mjs +15 -15
  396. package/dist/esm/project-definition/output-validation.mjs.map +1 -1
  397. package/dist/esm/project-definition/progress-rendering-output.mjs +52 -0
  398. package/dist/esm/project-definition/progress-rendering-output.mjs.map +1 -0
  399. package/dist/esm/project-definition/project-changes.mjs +70 -0
  400. package/dist/esm/project-definition/project-changes.mjs.map +1 -0
  401. package/dist/esm/project-definition/project-definition-validation.mjs +132 -16
  402. package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -1
  403. package/dist/esm/project-definition/project-definition.mjs +62 -50
  404. package/dist/esm/project-definition/project-definition.mjs.map +1 -1
  405. package/dist/esm/project-definition/resource-unit-mapping.mjs +21 -0
  406. package/dist/esm/project-definition/resource-unit-mapping.mjs.map +1 -0
  407. package/dist/esm/project-definition/scheduler-policy.mjs +2 -0
  408. package/dist/esm/project-definition/scheduler-policy.mjs.map +1 -0
  409. package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs +57 -0
  410. package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs.map +1 -0
  411. package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs +2 -0
  412. package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs.map +1 -0
  413. package/dist/esm/project-run/admission-strategy-provider/provider.mjs +23 -0
  414. package/dist/esm/project-run/admission-strategy-provider/provider.mjs.map +1 -0
  415. package/dist/esm/project-run/aggregation.mjs +42 -57
  416. package/dist/esm/project-run/aggregation.mjs.map +1 -1
  417. package/dist/esm/project-run/changes/git.mjs +161 -0
  418. package/dist/esm/project-run/changes/git.mjs.map +1 -0
  419. package/dist/esm/project-run/check-execution/admitted-check-execution.mjs +41 -0
  420. package/dist/esm/project-run/check-execution/admitted-check-execution.mjs.map +1 -0
  421. package/dist/esm/project-run/check-execution/callback.mjs +37 -9
  422. package/dist/esm/project-run/check-execution/callback.mjs.map +1 -1
  423. package/dist/esm/project-run/check-execution/console-capture.mjs +220 -0
  424. package/dist/esm/project-run/check-execution/console-capture.mjs.map +1 -0
  425. package/dist/esm/project-run/check-execution/dependencies.mjs +99 -6
  426. package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -1
  427. package/dist/esm/project-run/check-execution/execution-finalization.mjs +57 -14
  428. package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -1
  429. package/dist/esm/project-run/check-execution/execution-settlement.mjs +44 -19
  430. package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -1
  431. package/dist/esm/project-run/check-execution/flag-controls.mjs +95 -0
  432. package/dist/esm/project-run/check-execution/flag-controls.mjs.map +1 -0
  433. package/dist/esm/project-run/check-execution/lifecycle.mjs +2 -0
  434. package/dist/esm/project-run/check-execution/lifecycle.mjs.map +1 -0
  435. package/dist/esm/project-run/check-execution/messages.mjs +5 -0
  436. package/dist/esm/project-run/check-execution/messages.mjs.map +1 -1
  437. package/dist/esm/project-run/check-execution/plan.mjs +9 -5
  438. package/dist/esm/project-run/check-execution/plan.mjs.map +1 -1
  439. package/dist/esm/project-run/check-execution/{preflight-result.mjs → preparation-result.mjs} +24 -24
  440. package/dist/esm/project-run/check-execution/preparation-result.mjs.map +1 -0
  441. package/dist/esm/project-run/check-execution/preparation.mjs +172 -0
  442. package/dist/esm/project-run/check-execution/preparation.mjs.map +1 -0
  443. package/dist/esm/project-run/check-execution/ready-check-execution.mjs +71 -0
  444. package/dist/esm/project-run/check-execution/ready-check-execution.mjs.map +1 -0
  445. package/dist/esm/project-run/check-execution/resolved-checks.mjs +44 -139
  446. package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -1
  447. package/dist/esm/project-run/check-execution/resolved-execution-result.mjs +2 -0
  448. package/dist/esm/project-run/check-execution/resolved-execution-result.mjs.map +1 -0
  449. package/dist/esm/project-run/check-execution/scheduled-check-run.mjs +79 -0
  450. package/dist/esm/project-run/check-execution/scheduled-check-run.mjs.map +1 -0
  451. package/dist/esm/project-run/check-execution/terminal-result.mjs +70 -25
  452. package/dist/esm/project-run/check-execution/terminal-result.mjs.map +1 -1
  453. package/dist/esm/project-run/{completion.mjs → completion/completion.mjs} +34 -39
  454. package/dist/esm/project-run/completion/completion.mjs.map +1 -0
  455. package/dist/esm/project-run/{machine-publication.mjs → completion/machine-publication.mjs} +1 -1
  456. package/dist/esm/project-run/completion/machine-publication.mjs.map +1 -0
  457. package/dist/esm/project-run/completion/result-resolver.mjs +36 -0
  458. package/dist/esm/project-run/completion/result-resolver.mjs.map +1 -0
  459. package/dist/esm/project-run/controls/contract.mjs.map +1 -1
  460. package/dist/esm/project-run/controls/outputs-override-validation.mjs +67 -47
  461. package/dist/esm/project-run/controls/outputs-override-validation.mjs.map +1 -1
  462. package/dist/esm/project-run/controls/validation-result.mjs.map +1 -1
  463. package/dist/esm/project-run/controls/validation.mjs +79 -62
  464. package/dist/esm/project-run/controls/validation.mjs.map +1 -1
  465. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs +3 -3
  466. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs.map +1 -1
  467. package/dist/esm/project-run/diagnostic-logging/logger.mjs +100 -161
  468. package/dist/esm/project-run/diagnostic-logging/logger.mjs.map +1 -1
  469. package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs +159 -0
  470. package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs.map +1 -0
  471. package/dist/esm/project-run/invocation/candidate.mjs +65 -0
  472. package/dist/esm/project-run/invocation/candidate.mjs.map +1 -0
  473. package/dist/esm/project-run/invocation/candidates.mjs +26 -0
  474. package/dist/esm/project-run/invocation/candidates.mjs.map +1 -0
  475. package/dist/esm/project-run/invocation/creation.mjs +83 -0
  476. package/dist/esm/project-run/invocation/creation.mjs.map +1 -0
  477. package/dist/esm/project-run/invocation/execution.mjs +98 -0
  478. package/dist/esm/project-run/invocation/execution.mjs.map +1 -0
  479. package/dist/esm/project-run/invocation/paths.mjs +77 -0
  480. package/dist/esm/project-run/invocation/paths.mjs.map +1 -0
  481. package/dist/esm/project-run/invocation/progress.mjs +30 -0
  482. package/dist/esm/project-run/invocation/progress.mjs.map +1 -0
  483. package/dist/esm/project-run/invocation/run.mjs +82 -0
  484. package/dist/esm/project-run/invocation/run.mjs.map +1 -0
  485. package/dist/esm/project-run/invocation/scheduler.mjs +64 -0
  486. package/dist/esm/project-run/invocation/scheduler.mjs.map +1 -0
  487. package/dist/esm/project-run/{output-configuration.mjs → outputs/configuration.mjs} +3 -2
  488. package/dist/esm/project-run/outputs/configuration.mjs.map +1 -0
  489. package/dist/esm/project-run/outputs/status.mjs +105 -0
  490. package/dist/esm/project-run/outputs/status.mjs.map +1 -0
  491. package/dist/esm/project-run/progress-rendering/presentation.mjs +140 -26
  492. package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -1
  493. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +118 -22
  494. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -1
  495. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +50 -10
  496. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -1
  497. package/dist/esm/project-run/progress-rendering/renderer.mjs +11 -4
  498. package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -1
  499. package/dist/esm/project-run/project-context.mjs +3 -2
  500. package/dist/esm/project-run/project-context.mjs.map +1 -1
  501. package/dist/esm/project-run/result.mjs +2 -0
  502. package/dist/esm/project-run/result.mjs.map +1 -1
  503. package/dist/esm/project-run/run.mjs +1 -1
  504. package/dist/esm/project-run/run.mjs.map +1 -1
  505. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs +45 -0
  506. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs.map +1 -0
  507. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs +171 -0
  508. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs.map +1 -0
  509. package/dist/esm/project-run/task-scheduler/admission-core/core.mjs +163 -0
  510. package/dist/esm/project-run/task-scheduler/admission-core/core.mjs.map +1 -0
  511. package/dist/esm/project-run/task-scheduler/admission-core/input.mjs +119 -0
  512. package/dist/esm/project-run/task-scheduler/admission-core/input.mjs.map +1 -0
  513. package/dist/esm/project-run/task-scheduler/admission-core/projection.mjs +124 -0
  514. package/dist/esm/project-run/task-scheduler/admission-core/projection.mjs.map +1 -0
  515. package/dist/esm/project-run/task-scheduler/admission-core/selection-index.mjs +99 -0
  516. package/dist/esm/project-run/task-scheduler/admission-core/selection-index.mjs.map +1 -0
  517. package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs +196 -0
  518. package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs.map +1 -0
  519. package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs +168 -0
  520. package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs.map +1 -0
  521. package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs +121 -0
  522. package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs.map +1 -0
  523. package/dist/esm/project-run/task-scheduler/admission-core/selection.mjs +65 -0
  524. package/dist/esm/project-run/task-scheduler/admission-core/selection.mjs.map +1 -0
  525. package/dist/esm/project-run/task-scheduler/admission-scope-layers.mjs +25 -0
  526. package/dist/esm/project-run/task-scheduler/admission-scope-layers.mjs.map +1 -0
  527. package/dist/esm/project-run/task-scheduler/admission-selection-policy.mjs +55 -0
  528. package/dist/esm/project-run/task-scheduler/admission-selection-policy.mjs.map +1 -0
  529. package/dist/esm/project-run/task-scheduler/custom-admission-policy.mjs +110 -0
  530. package/dist/esm/project-run/task-scheduler/custom-admission-policy.mjs.map +1 -0
  531. package/dist/esm/project-run/task-scheduler/execution-state.mjs +34 -5
  532. package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -1
  533. package/dist/esm/project-run/task-scheduler/forced-block-effect-replay.mjs +46 -0
  534. package/dist/esm/project-run/task-scheduler/forced-block-effect-replay.mjs.map +1 -0
  535. package/dist/esm/project-run/task-scheduler/graph-validation.mjs +54 -26
  536. package/dist/esm/project-run/task-scheduler/graph-validation.mjs.map +1 -1
  537. package/dist/esm/project-run/task-scheduler/graph.mjs +79 -3
  538. package/dist/esm/project-run/task-scheduler/graph.mjs.map +1 -1
  539. package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs +211 -0
  540. package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs.map +1 -0
  541. package/dist/esm/project-run/task-scheduler/measurement/integrals.mjs +116 -0
  542. package/dist/esm/project-run/task-scheduler/measurement/integrals.mjs.map +1 -0
  543. package/dist/esm/project-run/task-scheduler/measurement/policy.mjs +67 -0
  544. package/dist/esm/project-run/task-scheduler/measurement/policy.mjs.map +1 -0
  545. package/dist/esm/project-run/task-scheduler/measurement/summary.mjs +123 -0
  546. package/dist/esm/project-run/task-scheduler/measurement/summary.mjs.map +1 -0
  547. package/dist/esm/project-run/task-scheduler/measurement/timing.mjs +164 -0
  548. package/dist/esm/project-run/task-scheduler/measurement/timing.mjs.map +1 -0
  549. package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs +90 -62
  550. package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs.map +1 -1
  551. package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs +20 -6
  552. package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs.map +1 -1
  553. package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs +5 -105
  554. package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs.map +1 -1
  555. package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs +0 -9
  556. package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs.map +1 -1
  557. package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs +48 -28
  558. package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs.map +1 -1
  559. package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs +91 -0
  560. package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs.map +1 -0
  561. package/dist/esm/project-run/task-scheduler/scheduler-task-lifecycle.mjs +94 -0
  562. package/dist/esm/project-run/task-scheduler/scheduler-task-lifecycle.mjs.map +1 -0
  563. package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs +66 -0
  564. package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs.map +1 -0
  565. package/dist/esm/project-run/task-scheduler/scheduler.mjs +183 -114
  566. package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -1
  567. package/docs/api-mechanics.md +167 -121
  568. package/docs/changelog.md +300 -0
  569. package/docs/checks/duplicate-detection.md +131 -60
  570. package/docs/checks/file-metrics.md +68 -46
  571. package/docs/checks/function-metrics.md +119 -163
  572. package/docs/checks/json-schema-validation.md +65 -37
  573. package/docs/checks/json-validation.md +59 -27
  574. package/docs/checks/maintenance-reminders.md +68 -32
  575. package/docs/checks/markdown-link-validation.md +104 -56
  576. package/docs/checks/markdown-lint.md +167 -0
  577. package/docs/checks/secret-detection.md +153 -0
  578. package/docs/examples/artifacts/mixed-outcomes/definition.ts +14 -14
  579. package/docs/guides/building-project-gate.md +706 -0
  580. package/docs/guides/cache-results.md +63 -0
  581. package/docs/guides/callbacks.md +93 -0
  582. package/docs/guides/check-dependencies.md +152 -0
  583. package/docs/guides/collecting-project-files.md +59 -0
  584. package/docs/guides/command-check.md +155 -0
  585. package/docs/guides/data-boundaries.md +140 -0
  586. package/docs/guides/extending-check-lifecycle.md +164 -0
  587. package/docs/guides/finding-waivers.md +87 -0
  588. package/docs/guides/learned-scheduling.md +83 -0
  589. package/docs/guides/presenting-findings.md +54 -0
  590. package/docs/guides/run-outputs.md +171 -0
  591. package/docs/guides/scheduling.md +208 -0
  592. package/docs/guides/simulating-admission.md +55 -0
  593. package/docs/output.md +13 -21
  594. package/licenses/Lizard-1.24.0-MIT.txt +30 -0
  595. package/{third-party-licenses/momoa-3.3.12-LICENSE → licenses/Lizard-1.24.0-lizard.py-Apache-2.0.txt} +1 -0
  596. package/licenses/Pygments-2.18.0-BSD-2-Clause.txt +25 -0
  597. package/licenses/analyzer-translations-NOTICE.md +24 -0
  598. package/licenses/lizard-1.24.0-provenance.json +957 -0
  599. package/package.json +19 -6
  600. package/src/check/check.ts +382 -92
  601. package/src/check/flag-enablement.ts +76 -0
  602. package/src/check/handoff-provider-identity.ts +34 -0
  603. package/src/check/inherited-collection.ts +2 -2
  604. package/src/check/project-changes.ts +14 -0
  605. package/src/check/project-context.ts +11 -0
  606. package/src/check-settlement/fact-validation.ts +29 -39
  607. package/src/check-settlement/facts.ts +1 -1
  608. package/src/check-settlement/outcome-normalization.ts +17 -35
  609. package/src/check-settlement/reason-shape.ts +20 -0
  610. package/src/check-settlement/record-store.ts +18 -15
  611. package/src/check-settlement/session.ts +12 -3
  612. package/src/data-boundary/canonical-data.ts +36 -9
  613. package/src/data-boundary/canonical-json.ts +18 -1
  614. package/src/data-boundary/closed-values.ts +54 -5
  615. package/src/data-boundary/config-glob.ts +17 -0
  616. package/src/data-boundary/project-path.ts +21 -0
  617. package/src/data-boundary/value-shapes.ts +12 -0
  618. package/src/index.ts +134 -5
  619. package/src/machine-output/v4/atomic-publication.ts +4 -17
  620. package/src/package-checks/check-authoring.ts +136 -0
  621. package/src/package-checks/code-quality-findings/finding-waiver-authoring.ts +46 -0
  622. package/src/package-checks/code-quality-findings/finding-waiver-evidence.ts +95 -0
  623. package/src/package-checks/code-quality-findings/policy.ts +23 -0
  624. package/src/package-checks/command-check/command-check.ts +152 -0
  625. package/src/package-checks/command-check/contract.ts +168 -0
  626. package/src/package-checks/command-check/execution.ts +211 -0
  627. package/src/package-checks/command-check/options.ts +331 -0
  628. package/src/package-checks/command-check/transcript.ts +35 -0
  629. package/src/package-checks/duplicate-detection/area-policy.ts +24 -13
  630. package/src/package-checks/duplicate-detection/cache/identity.ts +1 -1
  631. package/src/package-checks/duplicate-detection/default-check.ts +38 -7
  632. package/src/package-checks/duplicate-detection/execution.ts +82 -24
  633. package/src/package-checks/duplicate-detection/finding-messages.ts +75 -0
  634. package/src/package-checks/duplicate-detection/finding-waiver-identity.ts +68 -0
  635. package/src/package-checks/duplicate-detection/jscpd/availability.ts +2 -2
  636. package/src/package-checks/duplicate-detection/jscpd/command-resolution.ts +1 -1
  637. package/src/package-checks/duplicate-detection/jscpd/json-report.ts +24 -5
  638. package/src/package-checks/duplicate-detection/jscpd/scanner.ts +6 -7
  639. package/src/package-checks/duplicate-detection/options-resolution.ts +32 -57
  640. package/src/package-checks/duplicate-detection/options-validation.ts +23 -31
  641. package/src/package-checks/duplicate-detection/options.ts +26 -3
  642. package/src/package-checks/duplicate-detection/records.ts +65 -12
  643. package/src/package-checks/file-metrics/constructor.ts +29 -6
  644. package/src/package-checks/file-metrics/execution.ts +17 -20
  645. package/src/package-checks/file-metrics/finding-messages.ts +29 -0
  646. package/src/package-checks/file-metrics/options-resolution.ts +19 -52
  647. package/src/package-checks/file-metrics/options-validation.ts +23 -32
  648. package/src/package-checks/file-metrics/options.ts +6 -3
  649. package/src/package-checks/file-metrics/records.ts +11 -23
  650. package/src/package-checks/file-metrics/scc/availability.ts +2 -2
  651. package/src/package-checks/file-metrics/scc/batch-planner.ts +56 -0
  652. package/src/package-checks/file-metrics/scc/logical-scan-resources.ts +59 -0
  653. package/src/package-checks/file-metrics/scc/parser.ts +4 -4
  654. package/src/package-checks/file-metrics/scc/scanner.ts +135 -33
  655. package/src/package-checks/function-metrics/analysis.ts +81 -21
  656. package/src/package-checks/function-metrics/analyzer/analysis-context.ts +749 -0
  657. package/src/package-checks/function-metrics/analyzer/analysis-model.ts +421 -0
  658. package/src/package-checks/function-metrics/analyzer/contracts.ts +54 -0
  659. package/src/package-checks/function-metrics/analyzer/extension-output.ts +269 -0
  660. package/src/package-checks/function-metrics/analyzer/extensions/extension-base.ts +33 -0
  661. package/src/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.ts +25 -0
  662. package/src/package-checks/function-metrics/analyzer/extensions/lizardnd.ts +144 -0
  663. package/src/package-checks/function-metrics/analyzer/extensions/protocol.ts +345 -0
  664. package/src/package-checks/function-metrics/analyzer/extensions/registry.ts +157 -0
  665. package/src/package-checks/function-metrics/analyzer/pipeline.ts +313 -0
  666. package/src/package-checks/function-metrics/analyzer/port-facade.ts +142 -0
  667. package/src/package-checks/function-metrics/analyzer/reader-registry.ts +84 -0
  668. package/src/package-checks/function-metrics/analyzer/readers/csharp.ts +110 -0
  669. package/src/package-checks/function-metrics/analyzer/readers/erlang.ts +501 -0
  670. package/src/package-checks/function-metrics/analyzer/readers/fortran.ts +294 -0
  671. package/src/package-checks/function-metrics/analyzer/readers/gdscript.ts +42 -0
  672. package/src/package-checks/function-metrics/analyzer/readers/go.ts +53 -0
  673. package/src/package-checks/function-metrics/analyzer/readers/java-body-states.ts +141 -0
  674. package/src/package-checks/function-metrics/analyzer/readers/java.ts +270 -0
  675. package/src/package-checks/function-metrics/analyzer/readers/javascript.ts +19 -0
  676. package/src/package-checks/function-metrics/analyzer/readers/kotlin.ts +120 -0
  677. package/src/package-checks/function-metrics/analyzer/readers/lua.ts +68 -0
  678. package/src/package-checks/function-metrics/analyzer/readers/objc.ts +113 -0
  679. package/src/package-checks/function-metrics/analyzer/readers/perl.ts +340 -0
  680. package/src/package-checks/function-metrics/analyzer/readers/php-states.ts +253 -0
  681. package/src/package-checks/function-metrics/analyzer/readers/php.ts +63 -0
  682. package/src/package-checks/function-metrics/analyzer/readers/plsql.ts +310 -0
  683. package/src/package-checks/function-metrics/analyzer/readers/python.ts +432 -0
  684. package/src/package-checks/function-metrics/analyzer/readers/r.ts +235 -0
  685. package/src/package-checks/function-metrics/analyzer/readers/ruby.ts +88 -0
  686. package/src/package-checks/function-metrics/analyzer/readers/rust.ts +47 -0
  687. package/src/package-checks/function-metrics/analyzer/readers/scala.ts +60 -0
  688. package/src/package-checks/function-metrics/analyzer/readers/solidity.ts +32 -0
  689. package/src/package-checks/function-metrics/analyzer/readers/st.ts +161 -0
  690. package/src/package-checks/function-metrics/analyzer/readers/swift.ts +116 -0
  691. package/src/package-checks/function-metrics/analyzer/readers/tsx.ts +165 -0
  692. package/src/package-checks/function-metrics/analyzer/readers/ttcn.ts +96 -0
  693. package/src/package-checks/function-metrics/analyzer/readers/typescript.ts +599 -0
  694. package/src/package-checks/function-metrics/analyzer/readers/vue.ts +43 -0
  695. package/src/package-checks/function-metrics/analyzer/readers/zig.ts +36 -0
  696. package/src/package-checks/function-metrics/analyzer/shared/clike.ts +541 -0
  697. package/src/package-checks/function-metrics/analyzer/shared/code-reader.ts +684 -0
  698. package/src/package-checks/function-metrics/analyzer/shared/golike.ts +143 -0
  699. package/src/package-checks/function-metrics/analyzer/shared/js-style-regex.ts +80 -0
  700. package/src/package-checks/function-metrics/analyzer/shared/rubylike.ts +161 -0
  701. package/src/package-checks/function-metrics/analyzer/shared/script-language.ts +50 -0
  702. package/src/package-checks/function-metrics/analyzer-adapter.ts +84 -0
  703. package/src/package-checks/function-metrics/analyzer-worker-contract.ts +10 -0
  704. package/src/package-checks/function-metrics/analyzer-worker-port.ts +164 -0
  705. package/src/package-checks/function-metrics/analyzer-worker.ts +31 -0
  706. package/src/package-checks/function-metrics/constructor.ts +32 -9
  707. package/src/package-checks/function-metrics/execution.ts +94 -41
  708. package/src/package-checks/function-metrics/finding-messages.ts +95 -0
  709. package/src/package-checks/function-metrics/finding-waiver-identity.ts +36 -0
  710. package/src/package-checks/function-metrics/measurement-model.ts +15 -1
  711. package/src/package-checks/function-metrics/measurement.ts +223 -36
  712. package/src/package-checks/function-metrics/options-resolution.ts +39 -75
  713. package/src/package-checks/function-metrics/options-validation.ts +30 -39
  714. package/src/package-checks/function-metrics/options.ts +32 -13
  715. package/src/package-checks/function-metrics/records.ts +73 -7
  716. package/src/package-checks/function-metrics/target-files.ts +10 -70
  717. package/src/package-checks/{file-metrics/scc → host-environment}/csv.ts +1 -2
  718. package/src/package-checks/host-environment/git.ts +13 -2
  719. package/src/package-checks/host-environment/path.ts +1 -20
  720. package/src/package-checks/host-environment/process/contract.ts +17 -9
  721. package/src/package-checks/host-environment/process/result.ts +48 -20
  722. package/src/package-checks/host-environment/process/runner.ts +8 -4
  723. package/src/package-checks/host-environment/process.ts +10 -0
  724. package/src/package-checks/json-schema-validation/default-check.ts +38 -5
  725. package/src/package-checks/json-schema-validation/final-data.ts +8 -0
  726. package/src/package-checks/json-schema-validation/options-validation.ts +16 -23
  727. package/src/package-checks/json-schema-validation/options.ts +27 -1
  728. package/src/package-checks/json-schema-validation/reference-resolver.ts +6 -2
  729. package/src/package-checks/json-schema-validation/schema-policy.ts +10 -5
  730. package/src/package-checks/json-validation/default-check.ts +27 -6
  731. package/src/package-checks/json-validation/final-data.ts +5 -0
  732. package/src/package-checks/json-validation/options-validation.ts +4 -18
  733. package/src/package-checks/json-validation/options.ts +4 -1
  734. package/src/package-checks/local-cache-options.ts +40 -0
  735. package/src/package-checks/maintenance-reminders/final-data.ts +18 -0
  736. package/src/package-checks/maintenance-reminders/maintenance-reminders.ts +89 -9
  737. package/src/package-checks/maintenance-reminders/maintenance-support.ts +3 -3
  738. package/src/package-checks/markdown-link-validation/default-check.ts +57 -8
  739. package/src/package-checks/markdown-link-validation/execution.ts +51 -57
  740. package/src/package-checks/markdown-link-validation/filesystem-probes.ts +108 -51
  741. package/src/package-checks/markdown-link-validation/final-data.ts +5 -0
  742. package/src/package-checks/markdown-link-validation/finding-messages.ts +48 -0
  743. package/src/package-checks/markdown-link-validation/local-resolution.ts +17 -9
  744. package/src/package-checks/markdown-link-validation/local-resolver.ts +5 -2
  745. package/src/package-checks/markdown-link-validation/markdown-parser.ts +1 -5
  746. package/src/package-checks/markdown-link-validation/options-resolution.ts +14 -3
  747. package/src/package-checks/markdown-link-validation/options-validation.ts +12 -19
  748. package/src/package-checks/markdown-link-validation/options.ts +15 -1
  749. package/src/package-checks/markdown-link-validation/parse-facts-cache-payload.ts +245 -0
  750. package/src/package-checks/markdown-link-validation/parse-facts-cache.ts +154 -0
  751. package/src/package-checks/markdown-link-validation/resolver-engine.ts +75 -65
  752. package/src/package-checks/markdown-link-validation/source-reader.ts +86 -0
  753. package/src/package-checks/markdown-link-validation/unavailable-reasons.ts +42 -0
  754. package/src/package-checks/markdown-lint/adapter.ts +167 -0
  755. package/src/package-checks/markdown-lint/default-check.ts +92 -0
  756. package/src/package-checks/markdown-lint/execution.ts +266 -0
  757. package/src/package-checks/markdown-lint/final-data.ts +33 -0
  758. package/src/package-checks/markdown-lint/finding-messages.ts +87 -0
  759. package/src/package-checks/markdown-lint/finding-waiver-identity.ts +54 -0
  760. package/src/package-checks/markdown-lint/findings-cache.ts +141 -0
  761. package/src/package-checks/markdown-lint/options-resolution.ts +102 -0
  762. package/src/package-checks/markdown-lint/options-validation.ts +50 -0
  763. package/src/package-checks/markdown-lint/options.ts +82 -0
  764. package/src/package-checks/markdown-lint/records.ts +132 -0
  765. package/src/package-checks/markdown-lint/unavailable-reasons.ts +33 -0
  766. package/src/package-checks/project-files/collection.ts +39 -23
  767. package/src/package-checks/project-files/config-glob.ts +1 -17
  768. package/src/package-checks/project-files/configuration.ts +4 -15
  769. package/src/package-checks/project-files/gitlink-revision.ts +5 -7
  770. package/src/package-checks/project-files/gitlink-worktree.ts +36 -8
  771. package/src/package-checks/project-files/public-collection.ts +92 -0
  772. package/src/package-checks/project-files/revision-paths.ts +3 -3
  773. package/src/package-checks/project-files/revision-worktree-files.ts +17 -17
  774. package/src/package-checks/secret-detection/classification.ts +30 -0
  775. package/src/package-checks/secret-detection/default-check.ts +73 -0
  776. package/src/package-checks/secret-detection/execution.ts +247 -0
  777. package/src/package-checks/secret-detection/final-data.ts +57 -0
  778. package/src/package-checks/secret-detection/finding-waiver-identity.ts +37 -0
  779. package/src/package-checks/secret-detection/input-preparation.ts +290 -0
  780. package/src/package-checks/secret-detection/options-resolution.ts +65 -0
  781. package/src/package-checks/secret-detection/options-validation.ts +27 -0
  782. package/src/package-checks/secret-detection/options.ts +39 -0
  783. package/src/package-checks/secret-detection/records.ts +77 -0
  784. package/src/package-checks/secret-detection/secretlint/adapter.ts +122 -0
  785. package/src/package-tools/admission-policy/define-admission-policy.ts +54 -0
  786. package/src/package-tools/cache/cache-json-by-key.ts +300 -0
  787. package/src/package-tools/finding-presentation/finding-presentation.ts +69 -0
  788. package/src/{finding-waivers → package-tools/finding-waivers}/reconciliation.ts +16 -8
  789. package/src/package-tools/learned-critical-path/critical-path-ranking.ts +76 -0
  790. package/src/package-tools/learned-critical-path/duration-model/bounded-history.ts +108 -0
  791. package/src/package-tools/learned-critical-path/duration-model/prediction.ts +184 -0
  792. package/src/package-tools/learned-critical-path/duration-model/preparation.ts +79 -0
  793. package/src/package-tools/learned-critical-path/duration-model/recording.ts +209 -0
  794. package/src/package-tools/learned-critical-path/duration-model/storage.ts +251 -0
  795. package/src/package-tools/learned-critical-path/selection-layers.ts +71 -0
  796. package/src/package-tools/learned-critical-path/static-decision.ts +105 -0
  797. package/src/package-tools/learned-critical-path/strategy.ts +302 -0
  798. package/src/project-definition/check-tree/authoring.ts +40 -234
  799. package/src/project-definition/check-tree/check-fields-authoring.ts +242 -0
  800. package/src/project-definition/check-tree/collection-authoring.ts +13 -0
  801. package/src/project-definition/check-tree/flag-conditions.ts +99 -0
  802. package/src/project-definition/check-tree/materialization.ts +21 -9
  803. package/src/project-definition/check-tree/resolution.ts +84 -28
  804. package/src/project-definition/check-tree/scheduling-authoring.ts +114 -0
  805. package/src/project-definition/declarative-snapshot.ts +94 -0
  806. package/src/project-definition/output-defaults.ts +32 -1
  807. package/src/project-definition/output-validation.ts +15 -15
  808. package/src/project-definition/progress-rendering-output.ts +121 -0
  809. package/src/project-definition/project-changes.ts +112 -0
  810. package/src/project-definition/project-definition-validation.ts +166 -19
  811. package/src/project-definition/project-definition.ts +177 -67
  812. package/src/project-definition/resource-unit-mapping.ts +25 -0
  813. package/src/project-definition/scheduler-policy.ts +556 -0
  814. package/src/project-run/admission-strategy-provider/custom-strategy-preparation.ts +83 -0
  815. package/src/project-run/admission-strategy-provider/prepared-admission-strategy.ts +27 -0
  816. package/src/project-run/admission-strategy-provider/provider.ts +45 -0
  817. package/src/project-run/aggregation.ts +52 -70
  818. package/src/project-run/changes/git.ts +206 -0
  819. package/src/project-run/check-execution/admitted-check-execution.ts +62 -0
  820. package/src/project-run/check-execution/callback.ts +52 -9
  821. package/src/project-run/check-execution/console-capture.ts +262 -0
  822. package/src/project-run/check-execution/dependencies.ts +161 -10
  823. package/src/project-run/check-execution/execution-finalization.ts +103 -27
  824. package/src/project-run/check-execution/execution-settlement.ts +99 -32
  825. package/src/project-run/check-execution/flag-controls.ts +146 -0
  826. package/src/project-run/check-execution/lifecycle.ts +29 -0
  827. package/src/project-run/check-execution/messages.ts +8 -0
  828. package/src/project-run/check-execution/plan.ts +12 -8
  829. package/src/project-run/check-execution/{preflight-result.ts → preparation-result.ts} +34 -32
  830. package/src/project-run/check-execution/preparation.ts +309 -0
  831. package/src/project-run/check-execution/ready-check-execution.ts +97 -0
  832. package/src/project-run/check-execution/resolved-checks.ts +92 -232
  833. package/src/project-run/check-execution/resolved-execution-result.ts +22 -0
  834. package/src/project-run/check-execution/scheduled-check-run.ts +119 -0
  835. package/src/project-run/check-execution/terminal-result.ts +108 -29
  836. package/src/project-run/{completion.ts → completion/completion.ts} +33 -59
  837. package/src/project-run/{machine-publication.ts → completion/machine-publication.ts} +4 -4
  838. package/src/project-run/completion/result-resolver.ts +60 -0
  839. package/src/project-run/controls/contract.ts +22 -9
  840. package/src/project-run/controls/outputs-override-validation.ts +83 -60
  841. package/src/project-run/controls/validation-result.ts +17 -6
  842. package/src/project-run/controls/validation.ts +110 -68
  843. package/src/project-run/diagnostic-logging/diagnostic-detail-rendering.ts +1 -2
  844. package/src/project-run/diagnostic-logging/logger.ts +132 -207
  845. package/src/project-run/diagnostic-logging/observation-rendering.ts +203 -0
  846. package/src/project-run/invocation/candidate.ts +99 -0
  847. package/src/project-run/invocation/candidates.ts +56 -0
  848. package/src/project-run/invocation/creation.ts +120 -0
  849. package/src/project-run/invocation/execution.ts +136 -0
  850. package/src/project-run/invocation/paths.ts +154 -0
  851. package/src/project-run/invocation/progress.ts +38 -0
  852. package/src/project-run/invocation/run.ts +144 -0
  853. package/src/project-run/invocation/scheduler.ts +82 -0
  854. package/src/project-run/{output-configuration.ts → outputs/configuration.ts} +6 -5
  855. package/src/project-run/outputs/status.ts +161 -0
  856. package/src/project-run/progress-rendering/presentation.ts +150 -36
  857. package/src/project-run/progress-rendering/renderer-formatting.ts +185 -25
  858. package/src/project-run/progress-rendering/renderer-lifecycle.ts +61 -9
  859. package/src/project-run/progress-rendering/renderer.ts +23 -6
  860. package/src/project-run/project-context.ts +10 -5
  861. package/src/project-run/result.ts +50 -4
  862. package/src/project-run/run.ts +7 -6
  863. package/src/project-run/task-scheduler/admission-core/compiled-graph-lookup.ts +71 -0
  864. package/src/project-run/task-scheduler/admission-core/compiled-graph.ts +321 -0
  865. package/src/project-run/task-scheduler/admission-core/core.ts +278 -0
  866. package/src/project-run/task-scheduler/admission-core/input.ts +138 -0
  867. package/src/project-run/task-scheduler/admission-core/projection.ts +164 -0
  868. package/src/project-run/task-scheduler/admission-core/selection-index.ts +165 -0
  869. package/src/project-run/task-scheduler/admission-core/selection-query.ts +297 -0
  870. package/src/project-run/task-scheduler/admission-core/selection-seed.ts +282 -0
  871. package/src/project-run/task-scheduler/admission-core/selection-transition.ts +245 -0
  872. package/src/project-run/task-scheduler/admission-core/selection.ts +140 -0
  873. package/src/project-run/task-scheduler/admission-core/trace.ts +177 -0
  874. package/src/project-run/task-scheduler/admission-scope-layers.ts +44 -0
  875. package/src/project-run/task-scheduler/admission-selection-policy.ts +116 -0
  876. package/src/project-run/task-scheduler/custom-admission-policy.ts +128 -0
  877. package/src/project-run/task-scheduler/execution-state.ts +97 -6
  878. package/src/project-run/task-scheduler/forced-block-effect-replay.ts +68 -0
  879. package/src/project-run/task-scheduler/graph-validation.ts +77 -31
  880. package/src/project-run/task-scheduler/graph.ts +111 -3
  881. package/src/project-run/task-scheduler/measurement/diagnostics.ts +267 -0
  882. package/src/project-run/task-scheduler/measurement/integrals.ts +177 -0
  883. package/src/project-run/task-scheduler/measurement/policy.ts +105 -0
  884. package/src/project-run/task-scheduler/measurement/summary.ts +175 -0
  885. package/src/project-run/task-scheduler/measurement/timing.ts +198 -0
  886. package/src/project-run/task-scheduler/scheduler-admission-decision.ts +143 -134
  887. package/src/project-run/task-scheduler/scheduler-blocker-summary.ts +34 -9
  888. package/src/project-run/task-scheduler/scheduler-decision-inspection.ts +28 -170
  889. package/src/project-run/task-scheduler/scheduler-decision-model.ts +36 -40
  890. package/src/project-run/task-scheduler/scheduler-decision.ts +68 -36
  891. package/src/project-run/task-scheduler/scheduler-observation.ts +126 -0
  892. package/src/project-run/task-scheduler/scheduler-task-lifecycle.ts +150 -0
  893. package/src/project-run/task-scheduler/scheduler-terminal-measurement.ts +97 -0
  894. package/src/project-run/task-scheduler/scheduler.ts +233 -171
  895. package/types/check/check.d.ts +225 -69
  896. package/types/check/flag-enablement.d.ts +42 -0
  897. package/types/check/handoff-provider-identity.d.ts +12 -0
  898. package/types/check/inherited-collection.d.ts +1 -1
  899. package/types/check/project-changes.d.ts +13 -0
  900. package/types/check/project-context.d.ts +10 -0
  901. package/types/check-settlement/facts.d.ts +1 -1
  902. package/types/check-settlement/reason-shape.d.ts +5 -0
  903. package/types/check-settlement/record-store.d.ts +2 -2
  904. package/types/check-settlement/session.d.ts +3 -1
  905. package/types/data-boundary/canonical-data.d.ts +28 -5
  906. package/types/data-boundary/canonical-json.d.ts +18 -1
  907. package/types/data-boundary/closed-values.d.ts +24 -0
  908. package/types/data-boundary/config-glob.d.ts +5 -0
  909. package/types/data-boundary/project-path.d.ts +4 -0
  910. package/types/data-boundary/value-shapes.d.ts +3 -0
  911. package/types/index.d.ts +40 -9
  912. package/types/package-checks/check-authoring.d.ts +45 -0
  913. package/types/package-checks/code-quality-findings/finding-waiver-authoring.d.ts +7 -0
  914. package/types/package-checks/code-quality-findings/finding-waiver-evidence.d.ts +34 -0
  915. package/types/package-checks/code-quality-findings/policy.d.ts +4 -0
  916. package/types/package-checks/command-check/command-check.d.ts +48 -0
  917. package/types/package-checks/command-check/contract.d.ts +108 -0
  918. package/types/package-checks/command-check/execution.d.ts +7 -0
  919. package/types/package-checks/command-check/options.d.ts +11 -0
  920. package/types/package-checks/command-check/transcript.d.ts +8 -0
  921. package/types/package-checks/duplicate-detection/area-policy.d.ts +1 -1
  922. package/types/package-checks/duplicate-detection/default-check.d.ts +5 -2
  923. package/types/package-checks/duplicate-detection/finding-messages.d.ts +7 -0
  924. package/types/package-checks/duplicate-detection/finding-waiver-identity.d.ts +3 -0
  925. package/types/package-checks/duplicate-detection/jscpd/command-resolution.d.ts +1 -1
  926. package/types/package-checks/duplicate-detection/options.d.ts +21 -3
  927. package/types/package-checks/duplicate-detection/records.d.ts +20 -3
  928. package/types/package-checks/file-metrics/constructor.d.ts +5 -2
  929. package/types/package-checks/file-metrics/finding-messages.d.ts +4 -0
  930. package/types/package-checks/file-metrics/options.d.ts +4 -3
  931. package/types/package-checks/file-metrics/records.d.ts +5 -10
  932. package/types/package-checks/file-metrics/scc/batch-planner.d.ts +18 -0
  933. package/types/package-checks/file-metrics/scc/logical-scan-resources.d.ts +14 -0
  934. package/types/package-checks/file-metrics/scc/parser.d.ts +4 -4
  935. package/types/package-checks/function-metrics/analysis.d.ts +1 -1
  936. package/types/package-checks/function-metrics/analyzer/analysis-context.d.ts +174 -0
  937. package/types/package-checks/function-metrics/analyzer/analysis-model.d.ts +135 -0
  938. package/types/package-checks/function-metrics/analyzer/contracts.d.ts +48 -0
  939. package/types/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.d.ts +13 -0
  940. package/types/package-checks/function-metrics/analyzer/extensions/lizardnd.d.ts +28 -0
  941. package/types/package-checks/function-metrics/analyzer/extensions/protocol.d.ts +99 -0
  942. package/types/package-checks/function-metrics/analyzer/extensions/registry.d.ts +34 -0
  943. package/types/package-checks/function-metrics/analyzer/pipeline.d.ts +67 -0
  944. package/types/package-checks/function-metrics/analyzer/port-facade.d.ts +38 -0
  945. package/types/package-checks/function-metrics/analyzer/reader-registry.d.ts +18 -0
  946. package/types/package-checks/function-metrics/analyzer/readers/csharp.d.ts +22 -0
  947. package/types/package-checks/function-metrics/analyzer/readers/erlang.d.ts +22 -0
  948. package/types/package-checks/function-metrics/analyzer/readers/fortran.d.ts +29 -0
  949. package/types/package-checks/function-metrics/analyzer/readers/gdscript.d.ts +18 -0
  950. package/types/package-checks/function-metrics/analyzer/readers/go.d.ts +18 -0
  951. package/types/package-checks/function-metrics/analyzer/readers/java-body-states.d.ts +18 -0
  952. package/types/package-checks/function-metrics/analyzer/readers/java.d.ts +44 -0
  953. package/types/package-checks/function-metrics/analyzer/readers/javascript.d.ts +14 -0
  954. package/types/package-checks/function-metrics/analyzer/readers/kotlin.d.ts +23 -0
  955. package/types/package-checks/function-metrics/analyzer/readers/lua.d.ts +16 -0
  956. package/types/package-checks/function-metrics/analyzer/readers/objc.d.ts +18 -0
  957. package/types/package-checks/function-metrics/analyzer/readers/perl.d.ts +28 -0
  958. package/types/package-checks/function-metrics/analyzer/readers/php-states.d.ts +41 -0
  959. package/types/package-checks/function-metrics/analyzer/readers/php.d.ts +22 -0
  960. package/types/package-checks/function-metrics/analyzer/readers/plsql.d.ts +24 -0
  961. package/types/package-checks/function-metrics/analyzer/readers/python.d.ts +50 -0
  962. package/types/package-checks/function-metrics/analyzer/readers/r.d.ts +22 -0
  963. package/types/package-checks/function-metrics/analyzer/readers/ruby.d.ts +16 -0
  964. package/types/package-checks/function-metrics/analyzer/readers/rust.d.ts +20 -0
  965. package/types/package-checks/function-metrics/analyzer/readers/scala.d.ts +20 -0
  966. package/types/package-checks/function-metrics/analyzer/readers/solidity.d.ts +19 -0
  967. package/types/package-checks/function-metrics/analyzer/readers/st.d.ts +37 -0
  968. package/types/package-checks/function-metrics/analyzer/readers/swift.d.ts +30 -0
  969. package/types/package-checks/function-metrics/analyzer/readers/tsx.d.ts +15 -0
  970. package/types/package-checks/function-metrics/analyzer/readers/ttcn.d.ts +22 -0
  971. package/types/package-checks/function-metrics/analyzer/readers/typescript.d.ts +35 -0
  972. package/types/package-checks/function-metrics/analyzer/readers/vue.d.ts +18 -0
  973. package/types/package-checks/function-metrics/analyzer/readers/zig.d.ts +19 -0
  974. package/types/package-checks/function-metrics/analyzer/shared/clike.d.ts +101 -0
  975. package/types/package-checks/function-metrics/analyzer/shared/code-reader.d.ts +176 -0
  976. package/types/package-checks/function-metrics/analyzer/shared/golike.d.ts +39 -0
  977. package/types/package-checks/function-metrics/analyzer/shared/js-style-regex.d.ts +16 -0
  978. package/types/package-checks/function-metrics/analyzer/shared/rubylike.d.ts +40 -0
  979. package/types/package-checks/function-metrics/analyzer/shared/script-language.d.ts +17 -0
  980. package/types/package-checks/function-metrics/analyzer-adapter.d.ts +26 -0
  981. package/types/package-checks/function-metrics/analyzer-worker-contract.d.ts +5 -0
  982. package/types/package-checks/function-metrics/analyzer-worker-port.d.ts +24 -0
  983. package/types/package-checks/function-metrics/analyzer-worker.d.ts +1 -0
  984. package/types/package-checks/function-metrics/constructor.d.ts +6 -3
  985. package/types/package-checks/function-metrics/execution.d.ts +5 -2
  986. package/types/package-checks/function-metrics/finding-messages.d.ts +9 -0
  987. package/types/package-checks/function-metrics/finding-waiver-identity.d.ts +2 -0
  988. package/types/package-checks/function-metrics/measurement-model.d.ts +13 -1
  989. package/types/package-checks/function-metrics/measurement.d.ts +22 -7
  990. package/types/package-checks/function-metrics/options.d.ts +26 -12
  991. package/types/package-checks/function-metrics/records.d.ts +24 -5
  992. package/types/package-checks/function-metrics/target-files.d.ts +4 -3
  993. package/types/package-checks/host-environment/csv.d.ts +2 -0
  994. package/types/package-checks/host-environment/git.d.ts +3 -1
  995. package/types/package-checks/host-environment/path.d.ts +1 -3
  996. package/types/package-checks/host-environment/process/contract.d.ts +17 -9
  997. package/types/package-checks/host-environment/process.d.ts +5 -0
  998. package/types/package-checks/json-schema-validation/default-check.d.ts +4 -1
  999. package/types/package-checks/json-schema-validation/final-data.d.ts +8 -0
  1000. package/types/package-checks/json-schema-validation/options.d.ts +33 -4
  1001. package/types/package-checks/json-validation/default-check.d.ts +4 -1
  1002. package/types/package-checks/json-validation/final-data.d.ts +5 -0
  1003. package/types/package-checks/json-validation/options.d.ts +2 -1
  1004. package/types/package-checks/local-cache-options.d.ts +9 -0
  1005. package/types/package-checks/maintenance-reminders/final-data.d.ts +18 -0
  1006. package/types/package-checks/maintenance-reminders/maintenance-reminders.d.ts +11 -2
  1007. package/types/package-checks/markdown-link-validation/default-check.d.ts +13 -4
  1008. package/types/package-checks/markdown-link-validation/execution.d.ts +1 -3
  1009. package/types/package-checks/markdown-link-validation/final-data.d.ts +5 -0
  1010. package/types/package-checks/markdown-link-validation/finding-messages.d.ts +4 -0
  1011. package/types/package-checks/markdown-link-validation/local-resolution.d.ts +12 -6
  1012. package/types/package-checks/markdown-link-validation/local-resolver.d.ts +2 -1
  1013. package/types/package-checks/markdown-link-validation/options.d.ts +13 -1
  1014. package/types/package-checks/markdown-link-validation/parse-facts-cache-payload.d.ts +24 -0
  1015. package/types/package-checks/markdown-link-validation/parse-facts-cache.d.ts +13 -0
  1016. package/types/package-checks/markdown-link-validation/resolver-engine.d.ts +6 -4
  1017. package/types/package-checks/markdown-link-validation/source-reader.d.ts +11 -0
  1018. package/types/package-checks/markdown-link-validation/unavailable-reasons.d.ts +4 -0
  1019. package/types/package-checks/markdown-lint/adapter.d.ts +10 -0
  1020. package/types/package-checks/markdown-lint/default-check.d.ts +37 -0
  1021. package/types/package-checks/markdown-lint/execution.d.ts +24 -0
  1022. package/types/package-checks/markdown-lint/final-data.d.ts +8 -0
  1023. package/types/package-checks/markdown-lint/finding-messages.d.ts +6 -0
  1024. package/types/package-checks/markdown-lint/finding-waiver-identity.d.ts +3 -0
  1025. package/types/package-checks/markdown-lint/findings-cache.d.ts +17 -0
  1026. package/types/package-checks/markdown-lint/options-resolution.d.ts +3 -0
  1027. package/types/package-checks/markdown-lint/options-validation.d.ts +2 -0
  1028. package/types/package-checks/markdown-lint/options.d.ts +65 -0
  1029. package/types/package-checks/markdown-lint/records.d.ts +39 -0
  1030. package/types/package-checks/markdown-lint/unavailable-reasons.d.ts +3 -0
  1031. package/types/package-checks/project-files/public-collection.d.ts +16 -0
  1032. package/types/package-checks/secret-detection/classification.d.ts +12 -0
  1033. package/types/package-checks/secret-detection/default-check.d.ts +14 -0
  1034. package/types/package-checks/secret-detection/execution.d.ts +14 -0
  1035. package/types/package-checks/secret-detection/final-data.d.ts +15 -0
  1036. package/types/package-checks/secret-detection/finding-waiver-identity.d.ts +5 -0
  1037. package/types/package-checks/secret-detection/input-preparation.d.ts +24 -0
  1038. package/types/package-checks/secret-detection/options-resolution.d.ts +6 -0
  1039. package/types/package-checks/secret-detection/options-validation.d.ts +3 -0
  1040. package/types/package-checks/secret-detection/options.d.ts +33 -0
  1041. package/types/package-checks/secret-detection/records.d.ts +35 -0
  1042. package/types/package-checks/secret-detection/secretlint/adapter.d.ts +28 -0
  1043. package/types/package-tools/admission-policy/define-admission-policy.d.ts +26 -0
  1044. package/types/package-tools/cache/cache-json-by-key.d.ts +53 -0
  1045. package/types/package-tools/finding-presentation/finding-presentation.d.ts +27 -0
  1046. package/types/{finding-waivers → package-tools/finding-waivers}/reconciliation.d.ts +3 -3
  1047. package/types/package-tools/learned-critical-path/critical-path-ranking.d.ts +19 -0
  1048. package/types/package-tools/learned-critical-path/duration-model/bounded-history.d.ts +34 -0
  1049. package/types/package-tools/learned-critical-path/duration-model/prediction.d.ts +32 -0
  1050. package/types/package-tools/learned-critical-path/duration-model/preparation.d.ts +28 -0
  1051. package/types/package-tools/learned-critical-path/duration-model/recording.d.ts +28 -0
  1052. package/types/package-tools/learned-critical-path/duration-model/storage.d.ts +12 -0
  1053. package/types/package-tools/learned-critical-path/selection-layers.d.ts +14 -0
  1054. package/types/package-tools/learned-critical-path/static-decision.d.ts +3 -0
  1055. package/types/package-tools/learned-critical-path/strategy.d.ts +35 -0
  1056. package/types/project-definition/check-tree/authoring.d.ts +13 -14
  1057. package/types/project-definition/check-tree/check-fields-authoring.d.ts +30 -0
  1058. package/types/project-definition/check-tree/collection-authoring.d.ts +2 -0
  1059. package/types/project-definition/check-tree/flag-conditions.d.ts +5 -0
  1060. package/types/project-definition/check-tree/resolution.d.ts +13 -6
  1061. package/types/project-definition/check-tree/scheduling-authoring.d.ts +19 -0
  1062. package/types/project-definition/declarative-snapshot.d.ts +10 -0
  1063. package/types/project-definition/output-defaults.d.ts +7 -0
  1064. package/types/project-definition/output-validation.d.ts +2 -1
  1065. package/types/project-definition/progress-rendering-output.d.ts +41 -0
  1066. package/types/project-definition/project-changes.d.ts +30 -0
  1067. package/types/project-definition/project-definition.d.ts +49 -19
  1068. package/types/project-definition/resource-unit-mapping.d.ts +4 -0
  1069. package/types/project-definition/scheduler-policy.d.ts +497 -0
  1070. package/types/project-run/admission-strategy-provider/custom-strategy-preparation.d.ts +9 -0
  1071. package/types/project-run/admission-strategy-provider/prepared-admission-strategy.d.ts +23 -0
  1072. package/types/project-run/admission-strategy-provider/provider.d.ts +13 -0
  1073. package/types/project-run/aggregation.d.ts +8 -6
  1074. package/types/project-run/changes/git.d.ts +14 -0
  1075. package/types/project-run/check-execution/admitted-check-execution.d.ts +18 -0
  1076. package/types/project-run/check-execution/callback.d.ts +5 -1
  1077. package/types/project-run/check-execution/console-capture.d.ts +18 -0
  1078. package/types/project-run/check-execution/dependencies.d.ts +4 -1
  1079. package/types/project-run/check-execution/execution-finalization.d.ts +18 -8
  1080. package/types/project-run/check-execution/execution-settlement.d.ts +18 -7
  1081. package/types/project-run/check-execution/flag-controls.d.ts +27 -0
  1082. package/types/project-run/check-execution/lifecycle.d.ts +24 -0
  1083. package/types/project-run/check-execution/messages.d.ts +2 -0
  1084. package/types/project-run/check-execution/plan.d.ts +2 -3
  1085. package/types/project-run/check-execution/{preflight-result.d.ts → preparation-result.d.ts} +3 -3
  1086. package/types/project-run/check-execution/preparation.d.ts +29 -0
  1087. package/types/project-run/check-execution/ready-check-execution.d.ts +18 -0
  1088. package/types/project-run/check-execution/resolved-checks.d.ts +37 -44
  1089. package/types/project-run/check-execution/resolved-execution-result.d.ts +21 -0
  1090. package/types/project-run/check-execution/scheduled-check-run.d.ts +10 -0
  1091. package/types/project-run/check-execution/terminal-result.d.ts +13 -1
  1092. package/types/project-run/{completion.d.ts → completion/completion.d.ts} +7 -5
  1093. package/types/project-run/{machine-publication.d.ts → completion/machine-publication.d.ts} +3 -3
  1094. package/types/project-run/completion/result-resolver.d.ts +4 -0
  1095. package/types/project-run/controls/contract.d.ts +22 -9
  1096. package/types/project-run/controls/outputs-override-validation.d.ts +2 -1
  1097. package/types/project-run/controls/validation-result.d.ts +12 -4
  1098. package/types/project-run/diagnostic-logging/logger.d.ts +34 -4
  1099. package/types/project-run/diagnostic-logging/observation-rendering.d.ts +7 -0
  1100. package/types/project-run/invocation/candidate.d.ts +12 -0
  1101. package/types/project-run/invocation/candidates.d.ts +8 -0
  1102. package/types/project-run/{invocation-creation.d.ts → invocation/creation.d.ts} +3 -3
  1103. package/types/project-run/invocation/execution.d.ts +5 -0
  1104. package/types/project-run/invocation/paths.d.ts +40 -0
  1105. package/types/project-run/invocation/progress.d.ts +11 -0
  1106. package/types/project-run/invocation/run.d.ts +43 -0
  1107. package/types/project-run/invocation/scheduler.d.ts +16 -0
  1108. package/types/project-run/outputs/configuration.d.ts +3 -0
  1109. package/types/project-run/outputs/status.d.ts +48 -0
  1110. package/types/project-run/progress-rendering/presentation.d.ts +12 -7
  1111. package/types/project-run/progress-rendering/renderer-formatting.d.ts +13 -2
  1112. package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +8 -1
  1113. package/types/project-run/progress-rendering/renderer.d.ts +11 -3
  1114. package/types/project-run/project-context.d.ts +5 -4
  1115. package/types/project-run/result.d.ts +38 -4
  1116. package/types/project-run/run.d.ts +6 -5
  1117. package/types/project-run/task-scheduler/admission-core/compiled-graph-lookup.d.ts +10 -0
  1118. package/types/project-run/task-scheduler/admission-core/compiled-graph.d.ts +31 -0
  1119. package/types/project-run/task-scheduler/admission-core/core.d.ts +57 -0
  1120. package/types/project-run/task-scheduler/admission-core/input.d.ts +4 -0
  1121. package/types/project-run/task-scheduler/admission-core/projection.d.ts +22 -0
  1122. package/types/project-run/task-scheduler/admission-core/selection-index.d.ts +61 -0
  1123. package/types/project-run/task-scheduler/admission-core/selection-query.d.ts +28 -0
  1124. package/types/project-run/task-scheduler/admission-core/selection-seed.d.ts +9 -0
  1125. package/types/project-run/task-scheduler/admission-core/selection-transition.d.ts +4 -0
  1126. package/types/project-run/task-scheduler/admission-core/selection.d.ts +20 -0
  1127. package/types/project-run/task-scheduler/admission-scope-layers.d.ts +8 -0
  1128. package/types/project-run/task-scheduler/admission-selection-policy.d.ts +31 -0
  1129. package/types/project-run/task-scheduler/custom-admission-policy.d.ts +6 -0
  1130. package/types/project-run/task-scheduler/execution-state.d.ts +43 -1
  1131. package/types/project-run/task-scheduler/forced-block-effect-replay.d.ts +9 -0
  1132. package/types/project-run/task-scheduler/graph-validation.d.ts +3 -2
  1133. package/types/project-run/task-scheduler/graph.d.ts +15 -0
  1134. package/types/project-run/task-scheduler/measurement/diagnostics.d.ts +47 -0
  1135. package/types/project-run/task-scheduler/measurement/integrals.d.ts +27 -0
  1136. package/types/project-run/task-scheduler/measurement/policy.d.ts +10 -0
  1137. package/types/project-run/task-scheduler/measurement/summary.d.ts +3 -0
  1138. package/types/project-run/task-scheduler/measurement/timing.d.ts +33 -0
  1139. package/types/project-run/task-scheduler/scheduler-admission-decision.d.ts +13 -1
  1140. package/types/project-run/task-scheduler/scheduler-decision-inspection.d.ts +20 -19
  1141. package/types/project-run/task-scheduler/scheduler-decision-model.d.ts +38 -22
  1142. package/types/project-run/task-scheduler/scheduler-decision.d.ts +4 -1
  1143. package/types/project-run/task-scheduler/scheduler-observation.d.ts +14 -0
  1144. package/types/project-run/task-scheduler/scheduler-task-lifecycle.d.ts +18 -0
  1145. package/types/project-run/task-scheduler/scheduler-terminal-measurement.d.ts +9 -0
  1146. package/dist/esm/finding-waivers/reconciliation.mjs.map +0 -1
  1147. package/dist/esm/package-checks/file-metrics/scc/csv.mjs +0 -17
  1148. package/dist/esm/package-checks/file-metrics/scc/csv.mjs.map +0 -1
  1149. package/dist/esm/package-checks/function-metrics/lizard/availability.mjs +0 -64
  1150. package/dist/esm/package-checks/function-metrics/lizard/availability.mjs.map +0 -1
  1151. package/dist/esm/package-checks/function-metrics/lizard/csv.mjs.map +0 -1
  1152. package/dist/esm/package-checks/function-metrics/lizard/parser.mjs +0 -138
  1153. package/dist/esm/package-checks/function-metrics/lizard/parser.mjs.map +0 -1
  1154. package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs +0 -35
  1155. package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs.map +0 -1
  1156. package/dist/esm/package-checks/host-environment/process/command.mjs +0 -13
  1157. package/dist/esm/package-checks/host-environment/process/command.mjs.map +0 -1
  1158. package/dist/esm/package-checks/project-files/config-glob.mjs.map +0 -1
  1159. package/dist/esm/project-run/check-execution/preflight-result.mjs.map +0 -1
  1160. package/dist/esm/project-run/check-execution/preflight.mjs +0 -186
  1161. package/dist/esm/project-run/check-execution/preflight.mjs.map +0 -1
  1162. package/dist/esm/project-run/completion.mjs.map +0 -1
  1163. package/dist/esm/project-run/invocation-creation.mjs +0 -111
  1164. package/dist/esm/project-run/invocation-creation.mjs.map +0 -1
  1165. package/dist/esm/project-run/invocation.mjs +0 -195
  1166. package/dist/esm/project-run/invocation.mjs.map +0 -1
  1167. package/dist/esm/project-run/machine-publication.mjs.map +0 -1
  1168. package/dist/esm/project-run/output-configuration.mjs.map +0 -1
  1169. package/dist/esm/project-run/output-status.mjs +0 -43
  1170. package/dist/esm/project-run/output-status.mjs.map +0 -1
  1171. package/src/package-checks/function-metrics/lizard/availability.ts +0 -90
  1172. package/src/package-checks/function-metrics/lizard/csv.ts +0 -20
  1173. package/src/package-checks/function-metrics/lizard/parser.ts +0 -179
  1174. package/src/package-checks/function-metrics/lizard/scanner.ts +0 -62
  1175. package/src/package-checks/host-environment/process/command.ts +0 -21
  1176. package/src/project-run/check-execution/preflight.ts +0 -321
  1177. package/src/project-run/invocation-creation.ts +0 -160
  1178. package/src/project-run/invocation.ts +0 -303
  1179. package/src/project-run/output-status.ts +0 -69
  1180. package/types/package-checks/file-metrics/scc/csv.d.ts +0 -1
  1181. package/types/package-checks/function-metrics/lizard/availability.d.ts +0 -11
  1182. package/types/package-checks/function-metrics/lizard/csv.d.ts +0 -1
  1183. package/types/package-checks/function-metrics/lizard/parser.d.ts +0 -17
  1184. package/types/package-checks/function-metrics/lizard/scanner.d.ts +0 -15
  1185. package/types/package-checks/host-environment/process/command.d.ts +0 -7
  1186. package/types/package-checks/project-files/config-glob.d.ts +0 -5
  1187. package/types/project-run/check-execution/preflight.d.ts +0 -27
  1188. package/types/project-run/invocation.d.ts +0 -34
  1189. package/types/project-run/output-configuration.d.ts +0 -3
  1190. package/types/project-run/output-status.d.ts +0 -21
@@ -1 +1 @@
1
- {"version":3,"file":"fact-validation.mjs","sourceRoot":"","sources":["../../../src/check-settlement/fact-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAkB9F,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QAC7E,OAAO,OAAO,CAAC,GAAG,EAAE,oDAAoD,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,WAAW,GAAG,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,WAAW,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC5D,OAAO,OAAO,CAAC,GAAG,EAAE,6CAA6C,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC;IAC9B,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChE,IAAI,CAAC,gBAAgB,CAAC,EAAE;QAAE,OAAO,gBAAgB,CAAC;IAClD,MAAM,OAAO,GAAG,eAAe,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC;IAChC,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,wBAAwB,CAAC,MAA4B;IAC5D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACpE,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS;YACvF,SAAS;QACX,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;gBAClD,OAAO,OAAO,CACZ,YAAY,KAAK,2BAA2B,EAC5C,2CAA2C,CAC5C,CAAC;YACJ,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,cAAc,CAAC,MAA0B;IAChD,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,IAAI,eAAmC,CAAC;IACxC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YACvF,OAAO,OAAO,CAAC,YAAY,KAAK,GAAG,EAAE,2BAA2B,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,UAAU,GAAG,uBAAuB,CAAC;YACzC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW;SAC/B,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,EAAE;YAAE,OAAO,UAAU,CAAC;QACtC,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3C,OAAO,OAAO,CAAC,YAAY,KAAK,WAAW,EAAE,8BAA8B,EAAE,WAAW,CAAC,CAAC;QAC5F,CAAC;QACD,IACE,eAAe,KAAK,SAAS;YAC7B,WAAW,CAAC,eAAe,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAC3D,CAAC;YACD,OAAO,OAAO,CAAC,YAAY,KAAK,WAAW,EAAE,uCAAuC,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,KAAK,WAAW,CAAC,CAAC;QAC7E,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,OAAO,OAAO,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5E,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvC,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;IAC7C,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,eAAe,CACtB,MAA0B,EAC1B,MAA4B;IAE5B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC1D,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,IAAI,QAAiF,CAAC;IACtF,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;QAC7B,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;QACzE,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC,aAAa,KAAK,MAAM,EAAE,iCAAiC,EAAE,WAAW,CAAC,CAAC;QAC3F,CAAC;QACD,IACE,QAAQ,KAAK,SAAS;YACtB,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;gBACjD,CAAC,QAAQ,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EACtF,CAAC;YACD,OAAO,OAAO,CAAC,aAAa,KAAK,GAAG,EAAE,gDAAgD,CAAC,CAAC;QAC1F,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACpB,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,QAAQ,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IAC1D,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAc,EACd,KAAa,EACb,QAA6B;IAE7B,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1E,OAAO,OAAO,CAAC,aAAa,KAAK,GAAG,EAAE,4BAA4B,CAAC,CAAC;IACtE,IACE,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;QAClC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;QAC7B,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ;QAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EACtB,CAAC;QACD,OAAO,OAAO,CAAC,aAAa,KAAK,GAAG,EAAE,iCAAiC,EAAE,mBAAmB,CAAC,CAAC;IAChG,CAAC;IACD,MAAM,IAAI,GAAG,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO,IAAI,KAAK,SAAS;QACvB,CAAC,CAAC,OAAO,CAAC,aAAa,KAAK,QAAQ,EAAE,6BAA6B,CAAC;QACpE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,eAAe,CAAC,KAAc,EAAE,IAAY;IACnD,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChE,OAAO,OAAO,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ;QAC5D,OAAO,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7C,IAAI,OAAO,CAAC,MAAM,KAAK,gBAAgB;QAAE,OAAO,4BAA4B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5F,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa;QAAE,OAAO,0BAA0B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACvF,OAAO,OAAO,CAAC,GAAG,IAAI,SAAS,EAAE,8BAA8B,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAA0C,EAC1C,IAAY;IAEZ,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/D,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC5C,OAAO,OAAO,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO,IAAI,KAAK,SAAS;YACvB,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,EAAE,uBAAuB,CAAC;YAClD,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,IAAI,SAAS,EAAE,8BAA8B,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,4BAA4B,CACnC,OAA0C,EAC1C,IAAY;IAEZ,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QACnD,OAAO,OAAO,CAAC,IAAI,EAAE,sCAAsC,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACrD,OAAO,MAAM,KAAK,IAAI;QACpB,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,SAAS,EAAE,kCAAkC,CAAC;QAC/D,CAAC,CAAC,QAAQ,CACN,MAAM,CAAC,MAAM,CACX,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAC3F,CACF,CAAC;AACR,CAAC;AAED,SAAS,0BAA0B,CACjC,OAA0C,EAC1C,IAAY;IAEZ,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9C,OAAO,OAAO,CAAC,IAAI,EAAE,mCAAmC,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACpD,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;QAC5C,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,SAAS,EAAE,+BAA+B,CAAC;QAC5D,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,cAAc,CACrB,KAAc,EACd,aAAsB;IAEtB,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACvF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACpF,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACpF,IAAI,kBAAkB,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAClD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,cAAc,CACrB,KAAoD,EACpD,aAAsB;IAEtB,OAAO,CACL,KAAK,KAAK,SAAS;QACnB,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QACrB,eAAe,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CACpE,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAAc,EACd,aAAsB;IAEtB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC5C,IACE,CAAC,aAAa;QACd,QAAQ,KAAK,SAAS;QACtB,QAAQ,CAAC,MAAM,KAAK,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAE/F,OAAO,SAAS,CAAC;IACnB,MAAM,kBAAkB,GAAa,EAAE,CAAC;IACxC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAClD,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,YAAY,CAAC,KAAwC,EAAE,IAAuB;IACrF,OAAO,CACL,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAC5F,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,KAAwC,EACxC,QAA2B,EAC3B,QAA2B;IAE3B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;IACtD,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CACtD,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAI,KAAQ;IAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,OAAO,CACd,IAAY,EACZ,OAAe,EACf,IAAI,GAA4B,eAAe;IAE/C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAA2B,CAAC;IAC/E,MAAM,MAAM,GAAqD,CAAC,KAAK,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,KAAK;QACT,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;KAC9B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,KAAa;IAC9C,IAAI,IAAI,GAAG,KAAK;QAAE,OAAO,CAAC,CAAC,CAAC;IAC5B,IAAI,IAAI,GAAG,KAAK;QAAE,OAAO,CAAC,CAAC;IAC3B,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAa;IAC/C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1B,CAAC","sourcesContent":["import { canonicalizeJsonObject } from \"../data-boundary/canonical-data.ts\";\nimport type { CheckOutcome } from \"../check/check.ts\";\nimport { validateCheckDescriptor } from \"../check/descriptor-validation.ts\";\nimport type { CoreCheck, CoreRecord, CoreSnapshot } from \"./facts.ts\";\nimport { snapshotClosedArray, snapshotClosedRecord } from \"../data-boundary/closed-values.ts\";\n\nexport interface ValidationIssue {\n readonly path: string;\n readonly code:\n | \"duplicate\"\n | \"identity-mismatch\"\n | \"invalid-value\"\n | \"missing-field\"\n | \"unknown-field\";\n readonly message: string;\n}\n\nexport type ValidationResult<T> = Readonly<\n | { readonly ok: true; readonly value: T }\n | { readonly ok: false; readonly issues: readonly [ValidationIssue, ...ValidationIssue[]] }\n>;\n\nexport function validateCoreSnapshot(value: unknown): ValidationResult<CoreSnapshot> {\n const snapshot = snapshotClosedRecord(value);\n if (snapshot === undefined || !hasExactKeys(snapshot, [\"checks\", \"records\"])) {\n return invalid(\"$\", \"Core snapshot must contain only checks and records\");\n }\n const checksInput = snapshotClosedArray(snapshot.checks);\n const recordsInput = snapshotClosedArray(snapshot.records);\n if (checksInput === undefined || recordsInput === undefined) {\n return invalid(\"$\", \"Core snapshot entities must be dense arrays\");\n }\n const checks = validateChecks(checksInput);\n if (!checks.ok) return checks;\n const reasonReferences = validateReasonReferences(checks.value);\n if (!reasonReferences.ok) return reasonReferences;\n const records = validateRecords(recordsInput, checks.value);\n if (!records.ok) return records;\n return accepted(Object.freeze({ checks: checks.value, records: records.value }));\n}\n\nfunction validateReasonReferences(checks: readonly CoreCheck[]): ValidationResult<void> {\n const knownCheckIds = new Set(checks.map((check) => check.checkId));\n for (const [index, check] of checks.entries()) {\n if (check.outcome.status !== \"unavailable\" || check.outcome.reason.checkIds === undefined)\n continue;\n const seen = new Set<string>();\n for (const checkId of check.outcome.reason.checkIds) {\n if (!knownCheckIds.has(checkId) || seen.has(checkId))\n return invalid(\n `$.checks[${index}].outcome.reason.checkIds`,\n \"Unavailable reason references are invalid\"\n );\n seen.add(checkId);\n }\n }\n return accepted(undefined);\n}\n\nfunction validateChecks(values: readonly unknown[]): ValidationResult<readonly CoreCheck[]> {\n const checks: CoreCheck[] = [];\n const checkIds = new Set<string>();\n let previousCheckId: string | undefined;\n for (const [index, value] of values.entries()) {\n const check = snapshotClosedRecord(value);\n if (check === undefined || !hasExactKeys(check, [\"checkId\", \"displayName\", \"outcome\"])) {\n return invalid(`$.checks[${index}]`, \"Core Check must be closed\");\n }\n const definition = validateCheckDescriptor({\n checkId: check.checkId,\n displayName: check.displayName\n });\n if (!definition.ok) return definition;\n if (checkIds.has(definition.value.checkId)) {\n return invalid(`$.checks[${index}].checkId`, \"Duplicate Core Check checkId\", \"duplicate\");\n }\n if (\n previousCheckId !== undefined &&\n compareText(previousCheckId, definition.value.checkId) >= 0\n ) {\n return invalid(`$.checks[${index}].checkId`, \"Core Checks must be sorted by checkId\");\n }\n const outcome = validateOutcome(check.outcome, `$.checks[${index}].outcome`);\n if (!outcome.ok) return outcome;\n checks.push(Object.freeze({ ...definition.value, outcome: outcome.value }));\n checkIds.add(definition.value.checkId);\n previousCheckId = definition.value.checkId;\n }\n return accepted(Object.freeze(checks));\n}\n\nfunction validateRecords(\n values: readonly unknown[],\n checks: readonly CoreCheck[]\n): ValidationResult<readonly CoreRecord[]> {\n const ownerIds = new Set(checks.map((check) => check.checkId));\n const recordIdsByCheckId = new Map<string, Set<string>>();\n const records: CoreRecord[] = [];\n let previous: Readonly<{ readonly checkId: string; readonly id: string }> | undefined;\n for (const [index, value] of values.entries()) {\n const record = validateRecordRow(value, index, ownerIds);\n if (!record.ok) return record;\n const current = record.value;\n const ids = recordIdsByCheckId.get(current.checkId) ?? new Set<string>();\n if (ids.has(current.id)) {\n return invalid(`$.records[${index}].id`, \"Duplicate Check-local Record id\", \"duplicate\");\n }\n if (\n previous !== undefined &&\n (compareText(previous.checkId, current.checkId) > 0 ||\n (previous.checkId === current.checkId && compareText(previous.id, current.id) >= 0))\n ) {\n return invalid(`$.records[${index}]`, \"Core Records must be sorted by checkId then id\");\n }\n ids.add(current.id);\n recordIdsByCheckId.set(current.checkId, ids);\n records.push(current);\n previous = { checkId: current.checkId, id: current.id };\n }\n return accepted(Object.freeze(records));\n}\n\nfunction validateRecordRow(\n value: unknown,\n index: number,\n ownerIds: ReadonlySet<string>\n): ValidationResult<CoreRecord> {\n const record = snapshotClosedRecord(value);\n if (record === undefined || !hasExactKeys(record, [\"checkId\", \"id\", \"data\"]))\n return invalid(`$.records[${index}]`, \"Core Record must be closed\");\n if (\n typeof record.checkId !== \"string\" ||\n !ownerIds.has(record.checkId) ||\n typeof record.id !== \"string\" ||\n record.id.length === 0\n ) {\n return invalid(`$.records[${index}]`, \"Core Record identity is invalid\", \"identity-mismatch\");\n }\n const data = canonicalizeJsonObject(record.data);\n return data === undefined\n ? invalid(`$.records[${index}].data`, \"Core Record data is invalid\")\n : accepted(Object.freeze({ checkId: record.checkId, id: record.id, data }));\n}\n\nfunction validateOutcome(value: unknown, path: string): ValidationResult<CheckOutcome> {\n const outcome = snapshotClosedRecord(value);\n if (outcome === undefined || typeof outcome.status !== \"string\") {\n return invalid(path, \"Check outcome is invalid\");\n }\n if (outcome.status === \"passed\" || outcome.status === \"failed\")\n return validateFinalOutcome(outcome, path);\n if (outcome.status === \"not-applicable\") return validateNotApplicableOutcome(outcome, path);\n if (outcome.status === \"unavailable\") return validateUnavailableOutcome(outcome, path);\n return invalid(`${path}.status`, \"Unknown Check outcome status\");\n}\n\nfunction validateFinalOutcome(\n outcome: Readonly<Record<string, unknown>>,\n path: string\n): ValidationResult<CheckOutcome> {\n if (outcome.status === \"passed\" || outcome.status === \"failed\") {\n if (!hasExactKeys(outcome, [\"status\", \"data\"]))\n return invalid(path, \"Final outcome is not closed\");\n const data = canonicalizeJsonObject(outcome.data);\n return data === undefined\n ? invalid(`${path}.data`, \"Final data is invalid\")\n : accepted(Object.freeze({ status: outcome.status, data }));\n }\n return invalid(`${path}.status`, \"Unknown Check outcome status\");\n}\n\nfunction validateNotApplicableOutcome(\n outcome: Readonly<Record<string, unknown>>,\n path: string\n): ValidationResult<CheckOutcome> {\n if (!hasOptionalKeys(outcome, [\"status\"], [\"reason\"]))\n return invalid(path, \"Not-applicable outcome is not closed\");\n const reason = validateReason(outcome.reason, false);\n return reason === null\n ? invalid(`${path}.reason`, \"Not-applicable reason is invalid\")\n : accepted(\n Object.freeze(\n reason === undefined ? { status: \"not-applicable\" } : { status: \"not-applicable\", reason }\n )\n );\n}\n\nfunction validateUnavailableOutcome(\n outcome: Readonly<Record<string, unknown>>,\n path: string\n): ValidationResult<CheckOutcome> {\n if (!hasExactKeys(outcome, [\"status\", \"reason\"]))\n return invalid(path, \"Unavailable outcome is not closed\");\n const reason = validateReason(outcome.reason, true);\n return reason === null || reason === undefined\n ? invalid(`${path}.reason`, \"Unavailable reason is invalid\")\n : accepted(Object.freeze({ status: \"unavailable\", reason }));\n}\n\nfunction validateReason(\n value: unknown,\n allowCheckIds: boolean\n): Readonly<{ readonly code: string; readonly checkIds?: readonly string[] }> | null | undefined {\n if (value === undefined) return undefined;\n const reason = snapshotClosedRecord(value);\n if (!isClosedReason(reason, allowCheckIds)) return null;\n if (!hasOptionalKeys(reason, [\"code\"], allowCheckIds ? [\"checkIds\"] : [])) return null;\n if (!Object.hasOwn(reason, \"checkIds\")) return Object.freeze({ code: reason.code });\n const normalizedCheckIds = normalizedReasonCheckIds(reason.checkIds, allowCheckIds);\n if (normalizedCheckIds === undefined) return null;\n return Object.freeze({ code: reason.code, checkIds: Object.freeze(normalizedCheckIds) });\n}\n\nfunction isClosedReason(\n value: Readonly<Record<string, unknown>> | undefined,\n allowCheckIds: boolean\n): value is Readonly<Record<string, unknown>> & Readonly<{ readonly code: string }> {\n return (\n value !== undefined &&\n typeof value.code === \"string\" &&\n value.code.length > 0 &&\n hasOptionalKeys(value, [\"code\"], allowCheckIds ? [\"checkIds\"] : [])\n );\n}\n\nfunction normalizedReasonCheckIds(\n value: unknown,\n allowCheckIds: boolean\n): readonly string[] | undefined {\n const checkIds = snapshotClosedArray(value);\n if (\n !allowCheckIds ||\n checkIds === undefined ||\n checkIds.length === 0 ||\n checkIds.some((checkId) => typeof checkId !== \"string\" || !isSettlementCheckReference(checkId))\n )\n return undefined;\n const normalizedCheckIds: string[] = [];\n for (const checkId of checkIds) {\n if (typeof checkId !== \"string\") return undefined;\n normalizedCheckIds.push(checkId);\n }\n return Object.freeze(normalizedCheckIds);\n}\n\nfunction hasExactKeys(value: Readonly<Record<string, unknown>>, keys: readonly string[]): boolean {\n return (\n Object.keys(value).length === keys.length && keys.every((key) => Object.hasOwn(value, key))\n );\n}\n\nfunction hasOptionalKeys(\n value: Readonly<Record<string, unknown>>,\n required: readonly string[],\n optional: readonly string[]\n): boolean {\n const supported = new Set([...required, ...optional]);\n return (\n required.every((key) => Object.hasOwn(value, key)) &&\n Object.keys(value).every((key) => supported.has(key))\n );\n}\n\nfunction accepted<T>(value: T): ValidationResult<T> {\n return Object.freeze({ ok: true, value });\n}\n\nfunction invalid(\n path: string,\n message: string,\n code: ValidationIssue[\"code\"] = \"invalid-value\"\n): ValidationResult<never> {\n const issue = Object.freeze({ path, code, message }) satisfies ValidationIssue;\n const issues: readonly [ValidationIssue, ...ValidationIssue[]] = [issue];\n return Object.freeze({\n ok: false,\n issues: Object.freeze(issues)\n });\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 isSettlementCheckReference(value: string): boolean {\n return value.length > 0;\n}\n"]}
1
+ {"version":3,"file":"fact-validation.mjs","sourceRoot":"","sources":["../../../src/check-settlement/fact-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { canonicalizeJsonObject } from \"../data-boundary/canonical-data.ts\";\nimport type { CheckOutcome } from \"../check/check.ts\";\nimport { validateCheckDescriptor } from \"../check/descriptor-validation.ts\";\nimport type { CoreCheck, CoreRecord, CoreSnapshot } from \"./facts.ts\";\nimport {\n hasExactPlainRecordKeys,\n hasRequiredAndOptionalRecordKeys,\n snapshotClosedArray,\n snapshotClosedRecord\n} from \"../data-boundary/closed-values.ts\";\nimport { isClosedCheckReason } from \"./reason-shape.ts\";\n\nexport interface ValidationIssue {\n readonly path: string;\n readonly code:\n | \"duplicate\"\n | \"identity-mismatch\"\n | \"invalid-value\"\n | \"missing-field\"\n | \"unknown-field\";\n readonly message: string;\n}\n\nexport type ValidationResult<T> = Readonly<\n | { readonly ok: true; readonly value: T }\n | { readonly ok: false; readonly issues: readonly [ValidationIssue, ...ValidationIssue[]] }\n>;\n\nexport function validateCoreSnapshot(value: unknown): ValidationResult<CoreSnapshot> {\n const snapshot = snapshotClosedRecord(value);\n if (snapshot === undefined || !hasExactPlainRecordKeys(snapshot, [\"checks\", \"records\"])) {\n return invalid(\"$\", \"Core snapshot must contain only checks and records\");\n }\n const checksInput = snapshotClosedArray(snapshot.checks);\n const recordsInput = snapshotClosedArray(snapshot.records);\n if (checksInput === undefined || recordsInput === undefined) {\n return invalid(\"$\", \"Core snapshot entities must be dense arrays\");\n }\n const checks = validateChecks(checksInput);\n if (!checks.ok) return checks;\n const reasonReferences = validateReasonReferences(checks.value);\n if (!reasonReferences.ok) return reasonReferences;\n const records = validateRecords(recordsInput, checks.value);\n if (!records.ok) return records;\n return accepted(Object.freeze({ checks: checks.value, records: records.value }));\n}\n\nfunction validateReasonReferences(checks: readonly CoreCheck[]): ValidationResult<void> {\n const knownCheckIds = new Set(checks.map((check) => check.checkId));\n for (const [index, check] of checks.entries()) {\n if (check.outcome.status !== \"unavailable\" || check.outcome.reason.checkIds === undefined)\n continue;\n const seen = new Set<string>();\n for (const checkId of check.outcome.reason.checkIds) {\n if (!knownCheckIds.has(checkId) || seen.has(checkId))\n return invalid(\n `$.checks[${index}].outcome.reason.checkIds`,\n \"Unavailable reason references are invalid\"\n );\n seen.add(checkId);\n }\n }\n return accepted(undefined);\n}\n\nfunction validateChecks(values: readonly unknown[]): ValidationResult<readonly CoreCheck[]> {\n const checks: CoreCheck[] = [];\n const checkIds = new Set<string>();\n let previousCheckId: string | undefined;\n for (const [index, value] of values.entries()) {\n const check = snapshotClosedRecord(value);\n if (\n check === undefined ||\n !hasExactPlainRecordKeys(check, [\"checkId\", \"displayName\", \"outcome\"])\n ) {\n return invalid(`$.checks[${index}]`, \"Core Check must be closed\");\n }\n const definition = validateCheckDescriptor({\n checkId: check.checkId,\n displayName: check.displayName\n });\n if (!definition.ok) return definition;\n if (checkIds.has(definition.value.checkId)) {\n return invalid(`$.checks[${index}].checkId`, \"Duplicate Core Check checkId\", \"duplicate\");\n }\n if (\n previousCheckId !== undefined &&\n compareText(previousCheckId, definition.value.checkId) >= 0\n ) {\n return invalid(`$.checks[${index}].checkId`, \"Core Checks must be sorted by checkId\");\n }\n const outcome = validateOutcome(check.outcome, `$.checks[${index}].outcome`);\n if (!outcome.ok) return outcome;\n checks.push(Object.freeze({ ...definition.value, outcome: outcome.value }));\n checkIds.add(definition.value.checkId);\n previousCheckId = definition.value.checkId;\n }\n return accepted(Object.freeze(checks));\n}\n\nfunction validateRecords(\n values: readonly unknown[],\n checks: readonly CoreCheck[]\n): ValidationResult<readonly CoreRecord[]> {\n const ownerIds = new Set(checks.map((check) => check.checkId));\n const recordIdsByCheckId = new Map<string, Set<string>>();\n const records: CoreRecord[] = [];\n let previous: Readonly<{ readonly checkId: string; readonly id: string }> | undefined;\n for (const [index, value] of values.entries()) {\n const record = validateRecordRow(value, index, ownerIds);\n if (!record.ok) return record;\n const current = record.value;\n const ids = recordIdsByCheckId.get(current.checkId) ?? new Set<string>();\n if (ids.has(current.id)) {\n return invalid(`$.records[${index}].id`, \"Duplicate Check-local Record id\", \"duplicate\");\n }\n if (\n previous !== undefined &&\n (compareText(previous.checkId, current.checkId) > 0 ||\n (previous.checkId === current.checkId && compareText(previous.id, current.id) >= 0))\n ) {\n return invalid(`$.records[${index}]`, \"Core Records must be sorted by checkId then id\");\n }\n ids.add(current.id);\n recordIdsByCheckId.set(current.checkId, ids);\n records.push(current);\n previous = { checkId: current.checkId, id: current.id };\n }\n return accepted(Object.freeze(records));\n}\n\nfunction validateRecordRow(\n value: unknown,\n index: number,\n ownerIds: ReadonlySet<string>\n): ValidationResult<CoreRecord> {\n const record = snapshotClosedRecord(value);\n if (record === undefined || !hasExactPlainRecordKeys(record, [\"checkId\", \"id\", \"data\"]))\n return invalid(`$.records[${index}]`, \"Core Record must be closed\");\n if (\n typeof record.checkId !== \"string\" ||\n !ownerIds.has(record.checkId) ||\n typeof record.id !== \"string\" ||\n record.id.length === 0\n ) {\n return invalid(`$.records[${index}]`, \"Core Record identity is invalid\", \"identity-mismatch\");\n }\n const data = canonicalizeJsonObject(record.data);\n return data === undefined\n ? invalid(`$.records[${index}].data`, \"Core Record data is invalid\")\n : accepted(Object.freeze({ checkId: record.checkId, id: record.id, data }));\n}\n\nfunction validateOutcome(value: unknown, path: string): ValidationResult<CheckOutcome> {\n const outcome = snapshotClosedRecord(value);\n if (outcome === undefined || typeof outcome.status !== \"string\") {\n return invalid(path, \"Check outcome is invalid\");\n }\n if (outcome.status === \"passed\" || outcome.status === \"failed\")\n return validateFinalOutcome(outcome, path);\n if (outcome.status === \"not-applicable\") return validateNotApplicableOutcome(outcome, path);\n if (outcome.status === \"unavailable\") return validateUnavailableOutcome(outcome, path);\n return invalid(`${path}.status`, \"Unknown Check outcome status\");\n}\n\nfunction validateFinalOutcome(\n outcome: Readonly<Record<string, unknown>>,\n path: string\n): ValidationResult<CheckOutcome> {\n if (outcome.status === \"passed\" || outcome.status === \"failed\") {\n if (!hasExactPlainRecordKeys(outcome, [\"status\", \"data\"]))\n return invalid(path, \"Final outcome is not closed\");\n const data = canonicalizeJsonObject(outcome.data);\n return data === undefined\n ? invalid(`${path}.data`, \"Final data is invalid\")\n : accepted(Object.freeze({ status: outcome.status, data }));\n }\n return invalid(`${path}.status`, \"Unknown Check outcome status\");\n}\n\nfunction validateNotApplicableOutcome(\n outcome: Readonly<Record<string, unknown>>,\n path: string\n): ValidationResult<CheckOutcome> {\n if (\n !hasRequiredAndOptionalRecordKeys(outcome, {\n optional: [\"reason\"],\n required: [\"status\"]\n })\n )\n return invalid(path, \"Not-applicable outcome is not closed\");\n const reason = validateReason(outcome.reason, false);\n return reason === null\n ? invalid(`${path}.reason`, \"Not-applicable reason is invalid\")\n : accepted(\n Object.freeze(\n reason === undefined ? { status: \"not-applicable\" } : { status: \"not-applicable\", reason }\n )\n );\n}\n\nfunction validateUnavailableOutcome(\n outcome: Readonly<Record<string, unknown>>,\n path: string\n): ValidationResult<CheckOutcome> {\n if (!hasExactPlainRecordKeys(outcome, [\"status\", \"reason\"]))\n return invalid(path, \"Unavailable outcome is not closed\");\n const reason = validateReason(outcome.reason, true);\n return reason === null || reason === undefined\n ? invalid(`${path}.reason`, \"Unavailable reason is invalid\")\n : accepted(Object.freeze({ status: \"unavailable\", reason }));\n}\n\nfunction validateReason(\n value: unknown,\n allowCheckIds: boolean\n): Readonly<{ readonly code: string; readonly checkIds?: readonly string[] }> | null | undefined {\n if (value === undefined) return undefined;\n const reason = snapshotClosedRecord(value);\n if (!isClosedCheckReason(reason, allowCheckIds)) return null;\n if (\n !hasRequiredAndOptionalRecordKeys(reason, {\n optional: allowCheckIds ? [\"checkIds\"] : [],\n required: [\"code\"]\n })\n )\n return null;\n if (!Object.hasOwn(reason, \"checkIds\")) return Object.freeze({ code: reason.code });\n const normalizedCheckIds = normalizedReasonCheckIds(reason.checkIds, allowCheckIds);\n if (normalizedCheckIds === undefined) return null;\n return Object.freeze({ code: reason.code, checkIds: Object.freeze(normalizedCheckIds) });\n}\n\nfunction normalizedReasonCheckIds(\n value: unknown,\n allowCheckIds: boolean\n): readonly string[] | undefined {\n const checkIds = snapshotClosedArray(value);\n if (\n !allowCheckIds ||\n checkIds === undefined ||\n checkIds.length === 0 ||\n checkIds.some((checkId) => typeof checkId !== \"string\" || !isSettlementCheckReference(checkId))\n )\n return undefined;\n const normalizedCheckIds: string[] = [];\n for (const checkId of checkIds) {\n if (typeof checkId !== \"string\") return undefined;\n normalizedCheckIds.push(checkId);\n }\n return Object.freeze(normalizedCheckIds);\n}\n\nfunction accepted<T>(value: T): ValidationResult<T> {\n return Object.freeze({ ok: true, value });\n}\n\nfunction invalid(\n path: string,\n message: string,\n code: ValidationIssue[\"code\"] = \"invalid-value\"\n): ValidationResult<never> {\n const issue = Object.freeze({ path, code, message }) satisfies ValidationIssue;\n const issues: readonly [ValidationIssue, ...ValidationIssue[]] = [issue];\n return Object.freeze({\n ok: false,\n issues: Object.freeze(issues)\n });\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 isSettlementCheckReference(value: string): boolean {\n return value.length > 0;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"facts.mjs","sourceRoot":"","sources":["../../../src/check-settlement/facts.ts"],"names":[],"mappings":"","sourcesContent":["import type { CheckDescriptor } from \"../check/descriptor.ts\";\nimport type { CheckOutcome } from \"../check/check.ts\";\n\nexport type {\n CanonicalJsonObject,\n CanonicalJsonPrimitive,\n CanonicalJsonValue\n} from \"../data-boundary/canonical-data.ts\";\nexport type { CheckDescriptor, CheckOutcome };\n\n/** A Core Check has exactly one terminal outcome and no execution bookkeeping. */\nexport interface CoreCheck extends CheckDescriptor {\n readonly outcome: CheckOutcome;\n}\n\n/** A supplemental Record is owned by its structural `{ checkId, id }` identity. */\nexport interface CoreRecord {\n readonly checkId: string;\n readonly id: string;\n readonly data: import(\"../data-boundary/canonical-data.ts\").CanonicalJsonObject;\n}\n\n/** The complete Product entity projection. Invocation metadata belongs to Run, not Core. */\nexport interface CoreSnapshot {\n readonly checks: readonly CoreCheck[];\n readonly records: readonly CoreRecord[];\n}\n"]}
1
+ {"version":3,"file":"facts.mjs","sourceRoot":"","sources":["../../../src/check-settlement/facts.ts"],"names":[],"mappings":"","sourcesContent":["import type { CheckDescriptor } from \"../check/descriptor.ts\";\nimport type { CheckOutcome } from \"../check/check.ts\";\n\nexport type {\n CanonicalJsonObject,\n CanonicalJsonPrimitive,\n CanonicalJsonValue\n} from \"../data-boundary/canonical-data.ts\";\nexport type { CheckDescriptor, CheckOutcome };\n\n/** Core Check 恰有一个 terminal outcome,不携带 execution bookkeeping。 */\nexport interface CoreCheck extends CheckDescriptor {\n readonly outcome: CheckOutcome;\n}\n\n/** A supplemental Record is owned by its structural `{ checkId, id }` identity. */\nexport interface CoreRecord {\n readonly checkId: string;\n readonly id: string;\n readonly data: import(\"../data-boundary/canonical-data.ts\").CanonicalJsonObject;\n}\n\n/** The complete Product entity projection. Invocation metadata belongs to Run, not Core. */\nexport interface CoreSnapshot {\n readonly checks: readonly CoreCheck[];\n readonly records: readonly CoreRecord[];\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import { canonicalizeJsonObject } from "../data-boundary/canonical-data.mjs";
2
- import { snapshotClosedArray, snapshotClosedRecord } from "../data-boundary/closed-values.mjs";
2
+ import { hasExactPlainRecordKeys, hasRequiredAndOptionalRecordKeys, snapshotClosedArray, snapshotClosedRecord } from "../data-boundary/closed-values.mjs";
3
+ import { isClosedCheckReason } from "./reason-shape.mjs";
3
4
  /** Normalizes one live Check terminal value before the settlement session commits it. */
4
5
  export function normalizeCheckOutcome(input) {
5
6
  const outcome = snapshotClosedRecord(input.value);
@@ -19,13 +20,16 @@ export function normalizeCheckOutcome(input) {
19
20
  function normalizeFinalOutcome(outcome) {
20
21
  if (outcome.status !== "passed" && outcome.status !== "failed")
21
22
  return undefined;
22
- if (!hasExactKeys(outcome, ["status", "data"]))
23
+ if (!hasExactPlainRecordKeys(outcome, ["status", "data"]))
23
24
  return undefined;
24
25
  const data = canonicalizeJsonObject(outcome.data);
25
26
  return data === undefined ? undefined : Object.freeze({ status: outcome.status, data });
26
27
  }
27
28
  function normalizeNotApplicableOutcome(outcome, knownCheckIds) {
28
- if (!hasOptionalKeys(outcome, ["status"], ["reason"]))
29
+ if (!hasRequiredAndOptionalRecordKeys(outcome, {
30
+ optional: ["reason"],
31
+ required: ["status"]
32
+ }))
29
33
  return undefined;
30
34
  if (outcome.reason === undefined)
31
35
  return Object.freeze({ status: "not-applicable" });
@@ -33,26 +37,20 @@ function normalizeNotApplicableOutcome(outcome, knownCheckIds) {
33
37
  return reason === undefined ? undefined : Object.freeze({ status: "not-applicable", reason });
34
38
  }
35
39
  function normalizeUnavailableOutcome(outcome, productOutcome, knownCheckIds) {
36
- if (!hasExactKeys(outcome, ["status", "reason"]))
40
+ if (!hasExactPlainRecordKeys(outcome, ["status", "reason"]))
37
41
  return undefined;
38
42
  const reason = normalizeReason(outcome.reason, productOutcome, knownCheckIds);
39
43
  return reason === undefined ? undefined : Object.freeze({ status: "unavailable", reason });
40
44
  }
41
45
  function normalizeReason(value, allowCheckIds, knownCheckIds) {
42
46
  const reason = snapshotClosedRecord(value);
43
- if (!isClosedSessionReason(reason, allowCheckIds))
47
+ if (!isClosedCheckReason(reason, allowCheckIds))
44
48
  return undefined;
45
49
  if (!Object.hasOwn(reason, "checkIds"))
46
50
  return Object.freeze({ code: reason.code });
47
51
  const checkIds = normalizedSessionReasonCheckIds(reason.checkIds, allowCheckIds, knownCheckIds);
48
52
  return checkIds === undefined ? undefined : Object.freeze({ code: reason.code, checkIds });
49
53
  }
50
- function isClosedSessionReason(value, allowCheckIds) {
51
- return (value !== undefined &&
52
- typeof value.code === "string" &&
53
- value.code.length > 0 &&
54
- hasOptionalKeys(value, ["code"], allowCheckIds ? ["checkIds"] : []));
55
- }
56
54
  function normalizedSessionReasonCheckIds(value, allowCheckIds, knownCheckIds) {
57
55
  const rawCheckIds = snapshotClosedArray(value);
58
56
  if (!allowCheckIds || rawCheckIds === undefined || rawCheckIds.length === 0)
@@ -69,12 +67,4 @@ function normalizedSessionReasonCheckIds(value, allowCheckIds, knownCheckIds) {
69
67
  }
70
68
  return Object.freeze(checkIds);
71
69
  }
72
- function hasExactKeys(value, keys) {
73
- return (Object.keys(value).length === keys.length && keys.every((key) => Object.hasOwn(value, key)));
74
- }
75
- function hasOptionalKeys(value, required, optional) {
76
- const supported = new Set([...required, ...optional]);
77
- return (required.every((key) => Object.hasOwn(value, key)) &&
78
- Object.keys(value).every((key) => supported.has(key)));
79
- }
80
70
  //# sourceMappingURL=outcome-normalization.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"outcome-normalization.mjs","sourceRoot":"","sources":["../../../src/check-settlement/outcome-normalization.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CheckOutcome } from \"../check/check.ts\";\nimport { canonicalizeJsonObject } from \"../data-boundary/canonical-data.ts\";\nimport { snapshotClosedArray, snapshotClosedRecord } from \"../data-boundary/closed-values.ts\";\n\ninterface OutcomeNormalizationInput {\n readonly knownCheckIds: ReadonlySet<string>;\n readonly productOutcome: boolean;\n readonly value: unknown;\n}\n\n/** Normalizes one live Check terminal value before the settlement session commits it. */\nexport function normalizeCheckOutcome(input: OutcomeNormalizationInput): CheckOutcome | undefined {\n const outcome = snapshotClosedRecord(input.value);\n if (outcome === undefined || typeof outcome.status !== \"string\") return undefined;\n if (outcome.status === \"passed\" || outcome.status === \"failed\") {\n return normalizeFinalOutcome(outcome);\n }\n if (outcome.status === \"not-applicable\") {\n return normalizeNotApplicableOutcome(outcome, input.knownCheckIds);\n }\n if (outcome.status === \"unavailable\") {\n return normalizeUnavailableOutcome(outcome, input.productOutcome, input.knownCheckIds);\n }\n return undefined;\n}\n\nfunction normalizeFinalOutcome(\n outcome: Readonly<Record<string, unknown>>\n): CheckOutcome | undefined {\n if (outcome.status !== \"passed\" && outcome.status !== \"failed\") return undefined;\n if (!hasExactKeys(outcome, [\"status\", \"data\"])) return undefined;\n const data = canonicalizeJsonObject(outcome.data);\n return data === undefined ? undefined : Object.freeze({ status: outcome.status, data });\n}\n\nfunction normalizeNotApplicableOutcome(\n outcome: Readonly<Record<string, unknown>>,\n knownCheckIds: ReadonlySet<string>\n): CheckOutcome | undefined {\n if (!hasOptionalKeys(outcome, [\"status\"], [\"reason\"])) return undefined;\n if (outcome.reason === undefined) return Object.freeze({ status: \"not-applicable\" });\n const reason = normalizeReason(outcome.reason, false, knownCheckIds);\n return reason === undefined ? undefined : Object.freeze({ status: \"not-applicable\", reason });\n}\n\nfunction normalizeUnavailableOutcome(\n outcome: Readonly<Record<string, unknown>>,\n productOutcome: boolean,\n knownCheckIds: ReadonlySet<string>\n): CheckOutcome | undefined {\n if (!hasExactKeys(outcome, [\"status\", \"reason\"])) return undefined;\n const reason = normalizeReason(outcome.reason, productOutcome, knownCheckIds);\n return reason === undefined ? undefined : Object.freeze({ status: \"unavailable\", reason });\n}\n\nfunction normalizeReason(\n value: unknown,\n allowCheckIds: boolean,\n knownCheckIds: ReadonlySet<string>\n): Readonly<{ readonly code: string; readonly checkIds?: readonly string[] }> | undefined {\n const reason = snapshotClosedRecord(value);\n if (!isClosedSessionReason(reason, allowCheckIds)) return undefined;\n if (!Object.hasOwn(reason, \"checkIds\")) return Object.freeze({ code: reason.code });\n const checkIds = normalizedSessionReasonCheckIds(reason.checkIds, allowCheckIds, knownCheckIds);\n return checkIds === undefined ? undefined : Object.freeze({ code: reason.code, checkIds });\n}\n\nfunction isClosedSessionReason(\n value: Readonly<Record<string, unknown>> | undefined,\n allowCheckIds: boolean\n): value is Readonly<Record<string, unknown>> & Readonly<{ readonly code: string }> {\n return (\n value !== undefined &&\n typeof value.code === \"string\" &&\n value.code.length > 0 &&\n hasOptionalKeys(value, [\"code\"], allowCheckIds ? [\"checkIds\"] : [])\n );\n}\n\nfunction normalizedSessionReasonCheckIds(\n value: unknown,\n allowCheckIds: boolean,\n knownCheckIds: ReadonlySet<string>\n): readonly string[] | undefined {\n const rawCheckIds = snapshotClosedArray(value);\n if (!allowCheckIds || rawCheckIds === undefined || rawCheckIds.length === 0) return undefined;\n const checkIds: string[] = [];\n for (const checkId of rawCheckIds) {\n if (\n typeof checkId !== \"string\" ||\n checkId.length === 0 ||\n !knownCheckIds.has(checkId) ||\n checkIds.includes(checkId)\n ) {\n return undefined;\n }\n checkIds.push(checkId);\n }\n return Object.freeze(checkIds);\n}\n\nfunction hasExactKeys(value: Readonly<Record<string, unknown>>, keys: readonly string[]): boolean {\n return (\n Object.keys(value).length === keys.length && keys.every((key) => Object.hasOwn(value, key))\n );\n}\n\nfunction hasOptionalKeys(\n value: Readonly<Record<string, unknown>>,\n required: readonly string[],\n optional: readonly string[]\n): boolean {\n const supported = new Set([...required, ...optional]);\n return (\n required.every((key) => Object.hasOwn(value, key)) &&\n Object.keys(value).every((key) => supported.has(key))\n );\n}\n"]}
1
+ {"version":3,"file":"outcome-normalization.mjs","sourceRoot":"","sources":["../../../src/check-settlement/outcome-normalization.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CheckOutcome } from \"../check/check.ts\";\nimport { canonicalizeJsonObject } from \"../data-boundary/canonical-data.ts\";\nimport {\n hasExactPlainRecordKeys,\n hasRequiredAndOptionalRecordKeys,\n snapshotClosedArray,\n snapshotClosedRecord\n} from \"../data-boundary/closed-values.ts\";\nimport { isClosedCheckReason } from \"./reason-shape.ts\";\n\ninterface OutcomeNormalizationInput {\n readonly knownCheckIds: ReadonlySet<string>;\n readonly productOutcome: boolean;\n readonly value: unknown;\n}\n\n/** Normalizes one live Check terminal value before the settlement session commits it. */\nexport function normalizeCheckOutcome(input: OutcomeNormalizationInput): CheckOutcome | undefined {\n const outcome = snapshotClosedRecord(input.value);\n if (outcome === undefined || typeof outcome.status !== \"string\") return undefined;\n if (outcome.status === \"passed\" || outcome.status === \"failed\") {\n return normalizeFinalOutcome(outcome);\n }\n if (outcome.status === \"not-applicable\") {\n return normalizeNotApplicableOutcome(outcome, input.knownCheckIds);\n }\n if (outcome.status === \"unavailable\") {\n return normalizeUnavailableOutcome(outcome, input.productOutcome, input.knownCheckIds);\n }\n return undefined;\n}\n\nfunction normalizeFinalOutcome(\n outcome: Readonly<Record<string, unknown>>\n): CheckOutcome | undefined {\n if (outcome.status !== \"passed\" && outcome.status !== \"failed\") return undefined;\n if (!hasExactPlainRecordKeys(outcome, [\"status\", \"data\"])) return undefined;\n const data = canonicalizeJsonObject(outcome.data);\n return data === undefined ? undefined : Object.freeze({ status: outcome.status, data });\n}\n\nfunction normalizeNotApplicableOutcome(\n outcome: Readonly<Record<string, unknown>>,\n knownCheckIds: ReadonlySet<string>\n): CheckOutcome | undefined {\n if (\n !hasRequiredAndOptionalRecordKeys(outcome, {\n optional: [\"reason\"],\n required: [\"status\"]\n })\n )\n return undefined;\n if (outcome.reason === undefined) return Object.freeze({ status: \"not-applicable\" });\n const reason = normalizeReason(outcome.reason, false, knownCheckIds);\n return reason === undefined ? undefined : Object.freeze({ status: \"not-applicable\", reason });\n}\n\nfunction normalizeUnavailableOutcome(\n outcome: Readonly<Record<string, unknown>>,\n productOutcome: boolean,\n knownCheckIds: ReadonlySet<string>\n): CheckOutcome | undefined {\n if (!hasExactPlainRecordKeys(outcome, [\"status\", \"reason\"])) return undefined;\n const reason = normalizeReason(outcome.reason, productOutcome, knownCheckIds);\n return reason === undefined ? undefined : Object.freeze({ status: \"unavailable\", reason });\n}\n\nfunction normalizeReason(\n value: unknown,\n allowCheckIds: boolean,\n knownCheckIds: ReadonlySet<string>\n): Readonly<{ readonly code: string; readonly checkIds?: readonly string[] }> | undefined {\n const reason = snapshotClosedRecord(value);\n if (!isClosedCheckReason(reason, allowCheckIds)) return undefined;\n if (!Object.hasOwn(reason, \"checkIds\")) return Object.freeze({ code: reason.code });\n const checkIds = normalizedSessionReasonCheckIds(reason.checkIds, allowCheckIds, knownCheckIds);\n return checkIds === undefined ? undefined : Object.freeze({ code: reason.code, checkIds });\n}\n\nfunction normalizedSessionReasonCheckIds(\n value: unknown,\n allowCheckIds: boolean,\n knownCheckIds: ReadonlySet<string>\n): readonly string[] | undefined {\n const rawCheckIds = snapshotClosedArray(value);\n if (!allowCheckIds || rawCheckIds === undefined || rawCheckIds.length === 0) return undefined;\n const checkIds: string[] = [];\n for (const checkId of rawCheckIds) {\n if (\n typeof checkId !== \"string\" ||\n checkId.length === 0 ||\n !knownCheckIds.has(checkId) ||\n checkIds.includes(checkId)\n ) {\n return undefined;\n }\n checkIds.push(checkId);\n }\n return Object.freeze(checkIds);\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import { hasRequiredAndOptionalRecordKeys } from "../data-boundary/closed-values.mjs";
2
+ /** Recognizes the shared closed reason shape before owner-specific ID validation. */
3
+ export function isClosedCheckReason(value, allowCheckIds) {
4
+ return (value !== undefined &&
5
+ typeof value.code === "string" &&
6
+ value.code.length > 0 &&
7
+ hasRequiredAndOptionalRecordKeys(value, {
8
+ optional: allowCheckIds ? ["checkIds"] : [],
9
+ required: ["code"]
10
+ }));
11
+ }
12
+ //# sourceMappingURL=reason-shape.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reason-shape.mjs","sourceRoot":"","sources":["../../../src/check-settlement/reason-shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,mCAAmC,CAAC;AAKrF,qFAAqF;AACrF,MAAM,UAAU,mBAAmB,CACjC,KAAoD,EACpD,aAAsB;IAEtB,OAAO,CACL,KAAK,KAAK,SAAS;QACnB,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QACrB,gCAAgC,CAAC,KAAK,EAAE;YACtC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;YAC3C,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB,CAAC,CACH,CAAC;AACJ,CAAC","sourcesContent":["import { hasRequiredAndOptionalRecordKeys } from \"../data-boundary/closed-values.ts\";\n\nexport type ClosedCheckReason = Readonly<Record<string, unknown>> &\n Readonly<{ readonly code: string }>;\n\n/** Recognizes the shared closed reason shape before owner-specific ID validation. */\nexport function isClosedCheckReason(\n value: Readonly<Record<string, unknown>> | undefined,\n allowCheckIds: boolean\n): value is ClosedCheckReason {\n return (\n value !== undefined &&\n typeof value.code === \"string\" &&\n value.code.length > 0 &&\n hasRequiredAndOptionalRecordKeys(value, {\n optional: allowCheckIds ? [\"checkIds\"] : [],\n required: [\"code\"]\n })\n );\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  import { canonicalizeJsonObject } from "../data-boundary/canonical-data.mjs";
2
2
  import { snapshotClosedRecord } from "../data-boundary/closed-values.mjs";
3
- /** Holds one Check's minimal Records without inventing a composite string identity. */
3
+ const EMPTY_RECORDS = Object.freeze([]);
4
+ /** Holds Check-local supplemental Records without inventing a composite string identity. */
4
5
  export class CoreRecordStore {
5
6
  #recordsByCheckId = new Map();
6
7
  report(slot, rawIdentity, rawData) {
@@ -8,31 +9,27 @@ export class CoreRecordStore {
8
9
  const data = canonicalizeJsonObject(rawData);
9
10
  if (id === undefined || data === undefined)
10
11
  return this.#reject(slot, "record-invalid");
11
- if (slot.recordIds.has(id))
12
- return this.#reject(slot, "record-conflict");
13
- const record = Object.freeze({ checkId: slot.checkId, id, data });
14
12
  let records = this.#recordsByCheckId.get(slot.checkId);
13
+ if (records?.has(id) === true)
14
+ return this.#reject(slot, "record-conflict");
15
15
  if (records === undefined) {
16
16
  records = new Map();
17
17
  this.#recordsByCheckId.set(slot.checkId, records);
18
18
  }
19
+ const record = Object.freeze({ checkId: slot.checkId, id, data });
19
20
  records.set(id, record);
20
- slot.recordIds.add(id);
21
21
  return "committed";
22
22
  }
23
+ recordsForCheckInCanonicalOrder(checkId) {
24
+ const recordsById = this.#recordsByCheckId.get(checkId);
25
+ if (recordsById === undefined)
26
+ return EMPTY_RECORDS;
27
+ return Object.freeze([...recordsById.values()].sort((left, right) => compareText(left.id, right.id)));
28
+ }
23
29
  recordsInCanonicalOrder() {
24
- const records = [];
25
- for (const checkId of [...this.#recordsByCheckId.keys()].sort(compareText)) {
26
- const byId = this.#recordsByCheckId.get(checkId);
27
- if (byId === undefined)
28
- continue;
29
- for (const id of [...byId.keys()].sort(compareText)) {
30
- const record = byId.get(id);
31
- if (record !== undefined)
32
- records.push(record);
33
- }
34
- }
35
- return Object.freeze(records);
30
+ return Object.freeze([...this.#recordsByCheckId.keys()]
31
+ .sort(compareText)
32
+ .flatMap((checkId) => this.recordsForCheckInCanonicalOrder(checkId)));
36
33
  }
37
34
  #reject(slot, diagnostic) {
38
35
  slot.diagnostics.add(diagnostic);
@@ -1 +1 @@
1
- {"version":3,"file":"record-store.mjs","sourceRoot":"","sources":["../../../src/check-settlement/record-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { canonicalizeJsonObject } from \"../data-boundary/canonical-data.ts\";\nimport type { CoreRecord } from \"./facts.ts\";\nimport { snapshotClosedRecord } from \"../data-boundary/closed-values.ts\";\n\nexport type RecordSubmissionResult = \"committed\" | \"rejected\";\nexport type RecordDiagnostic = \"record-conflict\" | \"record-invalid\";\n\nexport interface CoreRecordSlot {\n readonly checkId: string;\n readonly diagnostics: Set<RecordDiagnostic>;\n readonly recordIds: Set<string>;\n}\n\n/** Holds one Check's minimal Records without inventing a composite string identity. */\nexport class CoreRecordStore {\n readonly #recordsByCheckId = new Map<string, Map<string, CoreRecord>>();\n\n public report(\n slot: CoreRecordSlot,\n rawIdentity: unknown,\n rawData: unknown\n ): RecordSubmissionResult {\n const id = recordId(rawIdentity);\n const data = canonicalizeJsonObject(rawData);\n if (id === undefined || data === undefined) return this.#reject(slot, \"record-invalid\");\n if (slot.recordIds.has(id)) return this.#reject(slot, \"record-conflict\");\n\n const record: CoreRecord = Object.freeze({ checkId: slot.checkId, id, data });\n let records = this.#recordsByCheckId.get(slot.checkId);\n if (records === undefined) {\n records = new Map<string, CoreRecord>();\n this.#recordsByCheckId.set(slot.checkId, records);\n }\n records.set(id, record);\n slot.recordIds.add(id);\n return \"committed\";\n }\n\n public recordsInCanonicalOrder(): readonly CoreRecord[] {\n const records: CoreRecord[] = [];\n for (const checkId of [...this.#recordsByCheckId.keys()].sort(compareText)) {\n const byId = this.#recordsByCheckId.get(checkId);\n if (byId === undefined) continue;\n for (const id of [...byId.keys()].sort(compareText)) {\n const record = byId.get(id);\n if (record !== undefined) records.push(record);\n }\n }\n return Object.freeze(records);\n }\n\n #reject(slot: CoreRecordSlot, diagnostic: RecordDiagnostic): \"rejected\" {\n slot.diagnostics.add(diagnostic);\n return \"rejected\";\n }\n}\n\nfunction recordId(value: unknown): string | undefined {\n const identity = snapshotClosedRecord(value);\n return identity !== undefined &&\n Object.keys(identity).length === 1 &&\n Object.hasOwn(identity, \"id\") &&\n typeof identity.id === \"string\" &&\n identity.id.length > 0\n ? identity.id\n : undefined;\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"]}
1
+ {"version":3,"file":"record-store.mjs","sourceRoot":"","sources":["../../../src/check-settlement/record-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { canonicalizeJsonObject } from \"../data-boundary/canonical-data.ts\";\nimport type { CoreRecord } from \"./facts.ts\";\nimport { snapshotClosedRecord } from \"../data-boundary/closed-values.ts\";\n\nexport type RecordSubmissionResult = \"committed\" | \"rejected\";\n\nconst EMPTY_RECORDS: readonly CoreRecord[] = Object.freeze([]);\nexport type RecordDiagnostic = \"record-conflict\" | \"record-invalid\";\n\nexport interface CoreRecordSlot {\n readonly checkId: string;\n readonly diagnostics: Set<RecordDiagnostic>;\n}\n\n/** Holds Check-local supplemental Records without inventing a composite string identity. */\nexport class CoreRecordStore {\n readonly #recordsByCheckId = new Map<string, Map<string, CoreRecord>>();\n\n public report(\n slot: CoreRecordSlot,\n rawIdentity: unknown,\n rawData: unknown\n ): RecordSubmissionResult {\n const id = recordId(rawIdentity);\n const data = canonicalizeJsonObject(rawData);\n if (id === undefined || data === undefined) return this.#reject(slot, \"record-invalid\");\n\n let records = this.#recordsByCheckId.get(slot.checkId);\n if (records?.has(id) === true) return this.#reject(slot, \"record-conflict\");\n if (records === undefined) {\n records = new Map<string, CoreRecord>();\n this.#recordsByCheckId.set(slot.checkId, records);\n }\n const record: CoreRecord = Object.freeze({ checkId: slot.checkId, id, data });\n records.set(id, record);\n return \"committed\";\n }\n\n public recordsForCheckInCanonicalOrder(checkId: string): readonly CoreRecord[] {\n const recordsById = this.#recordsByCheckId.get(checkId);\n if (recordsById === undefined) return EMPTY_RECORDS;\n return Object.freeze(\n [...recordsById.values()].sort((left, right) => compareText(left.id, right.id))\n );\n }\n\n public recordsInCanonicalOrder(): readonly CoreRecord[] {\n return Object.freeze(\n [...this.#recordsByCheckId.keys()]\n .sort(compareText)\n .flatMap((checkId) => this.recordsForCheckInCanonicalOrder(checkId))\n );\n }\n\n #reject(slot: CoreRecordSlot, diagnostic: RecordDiagnostic): \"rejected\" {\n slot.diagnostics.add(diagnostic);\n return \"rejected\";\n }\n}\n\nfunction recordId(value: unknown): string | undefined {\n const identity = snapshotClosedRecord(value);\n return identity !== undefined &&\n Object.keys(identity).length === 1 &&\n Object.hasOwn(identity, \"id\") &&\n typeof identity.id === \"string\" &&\n identity.id.length > 0\n ? identity.id\n : undefined;\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"]}
@@ -36,8 +36,7 @@ function createSlots(registrations) {
36
36
  checkId: definition.value.checkId,
37
37
  definition: definition.value,
38
38
  diagnostics: new Set(),
39
- lifecycle: { kind: "registered" },
40
- recordIds: new Set()
39
+ lifecycle: { kind: "registered" }
41
40
  });
42
41
  }
43
42
  return slots.sort((left, right) => compareText(left.definition.checkId, right.definition.checkId));
@@ -74,6 +73,13 @@ class CoreCheckSessionImpl {
74
73
  }
75
74
  return slot.lifecycle.outcome;
76
75
  }
76
+ readSettledCheckRecords(checkId) {
77
+ const slot = this.#slotFor(checkId);
78
+ if (slot.lifecycle.kind !== "settled") {
79
+ coreInvariant("Core settled Check Records are not available");
80
+ }
81
+ return this.#recordStore.recordsForCheckInCanonicalOrder(checkId);
82
+ }
77
83
  closeUnresolvedAsCancelled() {
78
84
  if (this.#snapshot !== undefined) {
79
85
  coreInvariant("Cancelled closure cannot mutate a frozen Core snapshot");
@@ -1 +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"]}
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, CoreRecord, 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 /** Product-private readback used only after this Check's terminal settlement. */\n readSettledCheckRecords(checkId: string): readonly CoreRecord[];\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 });\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 readSettledCheckRecords(checkId: string): readonly CoreRecord[] {\n const slot = this.#slotFor(checkId);\n if (slot.lifecycle.kind !== \"settled\") {\n coreInvariant(\"Core settled Check Records are not available\");\n }\n return this.#recordStore.recordsForCheckInCanonicalOrder(checkId);\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"]}
@@ -1,17 +1,35 @@
1
1
  const encoder = new TextEncoder();
2
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.
3
+ * 将输入规范化为独立且递归冻结的 canonical JSON 对象副本。
4
+ *
5
+ * 递归内容只接受普通对象或 null-prototype 对象、标准无空洞数组和有限 JSON 基本值;仅当顶层结果是
6
+ * 非数组对象时返回该副本。输出对象使用 null prototype,输出对象和数组均独立于输入且递归冻结。不调用
7
+ * getter 或 `toJSON`;无效输入、循环引用或反射失败返回 `undefined`。反射 Proxy 时仍可能执行其 trap,
8
+ * 不隔离 trap 的副作用。
6
9
  */
7
10
  export function canonicalizeJsonObject(value) {
8
11
  const canonical = canonicalize(value, new Set());
9
12
  return canonical !== undefined && isCanonicalJsonObject(canonical) ? canonical : undefined;
10
13
  }
14
+ /**
15
+ * 将输入规范化为独立且递归冻结的 canonical JSON 值副本。
16
+ *
17
+ * 接受 `null`、boolean、string、有限 number、普通对象或 null-prototype 对象,以及标准无空洞数组;
18
+ * `-0` 转换为 `0`,输出对象使用 null prototype。拒绝存取器、稀疏数组、不可枚举的自有属性、非有限
19
+ * number 和其它 prototype。不调用 getter 或 `toJSON`;无效输入、循环引用或反射失败返回 `undefined`。
20
+ * 反射 Proxy 时仍可能执行其 trap,不隔离 trap 的副作用。`CanonicalJsonPrimitive` 的 `number` 在
21
+ * TypeScript 中仍可表示 `NaN`,有限性只能由本函数在运行时检查。
22
+ */
11
23
  export function canonicalizeJsonValue(value) {
12
24
  return canonicalize(value, new Set());
13
25
  }
14
- /** Serializes detached canonical JSON with explicit lexical object-key ordering. */
26
+ /**
27
+ * 规范化输入后生成确定性的无额外空白 JSON 文本。
28
+ *
29
+ * 对象键按固定的 lexical `<` 顺序输出,不承诺遵循外部 canonical-JSON 标准。即使同一对象已经过
30
+ * 规范化,`JSON.stringify` 仍按 ECMAScript 的整数索引键顺序输出,不能替代本函数。输入规则与 Proxy
31
+ * 边界同 `canonicalizeJsonValue`;无效输入或无法反射的 Proxy 均抛出 `TypeError`。
32
+ */
15
33
  export function canonicalJsonText(value) {
16
34
  const canonical = canonicalizeJsonValue(value);
17
35
  if (canonical === undefined) {
@@ -19,7 +37,12 @@ export function canonicalJsonText(value) {
19
37
  }
20
38
  return canonicalText(canonical);
21
39
  }
22
- /** Emits canonical UTF-8 JSON without invoking author getters or `toJSON`. */
40
+ /**
41
+ * 规范化输入后生成与 `canonicalJsonText` 相同的确定性 UTF-8 JSON 字节。
42
+ *
43
+ * 函数自行完成规范化与固定键排序,不要求调用方先取得 canonical JSON 值。输入规则、Proxy 边界和
44
+ * `TypeError` 失败方式与 `canonicalJsonText` 相同。
45
+ */
23
46
  export function canonicalJsonBytes(value) {
24
47
  return encoder.encode(canonicalJsonText(value));
25
48
  }
@@ -69,7 +92,7 @@ function denseCanonicalArrayLength(value) {
69
92
  return undefined;
70
93
  const keys = Reflect.ownKeys(value);
71
94
  const lengthDescriptor = Object.getOwnPropertyDescriptor(value, "length");
72
- if (!isDataDescriptor(lengthDescriptor) || lengthDescriptor.enumerable)
95
+ if (!isDataDescriptor(lengthDescriptor) || lengthDescriptor.enumerable === true)
73
96
  return undefined;
74
97
  const length = lengthDescriptor.value;
75
98
  if (typeof length !== "number" ||
@@ -143,7 +166,13 @@ function canonicalText(value) {
143
166
  }
144
167
  return `{${Object.keys(value)
145
168
  .sort(compareText)
146
- .map((key) => `${JSON.stringify(key)}:${canonicalText(value[key])}`)
169
+ .map((key) => {
170
+ const entry = value[key];
171
+ if (entry === undefined) {
172
+ throw new TypeError(`Canonical JSON object is missing declared key: ${key}`);
173
+ }
174
+ return `${JSON.stringify(key)}:${canonicalText(entry)}`;
175
+ })
147
176
  .join(",")}}`;
148
177
  }
149
178
  function isCanonicalJsonArray(value) {
@@ -1 +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"]}
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 * 将输入规范化为独立且递归冻结的 canonical JSON 对象副本。\n *\n * 递归内容只接受普通对象或 null-prototype 对象、标准无空洞数组和有限 JSON 基本值;仅当顶层结果是\n * 非数组对象时返回该副本。输出对象使用 null prototype,输出对象和数组均独立于输入且递归冻结。不调用\n * getter 或 `toJSON`;无效输入、循环引用或反射失败返回 `undefined`。反射 Proxy 时仍可能执行其 trap,\n * 不隔离 trap 的副作用。\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\n/**\n * 将输入规范化为独立且递归冻结的 canonical JSON 值副本。\n *\n * 接受 `null`、boolean、string、有限 number、普通对象或 null-prototype 对象,以及标准无空洞数组;\n * `-0` 转换为 `0`,输出对象使用 null prototype。拒绝存取器、稀疏数组、不可枚举的自有属性、非有限\n * number 和其它 prototype。不调用 getter 或 `toJSON`;无效输入、循环引用或反射失败返回 `undefined`。\n * 反射 Proxy 时仍可能执行其 trap,不隔离 trap 的副作用。`CanonicalJsonPrimitive` 的 `number` 在\n * TypeScript 中仍可表示 `NaN`,有限性只能由本函数在运行时检查。\n */\nexport function canonicalizeJsonValue(value: unknown): CanonicalJsonValue | undefined {\n return canonicalize(value, new Set<object>());\n}\n\n/**\n * 规范化输入后生成确定性的无额外空白 JSON 文本。\n *\n * 对象键按固定的 lexical `<` 顺序输出,不承诺遵循外部 canonical-JSON 标准。即使同一对象已经过\n * 规范化,`JSON.stringify` 仍按 ECMAScript 的整数索引键顺序输出,不能替代本函数。输入规则与 Proxy\n * 边界同 `canonicalizeJsonValue`;无效输入或无法反射的 Proxy 均抛出 `TypeError`。\n */\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/**\n * 规范化输入后生成与 `canonicalJsonText` 相同的确定性 UTF-8 JSON 字节。\n *\n * 函数自行完成规范化与固定键排序,不要求调用方先取得 canonical JSON 值。输入规则、Proxy 边界和\n * `TypeError` 失败方式与 `canonicalJsonText` 相同。\n */\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 === true) 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 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) => {\n const entry = value[key];\n if (entry === undefined) {\n throw new TypeError(`Canonical JSON object is missing declared key: ${key}`);\n }\n return `${JSON.stringify(key)}:${canonicalText(entry)}`;\n })\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"]}
@@ -1 +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"]}
1
+ {"version":3,"file":"canonical-json.mjs","sourceRoot":"","sources":["../../../src/data-boundary/canonical-json.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Canonical JSON 基本值的静态结构类型。\n *\n * TypeScript 的 `number` 无法在静态层区分有限值与 `NaN` / `Infinity`;因此此类型不能证明值已经由\n * canonical API 规范化。运行时只接受有限 number,并将 `-0` 转换为 `0`。\n */\nexport type CanonicalJsonPrimitive = boolean | null | number | string;\n\n/**\n * Canonical JSON 值的递归只读静态结构类型。\n *\n * 它描述基本值、数组和对象能够如何组合,便于声明参数和结果;不证明值已经通过 canonical API 的\n * 运行时规范化、递归冻结或循环检查。\n */\nexport type CanonicalJsonValue =\n | CanonicalJsonPrimitive\n | readonly CanonicalJsonValue[]\n | CanonicalJsonObject;\n\n/**\n * Canonical JSON 对象的只读静态结构类型。\n *\n * 该类型不证明值来自 canonical API。API 实际返回的对象使用 null prototype,没有继承的对象方法;\n * 检查属性时使用 `Object.hasOwn`,不要调用 `value.hasOwnProperty`。\n */\nexport interface CanonicalJsonObject {\n readonly [key: string]: CanonicalJsonValue;\n}\n"]}